diff --git a/.github/workflows/release-doctor.yml b/.github/workflows/release-doctor.yml new file mode 100644 index 0000000..581af4b --- /dev/null +++ b/.github/workflows/release-doctor.yml @@ -0,0 +1,20 @@ +name: Release Doctor +on: + pull_request: + branches: + - main + workflow_dispatch: + +jobs: + release_doctor: + name: release doctor + runs-on: ubuntu-latest + if: github.repository == 'morphik-org/morphik-ts' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || startsWith(github.head_ref, 'release-please') || github.head_ref == 'next') + + steps: + - uses: actions/checkout@v4 + + - name: Check release environment + run: | + bash ./bin/check-release-environment + env: diff --git a/.gitignore b/.gitignore index d98d51a..2412bb7 100644 --- a/.gitignore +++ b/.gitignore @@ -7,4 +7,5 @@ dist dist-deno /*.tgz .idea/ +.eslintcache diff --git a/.release-please-manifest.json b/.release-please-manifest.json new file mode 100644 index 0000000..466df71 --- /dev/null +++ b/.release-please-manifest.json @@ -0,0 +1,3 @@ +{ + ".": "0.1.0" +} diff --git a/.stats.yml b/.stats.yml index 6744525..d2b96b7 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ -configured_endpoints: 89 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/morphik%2Fmorphik-8d3c4a3004d103142a96eaee97699ec1c0b5df304ec1b4804d5394b99a36939d.yml -openapi_spec_hash: b77413da8a8d6532ea04ec0198add72b -config_hash: b3a76425ddbc7401632d1817c1f218e9 +configured_endpoints: 88 +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/morphik%2Fmorphik-9ade02dd7b1d96cd6b63c63072017dc51bd74af3f60076833c8dadafe061746a.yml +openapi_spec_hash: 56ee618a81e0f3d48ad2b999e4cce623 +config_hash: b7d25210c8d3b30d949d01687b11dd5f diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..4be55f7 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,34 @@ +# Changelog + +## 0.1.0 (2025-11-05) + +Full Changelog: [v0.0.1...v0.1.0](https://github.com/morphik-org/morphik-ts/compare/v0.0.1...v0.1.0) + +### Features + +* **api:** manual updates ([9986591](https://github.com/morphik-org/morphik-ts/commit/998659148493c8c7a74b510288e511d408a8c585)) +* **api:** manual updates ([73a0084](https://github.com/morphik-org/morphik-ts/commit/73a0084a6b58d266186f72706bb31180fdbbd26c)) +* **api:** update via SDK Studio ([c78d82e](https://github.com/morphik-org/morphik-ts/commit/c78d82e75024b26adcc311693f8b49ef4ef9f2dc)) +* **mcp:** add code execution tool ([69ae919](https://github.com/morphik-org/morphik-ts/commit/69ae919c238c07456f7f9c190e80a0f468e0f9a4)) + + +### Bug Fixes + +* coerce nullable values to undefined ([860b23e](https://github.com/morphik-org/morphik-ts/commit/860b23ec5a6d7069443704320045fca5f59323ec)) + + +### Chores + +* add package to package.json ([76c89eb](https://github.com/morphik-org/morphik-ts/commit/76c89ebaf4cdc0f6734269caf01be8fbb6e17ec1)) +* ci build action ([9981ea1](https://github.com/morphik-org/morphik-ts/commit/9981ea1708918700fda93920e3aeb84a384592ae)) +* **client:** qualify global Blob ([87a5454](https://github.com/morphik-org/morphik-ts/commit/87a5454180750dcb3f21cf8110f594680360644d)) +* **deps:** update dependency @types/node to v20.17.58 ([d4b8120](https://github.com/morphik-org/morphik-ts/commit/d4b812043c9bdd0c1af3709e6b3652892a5ea63f)) +* **internal:** codegen related update ([b0eec49](https://github.com/morphik-org/morphik-ts/commit/b0eec49a989217e8b2a7f6ed5b5d31570be4fae3)) +* **internal:** formatting change ([25763d0](https://github.com/morphik-org/morphik-ts/commit/25763d0ec4ead4800dc3b759fbb2d00f8b847d0e)) +* **internal:** move publish config ([f074720](https://github.com/morphik-org/morphik-ts/commit/f0747203707223cdb7bf69f8fee6ede963953e10)) +* **internal:** remove redundant imports config ([250ca52](https://github.com/morphik-org/morphik-ts/commit/250ca528d290adc06e8ee27898edac2a0bcbd03e)) +* **internal:** update comment in script ([e681df9](https://github.com/morphik-org/morphik-ts/commit/e681df95ee0672d750dc14fd61a6ff1127f91cf8)) +* **internal:** update global Error reference ([2b9bc7b](https://github.com/morphik-org/morphik-ts/commit/2b9bc7be202311de97373a8765d2b4b20c9df60a)) +* sync repo ([2173455](https://github.com/morphik-org/morphik-ts/commit/21734555d908ca2f7b2891af8480f3b27f5618d6)) +* update @stainless-api/prism-cli to v5.15.0 ([c23ccc3](https://github.com/morphik-org/morphik-ts/commit/c23ccc37cef333511c19ee7166156debb90077ae)) +* update CI script ([142032e](https://github.com/morphik-org/morphik-ts/commit/142032e941e9a8543a35b3df88dbe3a2382c3274)) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index fab94ee..48b8212 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -42,15 +42,15 @@ If you’d like to use the repository from source, you can either install from g To install via git: ```sh -$ npm install git+ssh://git@github.com:stainless-sdks/morphik-typescript.git +$ npm install git+ssh://git@github.com:morphik-org/morphik-ts.git ``` Alternatively, to link a local copy of the repo: ```sh # Clone -$ git clone https://www.github.com/stainless-sdks/morphik-typescript -$ cd morphik-typescript +$ git clone https://www.github.com/morphik-org/morphik-ts +$ cd morphik-ts # With yarn $ yarn link diff --git a/README.md b/README.md index 8ea47c0..7391b52 100644 --- a/README.md +++ b/README.md @@ -4,14 +4,14 @@ This library provides convenient access to the Morphik REST API from server-side TypeScript or JavaScript. -The full API of this library can be found in [api.md](api.md). +The REST API documentation can be found on [docs.morphik.ai](https://docs.morphik.ai). The full API of this library can be found in [api.md](api.md). It is generated with [Stainless](https://www.stainless.com/). ## Installation ```sh -npm install git+ssh://git@github.com:stainless-sdks/morphik-typescript.git +npm install git+ssh://git@github.com:morphik-org/morphik-ts.git ``` > [!NOTE] @@ -67,17 +67,20 @@ import Morphik, { toFile } from 'morphik'; const client = new Morphik(); // If you have access to Node `fs` we recommend using `fs.createReadStream()`: -await client.ingest.ingestFile({ file: fs.createReadStream('/path/to/file') }); +await client.ingest.documentQuery({ file: fs.createReadStream('/path/to/file'), prompt: 'prompt' }); // Or if you have the web `File` API you can pass a `File` instance: -await client.ingest.ingestFile({ file: new File(['my bytes'], 'file') }); +await client.ingest.documentQuery({ file: new File(['my bytes'], 'file'), prompt: 'prompt' }); // You can also pass a `fetch` `Response`: -await client.ingest.ingestFile({ file: await fetch('https://somesite/file') }); +await client.ingest.documentQuery({ file: await fetch('https://somesite/file'), prompt: 'prompt' }); // Finally, if none of the above are convenient, you can use our `toFile` helper: -await client.ingest.ingestFile({ file: await toFile(Buffer.from('my bytes'), 'file') }); -await client.ingest.ingestFile({ file: await toFile(new Uint8Array([0, 1, 2]), 'file') }); +await client.ingest.documentQuery({ file: await toFile(Buffer.from('my bytes'), 'file'), prompt: 'prompt' }); +await client.ingest.documentQuery({ + file: await toFile(new Uint8Array([0, 1, 2]), 'file'), + prompt: 'prompt', +}); ``` ## Handling errors @@ -364,7 +367,7 @@ This package generally follows [SemVer](https://semver.org/spec/v2.0.0.html) con We take backwards-compatibility seriously and work hard to ensure you can rely on a smooth upgrade experience. -We are keen for your feedback; please open an [issue](https://www.github.com/stainless-sdks/morphik-typescript/issues) with questions, bugs, or suggestions. +We are keen for your feedback; please open an [issue](https://www.github.com/morphik-org/morphik-ts/issues) with questions, bugs, or suggestions. ## Requirements diff --git a/SECURITY.md b/SECURITY.md index f723dbf..fd57d7d 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -18,6 +18,10 @@ before making any information public. If you encounter security issues that are not directly related to SDKs but pertain to the services or products provided by Morphik, please follow the respective company's security reporting guidelines. +### Morphik Terms and Policies + +Please contact founders@morphik.ai for any questions or concerns regarding the security of our services. + --- Thank you for helping us keep the SDKs and systems they interact with secure. diff --git a/api.md b/api.md index 4e5a2ab..e7ab9de 100644 --- a/api.md +++ b/api.md @@ -3,10 +3,12 @@ Types: - PingCheckResponse +- PingStatusResponse Methods: - client.ping.check() -> PingCheckResponse +- client.ping.status() -> PingStatusResponse # Models @@ -33,12 +35,16 @@ Types: - Document - TextRequest - IngestBatchIngestFilesResponse +- IngestDocumentQueryResponse +- IngestRequeueResponse Methods: - client.ingest.batchIngestFiles({ ...params }) -> IngestBatchIngestFilesResponse +- client.ingest.documentQuery({ ...params }) -> IngestDocumentQueryResponse - client.ingest.ingestFile({ ...params }) -> Document - client.ingest.ingestText({ ...params }) -> Document +- client.ingest.requeue({ ...params }) -> IngestRequeueResponse # Folders @@ -47,17 +53,17 @@ Types: - Folder - FolderListResponse - FolderDeleteResponse +- FolderDetailsResponse - FolderListSummariesResponse -- FolderSetRuleResponse Methods: - client.folders.create({ ...params }) -> Folder -- client.folders.retrieve(folderID) -> Folder +- client.folders.retrieve(folderIDOrName) -> Folder - client.folders.list() -> FolderListResponse -- client.folders.delete(folderName) -> FolderDeleteResponse +- client.folders.delete(folderIDOrName) -> FolderDeleteResponse +- client.folders.details({ ...params }) -> FolderDetailsResponse - client.folders.listSummaries() -> FolderListSummariesResponse -- client.folders.setRule(folderID, { ...params }) -> FolderSetRuleResponse ## Documents @@ -67,53 +73,8 @@ Types: Methods: -- client.folders.documents.add(documentID, { ...params }) -> DocumentAddResponse -- client.folders.documents.remove(documentID, { ...params }) -> DocumentDeleteResponse - -## Workflows - -Types: - -- WorkflowListResponse -- WorkflowAssociateResponse -- WorkflowDisassociateResponse - -Methods: - -- client.folders.workflows.list(folderID) -> WorkflowListResponse -- client.folders.workflows.associate(workflowID, { ...params }) -> WorkflowAssociateResponse -- client.folders.workflows.disassociate(workflowID, { ...params }) -> WorkflowDisassociateResponse - -# Workflows - -Types: - -- Workflow -- WorkflowRun -- WorkflowListResponse -- WorkflowDeleteResponse - -Methods: - -- client.workflows.create({ ...params }) -> Workflow -- client.workflows.retrieve(workflowID) -> Workflow -- client.workflows.update(workflowID, { ...params }) -> Workflow -- client.workflows.list() -> WorkflowListResponse -- client.workflows.delete(workflowID) -> WorkflowDeleteResponse -- client.workflows.run(documentID, { ...params }) -> WorkflowRun - -## Runs - -Types: - -- RunListResponse -- RunDeleteResponse - -Methods: - -- client.workflows.runs.retrieve(runID) -> WorkflowRun -- client.workflows.runs.list(workflowID) -> RunListResponse -- client.workflows.runs.delete(runID) -> RunDeleteResponse +- client.folders.documents.add(documentID, { ...params }) -> DocumentAddResponse +- client.folders.documents.remove(documentID, { ...params }) -> DocumentDeleteResponse # ModelConfig @@ -177,8 +138,8 @@ Types: Methods: -- client.cache.create({ ...params }) -> CacheCreateResponse -- client.cache.retrieve(name) -> CacheRetrieveResponse +- client.cache.create({ ...params }) -> unknown +- client.cache.retrieve(name) -> unknown - client.cache.update(name) -> CacheUpdateResponse - client.cache.addDocs(name, [ ...body ]) -> CacheAddDocsResponse - client.cache.query(name, { ...params }) -> CompletionResponse @@ -202,9 +163,9 @@ Methods: - client.graph.retrieve(name, { ...params }) -> Graph - client.graph.update(name, { ...params }) -> Graph - client.graph.list({ ...params }) -> GraphListResponse -- client.graph.delete(name) -> GraphDeleteResponse -- client.graph.status(name, { ...params }) -> GraphStatusResponse -- client.graph.visualization(name, { ...params }) -> GraphVisualizationResponse +- client.graph.delete(name) -> unknown +- client.graph.status(name, { ...params }) -> unknown +- client.graph.visualization(name, { ...params }) -> unknown ## Workflow @@ -214,7 +175,7 @@ Types: Methods: -- client.graph.workflow.status(workflowID, { ...params }) -> WorkflowStatusResponse +- client.graph.workflow.status(workflowID, { ...params }) -> unknown # Ee @@ -243,18 +204,28 @@ Methods: Types: - ConnectorDisconnectResponse +- ConnectorFinalizeAuthResponse - ConnectorGetAuthStatusResponse - ConnectorHandleOAuthCallbackResponse - ConnectorIngestFileResponse +- ConnectorIngestRepositoryResponse +- ConnectorInitiateAuthResponse - ConnectorListFilesResponse +- ConnectorListFilesViaBodyResponse +- ConnectorStatusResponse Methods: -- client.ee.connectors.disconnect(connectorType) -> ConnectorDisconnectResponse +- client.ee.connectors.disconnect({ ...params }) -> unknown +- client.ee.connectors.finalizeAuth({ ...params }) -> unknown - client.ee.connectors.getAuthStatus(connectorType) -> ConnectorGetAuthStatusResponse - client.ee.connectors.handleOAuthCallback(connectorType, { ...params }) -> unknown -- client.ee.connectors.ingestFile(connectorType, { ...params }) -> ConnectorIngestFileResponse +- client.ee.connectors.ingestFile(connectorType, { ...params }) -> unknown +- client.ee.connectors.ingestRepository(connectorType, { ...params }) -> unknown +- client.ee.connectors.initiateAuth({ ...params }) -> unknown - client.ee.connectors.listFiles(connectorType, { ...params }) -> ConnectorListFilesResponse +- client.ee.connectors.listFilesViaBody({ ...params }) -> unknown +- client.ee.connectors.status({ ...params }) -> unknown ### Auth @@ -265,7 +236,7 @@ Types: Methods: -- client.ee.connectors.auth.finalizeManualAuth(connectorType, { ...params }) -> AuthFinalizeManualAuthResponse +- client.ee.connectors.auth.finalizeManualAuth(connectorType, { ...params }) -> unknown - client.ee.connectors.auth.getInitiateAuthURL(connectorType, { ...params }) -> AuthGetInitiateAuthURLResponse # Retrieve @@ -304,6 +275,16 @@ Methods: - client.batch.retrieveChunks({ ...params }) -> BatchRetrieveChunksResponse - client.batch.retrieveDocuments({ ...params }) -> BatchRetrieveDocumentsResponse +# Search + +Types: + +- SearchDocumentsResponse + +Methods: + +- client.search.documents({ ...params }) -> SearchDocumentsResponse + # Query Methods: @@ -318,7 +299,7 @@ Types: Methods: -- client.agent.executeQuery({ ...params }) -> AgentExecuteQueryResponse +- client.agent.executeQuery({ ...params }) -> unknown # Usage @@ -351,7 +332,7 @@ Types: Methods: -- client.cloud.deleteApp({ ...params }) -> CloudDeleteAppResponse +- client.cloud.deleteApp({ ...params }) -> unknown - client.cloud.generateUri({ ...params }) -> CloudGenerateUriResponse # Documents @@ -363,16 +344,20 @@ Types: - DocumentDownloadFileResponse - DocumentGetDownloadURLResponse - DocumentGetStatusResponse +- DocumentListDocsResponse +- DocumentPagesResponse Methods: - client.documents.retrieve(documentID) -> Document -- client.documents.list({ ...params }) -> DocumentListResponse +- client.documents.list({ ...params }) -> DocumentListResponse - client.documents.delete(documentID) -> DocumentDeleteResponse - client.documents.downloadFile(documentID) -> unknown - client.documents.getByFilename(filename, { ...params }) -> Document - client.documents.getDownloadURL(documentID, { ...params }) -> DocumentGetDownloadURLResponse -- client.documents.getStatus(documentID) -> DocumentGetStatusResponse +- client.documents.getStatus(documentID) -> unknown +- client.documents.listDocs({ ...params }) -> DocumentListDocsResponse +- client.documents.pages({ ...params }) -> DocumentPagesResponse - client.documents.updateFile(documentID, { ...params }) -> Document - client.documents.updateMetadata(documentID, { ...params }) -> Document - client.documents.updateText(documentID, { ...params }) -> Document diff --git a/bin/check-release-environment b/bin/check-release-environment new file mode 100644 index 0000000..6b43775 --- /dev/null +++ b/bin/check-release-environment @@ -0,0 +1,18 @@ +#!/usr/bin/env bash + +errors=() + +lenErrors=${#errors[@]} + +if [[ lenErrors -gt 0 ]]; then + echo -e "Found the following errors in the release environment:\n" + + for error in "${errors[@]}"; do + echo -e "- $error\n" + done + + exit 1 +fi + +echo "The environment is ready to push releases!" + diff --git a/bin/publish-npm b/bin/publish-npm index fa2243d..45e8aa8 100644 --- a/bin/publish-npm +++ b/bin/publish-npm @@ -58,4 +58,4 @@ else fi # Publish with the appropriate tag -yarn publish --access public --tag "$TAG" +yarn publish --tag "$TAG" diff --git a/package.json b/package.json index 58e55b4..71f24a7 100644 --- a/package.json +++ b/package.json @@ -1,18 +1,21 @@ { "name": "morphik", - "version": "0.0.1", + "version": "0.1.0", "description": "The official TypeScript library for the Morphik API", - "author": "Morphik <>", + "author": "Morphik ", "types": "dist/index.d.ts", "main": "dist/index.js", "type": "commonjs", - "repository": "github:stainless-sdks/morphik-typescript", + "repository": "github:morphik-org/morphik-ts", "license": "Apache-2.0", "packageManager": "yarn@1.22.22", "files": [ "**/*" ], "private": false, + "publishConfig": { + "access": "public" + }, "scripts": { "test": "./scripts/test", "build": "./scripts/build", @@ -41,15 +44,12 @@ "publint": "^0.2.12", "ts-jest": "^29.1.0", "ts-node": "^10.5.0", - "tsc-multi": "https://github.com/stainless-api/tsc-multi/releases/download/v1.1.8/tsc-multi.tgz", + "tsc-multi": "https://github.com/stainless-api/tsc-multi/releases/download/v1.1.9/tsc-multi.tgz", "tsconfig-paths": "^4.0.0", + "tslib": "^2.8.1", "typescript": "5.8.3", "typescript-eslint": "8.31.1" }, - "imports": { - "morphik": ".", - "morphik/*": "./src/*" - }, "exports": { ".": { "import": "./dist/index.mjs", diff --git a/release-please-config.json b/release-please-config.json new file mode 100644 index 0000000..1ebd0bd --- /dev/null +++ b/release-please-config.json @@ -0,0 +1,64 @@ +{ + "packages": { + ".": {} + }, + "$schema": "https://raw.githubusercontent.com/stainless-api/release-please/main/schemas/config.json", + "include-v-in-tag": true, + "include-component-in-tag": false, + "versioning": "prerelease", + "prerelease": true, + "bump-minor-pre-major": true, + "bump-patch-for-minor-pre-major": false, + "pull-request-header": "Automated Release PR", + "pull-request-title-pattern": "release: ${version}", + "changelog-sections": [ + { + "type": "feat", + "section": "Features" + }, + { + "type": "fix", + "section": "Bug Fixes" + }, + { + "type": "perf", + "section": "Performance Improvements" + }, + { + "type": "revert", + "section": "Reverts" + }, + { + "type": "chore", + "section": "Chores" + }, + { + "type": "docs", + "section": "Documentation" + }, + { + "type": "style", + "section": "Styles" + }, + { + "type": "refactor", + "section": "Refactors" + }, + { + "type": "test", + "section": "Tests", + "hidden": true + }, + { + "type": "build", + "section": "Build System" + }, + { + "type": "ci", + "section": "Continuous Integration", + "hidden": true + } + ], + "release-type": "node", + "extra-files": ["src/version.ts", "README.md"] +} diff --git a/scripts/bootstrap b/scripts/bootstrap index 0af58e2..a8b69ff 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 @@ -15,4 +23,4 @@ echo "==> Installing Node dependencies…" PACKAGE_MANAGER=$(command -v yarn >/dev/null 2>&1 && echo "yarn" || echo "npm") -$PACKAGE_MANAGER install +$PACKAGE_MANAGER install "$@" diff --git a/scripts/fast-format b/scripts/fast-format new file mode 100755 index 0000000..53721ac --- /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" | 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 --no-error-on-unmatched-pattern \ + '!**/dist' '!**/*.ts' '!**/*.mts' '!**/*.cts' '!**/*.js' '!**/*.mjs' '!**/*.cjs' +fi diff --git a/scripts/mock b/scripts/mock index d2814ae..0b28f6e 100755 --- a/scripts/mock +++ b/scripts/mock @@ -21,7 +21,7 @@ echo "==> Starting mock server with URL ${URL}" # Run prism mock on the given spec if [ "$1" == "--daemon" ]; then - npm exec --package=@stainless-api/prism-cli@5.8.5 -- prism mock "$URL" &> .prism.log & + npm exec --package=@stainless-api/prism-cli@5.15.0 -- prism mock "$URL" &> .prism.log & # Wait for server to come online echo -n "Waiting for server" @@ -37,5 +37,5 @@ if [ "$1" == "--daemon" ]; then echo else - npm exec --package=@stainless-api/prism-cli@5.8.5 -- prism mock "$URL" + npm exec --package=@stainless-api/prism-cli@5.15.0 -- prism mock "$URL" fi diff --git a/scripts/publish-npm.sh b/scripts/publish-npm.sh deleted file mode 100755 index 9e2d628..0000000 --- a/scripts/publish-npm.sh +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/bash - -# Build and publish Morphik SDK to npm - -set -e # Exit on error - -echo "🔨 Building SDK..." -yarn build - -if [ ! -d "dist" ]; then - echo "❌ Build failed: dist directory not found" - exit 1 -fi - -echo "📦 Publishing to npm..." -cd dist - -# Check if logged in to npm -if ! npm whoami &> /dev/null; then - echo "❌ Not logged in to npm. Please run 'npm login' first." - exit 1 -fi - -# Publish with public access -npm publish --access public - -echo "✅ Successfully published morphik to npm!" -echo "📝 Install with: npm install morphik" \ No newline at end of file diff --git a/scripts/test b/scripts/test index 2049e31..7bce051 100755 --- a/scripts/test +++ b/scripts/test @@ -43,7 +43,7 @@ elif ! prism_is_running ; then echo -e "To run the server, pass in the path or url of your OpenAPI" echo -e "spec to the prism command:" echo - echo -e " \$ ${YELLOW}npm exec --package=@stoplight/prism-cli@~5.3.2 -- prism mock path/to/your.openapi.yml${NC}" + echo -e " \$ ${YELLOW}npm exec --package=@stainless-api/prism-cli@5.15.0 -- prism mock path/to/your.openapi.yml${NC}" echo exit 1 diff --git a/scripts/utils/upload-artifact.sh b/scripts/utils/upload-artifact.sh index 30bed30..26ec02c 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 -cz 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" diff --git a/src/client.ts b/src/client.ts index 898abb3..dab001f 100644 --- a/src/client.ts +++ b/src/client.ts @@ -57,8 +57,12 @@ import { Ingest, IngestBatchIngestFilesParams, IngestBatchIngestFilesResponse, + IngestDocumentQueryParams, + IngestDocumentQueryResponse, IngestIngestFileParams, IngestIngestTextParams, + IngestRequeueParams, + IngestRequeueResponse, TextRequest, } from './resources/ingest'; import { Local, LocalGenerateUriParams, LocalGenerateUriResponse } from './resources/local'; @@ -72,8 +76,9 @@ import { ModelResponse, Models, } from './resources/models'; -import { Ping, PingCheckResponse } from './resources/ping'; +import { Ping, PingCheckResponse, PingStatusResponse } from './resources/ping'; import { Query, QueryGenerateCompletionParams } from './resources/query'; +import { Search, SearchDocumentsParams, SearchDocumentsResponse } from './resources/search'; import { Usage, UsageListRecentParams, @@ -87,8 +92,12 @@ import { DocumentGetDownloadURLParams, DocumentGetDownloadURLResponse, DocumentGetStatusResponse, + DocumentListDocsParams, + DocumentListDocsResponse, DocumentListParams, DocumentListResponse, + DocumentPagesParams, + DocumentPagesResponse, DocumentUpdateFileParams, DocumentUpdateMetadataParams, DocumentUpdateTextParams, @@ -99,10 +108,10 @@ import { Folder, FolderCreateParams, FolderDeleteResponse, + FolderDetailsParams, + FolderDetailsResponse, FolderListResponse, FolderListSummariesResponse, - FolderSetRuleParams, - FolderSetRuleResponse, Folders, } from './resources/folders/folders'; import { @@ -135,16 +144,6 @@ import { RetrieveCreateDocsParams, RetrieveCreateDocsResponse, } from './resources/retrieve/retrieve'; -import { - Workflow, - WorkflowCreateParams, - WorkflowDeleteResponse, - WorkflowListResponse, - WorkflowRun, - WorkflowRunParams, - WorkflowUpdateParams, - Workflows, -} from './resources/workflows/workflows'; import { type Fetch } from './internal/builtin-types'; import { HeadersLike, NullableHeaders, buildHeaders } from './internal/headers'; import { FinalRequestOptions, RequestOptions } from './internal/request-options'; @@ -486,7 +485,7 @@ export class Morphik { const response = await this.fetchWithTimeout(url, req, timeout, controller).catch(castToError); const headersTime = Date.now(); - if (response instanceof Error) { + if (response instanceof globalThis.Error) { const retryMessage = `retrying, ${retriesRemaining} attempts remaining`; if (options.signal?.aborted) { throw new Errors.APIUserAbortError(); @@ -793,7 +792,7 @@ export class Morphik { // Preserve legacy string encoding behavior for now headers.values.has('content-type')) || // `Blob` is superset of `File` - body instanceof Blob || + ((globalThis as any).Blob && body instanceof (globalThis as any).Blob) || // `FormData` -> `multipart/form-data` body instanceof FormData || // `URLSearchParams` -> `application/x-www-form-urlencoded` @@ -836,7 +835,6 @@ export class Morphik { models: API.Models = new API.Models(this); ingest: API.Ingest = new API.Ingest(this); folders: API.Folders = new API.Folders(this); - workflows: API.Workflows = new API.Workflows(this); modelConfig: API.ModelConfig = new API.ModelConfig(this); apiKeys: API.APIKeys = new API.APIKeys(this); logs: API.Logs = new API.Logs(this); @@ -845,6 +843,7 @@ export class Morphik { ee: API.Ee = new API.Ee(this); retrieve: API.Retrieve = new API.Retrieve(this); batch: API.Batch = new API.Batch(this); + search: API.Search = new API.Search(this); query: API.Query = new API.Query(this); agent: API.Agent = new API.Agent(this); usage: API.Usage = new API.Usage(this); @@ -853,11 +852,11 @@ export class Morphik { documents: API.Documents = new API.Documents(this); chat: API.Chat = new API.Chat(this); } + Morphik.Ping = Ping; Morphik.Models = Models; Morphik.Ingest = Ingest; Morphik.Folders = Folders; -Morphik.Workflows = Workflows; Morphik.ModelConfig = ModelConfig; Morphik.APIKeys = APIKeys; Morphik.Logs = Logs; @@ -866,6 +865,7 @@ Morphik.GraphResource = GraphResource; Morphik.Ee = Ee; Morphik.Retrieve = Retrieve; Morphik.Batch = Batch; +Morphik.Search = Search; Morphik.Query = Query; Morphik.Agent = Agent; Morphik.Usage = Usage; @@ -873,10 +873,15 @@ Morphik.Local = Local; Morphik.Cloud = Cloud; Morphik.Documents = Documents; Morphik.Chat = Chat; + export declare namespace Morphik { export type RequestOptions = Opts.RequestOptions; - export { Ping as Ping, type PingCheckResponse as PingCheckResponse }; + export { + Ping as Ping, + type PingCheckResponse as PingCheckResponse, + type PingStatusResponse as PingStatusResponse, + }; export { Models as Models, @@ -893,9 +898,13 @@ export declare namespace Morphik { type Document as Document, type TextRequest as TextRequest, type IngestBatchIngestFilesResponse as IngestBatchIngestFilesResponse, + type IngestDocumentQueryResponse as IngestDocumentQueryResponse, + type IngestRequeueResponse as IngestRequeueResponse, type IngestBatchIngestFilesParams as IngestBatchIngestFilesParams, + type IngestDocumentQueryParams as IngestDocumentQueryParams, type IngestIngestFileParams as IngestIngestFileParams, type IngestIngestTextParams as IngestIngestTextParams, + type IngestRequeueParams as IngestRequeueParams, }; export { @@ -903,21 +912,10 @@ export declare namespace Morphik { type Folder as Folder, type FolderListResponse as FolderListResponse, type FolderDeleteResponse as FolderDeleteResponse, + type FolderDetailsResponse as FolderDetailsResponse, type FolderListSummariesResponse as FolderListSummariesResponse, - type FolderSetRuleResponse as FolderSetRuleResponse, type FolderCreateParams as FolderCreateParams, - type FolderSetRuleParams as FolderSetRuleParams, - }; - - export { - Workflows as Workflows, - type Workflow as Workflow, - type WorkflowRun as WorkflowRun, - type WorkflowListResponse as WorkflowListResponse, - type WorkflowDeleteResponse as WorkflowDeleteResponse, - type WorkflowCreateParams as WorkflowCreateParams, - type WorkflowUpdateParams as WorkflowUpdateParams, - type WorkflowRunParams as WorkflowRunParams, + type FolderDetailsParams as FolderDetailsParams, }; export { @@ -988,6 +986,12 @@ export declare namespace Morphik { type BatchRetrieveDocumentsParams as BatchRetrieveDocumentsParams, }; + export { + Search as Search, + type SearchDocumentsResponse as SearchDocumentsResponse, + type SearchDocumentsParams as SearchDocumentsParams, + }; + export { Query as Query, type QueryGenerateCompletionParams as QueryGenerateCompletionParams }; export { @@ -1024,9 +1028,13 @@ export declare namespace Morphik { type DocumentDownloadFileResponse as DocumentDownloadFileResponse, type DocumentGetDownloadURLResponse as DocumentGetDownloadURLResponse, type DocumentGetStatusResponse as DocumentGetStatusResponse, + type DocumentListDocsResponse as DocumentListDocsResponse, + type DocumentPagesResponse as DocumentPagesResponse, type DocumentListParams as DocumentListParams, type DocumentGetByFilenameParams as DocumentGetByFilenameParams, type DocumentGetDownloadURLParams as DocumentGetDownloadURLParams, + type DocumentListDocsParams as DocumentListDocsParams, + type DocumentPagesParams as DocumentPagesParams, type DocumentUpdateFileParams as DocumentUpdateFileParams, type DocumentUpdateMetadataParams as DocumentUpdateMetadataParams, type DocumentUpdateTextParams as DocumentUpdateTextParams, diff --git a/src/internal/to-file.ts b/src/internal/to-file.ts index 245e849..30eada3 100644 --- a/src/internal/to-file.ts +++ b/src/internal/to-file.ts @@ -73,7 +73,7 @@ export type ToFileInput = /** * Helper for creating a {@link File} to pass to an SDK upload method from a variety of different data formats - * @param value the raw content of the file. Can be an {@link Uploadable}, {@link BlobLikePart}, or {@link AsyncIterable} of {@link BlobLikePart}s + * @param value the raw content of the file. Can be an {@link Uploadable}, BlobLikePart, or AsyncIterable of BlobLikeParts * @param {string=} name the name of the file. If omitted, toFile will try to determine a file name from bits if possible * @param {Object=} options additional properties * @param {string=} options.type the MIME type of the content diff --git a/src/internal/utils/values.ts b/src/internal/utils/values.ts index 88a787e..7f31b9d 100644 --- a/src/internal/utils/values.ts +++ b/src/internal/utils/values.ts @@ -76,21 +76,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); diff --git a/src/resources/agent.ts b/src/resources/agent.ts index bd4376e..18a0464 100644 --- a/src/resources/agent.ts +++ b/src/resources/agent.ts @@ -14,15 +14,12 @@ export class Agent extends APIResource { * * Returns: A dictionary with the agent's full response. */ - executeQuery( - body: AgentExecuteQueryParams, - options?: RequestOptions, - ): APIPromise { + executeQuery(body: AgentExecuteQueryParams, options?: RequestOptions): APIPromise { return this._client.post('/agent', { body, ...options }); } } -export type AgentExecuteQueryResponse = { [key: string]: unknown }; +export type AgentExecuteQueryResponse = unknown; export interface AgentExecuteQueryParams { /** diff --git a/src/resources/api-keys.ts b/src/resources/api-keys.ts index c03ccb7..7ae9048 100644 --- a/src/resources/api-keys.ts +++ b/src/resources/api-keys.ts @@ -22,7 +22,7 @@ export class APIKeys extends APIResource { export type APIKeyCreateResponse = { [key: string]: string }; -export type APIKeyListResponse = { [key: string]: { [key: string]: unknown } }; +export type APIKeyListResponse = { [key: string]: unknown }; export interface APIKeyCreateParams { api_key: string; diff --git a/src/resources/batch.ts b/src/resources/batch.ts index 315d40e..396babd 100644 --- a/src/resources/batch.ts +++ b/src/resources/batch.ts @@ -50,11 +50,11 @@ export type BatchRetrieveChunksResponse = Array; export type BatchRetrieveDocumentsResponse = Array; export interface BatchRetrieveChunksParams { - body: { [key: string]: unknown }; + body: unknown; } export interface BatchRetrieveDocumentsParams { - body: { [key: string]: unknown }; + body: unknown; } export declare namespace Batch { diff --git a/src/resources/cache.ts b/src/resources/cache.ts index e7028d5..b0059e2 100644 --- a/src/resources/cache.ts +++ b/src/resources/cache.ts @@ -17,7 +17,7 @@ export class Cache extends APIResource { * * Returns: A dictionary describing the created cache. */ - create(params: CacheCreateParams, options?: RequestOptions): APIPromise { + create(params: CacheCreateParams, options?: RequestOptions): APIPromise { const { gguf_file, model, name, ...body } = params; return this._client.post('/cache/create', { query: { gguf_file, model, name }, body, ...options }); } @@ -31,7 +31,7 @@ export class Cache extends APIResource { * Returns: A dictionary with a boolean `exists` field indicating whether the cache * is loaded. */ - retrieve(name: string, options?: RequestOptions): APIPromise { + retrieve(name: string, options?: RequestOptions): APIPromise { return this._client.get(path`/cache/${name}`, options); } @@ -96,7 +96,7 @@ export interface CompletionResponse { finish_reason?: string | null; - metadata?: { [key: string]: unknown } | null; + metadata?: unknown | null; sources?: Array; } @@ -114,9 +114,9 @@ export namespace CompletionResponse { } } -export type CacheCreateResponse = { [key: string]: unknown }; +export type CacheCreateResponse = unknown; -export type CacheRetrieveResponse = { [key: string]: unknown }; +export type CacheRetrieveResponse = unknown; export type CacheUpdateResponse = { [key: string]: boolean }; @@ -146,7 +146,7 @@ export interface CacheCreateParams { /** * Body param: */ - filters?: { [key: string]: unknown } | null; + filters?: unknown | null; } export interface CacheAddDocsParams { diff --git a/src/resources/chat.ts b/src/resources/chat.ts index 87f5019..b4e8d9a 100644 --- a/src/resources/chat.ts +++ b/src/resources/chat.ts @@ -54,7 +54,7 @@ export class Chat extends APIResource { } } -export type ChatListResponse = Array<{ [key: string]: unknown }>; +export type ChatListResponse = Array; export type ChatRetrieveHistoryResponse = Array; @@ -67,7 +67,7 @@ export namespace ChatRetrieveHistoryResponse { role: 'user' | 'assistant'; - agent_data?: { [key: string]: unknown } | null; + agent_data?: unknown | null; timestamp?: string; } diff --git a/src/resources/cloud.ts b/src/resources/cloud.ts index e803a6f..b133ca1 100644 --- a/src/resources/cloud.ts +++ b/src/resources/cloud.ts @@ -13,7 +13,7 @@ export class Cloud extends APIResource { * * Returns: A summary describing how many documents and folders were removed. */ - deleteApp(params: CloudDeleteAppParams, options?: RequestOptions): APIPromise { + deleteApp(params: CloudDeleteAppParams, options?: RequestOptions): APIPromise { const { app_name } = params; return this._client.delete('/cloud/apps', { query: { app_name }, ...options }); } @@ -31,7 +31,7 @@ export class Cloud extends APIResource { } } -export type CloudDeleteAppResponse = { [key: string]: unknown }; +export type CloudDeleteAppResponse = unknown; export type CloudGenerateUriResponse = { [key: string]: string }; diff --git a/src/resources/documents/documents.ts b/src/resources/documents/documents.ts index 70e9131..8eef62e 100644 --- a/src/resources/documents/documents.ts +++ b/src/resources/documents/documents.ts @@ -28,6 +28,26 @@ export class Documents extends APIResource { /** * List accessible documents. * + * `request.document_filters` may include the following operators in addition to + * equality checks (which also match scalars inside JSON arrays): `$and`, `$or`, + * `$nor`, `$not`, `$in`, `$nin`, `$exists`, `$regex`, and `$contains`. Filters can + * be nested arbitrarily. Regex filters accept the optional `i` flag; `$contains` + * performs substring matches with optional `case_sensitive` overrides. Example: + * + * ```json + * { + * "$and": [ + * { "department": "sales" }, + * { + * "$or": [ + * { "status": "approved" }, + * { "priority": { "$in": ["high", "urgent"] } } + * ] + * } + * ] + * } + * ``` + * * Args: request: Request body containing filters and pagination auth: * Authentication context folder_name: Optional folder to scope the operation to * end_user_id: Optional end-user ID to scope the operation to @@ -36,7 +56,7 @@ export class Documents extends APIResource { */ list(params: DocumentListParams, options?: RequestOptions): APIPromise { const { end_user_id, folder_name, ...body } = params; - return this._client.post('/documents/', { query: { end_user_id, folder_name }, body, ...options }); + return this._client.post('/documents', { query: { end_user_id, folder_name }, body, ...options }); } /** @@ -109,18 +129,64 @@ export class Documents extends APIResource { * * Returns: Dict containing status information for the document */ - getStatus(documentID: string, options?: RequestOptions): APIPromise { + getStatus(documentID: string, options?: RequestOptions): APIPromise { return this._client.get(path`/documents/${documentID}/status`, options); } + /** + * Flexible document listing endpoint with support for aggregates, projections, and + * advanced pagination. + * + * `request.document_filters` supports equality plus `$and`, `$or`, `$nor`, `$not`, + * `$in`, `$nin`, `$exists`, `$regex`, and `$contains`, with arbitrary nesting. + * Scalar comparisons match array elements automatically. Example: + * + * ```json + * { + * "$and": [ + * { "category": "patent" }, + * { + * "$nor": [ + * { "status": "archived" }, + * { "priority": { "$in": ["low", "medium"] } } + * ] + * } + * ] + * } + * ``` + * + * Use the `folder_name` and `end_user_id` query parameters to scope system + * metadata instead of embedding those keys in the filter payload. + */ + listDocs(params: DocumentListDocsParams, options?: RequestOptions): APIPromise { + const { end_user_id, folder_name, ...body } = params; + return this._client.post('/documents/list_docs', { + query: { end_user_id, folder_name }, + body, + ...options, + }); + } + + /** + * Extract specific pages from a document (PDF or PowerPoint) as base64-encoded + * images. + * + * Args: request: Request containing document_id, start_page, and end_page auth: + * Authentication context + * + * Returns: DocumentPagesResponse: Base64-encoded images of the requested pages + */ + pages(body: DocumentPagesParams, options?: RequestOptions): APIPromise { + return this._client.post('/documents/pages', { body, ...options }); + } + /** * Update a document with content from a file using the specified strategy. * * Args: document_id: ID of the document to update file: File to add to the * document metadata: JSON string of metadata to merge with existing metadata - * rules: JSON string of rules to apply to the content update_strategy: Strategy - * for updating the document (default: 'add') use_colpali: Whether to use - * multi-vector embedding auth: Authentication context + * update_strategy: Strategy for updating the document (default: 'add') + * use_colpali: Whether to use multi-vector embedding auth: Authentication context * * Returns: Document: Updated document metadata */ @@ -197,7 +263,56 @@ export interface DocumentGetDownloadURLResponse { expires_in: number; } -export type DocumentGetStatusResponse = { [key: string]: unknown }; +export type DocumentGetStatusResponse = unknown; + +/** + * Flexible response for listing documents with aggregates. + */ +export interface DocumentListDocsResponse { + limit: number; + + returned_count: number; + + skip: number; + + documents?: Array; + + folder_counts?: Array | null; + + has_more?: boolean; + + next_skip?: number | null; + + status_counts?: { [key: string]: number } | null; + + total_count?: number | null; +} + +export namespace DocumentListDocsResponse { + /** + * Count of documents grouped by folder name. + */ + export interface FolderCount { + count: number; + + folder: string | null; + } +} + +/** + * Response for document pages extraction endpoint + */ +export interface DocumentPagesResponse { + document_id: string; + + end_page: number; + + pages: Array; + + start_page: number; + + total_pages: number; +} export interface DocumentListParams { /** @@ -213,7 +328,7 @@ export interface DocumentListParams { /** * Body param: Metadata filters for documents */ - document_filters?: { [key: string]: unknown } | null; + document_filters?: unknown | null; /** * Body param: @@ -239,20 +354,104 @@ export interface DocumentGetDownloadURLParams { expires_in?: number; } +export interface DocumentListDocsParams { + /** + * Query param: + */ + end_user_id?: string | null; + + /** + * Query param: + */ + folder_name?: string | Array | null; + + /** + * Body param: When true, only documents with completed processing status are + * returned and counted + */ + completed_only?: boolean; + + /** + * Body param: Metadata filters for documents + */ + document_filters?: unknown | null; + + /** + * Body param: Optional list of fields to project for each document (dot notation + * supported) + */ + fields?: Array | null; + + /** + * Body param: Include document counts grouped by folder when true + */ + include_folder_counts?: boolean; + + /** + * Body param: Include document counts grouped by processing status when true + */ + include_status_counts?: boolean; + + /** + * Body param: Include total number of matching documents when true + */ + include_total_count?: boolean; + + /** + * Body param: Maximum number of documents to return + */ + limit?: number; + + /** + * Body param: When false, only aggregates are returned + */ + return_documents?: boolean; + + /** + * Body param: Number of documents to skip + */ + skip?: number; + + /** + * Body param: Field to sort the results by + */ + sort_by?: 'created_at' | 'updated_at' | 'filename' | 'external_id' | null; + + /** + * Body param: Sort direction for the results + */ + sort_direction?: 'asc' | 'desc'; +} + +export interface DocumentPagesParams { + /** + * ID of the document to extract pages from + */ + document_id: string; + + /** + * Ending page number (1-indexed) + */ + end_page: number; + + /** + * Starting page number (1-indexed) + */ + start_page: number; +} + export interface DocumentUpdateFileParams { file: Uploadable; metadata?: string; - rules?: string; - update_strategy?: string; use_colpali?: boolean | null; } export interface DocumentUpdateMetadataParams { - body: { [key: string]: unknown }; + body: unknown; } export interface DocumentUpdateTextParams { @@ -284,17 +483,14 @@ export interface DocumentUpdateTextParams { /** * Body param: */ - metadata?: { [key: string]: unknown }; - - /** - * Body param: - */ - rules?: Array<{ [key: string]: unknown }>; + metadata?: unknown; /** * Body param: */ use_colpali?: boolean | null; + + [k: string]: unknown; } Documents.Chat = Chat; @@ -306,9 +502,13 @@ export declare namespace Documents { type DocumentDownloadFileResponse as DocumentDownloadFileResponse, type DocumentGetDownloadURLResponse as DocumentGetDownloadURLResponse, type DocumentGetStatusResponse as DocumentGetStatusResponse, + type DocumentListDocsResponse as DocumentListDocsResponse, + type DocumentPagesResponse as DocumentPagesResponse, type DocumentListParams as DocumentListParams, type DocumentGetByFilenameParams as DocumentGetByFilenameParams, type DocumentGetDownloadURLParams as DocumentGetDownloadURLParams, + type DocumentListDocsParams as DocumentListDocsParams, + type DocumentPagesParams as DocumentPagesParams, type DocumentUpdateFileParams as DocumentUpdateFileParams, type DocumentUpdateMetadataParams as DocumentUpdateMetadataParams, type DocumentUpdateTextParams as DocumentUpdateTextParams, diff --git a/src/resources/documents/index.ts b/src/resources/documents/index.ts index 11aed67..d0e0fe1 100644 --- a/src/resources/documents/index.ts +++ b/src/resources/documents/index.ts @@ -13,9 +13,13 @@ export { type DocumentDownloadFileResponse, type DocumentGetDownloadURLResponse, type DocumentGetStatusResponse, + type DocumentListDocsResponse, + type DocumentPagesResponse, type DocumentListParams, type DocumentGetByFilenameParams, type DocumentGetDownloadURLParams, + type DocumentListDocsParams, + type DocumentPagesParams, type DocumentUpdateFileParams, type DocumentUpdateMetadataParams, type DocumentUpdateTextParams, diff --git a/src/resources/ee/connectors/auth.ts b/src/resources/ee/connectors/auth.ts index 130b77b..194191d 100644 --- a/src/resources/ee/connectors/auth.ts +++ b/src/resources/ee/connectors/auth.ts @@ -16,7 +16,7 @@ export class Auth extends APIResource { connectorType: string, body: AuthFinalizeManualAuthParams, options?: RequestOptions, - ): APIPromise { + ): APIPromise { return this._client.post(path`/ee/connectors/${connectorType}/auth/finalize`, { body, ...options }); } @@ -39,7 +39,7 @@ export class Auth extends APIResource { } } -export type AuthFinalizeManualAuthResponse = { [key: string]: unknown }; +export type AuthFinalizeManualAuthResponse = unknown; export type AuthGetInitiateAuthURLResponse = | AuthGetInitiateAuthURLResponse.ManualCredentialsAuthResponse @@ -84,7 +84,7 @@ export namespace AuthGetInitiateAuthURLResponse { } export interface AuthFinalizeManualAuthParams { - credentials: { [key: string]: unknown }; + credentials: unknown; } export interface AuthGetInitiateAuthURLParams { diff --git a/src/resources/ee/connectors/connectors.ts b/src/resources/ee/connectors/connectors.ts index b911594..080e5d9 100644 --- a/src/resources/ee/connectors/connectors.ts +++ b/src/resources/ee/connectors/connectors.ts @@ -17,11 +17,17 @@ export class Connectors extends APIResource { auth: AuthAPI.Auth = new AuthAPI.Auth(this._client); /** - * Disconnects the user from the specified connector by removing stored - * credentials. + * Disconnect from a connector and remove credentials. */ - disconnect(connectorType: string, options?: RequestOptions): APIPromise { - return this._client.post(path`/ee/connectors/${connectorType}/disconnect`, options); + disconnect(body: ConnectorDisconnectParams, options?: RequestOptions): APIPromise { + return this._client.post('/ee/connectors/disconnect', { body, ...options }); + } + + /** + * Finalize the OAuth flow and exchange the code for a token. + */ + finalizeAuth(body: ConnectorFinalizeAuthParams, options?: RequestOptions): APIPromise { + return this._client.post('/ee/connectors/finalize-auth', { body, ...options }); } /** @@ -44,17 +50,34 @@ export class Connectors extends APIResource { } /** - * Downloads a file from the connector and ingests it into Morphik via - * DocumentService. + * Ingest a single file from a connector. */ ingestFile( connectorType: string, body: ConnectorIngestFileParams, options?: RequestOptions, - ): APIPromise { + ): APIPromise { return this._client.post(path`/ee/connectors/${connectorType}/ingest`, { body, ...options }); } + /** + * Ingest an entire GitHub repository. + */ + ingestRepository( + connectorType: string, + body: ConnectorIngestRepositoryParams, + options?: RequestOptions, + ): APIPromise { + return this._client.post(path`/ee/connectors/${connectorType}/ingest-repository`, { body, ...options }); + } + + /** + * Initiate the OAuth flow for a connector. + */ + initiateAuth(body: ConnectorInitiateAuthParams, options?: RequestOptions): APIPromise { + return this._client.post('/ee/connectors/initiate-auth', { body, ...options }); + } + /** * Lists files and folders from the specified connector. */ @@ -65,9 +88,25 @@ export class Connectors extends APIResource { ): APIPromise { return this._client.get(path`/ee/connectors/${connectorType}/files`, { query, ...options }); } + + /** + * List files from a connector. + */ + listFilesViaBody(body: ConnectorListFilesViaBodyParams, options?: RequestOptions): APIPromise { + return this._client.post('/ee/connectors/list-files', { body, ...options }); + } + + /** + * Get the authentication status for a connector. + */ + status(body: ConnectorStatusParams, options?: RequestOptions): APIPromise { + return this._client.post('/ee/connectors/status', { body, ...options }); + } } -export type ConnectorDisconnectResponse = { [key: string]: unknown }; +export type ConnectorDisconnectResponse = unknown; + +export type ConnectorFinalizeAuthResponse = unknown; export interface ConnectorGetAuthStatusResponse { is_authenticated: boolean; @@ -79,7 +118,11 @@ export interface ConnectorGetAuthStatusResponse { export type ConnectorHandleOAuthCallbackResponse = unknown; -export type ConnectorIngestFileResponse = { [key: string]: unknown }; +export type ConnectorIngestFileResponse = unknown; + +export type ConnectorIngestRepositoryResponse = unknown; + +export type ConnectorInitiateAuthResponse = unknown; export interface ConnectorListFilesResponse { files: Array; @@ -103,6 +146,20 @@ export namespace ConnectorListFilesResponse { } } +export type ConnectorListFilesViaBodyResponse = unknown; + +export type ConnectorStatusResponse = unknown; + +export interface ConnectorDisconnectParams { + connector_type: string; +} + +export interface ConnectorFinalizeAuthParams { + auth_response_data: unknown; + + connector_type: string; +} + export interface ConnectorHandleOAuthCallbackParams { code?: string | null; @@ -116,13 +173,33 @@ export interface ConnectorHandleOAuthCallbackParams { export interface ConnectorIngestFileParams { file_id: string; - metadata?: { [key: string]: unknown } | null; + folder_name?: string | null; + + metadata?: unknown | null; + + [k: string]: unknown; +} + +export interface ConnectorIngestRepositoryParams { + repo_path: string; + + compress?: boolean; - morphik_end_user_id?: string | null; + body_connector_type?: string; - morphik_folder_name?: string | null; + folder_name?: string | null; - rules?: Array<{ [key: string]: unknown }> | null; + force?: boolean; + + ignore_patterns?: Array | null; + + include_patterns?: Array | null; + + metadata?: unknown | null; +} + +export interface ConnectorInitiateAuthParams { + connector_type: string; } export interface ConnectorListFilesParams { @@ -135,18 +212,41 @@ export interface ConnectorListFilesParams { q_filter?: string | null; } +export interface ConnectorListFilesViaBodyParams { + connector_type: string; + + page_token?: string | null; + + path?: string | null; +} + +export interface ConnectorStatusParams { + connector_type: string; +} + Connectors.Auth = Auth; export declare namespace Connectors { export { type ConnectorDisconnectResponse as ConnectorDisconnectResponse, + type ConnectorFinalizeAuthResponse as ConnectorFinalizeAuthResponse, type ConnectorGetAuthStatusResponse as ConnectorGetAuthStatusResponse, type ConnectorHandleOAuthCallbackResponse as ConnectorHandleOAuthCallbackResponse, type ConnectorIngestFileResponse as ConnectorIngestFileResponse, + type ConnectorIngestRepositoryResponse as ConnectorIngestRepositoryResponse, + type ConnectorInitiateAuthResponse as ConnectorInitiateAuthResponse, type ConnectorListFilesResponse as ConnectorListFilesResponse, + type ConnectorListFilesViaBodyResponse as ConnectorListFilesViaBodyResponse, + type ConnectorStatusResponse as ConnectorStatusResponse, + type ConnectorDisconnectParams as ConnectorDisconnectParams, + type ConnectorFinalizeAuthParams as ConnectorFinalizeAuthParams, type ConnectorHandleOAuthCallbackParams as ConnectorHandleOAuthCallbackParams, type ConnectorIngestFileParams as ConnectorIngestFileParams, + type ConnectorIngestRepositoryParams as ConnectorIngestRepositoryParams, + type ConnectorInitiateAuthParams as ConnectorInitiateAuthParams, type ConnectorListFilesParams as ConnectorListFilesParams, + type ConnectorListFilesViaBodyParams as ConnectorListFilesViaBodyParams, + type ConnectorStatusParams as ConnectorStatusParams, }; export { diff --git a/src/resources/ee/connectors/index.ts b/src/resources/ee/connectors/index.ts index 56226f6..c18cbfa 100644 --- a/src/resources/ee/connectors/index.ts +++ b/src/resources/ee/connectors/index.ts @@ -10,11 +10,22 @@ export { export { Connectors, type ConnectorDisconnectResponse, + type ConnectorFinalizeAuthResponse, type ConnectorGetAuthStatusResponse, type ConnectorHandleOAuthCallbackResponse, type ConnectorIngestFileResponse, + type ConnectorIngestRepositoryResponse, + type ConnectorInitiateAuthResponse, type ConnectorListFilesResponse, + type ConnectorListFilesViaBodyResponse, + type ConnectorStatusResponse, + type ConnectorDisconnectParams, + type ConnectorFinalizeAuthParams, type ConnectorHandleOAuthCallbackParams, type ConnectorIngestFileParams, + type ConnectorIngestRepositoryParams, + type ConnectorInitiateAuthParams, type ConnectorListFilesParams, + type ConnectorListFilesViaBodyParams, + type ConnectorStatusParams, } from './connectors'; diff --git a/src/resources/ee/ee.ts b/src/resources/ee/ee.ts index 243c5ac..134324a 100644 --- a/src/resources/ee/ee.ts +++ b/src/resources/ee/ee.ts @@ -5,14 +5,25 @@ import * as AppsAPI from './apps'; import { AppCreateParams, AppCreateResponse, AppDeleteParams, AppDeleteResponse, Apps } from './apps'; import * as ConnectorsAPI from './connectors/connectors'; import { + ConnectorDisconnectParams, ConnectorDisconnectResponse, + ConnectorFinalizeAuthParams, + ConnectorFinalizeAuthResponse, ConnectorGetAuthStatusResponse, ConnectorHandleOAuthCallbackParams, ConnectorHandleOAuthCallbackResponse, ConnectorIngestFileParams, ConnectorIngestFileResponse, + ConnectorIngestRepositoryParams, + ConnectorIngestRepositoryResponse, + ConnectorInitiateAuthParams, + ConnectorInitiateAuthResponse, ConnectorListFilesParams, ConnectorListFilesResponse, + ConnectorListFilesViaBodyParams, + ConnectorListFilesViaBodyResponse, + ConnectorStatusParams, + ConnectorStatusResponse, Connectors, } from './connectors/connectors'; import { APIPromise } from '../../core/api-promise'; @@ -70,12 +81,23 @@ export declare namespace Ee { export { Connectors as Connectors, type ConnectorDisconnectResponse as ConnectorDisconnectResponse, + type ConnectorFinalizeAuthResponse as ConnectorFinalizeAuthResponse, type ConnectorGetAuthStatusResponse as ConnectorGetAuthStatusResponse, type ConnectorHandleOAuthCallbackResponse as ConnectorHandleOAuthCallbackResponse, type ConnectorIngestFileResponse as ConnectorIngestFileResponse, + type ConnectorIngestRepositoryResponse as ConnectorIngestRepositoryResponse, + type ConnectorInitiateAuthResponse as ConnectorInitiateAuthResponse, type ConnectorListFilesResponse as ConnectorListFilesResponse, + type ConnectorListFilesViaBodyResponse as ConnectorListFilesViaBodyResponse, + type ConnectorStatusResponse as ConnectorStatusResponse, + type ConnectorDisconnectParams as ConnectorDisconnectParams, + type ConnectorFinalizeAuthParams as ConnectorFinalizeAuthParams, type ConnectorHandleOAuthCallbackParams as ConnectorHandleOAuthCallbackParams, type ConnectorIngestFileParams as ConnectorIngestFileParams, + type ConnectorIngestRepositoryParams as ConnectorIngestRepositoryParams, + type ConnectorInitiateAuthParams as ConnectorInitiateAuthParams, type ConnectorListFilesParams as ConnectorListFilesParams, + type ConnectorListFilesViaBodyParams as ConnectorListFilesViaBodyParams, + type ConnectorStatusParams as ConnectorStatusParams, }; } diff --git a/src/resources/ee/index.ts b/src/resources/ee/index.ts index f676e67..7ed5412 100644 --- a/src/resources/ee/index.ts +++ b/src/resources/ee/index.ts @@ -10,12 +10,23 @@ export { export { Connectors, type ConnectorDisconnectResponse, + type ConnectorFinalizeAuthResponse, type ConnectorGetAuthStatusResponse, type ConnectorHandleOAuthCallbackResponse, type ConnectorIngestFileResponse, + type ConnectorIngestRepositoryResponse, + type ConnectorInitiateAuthResponse, type ConnectorListFilesResponse, + type ConnectorListFilesViaBodyResponse, + type ConnectorStatusResponse, + type ConnectorDisconnectParams, + type ConnectorFinalizeAuthParams, type ConnectorHandleOAuthCallbackParams, type ConnectorIngestFileParams, + type ConnectorIngestRepositoryParams, + type ConnectorInitiateAuthParams, type ConnectorListFilesParams, + type ConnectorListFilesViaBodyParams, + type ConnectorStatusParams, } from './connectors/index'; export { Ee, type EeCreateAppResponse, type EeCreateAppParams } from './ee'; diff --git a/src/resources/folders/documents.ts b/src/resources/folders/documents.ts index a479c29..f87321b 100644 --- a/src/resources/folders/documents.ts +++ b/src/resources/folders/documents.ts @@ -10,8 +10,8 @@ export class Documents extends APIResource { /** * Add a document to a folder. * - * Args: folder_id: ID of the folder document_id: ID of the document auth: - * Authentication context + * Args: folder_id_or_name: ID or name of the folder document_id: ID of the + * document auth: Authentication context * * Returns: Success status */ @@ -20,15 +20,15 @@ export class Documents extends APIResource { params: DocumentAddParams, options?: RequestOptions, ): APIPromise { - const { folder_id } = params; - return this._client.post(path`/folders/${folder_id}/documents/${documentID}`, options); + const { folder_id_or_name } = params; + return this._client.post(path`/folders/${folder_id_or_name}/documents/${documentID}`, options); } /** * Remove a document from a folder. * - * Args: folder_id: ID of the folder document_id: ID of the document auth: - * Authentication context + * Args: folder_id_or_name: ID or name of the folder document_id: ID of the + * document auth: Authentication context * * Returns: Success status */ @@ -37,8 +37,8 @@ export class Documents extends APIResource { params: DocumentRemoveParams, options?: RequestOptions, ): APIPromise { - const { folder_id } = params; - return this._client.delete(path`/folders/${folder_id}/documents/${documentID}`, options); + const { folder_id_or_name } = params; + return this._client.delete(path`/folders/${folder_id_or_name}/documents/${documentID}`, options); } } @@ -52,11 +52,11 @@ export interface DocumentAddResponse { } export interface DocumentAddParams { - folder_id: string; + folder_id_or_name: string; } export interface DocumentRemoveParams { - folder_id: string; + folder_id_or_name: string; } export declare namespace Documents { diff --git a/src/resources/folders/folders.ts b/src/resources/folders/folders.ts index 2249b4a..c69797b 100644 --- a/src/resources/folders/folders.ts +++ b/src/resources/folders/folders.ts @@ -1,24 +1,15 @@ // File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. import { APIResource } from '../../core/resource'; +import * as FoldersAPI from './folders'; import * as DocumentsAPI from './documents'; import { DocumentAddParams, DocumentAddResponse, DocumentRemoveParams, Documents } from './documents'; -import * as WorkflowsAPI from './workflows'; -import { - WorkflowAssociateParams, - WorkflowAssociateResponse, - WorkflowDisassociateParams, - WorkflowDisassociateResponse, - WorkflowListResponse, - Workflows, -} from './workflows'; import { APIPromise } from '../../core/api-promise'; import { RequestOptions } from '../../internal/request-options'; import { path } from '../../internal/utils/path'; export class Folders extends APIResource { documents: DocumentsAPI.Documents = new DocumentsAPI.Documents(this._client); - workflows: WorkflowsAPI.Workflows = new WorkflowsAPI.Workflows(this._client); /** * Create a new folder. @@ -33,14 +24,14 @@ export class Folders extends APIResource { } /** - * Get a folder by ID. + * Get a folder by ID or name. * - * Args: folder_id: ID of the folder auth: Authentication context + * Args: folder_id_or_name: ID or name of the folder auth: Authentication context * * Returns: Folder: Folder if found and accessible */ - retrieve(folderID: string, options?: RequestOptions): APIPromise { - return this._client.get(path`/folders/${folderID}`, options); + retrieve(folderIDOrName: string, options?: RequestOptions): APIPromise { + return this._client.get(path`/folders/${folderIDOrName}`, options); } /** @@ -57,42 +48,27 @@ export class Folders extends APIResource { /** * Delete a folder and all associated documents. * - * Args: folder_name: Name of the folder to delete auth: Authentication context - * (must have write access to the folder) + * Args: folder_id_or_name: Name or ID of the folder to delete auth: Authentication + * context (must have write access to the folder) * * Returns: Deletion status */ - delete(folderName: string, options?: RequestOptions): APIPromise { - return this._client.delete(path`/folders/${folderName}`, options); + delete(folderIDOrName: string, options?: RequestOptions): APIPromise { + return this._client.delete(path`/folders/${folderIDOrName}`, options); } /** - * Return compact folder list (id, name, doc_count, updated_at). + * Retrieve folder metadata with optional document statistics and projections. */ - listSummaries(options?: RequestOptions): APIPromise { - return this._client.get('/folders/summary', options); + details(body: FolderDetailsParams, options?: RequestOptions): APIPromise { + return this._client.post('/folders/details', { body, ...options }); } /** - * Set extraction rules for a folder. - * - * Args: folder_id: ID of the folder to set rules for request: SetFolderRuleRequest - * containing metadata extraction rules auth: Authentication context - * apply_to_existing: Whether to apply rules to existing documents in the folder - * - * Returns: Success status with processing results - */ - setRule( - folderID: string, - params: FolderSetRuleParams, - options?: RequestOptions, - ): APIPromise { - const { apply_to_existing, ...body } = params; - return this._client.post(path`/folders/${folderID}/set_rule`, { - query: { apply_to_existing }, - body, - ...options, - }); + * Return compact folder list (id, name, doc_count, updated_at). + */ + listSummaries(options?: RequestOptions): APIPromise { + return this._client.get('/folders/summary', options); } } @@ -112,14 +88,7 @@ export interface Folder { end_user_id?: string | null; - rules?: Array<{ [key: string]: unknown }>; - - system_metadata?: { [key: string]: unknown }; - - /** - * List of workflow IDs to run on document ingestion - */ - workflow_ids?: Array; + system_metadata?: unknown; } export type FolderListResponse = Array; @@ -133,6 +102,53 @@ export interface FolderDeleteResponse { status: string; } +/** + * Response wrapping folder detail entries. + */ +export interface FolderDetailsResponse { + folders: Array; +} + +export namespace FolderDetailsResponse { + /** + * Folder details with optional document summary. + */ + export interface Folder { + /** + * Represents a folder that contains documents + */ + folder: FoldersAPI.Folder; + + /** + * Document summary for a folder. + */ + document_info?: Folder.DocumentInfo | null; + } + + export namespace Folder { + /** + * Document summary for a folder. + */ + export interface DocumentInfo { + document_count?: number | null; + + documents?: Array; + + has_more?: boolean; + + limit?: number; + + next_skip?: number | null; + + returned_count?: number; + + skip?: number; + + status_counts?: { [key: string]: number } | null; + } + } +} + export type FolderListSummariesResponse = Array; export namespace FolderListSummariesResponse { @@ -149,56 +165,76 @@ export namespace FolderListSummariesResponse { } } -/** - * Response for folder rule setting endpoint - */ -export interface FolderSetRuleResponse { - message: string; - - status: string; -} - export interface FolderCreateParams { name: string; description?: string | null; } -export interface FolderSetRuleParams { +export interface FolderDetailsParams { /** - * Body param: + * Optional list of fields to project for folder documents (dot notation supported) */ - rules: Array; + document_fields?: Array | null; /** - * Query param: + * Optional metadata filters applied when computing folder document statistics */ - apply_to_existing?: boolean; -} + document_filters?: unknown | null; -export namespace FolderSetRuleParams { /** - * Request model for metadata extraction rule + * Maximum number of documents to return per folder when include_documents is true */ - export interface Rule { - schema?: { [key: string]: unknown }; + document_limit?: number; - type?: string; - } + /** + * Number of documents to skip within each folder when include_documents is true + */ + document_skip?: number; + + /** + * List of folder IDs or names. If omitted, returns details for all accessible + * folders. + */ + identifiers?: Array | null; + + /** + * Include total document count when true + */ + include_document_count?: boolean; + + /** + * Include a paginated list of documents for each folder when true + */ + include_documents?: boolean; + + /** + * Include document counts grouped by status when true + */ + include_status_counts?: boolean; + + /** + * Field to sort folder documents by when include_documents is true + */ + sort_by?: 'created_at' | 'updated_at' | 'filename' | 'external_id' | null; + + /** + * Sort direction for folder documents when include_documents is true + */ + sort_direction?: 'asc' | 'desc'; } Folders.Documents = Documents; -Folders.Workflows = Workflows; export declare namespace Folders { export { type Folder as Folder, type FolderListResponse as FolderListResponse, type FolderDeleteResponse as FolderDeleteResponse, + type FolderDetailsResponse as FolderDetailsResponse, type FolderListSummariesResponse as FolderListSummariesResponse, - type FolderSetRuleResponse as FolderSetRuleResponse, type FolderCreateParams as FolderCreateParams, - type FolderSetRuleParams as FolderSetRuleParams, + type FolderDetailsParams as FolderDetailsParams, }; export { @@ -207,13 +243,4 @@ export declare namespace Folders { type DocumentAddParams as DocumentAddParams, type DocumentRemoveParams as DocumentRemoveParams, }; - - export { - Workflows as Workflows, - type WorkflowListResponse as WorkflowListResponse, - type WorkflowAssociateResponse as WorkflowAssociateResponse, - type WorkflowDisassociateResponse as WorkflowDisassociateResponse, - type WorkflowAssociateParams as WorkflowAssociateParams, - type WorkflowDisassociateParams as WorkflowDisassociateParams, - }; } diff --git a/src/resources/folders/index.ts b/src/resources/folders/index.ts index 9884bc8..be78f1c 100644 --- a/src/resources/folders/index.ts +++ b/src/resources/folders/index.ts @@ -11,16 +11,8 @@ export { type Folder, type FolderListResponse, type FolderDeleteResponse, + type FolderDetailsResponse, type FolderListSummariesResponse, - type FolderSetRuleResponse, type FolderCreateParams, - type FolderSetRuleParams, + type FolderDetailsParams, } from './folders'; -export { - Workflows, - type WorkflowListResponse, - type WorkflowAssociateResponse, - type WorkflowDisassociateResponse, - type WorkflowAssociateParams, - type WorkflowDisassociateParams, -} from './workflows'; diff --git a/src/resources/folders/workflows.ts b/src/resources/folders/workflows.ts deleted file mode 100644 index d9c5a98..0000000 --- a/src/resources/folders/workflows.ts +++ /dev/null @@ -1,65 +0,0 @@ -// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -import { APIResource } from '../../core/resource'; -import * as WorkflowsWorkflowsAPI from '../workflows/workflows'; -import { APIPromise } from '../../core/api-promise'; -import { RequestOptions } from '../../internal/request-options'; -import { path } from '../../internal/utils/path'; - -export class Workflows extends APIResource { - /** - * List all workflows associated with a folder. - */ - list(folderID: string, options?: RequestOptions): APIPromise { - return this._client.get(path`/folders/${folderID}/workflows`, options); - } - - /** - * Associate a workflow with a folder for automatic execution on document - * ingestion. - */ - associate( - workflowID: string, - params: WorkflowAssociateParams, - options?: RequestOptions, - ): APIPromise { - const { folder_id } = params; - return this._client.post(path`/folders/${folder_id}/workflows/${workflowID}`, options); - } - - /** - * Remove a workflow association from a folder. - */ - disassociate( - workflowID: string, - params: WorkflowDisassociateParams, - options?: RequestOptions, - ): APIPromise { - const { folder_id } = params; - return this._client.delete(path`/folders/${folder_id}/workflows/${workflowID}`, options); - } -} - -export type WorkflowListResponse = Array; - -export type WorkflowAssociateResponse = { [key: string]: boolean | string }; - -export type WorkflowDisassociateResponse = { [key: string]: boolean | string }; - -export interface WorkflowAssociateParams { - folder_id: string; -} - -export interface WorkflowDisassociateParams { - folder_id: string; -} - -export declare namespace Workflows { - export { - type WorkflowListResponse as WorkflowListResponse, - type WorkflowAssociateResponse as WorkflowAssociateResponse, - type WorkflowDisassociateResponse as WorkflowDisassociateResponse, - type WorkflowAssociateParams as WorkflowAssociateParams, - type WorkflowDisassociateParams as WorkflowDisassociateParams, - }; -} diff --git a/src/resources/graph/graph.ts b/src/resources/graph/graph.ts index 8e35269..1ed46d4 100644 --- a/src/resources/graph/graph.ts +++ b/src/resources/graph/graph.ts @@ -117,7 +117,7 @@ export class GraphResource extends APIResource { * const graph = await client.graph.delete('name'); * ``` */ - delete(name: string, options?: RequestOptions): APIPromise { + delete(name: string, options?: RequestOptions): APIPromise { return this._client.delete(path`/graph/${name}`, options); } @@ -148,7 +148,7 @@ export class GraphResource extends APIResource { name: string, query: GraphStatusParams | null | undefined = {}, options?: RequestOptions, - ): APIPromise { + ): APIPromise { return this._client.get(path`/graph/${name}/status`, { query, ...options }); } @@ -173,7 +173,7 @@ export class GraphResource extends APIResource { name: string, query: GraphVisualizationParams | null | undefined = {}, options?: RequestOptions, - ): APIPromise { + ): APIPromise { return this._client.get(path`/graph/${name}/visualization`, { query, ...options }); } } @@ -243,7 +243,7 @@ export namespace EntityExtractionPromptOverride { /** * Optional properties of the entity (e.g., {'role': 'CEO', 'age': 42}) */ - properties?: { [key: string]: unknown } | null; + properties?: unknown | null; } } @@ -335,15 +335,15 @@ export interface Graph { entities?: Array; - filters?: { [key: string]: unknown } | null; + filters?: unknown | null; folder_name?: string | null; - metadata?: { [key: string]: unknown }; + metadata?: unknown; relationships?: Array; - system_metadata?: { [key: string]: unknown }; + system_metadata?: unknown; updated_at?: string; } @@ -363,7 +363,7 @@ export namespace Graph { document_ids?: Array; - properties?: { [key: string]: unknown }; + properties?: unknown; } /** @@ -461,11 +461,11 @@ export interface GraphPromptOverrides { export type GraphListResponse = Array; -export type GraphDeleteResponse = { [key: string]: unknown }; +export type GraphDeleteResponse = unknown; -export type GraphStatusResponse = { [key: string]: unknown }; +export type GraphStatusResponse = unknown; -export type GraphVisualizationResponse = { [key: string]: unknown }; +export type GraphVisualizationResponse = unknown; export interface GraphCreateParams { /** @@ -486,7 +486,7 @@ export interface GraphCreateParams { /** * Optional metadata filters to determine which documents to include */ - filters?: { [key: string]: unknown } | null; + filters?: unknown | null; /** * Optional folder scope for the operation. Accepts a single folder name or a list @@ -521,7 +521,7 @@ export interface GraphUpdateParams { /** * Optional additional metadata filters to determine which new documents to include */ - additional_filters?: { [key: string]: unknown } | null; + additional_filters?: unknown | null; /** * Optional end-user scope for the operation diff --git a/src/resources/graph/workflow.ts b/src/resources/graph/workflow.ts index ed42ef7..235ce20 100644 --- a/src/resources/graph/workflow.ts +++ b/src/resources/graph/workflow.ts @@ -29,12 +29,12 @@ export class Workflow extends APIResource { workflowID: string, query: WorkflowStatusParams | null | undefined = {}, options?: RequestOptions, - ): APIPromise { + ): APIPromise { return this._client.get(path`/graph/workflow/${workflowID}/status`, { query, ...options }); } } -export type WorkflowStatusResponse = { [key: string]: unknown }; +export type WorkflowStatusResponse = unknown; export interface WorkflowStatusParams { run_id?: string | null; diff --git a/src/resources/index.ts b/src/resources/index.ts index 1270a54..1b18623 100644 --- a/src/resources/index.ts +++ b/src/resources/index.ts @@ -47,9 +47,13 @@ export { type DocumentDownloadFileResponse, type DocumentGetDownloadURLResponse, type DocumentGetStatusResponse, + type DocumentListDocsResponse, + type DocumentPagesResponse, type DocumentListParams, type DocumentGetByFilenameParams, type DocumentGetDownloadURLParams, + type DocumentListDocsParams, + type DocumentPagesParams, type DocumentUpdateFileParams, type DocumentUpdateMetadataParams, type DocumentUpdateTextParams, @@ -60,10 +64,10 @@ export { type Folder, type FolderListResponse, type FolderDeleteResponse, + type FolderDetailsResponse, type FolderListSummariesResponse, - type FolderSetRuleResponse, type FolderCreateParams, - type FolderSetRuleParams, + type FolderDetailsParams, } from './folders/folders'; export { GraphResource, @@ -87,9 +91,13 @@ export { type Document, type TextRequest, type IngestBatchIngestFilesResponse, + type IngestDocumentQueryResponse, + type IngestRequeueResponse, type IngestBatchIngestFilesParams, + type IngestDocumentQueryParams, type IngestIngestFileParams, type IngestIngestTextParams, + type IngestRequeueParams, } from './ingest'; export { Local, type LocalGenerateUriResponse, type LocalGenerateUriParams } from './local'; export { Logs, type LogListResponse, type LogListParams } from './logs'; @@ -110,26 +118,17 @@ export { type ModelListCustomResponse, type ModelCreateParams, } from './models'; -export { Ping, type PingCheckResponse } from './ping'; +export { Ping, type PingCheckResponse, type PingStatusResponse } from './ping'; export { Query, type QueryGenerateCompletionParams } from './query'; export { Retrieve, type RetrieveCreateDocsResponse, type RetrieveCreateDocsParams, } from './retrieve/retrieve'; +export { Search, type SearchDocumentsResponse, type SearchDocumentsParams } from './search'; export { Usage, type UsageListRecentResponse, type UsageRetrieveStatsResponse, type UsageListRecentParams, } from './usage'; -export { - Workflows, - type Workflow, - type WorkflowRun, - type WorkflowListResponse, - type WorkflowDeleteResponse, - type WorkflowCreateParams, - type WorkflowUpdateParams, - type WorkflowRunParams, -} from './workflows/workflows'; diff --git a/src/resources/ingest.ts b/src/resources/ingest.ts index f9a1c32..4a43a36 100644 --- a/src/resources/ingest.ts +++ b/src/resources/ingest.ts @@ -15,10 +15,9 @@ export class Ingest extends APIResource { * background worker pool. * * Args: files: List of files to upload. metadata: Either a single JSON-string dict - * or list of dicts matching the number of files. rules: Either a single rules list - * or list-of-lists per file. use_colpali: Enable multi-vector embeddings. - * folder_name: Optional folder scoping for **all** files. end_user_id: Optional - * end-user scoping for **all** files. auth: Caller context with _write_ + * or list of dicts matching the number of files. use_colpali: Enable multi-vector + * embeddings. folder_name: Optional folder scoping for **all** files. end_user_id: + * Optional end-user scoping for **all** files. auth: Caller context with _write_ * permission. redis: arq redis connection to enqueue jobs. * * Returns: BatchIngestResponse summarising created documents & errors. @@ -33,6 +32,29 @@ export class Ingest extends APIResource { ); } + /** + * Run an on-demand Gemini document query with optional structured output and + * ingestion. + * + * Args: file: Uploaded source document (PDF or another supported MIME type). + * prompt: Natural-language instruction to execute against the document. schema: + * Optional JSON schema enforcing structured Gemini output. ingestion_options: JSON + * object controlling ingestion follow-up (keys: ingest, use_colpali, folder_name, + * end_user_id, metadata). + * + * Returns: DocumentQueryResponse containing Gemini outputs, original metadata, and + * ingestion status details. + */ + documentQuery( + body: IngestDocumentQueryParams, + options?: RequestOptions, + ): APIPromise { + return this._client.post( + '/ingest/document/query', + multipartFormRequestOptions({ body, ...options }, this._client), + ); + } + /** * Ingest a **file** asynchronously. * @@ -41,11 +63,10 @@ export class Ingest extends APIResource { * chunking work. * * Args: file: Uploaded file from multipart/form-data. metadata: JSON-string - * representing user metadata. rules: JSON-string with extraction / NL rules list. - * auth: Caller context – must include _write_ permission. use_colpali: Switch to - * multi-vector embeddings. folder_name: Optionally scope doc to a folder. - * end_user_id: Optionally scope doc to an end-user. redis: arq redis connection – - * used to enqueue the job. + * representing user metadata. auth: Caller context – must include _write_ + * permission. use_colpali: Switch to multi-vector embeddings. folder_name: + * Optionally scope doc to a folder. end_user_id: Optionally scope doc to an + * end-user. redis: arq redis connection – used to enqueue the job. * * Returns: Document stub with `status='processing'`. */ @@ -58,15 +79,21 @@ export class Ingest extends APIResource { * * Args: request: IngestTextRequest payload containing: • content – raw text to * ingest. • filename – optional filename to help detect MIME-type. • metadata – - * optional JSON metadata dict. • rules – optional list of extraction / NL rules. • - * folder_name – optional folder scope. • end_user_id – optional end-user scope. - * auth: Decoded JWT context (injected). + * optional JSON metadata dict. • folder_name – optional folder scope. • + * end_user_id – optional end-user scope. auth: Decoded JWT context (injected). * * Returns: Document metadata row representing the newly-ingested text. */ ingestText(body: IngestIngestTextParams, options?: RequestOptions): APIPromise { return this._client.post('/ingest/text', { body, ...options }); } + + /** + * Requeue ingestion jobs for documents stuck in processing or marked as failed. + */ + requeue(body: IngestRequeueParams, options?: RequestOptions): APIPromise { + return this._client.post('/ingest/requeue', { body, ...options }); + } } /** @@ -75,7 +102,7 @@ export class Ingest extends APIResource { export interface Document { content_type: string; - additional_metadata?: { [key: string]: unknown }; + additional_metadata?: unknown; app_id?: string | null; @@ -89,13 +116,13 @@ export interface Document { folder_name?: string | null; - metadata?: { [key: string]: unknown }; + metadata?: unknown; storage_files?: Array; - storage_info?: { [key: string]: unknown }; + storage_info?: unknown; - system_metadata?: { [key: string]: unknown }; + system_metadata?: unknown; } export namespace Document { @@ -135,11 +162,11 @@ export interface TextRequest { */ folder_name?: string | null; - metadata?: { [key: string]: unknown }; - - rules?: Array<{ [key: string]: unknown }>; + metadata?: unknown; use_colpali?: boolean | null; + + [k: string]: unknown; } /** @@ -151,6 +178,83 @@ export interface IngestBatchIngestFilesResponse { errors: Array<{ [key: string]: string }>; } +/** + * Response model for document query with optional ingestion follow-up. + */ +export interface IngestDocumentQueryResponse { + /** + * Metadata that would be used if ingestion is performed + */ + combined_metadata?: unknown; + + /** + * Structured output coerced to metadata when possible + */ + extracted_metadata?: unknown | null; + + /** + * Represents a document stored in the database documents collection + */ + ingestion_document?: Document | null; + + /** + * True when the document was queued for ingestion after extraction + */ + ingestion_enqueued?: boolean; + + /** + * Normalized ingestion options applied to this request + */ + ingestion_options?: unknown; + + /** + * Original metadata supplied alongside the request + */ + input_metadata?: unknown; + + /** + * Raw structured output returned from Gemini (may be list/dict) + */ + structured_output?: unknown; + + /** + * Raw text returned from Gemini when no schema is provided + */ + text_output?: string | null; +} + +/** + * Response payload for requeueing ingestion jobs. + */ +export interface IngestRequeueResponse { + /** + * Per-document outcomes + */ + results: Array; +} + +export namespace IngestRequeueResponse { + /** + * Result information for an individual requeued ingestion job. + */ + export interface Result { + /** + * Document external identifier + */ + external_id: string; + + /** + * Outcome status for this job + */ + status: string; + + /** + * Optional human-readable message describing the outcome + */ + message?: string | null; + } +} + export interface IngestBatchIngestFilesParams { files: Array; @@ -160,11 +264,19 @@ export interface IngestBatchIngestFilesParams { metadata?: string; - rules?: string; - use_colpali?: boolean | null; } +export interface IngestDocumentQueryParams { + file: Uploadable; + + prompt: string; + + ingestion_options?: string; + + schema?: string | null; +} + export interface IngestIngestFileParams { file: Uploadable; @@ -174,8 +286,6 @@ export interface IngestIngestFileParams { metadata?: string; - rules?: string; - use_colpali?: boolean | null; } @@ -194,11 +304,53 @@ export interface IngestIngestTextParams { */ folder_name?: string | null; - metadata?: { [key: string]: unknown }; - - rules?: Array<{ [key: string]: unknown }>; + metadata?: unknown; use_colpali?: boolean | null; + + [k: string]: unknown; +} + +export interface IngestRequeueParams { + /** + * When true, requeue every accessible document whose status matches `statuses` + * (defaults to processing/failed). + */ + include_all?: boolean; + + /** + * Collection of jobs to requeue, each with optional ColPali override. + */ + jobs?: Array; + + /** + * Maximum number of documents to auto-select from the provided statuses when + * include_all is true. + */ + limit?: number | null; + + /** + * Processing statuses to include when `include_all` is true. Defaults to + * ['processing', 'failed']. + */ + statuses?: Array | null; +} + +export namespace IngestRequeueParams { + /** + * Job descriptor for requeuing an ingestion task. + */ + export interface Job { + /** + * External identifier of the document to requeue + */ + external_id: string; + + /** + * Override ColPali processing flag. When omitted the server attempts to infer it. + */ + use_colpali?: boolean | null; + } } export declare namespace Ingest { @@ -206,8 +358,12 @@ export declare namespace Ingest { type Document as Document, type TextRequest as TextRequest, type IngestBatchIngestFilesResponse as IngestBatchIngestFilesResponse, + type IngestDocumentQueryResponse as IngestDocumentQueryResponse, + type IngestRequeueResponse as IngestRequeueResponse, type IngestBatchIngestFilesParams as IngestBatchIngestFilesParams, + type IngestDocumentQueryParams as IngestDocumentQueryParams, type IngestIngestFileParams as IngestIngestFileParams, type IngestIngestTextParams as IngestIngestTextParams, + type IngestRequeueParams as IngestRequeueParams, }; } diff --git a/src/resources/local.ts b/src/resources/local.ts index 2aa7932..7484464 100644 --- a/src/resources/local.ts +++ b/src/resources/local.ts @@ -10,15 +10,14 @@ export class Local extends APIResource { * Generate a development URI for running Morphik locally. * * Args: name: Developer name to embed in the token payload. expiry_days: Number of - * days the generated token should remain valid. + * days the generated token should remain valid. password_token: Authentication + * token that must match LOCAL_URI_TOKEN from .env. server_mode: If True, return + * server IP instead of localhost. * * Returns: A dictionary containing the `uri` that can be used to connect to the * local instance. */ - generateUri( - body: LocalGenerateUriParams | null | undefined = {}, - options?: RequestOptions, - ): APIPromise { + generateUri(body: LocalGenerateUriParams, options?: RequestOptions): APIPromise { return this._client.post('/local/generate_uri', { body, ...options, @@ -30,9 +29,13 @@ export class Local extends APIResource { export type LocalGenerateUriResponse = { [key: string]: string }; export interface LocalGenerateUriParams { + password_token: string; + expiry_days?: number; name?: string; + + server_mode?: boolean; } export declare namespace Local { diff --git a/src/resources/logs.ts b/src/resources/logs.ts index 68933d2..d117e68 100644 --- a/src/resources/logs.ts +++ b/src/resources/logs.ts @@ -36,7 +36,7 @@ export namespace LogListResponse { error?: string | null; - metadata?: { [key: string]: unknown } | null; + metadata?: unknown | null; } } diff --git a/src/resources/model-config/custom-models.ts b/src/resources/model-config/custom-models.ts index 881d8c3..bb5dbd7 100644 --- a/src/resources/model-config/custom-models.ts +++ b/src/resources/model-config/custom-models.ts @@ -26,7 +26,7 @@ export class CustomModels extends APIResource { export interface CustomModel { id: string; - config: { [key: string]: unknown }; + config: unknown; model_name: string; @@ -38,7 +38,7 @@ export interface CustomModel { export type CustomModelListResponse = Array; export interface CustomModelCreateParams { - config: { [key: string]: unknown }; + config: unknown; model_name: string; diff --git a/src/resources/model-config/model-config.ts b/src/resources/model-config/model-config.ts index d8dd035..7154af2 100644 --- a/src/resources/model-config/model-config.ts +++ b/src/resources/model-config/model-config.ts @@ -56,7 +56,7 @@ export class ModelConfig extends APIResource { export interface ModelConfigResponse { id: string; - config_data: { [key: string]: unknown }; + config_data: unknown; created_at: string; @@ -70,13 +70,13 @@ export type ModelConfigListResponse = Array; export type ModelConfigDeleteResponse = { [key: string]: string }; export interface ModelConfigCreateParams { - config_data: { [key: string]: unknown }; + config_data: unknown; provider: string; } export interface ModelConfigUpdateParams { - config_data: { [key: string]: unknown }; + config_data: unknown; } ModelConfig.CustomModels = CustomModels; diff --git a/src/resources/models.ts b/src/resources/models.ts index 3276cad..d36406a 100644 --- a/src/resources/models.ts +++ b/src/resources/models.ts @@ -57,7 +57,7 @@ export class Models extends APIResource { export interface ModelResponse { id: string; - config: { [key: string]: unknown }; + config: unknown; created_at: string; @@ -72,11 +72,11 @@ export interface ModelResponse { * Response for available models endpoint */ export interface ModelListResponse { - chat_models: Array<{ [key: string]: unknown }>; + chat_models: Array; default_models: { [key: string]: string | null }; - embedding_models: Array<{ [key: string]: unknown }>; + embedding_models: Array; providers: Array; } @@ -88,7 +88,7 @@ export type ModelListAvailableResponse = unknown; export type ModelListCustomResponse = Array; export interface ModelCreateParams { - config: { [key: string]: unknown }; + config: unknown; name: string; diff --git a/src/resources/ping.ts b/src/resources/ping.ts index 3b33eae..b24110f 100644 --- a/src/resources/ping.ts +++ b/src/resources/ping.ts @@ -11,6 +11,23 @@ export class Ping extends APIResource { check(options?: RequestOptions): APIPromise { return this._client.get('/ping', options); } + + /** + * Comprehensive health check endpoint that queries all underlying services. + * + * Checks the following services: + * + * - PostgreSQL database + * - Redis + * - PGVector store + * - Storage service (Local/S3) + * - ColPali vector store (if enabled) + * + * Returns: DetailedHealthCheckResponse with status of each service + */ + status(options?: RequestOptions): APIPromise { + return this._client.get('/health', options); + } } /** @@ -22,6 +39,32 @@ export interface PingCheckResponse { status: string; } +/** + * Response for detailed health check endpoint + */ +export interface PingStatusResponse { + services: Array; + + status: string; + + timestamp: string; +} + +export namespace PingStatusResponse { + /** + * Status of an individual service + */ + export interface Service { + name: string; + + status: string; + + message?: string | null; + + response_time_ms?: number | null; + } +} + export declare namespace Ping { - export { type PingCheckResponse as PingCheckResponse }; + export { type PingCheckResponse as PingCheckResponse, type PingStatusResponse as PingStatusResponse }; } diff --git a/src/resources/query.ts b/src/resources/query.ts index 7802225..a595ebf 100644 --- a/src/resources/query.ts +++ b/src/resources/query.ts @@ -50,7 +50,7 @@ export interface QueryGenerateCompletionParams { */ end_user_id?: string | null; - filters?: { [key: string]: unknown } | null; + filters?: unknown | null; /** * Optional folder scope for the operation. Accepts a single folder name or a list @@ -73,12 +73,18 @@ export interface QueryGenerateCompletionParams { */ include_paths?: boolean | null; + /** + * Whether to include inline citations with filename and page number in the + * response + */ + inline_citations?: boolean | null; + k?: number; /** * LiteLLM-compatible model configuration (e.g., model name, API key, base URL) */ - llm_config?: { [key: string]: unknown } | null; + llm_config?: unknown | null; max_tokens?: number | null; @@ -114,7 +120,7 @@ export interface QueryGenerateCompletionParams { /** * Schema for structured output, can be a Pydantic model or JSON schema dict */ - schema?: unknown | { [key: string]: unknown } | null; + schema?: unknown | unknown | null; /** * Whether to stream the response back in chunks @@ -278,6 +284,12 @@ export namespace QueryGenerateCompletionParams { * format, and tone. */ prompt_template?: string | null; + + /** + * Custom system prompt that replaces Morphik's default query agent instructions. + * Use this to fully control the assistant's behavior when generating responses. + */ + system_prompt?: string | null; } } } diff --git a/src/resources/retrieve/chunks.ts b/src/resources/retrieve/chunks.ts index c838267..ddfe5ec 100644 --- a/src/resources/retrieve/chunks.ts +++ b/src/resources/retrieve/chunks.ts @@ -9,6 +9,22 @@ export class Chunks extends APIResource { /** * Retrieve relevant chunks. * + * The optional `request.filters` payload accepts equality checks (automatically + * matching scalars inside JSON arrays) plus the operators `$and`, `$or`, `$nor`, + * `$not`, `$in`, `$nin`, `$exists`, `$regex`, and `$contains`. Regex filters allow + * the optional `i` flag for case-insensitive matching, while `$contains` performs + * substring checks (case-insensitive by default, configurable via + * `case_sensitive`). Filters can be nested freely, for example: + * + * ```json + * { + * "$and": [ + * { "category": "policy" }, + * { "$or": [{ "region": "emea" }, { "priority": { "$in": ["p0", "p1"] } }] } + * ] + * } + * ``` + * * Args: request: RetrieveRequest containing: - query: Search query text - filters: * Optional metadata filters - k: Number of results (default: 4) - min_score: * Minimum similarity threshold (default: 0.0) - use_reranking: Whether to use @@ -25,11 +41,15 @@ export class Chunks extends APIResource { /** * Retrieve relevant chunks with grouped response format. * + * Uses the same filter operators as `/retrieve/chunks` (equality, nested logic + * operators, `$regex`, `$contains`, etc.), with arbitrary nesting supported inside + * `request.filters`. + * * Returns both flat results (for backward compatibility) and grouped results (for * UI). When padding > 0, groups chunks by main matches and their padding chunks. * - * Args: request: RetrieveRequest containing query, filters, padding, etc. auth: - * Authentication context + * Args: request: RetrieveRequest containing query parameters, metadata filters, + * and padding instructions auth: Authentication context * * Returns: GroupedChunkResponse: Contains both flat chunks and grouped chunks */ @@ -53,7 +73,7 @@ export interface ChunkResult { document_id: string; - metadata: { [key: string]: unknown }; + metadata: unknown; score: number; @@ -78,7 +98,7 @@ export interface RetrieveRequest { */ end_user_id?: string | null; - filters?: { [key: string]: unknown } | null; + filters?: unknown | null; /** * Optional folder scope for the operation. Accepts a single folder name or a list @@ -170,7 +190,7 @@ export interface ChunkCreateParams { */ end_user_id?: string | null; - filters?: { [key: string]: unknown } | null; + filters?: unknown | null; /** * Optional folder scope for the operation. Accepts a single folder name or a list @@ -216,7 +236,7 @@ export interface ChunkCreateGroupedParams { */ end_user_id?: string | null; - filters?: { [key: string]: unknown } | null; + filters?: unknown | null; /** * Optional folder scope for the operation. Accepts a single folder name or a list diff --git a/src/resources/retrieve/retrieve.ts b/src/resources/retrieve/retrieve.ts index 5e960bb..61458c2 100644 --- a/src/resources/retrieve/retrieve.ts +++ b/src/resources/retrieve/retrieve.ts @@ -20,6 +20,11 @@ export class Retrieve extends APIResource { /** * Retrieve relevant documents. * + * `request.filters` supports equality checks (including scalar-to-array matches) + * plus `$and`, `$or`, `$nor`, `$not`, `$in`, `$nin`, `$exists`, `$regex`, and + * `$contains`, with arbitrary nesting. Use the same JSON structure as in + * `/retrieve/chunks` when expressing complex logic. + * * Args: request: RetrieveRequest containing: - query: Search query text - filters: * Optional metadata filters - k: Number of results (default: 4) - min_score: * Minimum similarity threshold (default: 0.0) - use_reranking: Whether to use @@ -44,7 +49,7 @@ export namespace RetrieveCreateDocsResponse { * Query result at document level */ export interface RetrieveCreateDocsResponseItem { - additional_metadata: { [key: string]: unknown }; + additional_metadata: unknown; /** * Represents either a URL or content string @@ -53,7 +58,7 @@ export namespace RetrieveCreateDocsResponse { document_id: string; - metadata: { [key: string]: unknown }; + metadata: unknown; score: number; } @@ -83,7 +88,7 @@ export interface RetrieveCreateDocsParams { */ end_user_id?: string | null; - filters?: { [key: string]: unknown } | null; + filters?: unknown | null; /** * Optional folder scope for the operation. Accepts a single folder name or a list diff --git a/src/resources/search.ts b/src/resources/search.ts new file mode 100644 index 0000000..97ca26a --- /dev/null +++ b/src/resources/search.ts @@ -0,0 +1,63 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +import { APIResource } from '../core/resource'; +import * as IngestAPI from './ingest'; +import { APIPromise } from '../core/api-promise'; +import { RequestOptions } from '../internal/request-options'; + +export class Search extends APIResource { + /** + * Search documents by filename using full-text search. + * + * Args: request: SearchDocumentsRequest containing: - query: Search query for + * document names/filenames - limit: Number of documents to return (1-100) - + * filters: Optional metadata filters for documents - folder_name: Optional folder + * to scope search - end_user_id: Optional end-user ID to scope search auth: + * Authentication context + * + * `request.filters` accepts the same operator set as `/retrieve/chunks`, including + * `$regex` (with optional `i` flag) and `$contains` for substring matches. + * + * Returns: List[Document]: List of matching documents ordered by relevance + */ + documents(body: SearchDocumentsParams, options?: RequestOptions): APIPromise { + return this._client.post('/search/documents', { body, ...options }); + } +} + +export type SearchDocumentsResponse = Array; + +export interface SearchDocumentsParams { + /** + * Search query for document names/filenames + */ + query: string; + + /** + * Optional end-user scope for the search + */ + end_user_id?: string | null; + + /** + * Optional metadata filters for documents + */ + filters?: unknown | null; + + /** + * Optional folder scope for the search. Accepts a single folder name or a list of + * folder names. + */ + folder_name?: string | Array | null; + + /** + * Number of documents to return + */ + limit?: number; +} + +export declare namespace Search { + export { + type SearchDocumentsResponse as SearchDocumentsResponse, + type SearchDocumentsParams as SearchDocumentsParams, + }; +} diff --git a/src/resources/usage.ts b/src/resources/usage.ts index 773d476..91d8bf0 100644 --- a/src/resources/usage.ts +++ b/src/resources/usage.ts @@ -35,7 +35,7 @@ export class Usage extends APIResource { } } -export type UsageListRecentResponse = Array<{ [key: string]: unknown }>; +export type UsageListRecentResponse = Array; export type UsageRetrieveStatsResponse = { [key: string]: number }; diff --git a/src/resources/workflows.ts b/src/resources/workflows.ts deleted file mode 100644 index 880bb80..0000000 --- a/src/resources/workflows.ts +++ /dev/null @@ -1,3 +0,0 @@ -// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -export * from './workflows/index'; diff --git a/src/resources/workflows/index.ts b/src/resources/workflows/index.ts deleted file mode 100644 index 68c0147..0000000 --- a/src/resources/workflows/index.ts +++ /dev/null @@ -1,13 +0,0 @@ -// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -export { Runs, type RunListResponse, type RunDeleteResponse } from './runs'; -export { - Workflows, - type Workflow, - type WorkflowRun, - type WorkflowListResponse, - type WorkflowDeleteResponse, - type WorkflowCreateParams, - type WorkflowUpdateParams, - type WorkflowRunParams, -} from './workflows'; diff --git a/src/resources/workflows/runs.ts b/src/resources/workflows/runs.ts deleted file mode 100644 index c2344a8..0000000 --- a/src/resources/workflows/runs.ts +++ /dev/null @@ -1,38 +0,0 @@ -// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -import { APIResource } from '../../core/resource'; -import * as WorkflowsAPI from './workflows'; -import { APIPromise } from '../../core/api-promise'; -import { RequestOptions } from '../../internal/request-options'; -import { path } from '../../internal/utils/path'; - -export class Runs extends APIResource { - /** - * Get Workflow Run - */ - retrieve(runID: string, options?: RequestOptions): APIPromise { - return this._client.get(path`/workflows/runs/${runID}`, options); - } - - /** - * Get all runs for a specific workflow. - */ - list(workflowID: string, options?: RequestOptions): APIPromise { - return this._client.get(path`/workflows/${workflowID}/runs`, options); - } - - /** - * Delete a workflow run. - */ - delete(runID: string, options?: RequestOptions): APIPromise { - return this._client.delete(path`/workflows/runs/${runID}`, options); - } -} - -export type RunListResponse = Array; - -export type RunDeleteResponse = { [key: string]: string }; - -export declare namespace Runs { - export { type RunListResponse as RunListResponse, type RunDeleteResponse as RunDeleteResponse }; -} diff --git a/src/resources/workflows/workflows.ts b/src/resources/workflows/workflows.ts deleted file mode 100644 index 41ec29d..0000000 --- a/src/resources/workflows/workflows.ts +++ /dev/null @@ -1,227 +0,0 @@ -// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -import { APIResource } from '../../core/resource'; -import * as RunsAPI from './runs'; -import { RunDeleteResponse, RunListResponse, Runs } from './runs'; -import { APIPromise } from '../../core/api-promise'; -import { RequestOptions } from '../../internal/request-options'; -import { path } from '../../internal/utils/path'; - -export class Workflows extends APIResource { - runs: RunsAPI.Runs = new RunsAPI.Runs(this._client); - - /** - * Create a new workflow. - */ - create(body: WorkflowCreateParams, options?: RequestOptions): APIPromise { - return this._client.post('/workflows', { body, ...options }); - } - - /** - * Get Workflow - */ - retrieve(workflowID: string, options?: RequestOptions): APIPromise { - return this._client.get(path`/workflows/${workflowID}`, options); - } - - /** - * Update Workflow - */ - update(workflowID: string, params: WorkflowUpdateParams, options?: RequestOptions): APIPromise { - const { body } = params; - return this._client.put(path`/workflows/${workflowID}`, { body: body, ...options }); - } - - /** - * List workflows visible to the caller. - */ - list(options?: RequestOptions): APIPromise { - return this._client.get('/workflows', options); - } - - /** - * Delete Workflow - */ - delete(workflowID: string, options?: RequestOptions): APIPromise { - return this._client.delete(path`/workflows/${workflowID}`, options); - } - - /** - * Queue a workflow run and return immediately. - * - * The heavy execution is scheduled in a _BackgroundTask_ so the request finishes - * quickly, enabling the UI to update the document row to "processing" without - * waiting for LLM calls. - */ - run(documentID: string, params: WorkflowRunParams, options?: RequestOptions): APIPromise { - const { workflow_id } = params; - return this._client.post(path`/workflows/${workflow_id}/run/${documentID}`, options); - } -} - -/** - * High-level definition of a multi-step document processing workflow. - */ -export interface Workflow { - name: string; - - /** - * Organization / developer ID owning this workflow - */ - owner_id: string; - - /** - * Ordered list of actions to execute - */ - steps: Array; - - id?: string; - - /** - * App ID when created inside an application context - */ - app_id?: string | null; - - description?: string | null; - - system_metadata?: { [key: string]: unknown }; - - /** - * End-user ID when created in a narrowed scope - */ - user_id?: string | null; -} - -export namespace Workflow { - /** - * A single step inside a _Workflow_ configuration. - * - * The concrete implementation is looked-up at runtime via the _action_id_ in the - * Action Registry (see _core.workflows.registry_). - */ - export interface Step { - /** - * Registry identifier of the action to execute - */ - action_id: string; - - /** - * JSON-serialisable parameters for the action - */ - parameters?: { [key: string]: unknown }; - } -} - -/** - * Represents a concrete execution of a _Workflow_ against a document. - */ -export interface WorkflowRun { - document_id: string; - - workflow_id: string; - - id?: string; - - app_id?: string | null; - - completed_at?: string | null; - - error?: string | null; - - final_output?: { [key: string]: unknown } | null; - - results_per_step?: Array<{ [key: string]: unknown }>; - - started_at?: string | null; - - /** - * Allowed status values for _WorkflowRun_ objects. - */ - status?: 'queued' | 'running' | 'completed' | 'failed'; - - system_metadata?: { [key: string]: unknown }; - - user_id?: string | null; -} - -export type WorkflowListResponse = Array; - -export type WorkflowDeleteResponse = { [key: string]: string }; - -export interface WorkflowCreateParams { - name: string; - - /** - * Organization / developer ID owning this workflow - */ - owner_id: string; - - /** - * Ordered list of actions to execute - */ - steps: Array; - - id?: string; - - /** - * App ID when created inside an application context - */ - app_id?: string | null; - - description?: string | null; - - system_metadata?: { [key: string]: unknown }; - - /** - * End-user ID when created in a narrowed scope - */ - user_id?: string | null; -} - -export namespace WorkflowCreateParams { - /** - * A single step inside a _Workflow_ configuration. - * - * The concrete implementation is looked-up at runtime via the _action_id_ in the - * Action Registry (see _core.workflows.registry_). - */ - export interface Step { - /** - * Registry identifier of the action to execute - */ - action_id: string; - - /** - * JSON-serialisable parameters for the action - */ - parameters?: { [key: string]: unknown }; - } -} - -export interface WorkflowUpdateParams { - body: { [key: string]: unknown }; -} - -export interface WorkflowRunParams { - workflow_id: string; -} - -Workflows.Runs = Runs; - -export declare namespace Workflows { - export { - type Workflow as Workflow, - type WorkflowRun as WorkflowRun, - type WorkflowListResponse as WorkflowListResponse, - type WorkflowDeleteResponse as WorkflowDeleteResponse, - type WorkflowCreateParams as WorkflowCreateParams, - type WorkflowUpdateParams as WorkflowUpdateParams, - type WorkflowRunParams as WorkflowRunParams, - }; - - export { - Runs as Runs, - type RunListResponse as RunListResponse, - type RunDeleteResponse as RunDeleteResponse, - }; -} diff --git a/src/version.ts b/src/version.ts index ecebcdd..1baa228 100644 --- a/src/version.ts +++ b/src/version.ts @@ -1 +1 @@ -export const VERSION = '0.0.1'; +export const VERSION = '0.1.0'; // x-release-please-version diff --git a/tests/api-resources/agent.test.ts b/tests/api-resources/agent.test.ts index 34f94c3..43ea36e 100644 --- a/tests/api-resources/agent.test.ts +++ b/tests/api-resources/agent.test.ts @@ -8,7 +8,7 @@ const client = new Morphik({ }); describe('resource agent', () => { - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('executeQuery: only required params', async () => { const responsePromise = client.agent.executeQuery({ query: 'query' }); const rawResponse = await responsePromise.asResponse(); @@ -20,7 +20,7 @@ describe('resource agent', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('executeQuery: required and optional params', async () => { const response = await client.agent.executeQuery({ query: 'query', diff --git a/tests/api-resources/api-keys.test.ts b/tests/api-resources/api-keys.test.ts index 2a8f13f..54d1fed 100644 --- a/tests/api-resources/api-keys.test.ts +++ b/tests/api-resources/api-keys.test.ts @@ -8,7 +8,7 @@ const client = new Morphik({ }); describe('resource apiKeys', () => { - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('create: only required params', async () => { const responsePromise = client.apiKeys.create({ api_key: 'api_key', provider: 'provider' }); const rawResponse = await responsePromise.asResponse(); @@ -20,7 +20,7 @@ describe('resource apiKeys', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('create: required and optional params', async () => { const response = await client.apiKeys.create({ api_key: 'api_key', @@ -29,7 +29,7 @@ describe('resource apiKeys', () => { }); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('list', async () => { const responsePromise = client.apiKeys.list(); const rawResponse = await responsePromise.asResponse(); diff --git a/tests/api-resources/batch.test.ts b/tests/api-resources/batch.test.ts index cccae63..3001e7f 100644 --- a/tests/api-resources/batch.test.ts +++ b/tests/api-resources/batch.test.ts @@ -8,9 +8,9 @@ const client = new Morphik({ }); describe('resource batch', () => { - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('retrieveChunks: only required params', async () => { - const responsePromise = client.batch.retrieveChunks({ body: { foo: 'bar' } }); + const responsePromise = client.batch.retrieveChunks({ body: {} }); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -20,14 +20,14 @@ describe('resource batch', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('retrieveChunks: required and optional params', async () => { - const response = await client.batch.retrieveChunks({ body: { foo: 'bar' } }); + const response = await client.batch.retrieveChunks({ body: {} }); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('retrieveDocuments: only required params', async () => { - const responsePromise = client.batch.retrieveDocuments({ body: { foo: 'bar' } }); + const responsePromise = client.batch.retrieveDocuments({ body: {} }); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -37,8 +37,8 @@ describe('resource batch', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('retrieveDocuments: required and optional params', async () => { - const response = await client.batch.retrieveDocuments({ body: { foo: 'bar' } }); + const response = await client.batch.retrieveDocuments({ body: {} }); }); }); diff --git a/tests/api-resources/cache.test.ts b/tests/api-resources/cache.test.ts index 9d81bd0..7c4dc53 100644 --- a/tests/api-resources/cache.test.ts +++ b/tests/api-resources/cache.test.ts @@ -8,7 +8,7 @@ const client = new Morphik({ }); describe('resource cache', () => { - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('create: only required params', async () => { const responsePromise = client.cache.create({ gguf_file: 'gguf_file', model: 'model', name: 'name' }); const rawResponse = await responsePromise.asResponse(); @@ -20,18 +20,18 @@ describe('resource cache', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('create: required and optional params', async () => { const response = await client.cache.create({ gguf_file: 'gguf_file', model: 'model', name: 'name', docs: ['string'], - filters: { foo: 'bar' }, + filters: {}, }); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('retrieve', async () => { const responsePromise = client.cache.retrieve('name'); const rawResponse = await responsePromise.asResponse(); @@ -43,7 +43,7 @@ describe('resource cache', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('update', async () => { const responsePromise = client.cache.update('name'); const rawResponse = await responsePromise.asResponse(); @@ -55,7 +55,7 @@ describe('resource cache', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('addDocs: only required params', async () => { const responsePromise = client.cache.addDocs('name', { body: ['string'] }); const rawResponse = await responsePromise.asResponse(); @@ -67,12 +67,12 @@ describe('resource cache', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('addDocs: required and optional params', async () => { const response = await client.cache.addDocs('name', { body: ['string'] }); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('query: only required params', async () => { const responsePromise = client.cache.query('name', { query: 'query' }); const rawResponse = await responsePromise.asResponse(); @@ -84,7 +84,7 @@ describe('resource cache', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('query: required and optional params', async () => { const response = await client.cache.query('name', { query: 'query', max_tokens: 0, temperature: 0 }); }); diff --git a/tests/api-resources/chat.test.ts b/tests/api-resources/chat.test.ts index 7bd0449..a47f512 100644 --- a/tests/api-resources/chat.test.ts +++ b/tests/api-resources/chat.test.ts @@ -8,7 +8,7 @@ const client = new Morphik({ }); describe('resource chat', () => { - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('list', async () => { const responsePromise = client.chat.list(); const rawResponse = await responsePromise.asResponse(); @@ -20,7 +20,7 @@ describe('resource chat', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('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.chat.list({ limit: 1 }, { path: '/_stainless_unknown_path' })).rejects.toThrow( @@ -28,7 +28,7 @@ describe('resource chat', () => { ); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('retrieveHistory', async () => { const responsePromise = client.chat.retrieveHistory('chat_id'); const rawResponse = await responsePromise.asResponse(); @@ -40,7 +40,7 @@ describe('resource chat', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('updateTitle: only required params', async () => { const responsePromise = client.chat.updateTitle('chat_id', { title: 'title' }); const rawResponse = await responsePromise.asResponse(); @@ -52,7 +52,7 @@ describe('resource chat', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('updateTitle: required and optional params', async () => { const response = await client.chat.updateTitle('chat_id', { title: 'title' }); }); diff --git a/tests/api-resources/cloud.test.ts b/tests/api-resources/cloud.test.ts index 186ffed..29c0a37 100644 --- a/tests/api-resources/cloud.test.ts +++ b/tests/api-resources/cloud.test.ts @@ -8,7 +8,7 @@ const client = new Morphik({ }); describe('resource cloud', () => { - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('deleteApp: only required params', async () => { const responsePromise = client.cloud.deleteApp({ app_name: 'app_name' }); const rawResponse = await responsePromise.asResponse(); @@ -20,12 +20,12 @@ describe('resource cloud', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('deleteApp: required and optional params', async () => { const response = await client.cloud.deleteApp({ app_name: 'app_name' }); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('generateUri: only required params', async () => { const responsePromise = client.cloud.generateUri({ app_id: 'app_id', name: 'name', user_id: 'user_id' }); const rawResponse = await responsePromise.asResponse(); @@ -37,7 +37,7 @@ describe('resource cloud', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('generateUri: required and optional params', async () => { const response = await client.cloud.generateUri({ app_id: 'app_id', diff --git a/tests/api-resources/documents/chat.test.ts b/tests/api-resources/documents/chat.test.ts index eba39f5..209d302 100644 --- a/tests/api-resources/documents/chat.test.ts +++ b/tests/api-resources/documents/chat.test.ts @@ -8,7 +8,7 @@ const client = new Morphik({ }); describe('resource chat', () => { - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('complete: only required params', async () => { const responsePromise = client.documents.chat.complete('chat_id', { message: 'message' }); const rawResponse = await responsePromise.asResponse(); @@ -20,7 +20,7 @@ describe('resource chat', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('complete: required and optional params', async () => { const response = await client.documents.chat.complete('chat_id', { message: 'message', @@ -29,7 +29,7 @@ describe('resource chat', () => { }); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('retrieveHistory', async () => { const responsePromise = client.documents.chat.retrieveHistory('chat_id'); const rawResponse = await responsePromise.asResponse(); diff --git a/tests/api-resources/documents/documents.test.ts b/tests/api-resources/documents/documents.test.ts index b68e351..0a9c6d0 100644 --- a/tests/api-resources/documents/documents.test.ts +++ b/tests/api-resources/documents/documents.test.ts @@ -8,7 +8,7 @@ const client = new Morphik({ }); describe('resource documents', () => { - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('retrieve', async () => { const responsePromise = client.documents.retrieve('document_id'); const rawResponse = await responsePromise.asResponse(); @@ -20,7 +20,7 @@ describe('resource documents', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('list', async () => { const responsePromise = client.documents.list({}); const rawResponse = await responsePromise.asResponse(); @@ -32,7 +32,7 @@ describe('resource documents', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('delete', async () => { const responsePromise = client.documents.delete('document_id'); const rawResponse = await responsePromise.asResponse(); @@ -44,7 +44,7 @@ describe('resource documents', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('downloadFile', async () => { const responsePromise = client.documents.downloadFile('document_id'); const rawResponse = await responsePromise.asResponse(); @@ -56,7 +56,7 @@ describe('resource documents', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('getByFilename', async () => { const responsePromise = client.documents.getByFilename('filename'); const rawResponse = await responsePromise.asResponse(); @@ -68,7 +68,7 @@ describe('resource documents', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('getByFilename: 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( @@ -80,7 +80,7 @@ describe('resource documents', () => { ).rejects.toThrow(Morphik.NotFoundError); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('getDownloadURL', async () => { const responsePromise = client.documents.getDownloadURL('document_id'); const rawResponse = await responsePromise.asResponse(); @@ -92,7 +92,7 @@ describe('resource documents', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('getDownloadURL: 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( @@ -100,7 +100,7 @@ describe('resource documents', () => { ).rejects.toThrow(Morphik.NotFoundError); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('getStatus', async () => { const responsePromise = client.documents.getStatus('document_id'); const rawResponse = await responsePromise.asResponse(); @@ -112,7 +112,40 @@ describe('resource documents', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled + test.skip('listDocs', async () => { + const responsePromise = client.documents.listDocs({}); + const rawResponse = await responsePromise.asResponse(); + expect(rawResponse).toBeInstanceOf(Response); + const response = await responsePromise; + expect(response).not.toBeInstanceOf(Response); + const dataAndResponse = await responsePromise.withResponse(); + expect(dataAndResponse.data).toBe(response); + expect(dataAndResponse.response).toBe(rawResponse); + }); + + // Prism tests are disabled + test.skip('pages: only required params', async () => { + const responsePromise = client.documents.pages({ + document_id: 'document_id', + end_page: 1, + start_page: 1, + }); + const rawResponse = await responsePromise.asResponse(); + expect(rawResponse).toBeInstanceOf(Response); + const response = await responsePromise; + expect(response).not.toBeInstanceOf(Response); + const dataAndResponse = await responsePromise.withResponse(); + expect(dataAndResponse.data).toBe(response); + expect(dataAndResponse.response).toBe(rawResponse); + }); + + // Prism tests are disabled + test.skip('pages: required and optional params', async () => { + const response = await client.documents.pages({ document_id: 'document_id', end_page: 1, start_page: 1 }); + }); + + // Prism tests are disabled test.skip('updateFile: only required params', async () => { const responsePromise = client.documents.updateFile('document_id', { file: await toFile(Buffer.from('# my file contents'), 'README.md'), @@ -126,20 +159,19 @@ describe('resource documents', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('updateFile: required and optional params', async () => { const response = await client.documents.updateFile('document_id', { file: await toFile(Buffer.from('# my file contents'), 'README.md'), metadata: 'metadata', - rules: 'rules', update_strategy: 'update_strategy', use_colpali: true, }); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('updateMetadata: only required params', async () => { - const responsePromise = client.documents.updateMetadata('document_id', { body: { foo: 'bar' } }); + const responsePromise = client.documents.updateMetadata('document_id', { body: {} }); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -149,12 +181,12 @@ describe('resource documents', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('updateMetadata: required and optional params', async () => { - const response = await client.documents.updateMetadata('document_id', { body: { foo: 'bar' } }); + const response = await client.documents.updateMetadata('document_id', { body: {} }); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('updateText: only required params', async () => { const responsePromise = client.documents.updateText('document_id', { content: 'content' }); const rawResponse = await responsePromise.asResponse(); @@ -166,7 +198,7 @@ describe('resource documents', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('updateText: required and optional params', async () => { const response = await client.documents.updateText('document_id', { content: 'content', @@ -174,8 +206,7 @@ describe('resource documents', () => { end_user_id: 'end_user_id', filename: 'filename', folder_name: 'folder_name', - metadata: { foo: 'bar' }, - rules: [{ foo: 'bar' }], + metadata: {}, use_colpali: true, }); }); diff --git a/tests/api-resources/ee/apps.test.ts b/tests/api-resources/ee/apps.test.ts index 99d04ba..b3eaf47 100644 --- a/tests/api-resources/ee/apps.test.ts +++ b/tests/api-resources/ee/apps.test.ts @@ -8,7 +8,7 @@ const client = new Morphik({ }); describe('resource apps', () => { - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('create: only required params', async () => { const responsePromise = client.ee.apps.create({ app_name: 'app_name' }); const rawResponse = await responsePromise.asResponse(); @@ -20,12 +20,12 @@ describe('resource apps', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('create: required and optional params', async () => { const response = await client.ee.apps.create({ app_name: 'app_name', region: 'region' }); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('delete: only required params', async () => { const responsePromise = client.ee.apps.delete({ app_name: 'app_name' }); const rawResponse = await responsePromise.asResponse(); @@ -37,7 +37,7 @@ describe('resource apps', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('delete: required and optional params', async () => { const response = await client.ee.apps.delete({ app_name: 'app_name' }); }); diff --git a/tests/api-resources/ee/connectors/auth.test.ts b/tests/api-resources/ee/connectors/auth.test.ts index 7421be2..74ddc29 100644 --- a/tests/api-resources/ee/connectors/auth.test.ts +++ b/tests/api-resources/ee/connectors/auth.test.ts @@ -8,10 +8,10 @@ const client = new Morphik({ }); describe('resource auth', () => { - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('finalizeManualAuth: only required params', async () => { const responsePromise = client.ee.connectors.auth.finalizeManualAuth('connector_type', { - credentials: { foo: 'bar' }, + credentials: {}, }); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); @@ -22,14 +22,14 @@ describe('resource auth', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('finalizeManualAuth: required and optional params', async () => { const response = await client.ee.connectors.auth.finalizeManualAuth('connector_type', { - credentials: { foo: 'bar' }, + credentials: {}, }); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('getInitiateAuthURL', async () => { const responsePromise = client.ee.connectors.auth.getInitiateAuthURL('connector_type'); const rawResponse = await responsePromise.asResponse(); @@ -41,7 +41,7 @@ describe('resource auth', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('getInitiateAuthURL: 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( diff --git a/tests/api-resources/ee/connectors/connectors.test.ts b/tests/api-resources/ee/connectors/connectors.test.ts index e167e2e..916a1f9 100644 --- a/tests/api-resources/ee/connectors/connectors.test.ts +++ b/tests/api-resources/ee/connectors/connectors.test.ts @@ -8,9 +8,9 @@ const client = new Morphik({ }); describe('resource connectors', () => { - // skipped: tests are disabled for the time being - test.skip('disconnect', async () => { - const responsePromise = client.ee.connectors.disconnect('connector_type'); + // Prism tests are disabled + test.skip('disconnect: only required params', async () => { + const responsePromise = client.ee.connectors.disconnect({ connector_type: 'connector_type' }); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -20,7 +20,35 @@ describe('resource connectors', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled + test.skip('disconnect: required and optional params', async () => { + const response = await client.ee.connectors.disconnect({ connector_type: 'connector_type' }); + }); + + // Prism tests are disabled + test.skip('finalizeAuth: only required params', async () => { + const responsePromise = client.ee.connectors.finalizeAuth({ + auth_response_data: {}, + connector_type: 'connector_type', + }); + const rawResponse = await responsePromise.asResponse(); + expect(rawResponse).toBeInstanceOf(Response); + const response = await responsePromise; + expect(response).not.toBeInstanceOf(Response); + const dataAndResponse = await responsePromise.withResponse(); + expect(dataAndResponse.data).toBe(response); + expect(dataAndResponse.response).toBe(rawResponse); + }); + + // Prism tests are disabled + test.skip('finalizeAuth: required and optional params', async () => { + const response = await client.ee.connectors.finalizeAuth({ + auth_response_data: {}, + connector_type: 'connector_type', + }); + }); + + // Prism tests are disabled test.skip('getAuthStatus', async () => { const responsePromise = client.ee.connectors.getAuthStatus('connector_type'); const rawResponse = await responsePromise.asResponse(); @@ -32,7 +60,7 @@ describe('resource connectors', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('handleOAuthCallback', async () => { const responsePromise = client.ee.connectors.handleOAuthCallback('connector_type'); const rawResponse = await responsePromise.asResponse(); @@ -44,7 +72,7 @@ describe('resource connectors', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('handleOAuthCallback: 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( @@ -56,7 +84,7 @@ describe('resource connectors', () => { ).rejects.toThrow(Morphik.NotFoundError); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('ingestFile: only required params', async () => { const responsePromise = client.ee.connectors.ingestFile('connector_type', { file_id: 'file_id' }); const rawResponse = await responsePromise.asResponse(); @@ -68,18 +96,61 @@ describe('resource connectors', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('ingestFile: required and optional params', async () => { const response = await client.ee.connectors.ingestFile('connector_type', { file_id: 'file_id', - metadata: { foo: 'bar' }, - morphik_end_user_id: 'morphik_end_user_id', - morphik_folder_name: 'morphik_folder_name', - rules: [{ foo: 'bar' }], + folder_name: 'folder_name', + metadata: {}, }); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled + test.skip('ingestRepository: only required params', async () => { + const responsePromise = client.ee.connectors.ingestRepository('connector_type', { + repo_path: 'repo_path', + }); + const rawResponse = await responsePromise.asResponse(); + expect(rawResponse).toBeInstanceOf(Response); + const response = await responsePromise; + expect(response).not.toBeInstanceOf(Response); + const dataAndResponse = await responsePromise.withResponse(); + expect(dataAndResponse.data).toBe(response); + expect(dataAndResponse.response).toBe(rawResponse); + }); + + // Prism tests are disabled + test.skip('ingestRepository: required and optional params', async () => { + const response = await client.ee.connectors.ingestRepository('connector_type', { + repo_path: 'repo_path', + compress: true, + body_connector_type: 'connector_type', + folder_name: 'folder_name', + force: true, + ignore_patterns: ['string'], + include_patterns: ['string'], + metadata: {}, + }); + }); + + // Prism tests are disabled + test.skip('initiateAuth: only required params', async () => { + const responsePromise = client.ee.connectors.initiateAuth({ connector_type: 'connector_type' }); + const rawResponse = await responsePromise.asResponse(); + expect(rawResponse).toBeInstanceOf(Response); + const response = await responsePromise; + expect(response).not.toBeInstanceOf(Response); + const dataAndResponse = await responsePromise.withResponse(); + expect(dataAndResponse.data).toBe(response); + expect(dataAndResponse.response).toBe(rawResponse); + }); + + // Prism tests are disabled + test.skip('initiateAuth: required and optional params', async () => { + const response = await client.ee.connectors.initiateAuth({ connector_type: 'connector_type' }); + }); + + // Prism tests are disabled test.skip('listFiles', async () => { const responsePromise = client.ee.connectors.listFiles('connector_type'); const rawResponse = await responsePromise.asResponse(); @@ -91,7 +162,7 @@ describe('resource connectors', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('listFiles: 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( @@ -102,4 +173,42 @@ describe('resource connectors', () => { ), ).rejects.toThrow(Morphik.NotFoundError); }); + + // Prism tests are disabled + test.skip('listFilesViaBody: only required params', async () => { + const responsePromise = client.ee.connectors.listFilesViaBody({ connector_type: 'connector_type' }); + const rawResponse = await responsePromise.asResponse(); + expect(rawResponse).toBeInstanceOf(Response); + const response = await responsePromise; + expect(response).not.toBeInstanceOf(Response); + const dataAndResponse = await responsePromise.withResponse(); + expect(dataAndResponse.data).toBe(response); + expect(dataAndResponse.response).toBe(rawResponse); + }); + + // Prism tests are disabled + test.skip('listFilesViaBody: required and optional params', async () => { + const response = await client.ee.connectors.listFilesViaBody({ + connector_type: 'connector_type', + page_token: 'page_token', + path: 'path', + }); + }); + + // Prism tests are disabled + test.skip('status: only required params', async () => { + const responsePromise = client.ee.connectors.status({ connector_type: 'connector_type' }); + const rawResponse = await responsePromise.asResponse(); + expect(rawResponse).toBeInstanceOf(Response); + const response = await responsePromise; + expect(response).not.toBeInstanceOf(Response); + const dataAndResponse = await responsePromise.withResponse(); + expect(dataAndResponse.data).toBe(response); + expect(dataAndResponse.response).toBe(rawResponse); + }); + + // Prism tests are disabled + test.skip('status: required and optional params', async () => { + const response = await client.ee.connectors.status({ connector_type: 'connector_type' }); + }); }); diff --git a/tests/api-resources/ee/ee.test.ts b/tests/api-resources/ee/ee.test.ts index bdd6518..6e2a4d1 100644 --- a/tests/api-resources/ee/ee.test.ts +++ b/tests/api-resources/ee/ee.test.ts @@ -8,7 +8,7 @@ const client = new Morphik({ }); describe('resource ee', () => { - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('createApp: only required params', async () => { const responsePromise = client.ee.createApp({ app_id: 'app_id', name: 'name' }); const rawResponse = await responsePromise.asResponse(); @@ -20,7 +20,7 @@ describe('resource ee', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('createApp: required and optional params', async () => { const response = await client.ee.createApp({ app_id: 'app_id', name: 'name', expiry_days: 0 }); }); diff --git a/tests/api-resources/folders/documents.test.ts b/tests/api-resources/folders/documents.test.ts index 926ab31..3d63d92 100644 --- a/tests/api-resources/folders/documents.test.ts +++ b/tests/api-resources/folders/documents.test.ts @@ -8,9 +8,11 @@ const client = new Morphik({ }); describe('resource documents', () => { - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('add: only required params', async () => { - const responsePromise = client.folders.documents.add('document_id', { folder_id: 'folder_id' }); + const responsePromise = client.folders.documents.add('document_id', { + folder_id_or_name: 'folder_id_or_name', + }); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -20,14 +22,18 @@ describe('resource documents', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('add: required and optional params', async () => { - const response = await client.folders.documents.add('document_id', { folder_id: 'folder_id' }); + const response = await client.folders.documents.add('document_id', { + folder_id_or_name: 'folder_id_or_name', + }); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('remove: only required params', async () => { - const responsePromise = client.folders.documents.remove('document_id', { folder_id: 'folder_id' }); + const responsePromise = client.folders.documents.remove('document_id', { + folder_id_or_name: 'folder_id_or_name', + }); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -37,8 +43,10 @@ describe('resource documents', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('remove: required and optional params', async () => { - const response = await client.folders.documents.remove('document_id', { folder_id: 'folder_id' }); + const response = await client.folders.documents.remove('document_id', { + folder_id_or_name: 'folder_id_or_name', + }); }); }); diff --git a/tests/api-resources/folders/folders.test.ts b/tests/api-resources/folders/folders.test.ts index 64a26f8..7881466 100644 --- a/tests/api-resources/folders/folders.test.ts +++ b/tests/api-resources/folders/folders.test.ts @@ -8,7 +8,7 @@ const client = new Morphik({ }); describe('resource folders', () => { - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('create: only required params', async () => { const responsePromise = client.folders.create({ name: 'name' }); const rawResponse = await responsePromise.asResponse(); @@ -20,14 +20,14 @@ describe('resource folders', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('create: required and optional params', async () => { const response = await client.folders.create({ name: 'name', description: 'description' }); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('retrieve', async () => { - const responsePromise = client.folders.retrieve('folder_id'); + const responsePromise = client.folders.retrieve('folder_id_or_name'); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -37,7 +37,7 @@ describe('resource folders', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('list', async () => { const responsePromise = client.folders.list(); const rawResponse = await responsePromise.asResponse(); @@ -49,9 +49,9 @@ describe('resource folders', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('delete', async () => { - const responsePromise = client.folders.delete('folder_name'); + const responsePromise = client.folders.delete('folder_id_or_name'); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -61,9 +61,9 @@ describe('resource folders', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - // skipped: tests are disabled for the time being - test.skip('listSummaries', async () => { - const responsePromise = client.folders.listSummaries(); + // Prism tests are disabled + test.skip('details', async () => { + const responsePromise = client.folders.details({}); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -73,9 +73,9 @@ describe('resource folders', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - // skipped: tests are disabled for the time being - test.skip('setRule: only required params', async () => { - const responsePromise = client.folders.setRule('folder_id', { rules: [{}] }); + // Prism tests are disabled + test.skip('listSummaries', async () => { + const responsePromise = client.folders.listSummaries(); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -84,12 +84,4 @@ describe('resource folders', () => { expect(dataAndResponse.data).toBe(response); expect(dataAndResponse.response).toBe(rawResponse); }); - - // skipped: tests are disabled for the time being - test.skip('setRule: required and optional params', async () => { - const response = await client.folders.setRule('folder_id', { - rules: [{ schema: { foo: 'bar' }, type: 'type' }], - apply_to_existing: true, - }); - }); }); diff --git a/tests/api-resources/folders/workflows.test.ts b/tests/api-resources/folders/workflows.test.ts deleted file mode 100644 index 019c7a8..0000000 --- a/tests/api-resources/folders/workflows.test.ts +++ /dev/null @@ -1,56 +0,0 @@ -// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -import Morphik from 'morphik'; - -const client = new Morphik({ - apiKey: 'My API Key', - baseURL: process.env['TEST_API_BASE_URL'] ?? 'http://127.0.0.1:4010', -}); - -describe('resource workflows', () => { - // skipped: tests are disabled for the time being - test.skip('list', async () => { - const responsePromise = client.folders.workflows.list('folder_id'); - const rawResponse = await responsePromise.asResponse(); - expect(rawResponse).toBeInstanceOf(Response); - const response = await responsePromise; - expect(response).not.toBeInstanceOf(Response); - const dataAndResponse = await responsePromise.withResponse(); - expect(dataAndResponse.data).toBe(response); - expect(dataAndResponse.response).toBe(rawResponse); - }); - - // skipped: tests are disabled for the time being - test.skip('associate: only required params', async () => { - const responsePromise = client.folders.workflows.associate('workflow_id', { folder_id: 'folder_id' }); - const rawResponse = await responsePromise.asResponse(); - expect(rawResponse).toBeInstanceOf(Response); - const response = await responsePromise; - expect(response).not.toBeInstanceOf(Response); - const dataAndResponse = await responsePromise.withResponse(); - expect(dataAndResponse.data).toBe(response); - expect(dataAndResponse.response).toBe(rawResponse); - }); - - // skipped: tests are disabled for the time being - test.skip('associate: required and optional params', async () => { - const response = await client.folders.workflows.associate('workflow_id', { folder_id: 'folder_id' }); - }); - - // skipped: tests are disabled for the time being - test.skip('disassociate: only required params', async () => { - const responsePromise = client.folders.workflows.disassociate('workflow_id', { folder_id: 'folder_id' }); - const rawResponse = await responsePromise.asResponse(); - expect(rawResponse).toBeInstanceOf(Response); - const response = await responsePromise; - expect(response).not.toBeInstanceOf(Response); - const dataAndResponse = await responsePromise.withResponse(); - expect(dataAndResponse.data).toBe(response); - expect(dataAndResponse.response).toBe(rawResponse); - }); - - // skipped: tests are disabled for the time being - test.skip('disassociate: required and optional params', async () => { - const response = await client.folders.workflows.disassociate('workflow_id', { folder_id: 'folder_id' }); - }); -}); diff --git a/tests/api-resources/graph/graph.test.ts b/tests/api-resources/graph/graph.test.ts index d508450..d6b3407 100644 --- a/tests/api-resources/graph/graph.test.ts +++ b/tests/api-resources/graph/graph.test.ts @@ -8,7 +8,7 @@ const client = new Morphik({ }); describe('resource graph', () => { - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('create: only required params', async () => { const responsePromise = client.graph.create({ name: 'name' }); const rawResponse = await responsePromise.asResponse(); @@ -20,17 +20,17 @@ describe('resource graph', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('create: required and optional params', async () => { const response = await client.graph.create({ name: 'name', documents: ['string'], end_user_id: 'end_user_id', - filters: { foo: 'bar' }, + filters: {}, folder_name: 'string', prompt_overrides: { entity_extraction: { - examples: [{ label: 'Example', type: 'ENTITY', properties: { foo: 'bar' } }], + examples: [{ label: 'Example', type: 'ENTITY', properties: {} }], prompt_template: 'Extract entities from the following text: {content}\n{examples}', }, entity_resolution: { @@ -41,7 +41,7 @@ describe('resource graph', () => { }); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('retrieve', async () => { const responsePromise = client.graph.retrieve('name'); const rawResponse = await responsePromise.asResponse(); @@ -53,7 +53,7 @@ describe('resource graph', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('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( @@ -65,7 +65,7 @@ describe('resource graph', () => { ).rejects.toThrow(Morphik.NotFoundError); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('update', async () => { const responsePromise = client.graph.update('name', {}); const rawResponse = await responsePromise.asResponse(); @@ -77,7 +77,7 @@ describe('resource graph', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('list', async () => { const responsePromise = client.graph.list(); const rawResponse = await responsePromise.asResponse(); @@ -89,7 +89,7 @@ describe('resource graph', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('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( @@ -100,7 +100,7 @@ describe('resource graph', () => { ).rejects.toThrow(Morphik.NotFoundError); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('delete', async () => { const responsePromise = client.graph.delete('name'); const rawResponse = await responsePromise.asResponse(); @@ -112,7 +112,7 @@ describe('resource graph', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('status', async () => { const responsePromise = client.graph.status('name'); const rawResponse = await responsePromise.asResponse(); @@ -124,7 +124,7 @@ describe('resource graph', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('status: 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( @@ -136,7 +136,7 @@ describe('resource graph', () => { ).rejects.toThrow(Morphik.NotFoundError); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('visualization', async () => { const responsePromise = client.graph.visualization('name'); const rawResponse = await responsePromise.asResponse(); @@ -148,7 +148,7 @@ describe('resource graph', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('visualization: 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( diff --git a/tests/api-resources/graph/workflow.test.ts b/tests/api-resources/graph/workflow.test.ts index d0d963e..e7d018b 100644 --- a/tests/api-resources/graph/workflow.test.ts +++ b/tests/api-resources/graph/workflow.test.ts @@ -8,7 +8,7 @@ const client = new Morphik({ }); describe('resource workflow', () => { - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('status', async () => { const responsePromise = client.graph.workflow.status('workflow_id'); const rawResponse = await responsePromise.asResponse(); @@ -20,7 +20,7 @@ describe('resource workflow', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('status: 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( diff --git a/tests/api-resources/ingest.test.ts b/tests/api-resources/ingest.test.ts index 5e3afc5..162cbd2 100644 --- a/tests/api-resources/ingest.test.ts +++ b/tests/api-resources/ingest.test.ts @@ -8,7 +8,7 @@ const client = new Morphik({ }); describe('resource ingest', () => { - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('batchIngestFiles: only required params', async () => { const responsePromise = client.ingest.batchIngestFiles({ files: [await toFile(Buffer.from('# my file contents'), 'README.md')], @@ -22,19 +22,43 @@ describe('resource ingest', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('batchIngestFiles: required and optional params', async () => { const response = await client.ingest.batchIngestFiles({ files: [await toFile(Buffer.from('# my file contents'), 'README.md')], end_user_id: 'end_user_id', folder_name: 'folder_name', metadata: 'metadata', - rules: 'rules', use_colpali: true, }); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled + test.skip('documentQuery: only required params', async () => { + const responsePromise = client.ingest.documentQuery({ + file: await toFile(Buffer.from('# my file contents'), 'README.md'), + prompt: 'prompt', + }); + const rawResponse = await responsePromise.asResponse(); + expect(rawResponse).toBeInstanceOf(Response); + const response = await responsePromise; + expect(response).not.toBeInstanceOf(Response); + const dataAndResponse = await responsePromise.withResponse(); + expect(dataAndResponse.data).toBe(response); + expect(dataAndResponse.response).toBe(rawResponse); + }); + + // Prism tests are disabled + test.skip('documentQuery: required and optional params', async () => { + const response = await client.ingest.documentQuery({ + file: await toFile(Buffer.from('# my file contents'), 'README.md'), + prompt: 'prompt', + ingestion_options: 'ingestion_options', + schema: 'schema', + }); + }); + + // Prism tests are disabled test.skip('ingestFile: only required params', async () => { const responsePromise = client.ingest.ingestFile({ file: await toFile(Buffer.from('# my file contents'), 'README.md'), @@ -48,19 +72,18 @@ describe('resource ingest', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('ingestFile: required and optional params', async () => { const response = await client.ingest.ingestFile({ file: await toFile(Buffer.from('# my file contents'), 'README.md'), end_user_id: 'end_user_id', folder_name: 'folder_name', metadata: 'metadata', - rules: 'rules', use_colpali: true, }); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('ingestText: only required params', async () => { const responsePromise = client.ingest.ingestText({ content: 'content' }); const rawResponse = await responsePromise.asResponse(); @@ -72,16 +95,27 @@ describe('resource ingest', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('ingestText: required and optional params', async () => { const response = await client.ingest.ingestText({ content: 'content', end_user_id: 'end_user_id', filename: 'filename', folder_name: 'folder_name', - metadata: { foo: 'bar' }, - rules: [{ foo: 'bar' }], + metadata: {}, use_colpali: true, }); }); + + // Prism tests are disabled + test.skip('requeue', async () => { + const responsePromise = client.ingest.requeue({}); + const rawResponse = await responsePromise.asResponse(); + expect(rawResponse).toBeInstanceOf(Response); + const response = await responsePromise; + expect(response).not.toBeInstanceOf(Response); + const dataAndResponse = await responsePromise.withResponse(); + expect(dataAndResponse.data).toBe(response); + expect(dataAndResponse.response).toBe(rawResponse); + }); }); diff --git a/tests/api-resources/local.test.ts b/tests/api-resources/local.test.ts index f0a733c..b8d3e14 100644 --- a/tests/api-resources/local.test.ts +++ b/tests/api-resources/local.test.ts @@ -8,9 +8,9 @@ const client = new Morphik({ }); describe('resource local', () => { - // skipped: tests are disabled for the time being - test.skip('generateUri', async () => { - const responsePromise = client.local.generateUri(); + // Prism tests are disabled + test.skip('generateUri: only required params', async () => { + const responsePromise = client.local.generateUri({ password_token: 'password_token' }); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -20,11 +20,13 @@ describe('resource local', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - // skipped: tests are disabled for the time being - test.skip('generateUri: 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.local.generateUri({ expiry_days: 0, name: 'name' }, { path: '/_stainless_unknown_path' }), - ).rejects.toThrow(Morphik.NotFoundError); + // Prism tests are disabled + test.skip('generateUri: required and optional params', async () => { + const response = await client.local.generateUri({ + password_token: 'password_token', + expiry_days: 0, + name: 'name', + server_mode: true, + }); }); }); diff --git a/tests/api-resources/logs.test.ts b/tests/api-resources/logs.test.ts index 730f671..2d1ae34 100644 --- a/tests/api-resources/logs.test.ts +++ b/tests/api-resources/logs.test.ts @@ -8,7 +8,7 @@ const client = new Morphik({ }); describe('resource logs', () => { - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('list', async () => { const responsePromise = client.logs.list(); const rawResponse = await responsePromise.asResponse(); @@ -20,7 +20,7 @@ describe('resource logs', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('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( diff --git a/tests/api-resources/model-config/custom-models.test.ts b/tests/api-resources/model-config/custom-models.test.ts index cf7492e..e9db9b7 100644 --- a/tests/api-resources/model-config/custom-models.test.ts +++ b/tests/api-resources/model-config/custom-models.test.ts @@ -8,10 +8,10 @@ const client = new Morphik({ }); describe('resource customModels', () => { - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('create: only required params', async () => { const responsePromise = client.modelConfig.customModels.create({ - config: { foo: 'bar' }, + config: {}, model_name: 'model_name', name: 'name', provider: 'provider', @@ -25,17 +25,17 @@ describe('resource customModels', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('create: required and optional params', async () => { const response = await client.modelConfig.customModels.create({ - config: { foo: 'bar' }, + config: {}, model_name: 'model_name', name: 'name', provider: 'provider', }); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('list', async () => { const responsePromise = client.modelConfig.customModels.list(); const rawResponse = await responsePromise.asResponse(); diff --git a/tests/api-resources/model-config/model-config.test.ts b/tests/api-resources/model-config/model-config.test.ts index 78fc61e..c361b21 100644 --- a/tests/api-resources/model-config/model-config.test.ts +++ b/tests/api-resources/model-config/model-config.test.ts @@ -8,9 +8,9 @@ const client = new Morphik({ }); describe('resource modelConfig', () => { - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('create: only required params', async () => { - const responsePromise = client.modelConfig.create({ config_data: { foo: 'bar' }, provider: 'provider' }); + const responsePromise = client.modelConfig.create({ config_data: {}, provider: 'provider' }); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -20,12 +20,12 @@ describe('resource modelConfig', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('create: required and optional params', async () => { - const response = await client.modelConfig.create({ config_data: { foo: 'bar' }, provider: 'provider' }); + const response = await client.modelConfig.create({ config_data: {}, provider: 'provider' }); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('retrieve', async () => { const responsePromise = client.modelConfig.retrieve('config_id'); const rawResponse = await responsePromise.asResponse(); @@ -37,9 +37,9 @@ describe('resource modelConfig', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('update: only required params', async () => { - const responsePromise = client.modelConfig.update('config_id', { config_data: { foo: 'bar' } }); + const responsePromise = client.modelConfig.update('config_id', { config_data: {} }); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -49,12 +49,12 @@ describe('resource modelConfig', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('update: required and optional params', async () => { - const response = await client.modelConfig.update('config_id', { config_data: { foo: 'bar' } }); + const response = await client.modelConfig.update('config_id', { config_data: {} }); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('list', async () => { const responsePromise = client.modelConfig.list(); const rawResponse = await responsePromise.asResponse(); @@ -66,7 +66,7 @@ describe('resource modelConfig', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('delete', async () => { const responsePromise = client.modelConfig.delete('config_id'); const rawResponse = await responsePromise.asResponse(); diff --git a/tests/api-resources/models.test.ts b/tests/api-resources/models.test.ts index d34d4ee..8dd3e06 100644 --- a/tests/api-resources/models.test.ts +++ b/tests/api-resources/models.test.ts @@ -8,13 +8,9 @@ const client = new Morphik({ }); describe('resource models', () => { - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('create: only required params', async () => { - const responsePromise = client.models.create({ - config: { foo: 'bar' }, - name: 'name', - provider: 'provider', - }); + const responsePromise = client.models.create({ config: {}, name: 'name', provider: 'provider' }); const rawResponse = await responsePromise.asResponse(); expect(rawResponse).toBeInstanceOf(Response); const response = await responsePromise; @@ -24,16 +20,12 @@ describe('resource models', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('create: required and optional params', async () => { - const response = await client.models.create({ - config: { foo: 'bar' }, - name: 'name', - provider: 'provider', - }); + const response = await client.models.create({ config: {}, name: 'name', provider: 'provider' }); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('list', async () => { const responsePromise = client.models.list(); const rawResponse = await responsePromise.asResponse(); @@ -45,7 +37,7 @@ describe('resource models', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('delete', async () => { const responsePromise = client.models.delete('model_id'); const rawResponse = await responsePromise.asResponse(); @@ -57,7 +49,7 @@ describe('resource models', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('listAvailable', async () => { const responsePromise = client.models.listAvailable(); const rawResponse = await responsePromise.asResponse(); @@ -69,7 +61,7 @@ describe('resource models', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('listCustom', async () => { const responsePromise = client.models.listCustom(); const rawResponse = await responsePromise.asResponse(); diff --git a/tests/api-resources/ping.test.ts b/tests/api-resources/ping.test.ts index 0820591..3896cb3 100644 --- a/tests/api-resources/ping.test.ts +++ b/tests/api-resources/ping.test.ts @@ -8,7 +8,7 @@ const client = new Morphik({ }); describe('resource ping', () => { - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('check', async () => { const responsePromise = client.ping.check(); const rawResponse = await responsePromise.asResponse(); @@ -19,4 +19,16 @@ describe('resource ping', () => { expect(dataAndResponse.data).toBe(response); expect(dataAndResponse.response).toBe(rawResponse); }); + + // Prism tests are disabled + test.skip('status', async () => { + const responsePromise = client.ping.status(); + const rawResponse = await responsePromise.asResponse(); + expect(rawResponse).toBeInstanceOf(Response); + const response = await responsePromise; + expect(response).not.toBeInstanceOf(Response); + const dataAndResponse = await responsePromise.withResponse(); + expect(dataAndResponse.data).toBe(response); + expect(dataAndResponse.response).toBe(rawResponse); + }); }); diff --git a/tests/api-resources/query.test.ts b/tests/api-resources/query.test.ts index 81ca1f5..9abd412 100644 --- a/tests/api-resources/query.test.ts +++ b/tests/api-resources/query.test.ts @@ -8,7 +8,7 @@ const client = new Morphik({ }); describe('resource query', () => { - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('generateCompletion: only required params', async () => { const responsePromise = client.query.generateCompletion({ query: 'x' }); const rawResponse = await responsePromise.asResponse(); @@ -20,32 +20,33 @@ describe('resource query', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('generateCompletion: required and optional params', async () => { const response = await client.query.generateCompletion({ query: 'x', chat_id: 'chat_id', end_user_id: 'end_user_id', - filters: { foo: 'bar' }, + filters: {}, folder_name: 'string', graph_name: 'graph_name', hop_depth: 1, include_paths: true, + inline_citations: true, k: 1, - llm_config: { foo: 'bar' }, + llm_config: {}, max_tokens: 0, min_score: 0, padding: 0, prompt_overrides: { entity_extraction: { - examples: [{ label: 'label', type: 'type', properties: { foo: 'bar' } }], + examples: [{ label: 'label', type: 'type', properties: {} }], prompt_template: 'prompt_template', }, entity_resolution: { examples: [{ canonical: 'canonical', variants: ['string'] }], prompt_template: 'prompt_template', }, - query: { prompt_template: 'prompt_template' }, + query: { prompt_template: 'prompt_template', system_prompt: 'system_prompt' }, }, schema: {}, stream_response: true, diff --git a/tests/api-resources/retrieve/chunks.test.ts b/tests/api-resources/retrieve/chunks.test.ts index 1c52686..ed6ccb8 100644 --- a/tests/api-resources/retrieve/chunks.test.ts +++ b/tests/api-resources/retrieve/chunks.test.ts @@ -8,7 +8,7 @@ const client = new Morphik({ }); describe('resource chunks', () => { - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('create: only required params', async () => { const responsePromise = client.retrieve.chunks.create({ query: 'x' }); const rawResponse = await responsePromise.asResponse(); @@ -20,12 +20,12 @@ describe('resource chunks', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('create: required and optional params', async () => { const response = await client.retrieve.chunks.create({ query: 'x', end_user_id: 'end_user_id', - filters: { foo: 'bar' }, + filters: {}, folder_name: 'string', graph_name: 'graph_name', hop_depth: 1, @@ -38,7 +38,7 @@ describe('resource chunks', () => { }); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('createGrouped: only required params', async () => { const responsePromise = client.retrieve.chunks.createGrouped({ query: 'x' }); const rawResponse = await responsePromise.asResponse(); @@ -50,12 +50,12 @@ describe('resource chunks', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('createGrouped: required and optional params', async () => { const response = await client.retrieve.chunks.createGrouped({ query: 'x', end_user_id: 'end_user_id', - filters: { foo: 'bar' }, + filters: {}, folder_name: 'string', graph_name: 'graph_name', hop_depth: 1, diff --git a/tests/api-resources/retrieve/retrieve.test.ts b/tests/api-resources/retrieve/retrieve.test.ts index 4529b86..35ae2df 100644 --- a/tests/api-resources/retrieve/retrieve.test.ts +++ b/tests/api-resources/retrieve/retrieve.test.ts @@ -8,7 +8,7 @@ const client = new Morphik({ }); describe('resource retrieve', () => { - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('createDocs: only required params', async () => { const responsePromise = client.retrieve.createDocs({ query: 'x' }); const rawResponse = await responsePromise.asResponse(); @@ -20,12 +20,12 @@ describe('resource retrieve', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('createDocs: required and optional params', async () => { const response = await client.retrieve.createDocs({ query: 'x', end_user_id: 'end_user_id', - filters: { foo: 'bar' }, + filters: {}, folder_name: 'string', graph_name: 'graph_name', hop_depth: 1, diff --git a/tests/api-resources/search.test.ts b/tests/api-resources/search.test.ts new file mode 100644 index 0000000..06d9828 --- /dev/null +++ b/tests/api-resources/search.test.ts @@ -0,0 +1,33 @@ +// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +import Morphik from 'morphik'; + +const client = new Morphik({ + apiKey: 'My API Key', + baseURL: process.env['TEST_API_BASE_URL'] ?? 'http://127.0.0.1:4010', +}); + +describe('resource search', () => { + // Prism tests are disabled + test.skip('documents: only required params', async () => { + const responsePromise = client.search.documents({ query: 'x' }); + const rawResponse = await responsePromise.asResponse(); + expect(rawResponse).toBeInstanceOf(Response); + const response = await responsePromise; + expect(response).not.toBeInstanceOf(Response); + const dataAndResponse = await responsePromise.withResponse(); + expect(dataAndResponse.data).toBe(response); + expect(dataAndResponse.response).toBe(rawResponse); + }); + + // Prism tests are disabled + test.skip('documents: required and optional params', async () => { + const response = await client.search.documents({ + query: 'x', + end_user_id: 'end_user_id', + filters: {}, + folder_name: 'string', + limit: 1, + }); + }); +}); diff --git a/tests/api-resources/usage.test.ts b/tests/api-resources/usage.test.ts index 91aecbe..92e89cd 100644 --- a/tests/api-resources/usage.test.ts +++ b/tests/api-resources/usage.test.ts @@ -8,7 +8,7 @@ const client = new Morphik({ }); describe('resource usage', () => { - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('listRecent', async () => { const responsePromise = client.usage.listRecent(); const rawResponse = await responsePromise.asResponse(); @@ -20,7 +20,7 @@ describe('resource usage', () => { expect(dataAndResponse.response).toBe(rawResponse); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('listRecent: 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( @@ -31,7 +31,7 @@ describe('resource usage', () => { ).rejects.toThrow(Morphik.NotFoundError); }); - // skipped: tests are disabled for the time being + // Prism tests are disabled test.skip('retrieveStats', async () => { const responsePromise = client.usage.retrieveStats(); const rawResponse = await responsePromise.asResponse(); diff --git a/tests/api-resources/workflows/runs.test.ts b/tests/api-resources/workflows/runs.test.ts deleted file mode 100644 index c953365..0000000 --- a/tests/api-resources/workflows/runs.test.ts +++ /dev/null @@ -1,46 +0,0 @@ -// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -import Morphik from 'morphik'; - -const client = new Morphik({ - apiKey: 'My API Key', - baseURL: process.env['TEST_API_BASE_URL'] ?? 'http://127.0.0.1:4010', -}); - -describe('resource runs', () => { - // skipped: tests are disabled for the time being - test.skip('retrieve', async () => { - const responsePromise = client.workflows.runs.retrieve('run_id'); - const rawResponse = await responsePromise.asResponse(); - expect(rawResponse).toBeInstanceOf(Response); - const response = await responsePromise; - expect(response).not.toBeInstanceOf(Response); - const dataAndResponse = await responsePromise.withResponse(); - expect(dataAndResponse.data).toBe(response); - expect(dataAndResponse.response).toBe(rawResponse); - }); - - // skipped: tests are disabled for the time being - test.skip('list', async () => { - const responsePromise = client.workflows.runs.list('workflow_id'); - const rawResponse = await responsePromise.asResponse(); - expect(rawResponse).toBeInstanceOf(Response); - const response = await responsePromise; - expect(response).not.toBeInstanceOf(Response); - const dataAndResponse = await responsePromise.withResponse(); - expect(dataAndResponse.data).toBe(response); - expect(dataAndResponse.response).toBe(rawResponse); - }); - - // skipped: tests are disabled for the time being - test.skip('delete', async () => { - const responsePromise = client.workflows.runs.delete('run_id'); - const rawResponse = await responsePromise.asResponse(); - expect(rawResponse).toBeInstanceOf(Response); - const response = await responsePromise; - expect(response).not.toBeInstanceOf(Response); - const dataAndResponse = await responsePromise.withResponse(); - expect(dataAndResponse.data).toBe(response); - expect(dataAndResponse.response).toBe(rawResponse); - }); -}); diff --git a/tests/api-resources/workflows/workflows.test.ts b/tests/api-resources/workflows/workflows.test.ts deleted file mode 100644 index 46393f1..0000000 --- a/tests/api-resources/workflows/workflows.test.ts +++ /dev/null @@ -1,110 +0,0 @@ -// File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. - -import Morphik from 'morphik'; - -const client = new Morphik({ - apiKey: 'My API Key', - baseURL: process.env['TEST_API_BASE_URL'] ?? 'http://127.0.0.1:4010', -}); - -describe('resource workflows', () => { - // skipped: tests are disabled for the time being - test.skip('create: only required params', async () => { - const responsePromise = client.workflows.create({ - name: 'name', - owner_id: 'owner_id', - steps: [{ action_id: 'action_id' }], - }); - const rawResponse = await responsePromise.asResponse(); - expect(rawResponse).toBeInstanceOf(Response); - const response = await responsePromise; - expect(response).not.toBeInstanceOf(Response); - const dataAndResponse = await responsePromise.withResponse(); - expect(dataAndResponse.data).toBe(response); - expect(dataAndResponse.response).toBe(rawResponse); - }); - - // skipped: tests are disabled for the time being - test.skip('create: required and optional params', async () => { - const response = await client.workflows.create({ - name: 'name', - owner_id: 'owner_id', - steps: [{ action_id: 'action_id', parameters: { foo: 'bar' } }], - id: 'id', - app_id: 'app_id', - description: 'description', - system_metadata: { foo: 'bar' }, - user_id: 'user_id', - }); - }); - - // skipped: tests are disabled for the time being - test.skip('retrieve', async () => { - const responsePromise = client.workflows.retrieve('workflow_id'); - const rawResponse = await responsePromise.asResponse(); - expect(rawResponse).toBeInstanceOf(Response); - const response = await responsePromise; - expect(response).not.toBeInstanceOf(Response); - const dataAndResponse = await responsePromise.withResponse(); - expect(dataAndResponse.data).toBe(response); - expect(dataAndResponse.response).toBe(rawResponse); - }); - - // skipped: tests are disabled for the time being - test.skip('update: only required params', async () => { - const responsePromise = client.workflows.update('workflow_id', { body: { foo: 'bar' } }); - const rawResponse = await responsePromise.asResponse(); - expect(rawResponse).toBeInstanceOf(Response); - const response = await responsePromise; - expect(response).not.toBeInstanceOf(Response); - const dataAndResponse = await responsePromise.withResponse(); - expect(dataAndResponse.data).toBe(response); - expect(dataAndResponse.response).toBe(rawResponse); - }); - - // skipped: tests are disabled for the time being - test.skip('update: required and optional params', async () => { - const response = await client.workflows.update('workflow_id', { body: { foo: 'bar' } }); - }); - - // skipped: tests are disabled for the time being - test.skip('list', async () => { - const responsePromise = client.workflows.list(); - const rawResponse = await responsePromise.asResponse(); - expect(rawResponse).toBeInstanceOf(Response); - const response = await responsePromise; - expect(response).not.toBeInstanceOf(Response); - const dataAndResponse = await responsePromise.withResponse(); - expect(dataAndResponse.data).toBe(response); - expect(dataAndResponse.response).toBe(rawResponse); - }); - - // skipped: tests are disabled for the time being - test.skip('delete', async () => { - const responsePromise = client.workflows.delete('workflow_id'); - const rawResponse = await responsePromise.asResponse(); - expect(rawResponse).toBeInstanceOf(Response); - const response = await responsePromise; - expect(response).not.toBeInstanceOf(Response); - const dataAndResponse = await responsePromise.withResponse(); - expect(dataAndResponse.data).toBe(response); - expect(dataAndResponse.response).toBe(rawResponse); - }); - - // skipped: tests are disabled for the time being - test.skip('run: only required params', async () => { - const responsePromise = client.workflows.run('document_id', { workflow_id: 'workflow_id' }); - const rawResponse = await responsePromise.asResponse(); - expect(rawResponse).toBeInstanceOf(Response); - const response = await responsePromise; - expect(response).not.toBeInstanceOf(Response); - const dataAndResponse = await responsePromise.withResponse(); - expect(dataAndResponse.data).toBe(response); - expect(dataAndResponse.response).toBe(rawResponse); - }); - - // skipped: tests are disabled for the time being - test.skip('run: required and optional params', async () => { - const response = await client.workflows.run('document_id', { workflow_id: 'workflow_id' }); - }); -}); diff --git a/tsconfig.build.json b/tsconfig.build.json index 6f2bbdb..de4e70d 100644 --- a/tsconfig.build.json +++ b/tsconfig.build.json @@ -5,8 +5,8 @@ "compilerOptions": { "rootDir": "./dist/src", "paths": { - "morphik/*": ["dist/src/*"], - "morphik": ["dist/src/index.ts"] + "morphik/*": ["./dist/src/*"], + "morphik": ["./dist/src/index.ts"] }, "noEmit": false, "declaration": true, diff --git a/tsconfig.json b/tsconfig.json index fb95248..0e0c528 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -7,10 +7,9 @@ "module": "commonjs", "moduleResolution": "node", "esModuleInterop": true, - "baseUrl": "./", "paths": { - "morphik/*": ["src/*"], - "morphik": ["src/index.ts"] + "morphik/*": ["./src/*"], + "morphik": ["./src/index.ts"] }, "noEmit": true, diff --git a/yarn.lock b/yarn.lock index 58c08d5..8311caf 100644 --- a/yarn.lock +++ b/yarn.lock @@ -938,11 +938,11 @@ undici-types "~5.26.4" "@types/node@^20.17.6": - version "20.17.6" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.17.6.tgz#6e4073230c180d3579e8c60141f99efdf5df0081" - integrity sha512-VEI7OdvK2wP7XHnsuXbAJnEpEkF6NjSN45QJlL4VGqZSXsnicpesdTWsg9RISeSdYd3yeRj/y3k5KGjUXYnFwQ== + version "20.19.11" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.19.11.tgz#728cab53092bd5f143beed7fbba7ba99de3c16c4" + integrity sha512-uug3FEEGv0r+jrecvUUpbY8lLisvIjg6AAic6a2bSP5OEOLeJsDSnvhCDov7ipFFMXS3orMpzlmi0ZcuGkBbow== dependencies: - undici-types "~6.19.2" + undici-types "~6.21.0" "@types/stack-utils@^2.0.0": version "2.0.3" @@ -3283,9 +3283,9 @@ ts-node@^10.5.0: v8-compile-cache-lib "^3.0.0" 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" @@ -3353,10 +3353,10 @@ undici-types@~5.26.4: resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== -undici-types@~6.19.2: - version "6.19.8" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02" - integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw== +undici-types@~6.21.0: + version "6.21.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.21.0.tgz#691d00af3909be93a7faa13be61b3a5b50ef12cb" + integrity sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ== unicode-emoji-modifier-base@^1.0.0: version "1.0.0"