@nvisy/sdk 0.3.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +62 -1
- package/README.md +43 -21
- package/dist/auth/index.d.ts +7 -36
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +96 -174
- package/dist/auth/index.js.map +1 -1
- package/dist/client-DAxwkjk3.d.ts +809 -0
- package/dist/client-DAxwkjk3.d.ts.map +1 -0
- package/dist/config-BRQp8Cat.d.ts +83 -0
- package/dist/config-BRQp8Cat.d.ts.map +1 -0
- package/dist/datatypes/index.d.ts +2 -9
- package/dist/datatypes/index.js +0 -3
- package/dist/error-DmkKaDjI.js +199 -0
- package/dist/error-DmkKaDjI.js.map +1 -0
- package/dist/index-DfNB2LNT.d.ts +10477 -0
- package/dist/index-DfNB2LNT.d.ts.map +1 -0
- package/dist/index.d.ts +86 -98
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +273 -1472
- package/dist/index.js.map +1 -1
- package/dist/services/index.d.ts +2 -5
- package/dist/services/index.js +2 -1066
- package/dist/services-DXP-jsLt.js +1087 -0
- package/dist/services-DXP-jsLt.js.map +1 -0
- package/package.json +13 -13
- package/dist/auth-CncOz2vx.d.ts +0 -7420
- package/dist/client-DQRisDAK.d.ts +0 -808
- package/dist/config-L7FKq_q5.d.ts +0 -81
- package/dist/datatypes/index.js.map +0 -1
- package/dist/services/index.js.map +0 -1
- package/dist/workspace-BjdbMWsa.d.ts +0 -118
package/CHANGELOG.md
CHANGED
|
@@ -8,6 +8,65 @@ and this project adheres to
|
|
|
8
8
|
|
|
9
9
|
## [Unreleased]
|
|
10
10
|
|
|
11
|
+
## [0.5.0] - 2026-07-12
|
|
12
|
+
|
|
13
|
+
### Added
|
|
14
|
+
|
|
15
|
+
- `account.getPublicAccount(username)` for public account profiles
|
|
16
|
+
|
|
17
|
+
### Changed
|
|
18
|
+
|
|
19
|
+
- Regenerated the API schema against the updated platform handlers
|
|
20
|
+
- **BREAKING**: resources are now addressed under their workspace. Workspaces
|
|
21
|
+
are identified by slug (`workspaceSlug`), and item-level methods for
|
|
22
|
+
connections, files, invites, members, pipelines, policies, runs, and
|
|
23
|
+
webhooks now take the workspace slug as their first argument
|
|
24
|
+
- **BREAKING**: pipelines and policies are addressed by slug (`pipelineSlug`,
|
|
25
|
+
`policySlug`); members and public accounts by `username`
|
|
26
|
+
- **BREAKING**: `runs` methods are workspace-scoped:
|
|
27
|
+
`listRuns(workspaceSlug)`, `listPipelineRuns(workspaceSlug, pipelineSlug)`,
|
|
28
|
+
`createRun(workspaceSlug, pipelineSlug, run)`,
|
|
29
|
+
`getRun(workspaceSlug, runId)`, `getDetections(workspaceSlug, runId)`,
|
|
30
|
+
`redact(workspaceSlug, runId)`
|
|
31
|
+
- **BREAKING**: `webhooks.createWebhook()` now returns `WebhookCreated`;
|
|
32
|
+
`invites.sendInvite()` now returns `InviteSent`
|
|
33
|
+
|
|
34
|
+
### Removed
|
|
35
|
+
|
|
36
|
+
- **BREAKING**: `contexts` service and datatypes (no longer part of the API)
|
|
37
|
+
|
|
38
|
+
## [0.4.0] - 2026-07-12
|
|
39
|
+
|
|
40
|
+
### Added
|
|
41
|
+
|
|
42
|
+
- `contexts` service and datatypes (`Context`, `CreateContext`,
|
|
43
|
+
`UpdateContext`, `ContextEntry`, `ContextsPage`)
|
|
44
|
+
- `connections` service and datatypes (`Connection`, `CreateConnection`,
|
|
45
|
+
`UpdateConnection`, `ConnectionsQuery`, `ConnectionsPage`)
|
|
46
|
+
- `pipelines` service and datatypes (`Pipeline`, `CreatePipeline`,
|
|
47
|
+
`UpdatePipeline`, `PipelineDefinition`, `PipelineStatus`, `PipelineSummary`,
|
|
48
|
+
`PipelineSummariesPage`, and more)
|
|
49
|
+
- `policies` service and datatypes (`Policy`, `CreatePolicy`, `UpdatePolicy`,
|
|
50
|
+
`PolicyRule`, `PolicyAction`, `PoliciesPage`)
|
|
51
|
+
- `Health` datatypes for the health endpoint (`Health`, `HealthStatus`,
|
|
52
|
+
`ComponentHealth`, `CheckHealth`)
|
|
53
|
+
|
|
54
|
+
### Changed
|
|
55
|
+
|
|
56
|
+
- Regenerated the API schema against the redacted-pipeline platform API
|
|
57
|
+
- **BREAKING**: `runs` is now a pipeline-run service: `listRuns(pipelineId)`,
|
|
58
|
+
`createRun(pipelineId)`, `getRun(runId)`, `getDetections(runId)`,
|
|
59
|
+
`redact(runId)` (was integration-run based)
|
|
60
|
+
- **BREAKING**: `status.checkHealth()` now returns `Health` (was
|
|
61
|
+
`MonitorStatus`)
|
|
62
|
+
- **BREAKING**: `NvisyApiError.resource` and `.suggestion` are now
|
|
63
|
+
`string | undefined` (were `string | null`)
|
|
64
|
+
|
|
65
|
+
### Removed
|
|
66
|
+
|
|
67
|
+
- **BREAKING**: `annotations`, `comments`, `documents`, and `integrations`
|
|
68
|
+
services and their datatypes (no longer part of the API)
|
|
69
|
+
|
|
11
70
|
## [0.3.0] - 2026-01-09
|
|
12
71
|
|
|
13
72
|
### Added
|
|
@@ -107,7 +166,9 @@ and this project adheres to
|
|
|
107
166
|
- Network error handling for timeouts, DNS resolution, and connection issues
|
|
108
167
|
- Configuration validation with detailed error messages
|
|
109
168
|
|
|
110
|
-
[Unreleased]: https://github.com/nvisycom/sdk-ts/compare/v0.
|
|
169
|
+
[Unreleased]: https://github.com/nvisycom/sdk-ts/compare/v0.5.0...HEAD
|
|
170
|
+
[0.5.0]: https://github.com/nvisycom/sdk-ts/compare/v0.4.0...v0.5.0
|
|
171
|
+
[0.4.0]: https://github.com/nvisycom/sdk-ts/compare/v0.3.0...v0.4.0
|
|
111
172
|
[0.3.0]: https://github.com/nvisycom/sdk-ts/compare/v0.2.0...v0.3.0
|
|
112
173
|
[0.2.0]: https://github.com/nvisycom/sdk-ts/compare/v0.1.0...v0.2.0
|
|
113
174
|
[0.1.0]: https://github.com/nvisycom/sdk-ts/releases/tag/v0.1.0
|
package/README.md
CHANGED
|
@@ -1,16 +1,20 @@
|
|
|
1
|
-
# Nvisy
|
|
1
|
+
# Nvisy SDK for TypeScript
|
|
2
2
|
|
|
3
|
-
[](https://www.npmjs.com/package/@nvisy/sdk)
|
|
4
|
+
[](https://github.com/nvisycom/sdk-ts/actions/workflows/build.yml)
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
TypeScript client for the [Nvisy](https://nvisy.com/) multimodal redaction platform.
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
Nvisy detects and removes sensitive information across documents, images, and audio.
|
|
9
|
+
It combines deterministic patterns, NER, computer vision, and LLM-driven classification
|
|
10
|
+
into auditable, policy-driven pipelines built for regulated industries such as
|
|
11
|
+
healthcare, legal, government, and financial services.
|
|
9
12
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
-
|
|
13
|
-
|
|
13
|
+
> [!WARNING]
|
|
14
|
+
> **Active development: API not stable.** This project is under active
|
|
15
|
+
> development. Public APIs, configuration shapes, and on-disk formats may change
|
|
16
|
+
> without notice between releases. Pin a specific version if you depend on this
|
|
17
|
+
> in production.
|
|
14
18
|
|
|
15
19
|
## Installation
|
|
16
20
|
|
|
@@ -18,12 +22,20 @@ Official TypeScript SDK for the Nvisy AI-powered document processing platform.
|
|
|
18
22
|
npm install @nvisy/sdk
|
|
19
23
|
```
|
|
20
24
|
|
|
21
|
-
##
|
|
25
|
+
## Quick Start
|
|
22
26
|
|
|
23
27
|
```typescript
|
|
24
28
|
import { Nvisy } from "@nvisy/sdk";
|
|
25
29
|
|
|
26
|
-
const
|
|
30
|
+
const client = new Nvisy({ apiToken: "your-api-token" });
|
|
31
|
+
const account = await client.account.getAccount();
|
|
32
|
+
const workspaces = await client.workspaces.listWorkspaces();
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
The client accepts additional options:
|
|
36
|
+
|
|
37
|
+
```typescript
|
|
38
|
+
const client = new Nvisy({
|
|
27
39
|
apiToken: "your-api-token", // Required
|
|
28
40
|
baseUrl: "https://api.nvisy.com", // Optional
|
|
29
41
|
userAgent: "MyApp/1.0.0", // Optional
|
|
@@ -32,25 +44,35 @@ const nvisy = new Nvisy({
|
|
|
32
44
|
"X-Custom-Header": "value",
|
|
33
45
|
},
|
|
34
46
|
});
|
|
35
|
-
|
|
36
|
-
const account = await nvisy.account.getAccount();
|
|
37
|
-
const workspaces = await nvisy.workspaces.listWorkspaces();
|
|
38
47
|
```
|
|
39
48
|
|
|
40
|
-
##
|
|
49
|
+
## Features
|
|
41
50
|
|
|
42
|
-
|
|
51
|
+
- Modern ES2022+ JavaScript target
|
|
52
|
+
- Full TypeScript support with strict typing
|
|
53
|
+
- Debug logging for development
|
|
54
|
+
- Individual module exports for optimal bundling
|
|
55
|
+
|
|
56
|
+
## Deployment
|
|
57
|
+
|
|
58
|
+
The fastest way to get started is with [Nvisy Cloud](https://nvisy.com).
|
|
59
|
+
|
|
60
|
+
To run locally, see the [nvisycom/runtime](https://github.com/nvisycom/runtime) and [nvisycom/server](https://github.com/nvisycom/server) repositories.
|
|
43
61
|
|
|
44
62
|
## Contributing
|
|
45
63
|
|
|
46
|
-
See [CONTRIBUTING.md](CONTRIBUTING.md) for development guidelines.
|
|
64
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md) for development setup and contribution guidelines.
|
|
65
|
+
|
|
66
|
+
## Changelog
|
|
67
|
+
|
|
68
|
+
See [CHANGELOG.md](CHANGELOG.md) for release notes and version history.
|
|
47
69
|
|
|
48
70
|
## License
|
|
49
71
|
|
|
50
|
-
MIT License
|
|
72
|
+
MIT License, see [LICENSE.txt](LICENSE.txt)
|
|
51
73
|
|
|
52
74
|
## Support
|
|
53
75
|
|
|
54
|
-
- Documentation
|
|
55
|
-
- Issues
|
|
56
|
-
- Email
|
|
76
|
+
- **Documentation**: [docs.nvisy.com](https://docs.nvisy.com)
|
|
77
|
+
- **Issues**: [github.com/nvisycom/sdk-ts/issues](https://github.com/nvisycom/sdk-ts/issues)
|
|
78
|
+
- **Email**: [support@nvisy.com](mailto:support@nvisy.com)
|
package/dist/auth/index.d.ts
CHANGED
|
@@ -1,15 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* @fileoverview Configuration types for standalone auth functions.
|
|
6
|
-
*
|
|
7
|
-
* This module provides configuration options for authentication operations
|
|
8
|
-
* that don't require an existing API token.
|
|
9
|
-
*
|
|
10
|
-
* @module auth/config
|
|
11
|
-
*/
|
|
12
|
-
|
|
1
|
+
import { t as ClientConfig } from "../config-BRQp8Cat.js";
|
|
2
|
+
import { Et as Signup, Tt as Login, wt as AuthToken } from "../index-DfNB2LNT.js";
|
|
3
|
+
//#region src/auth/config.d.ts
|
|
13
4
|
/**
|
|
14
5
|
* Configuration options for standalone authentication functions.
|
|
15
6
|
*
|
|
@@ -27,29 +18,8 @@ import { L as Login, A as AuthToken, S as Signup } from '../auth-CncOz2vx.js';
|
|
|
27
18
|
* ```
|
|
28
19
|
*/
|
|
29
20
|
type AuthConfig = Omit<ClientConfig, "apiToken">;
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
* @fileoverview Standalone password-based authentication functions.
|
|
33
|
-
*
|
|
34
|
-
* This module provides functions for login and signup that don't require
|
|
35
|
-
* an existing API token. Use these to obtain an auth token, then create
|
|
36
|
-
* an authenticated {@link Client} instance.
|
|
37
|
-
*
|
|
38
|
-
* @module auth/password
|
|
39
|
-
*
|
|
40
|
-
* @example
|
|
41
|
-
* ```typescript
|
|
42
|
-
* import { login, signup } from "@nvisy/sdk/auth";
|
|
43
|
-
* import { Nvisy } from "@nvisy/sdk";
|
|
44
|
-
*
|
|
45
|
-
* // Login to get a token
|
|
46
|
-
* const token = await login({ email: "user@example.com", password: "..." });
|
|
47
|
-
*
|
|
48
|
-
* // Create authenticated client
|
|
49
|
-
* const nvisy = new Nvisy({ apiToken: token.accessToken });
|
|
50
|
-
* ```
|
|
51
|
-
*/
|
|
52
|
-
|
|
21
|
+
//#endregion
|
|
22
|
+
//#region src/auth/password.d.ts
|
|
53
23
|
/**
|
|
54
24
|
* Login with email and password to obtain an auth token.
|
|
55
25
|
*
|
|
@@ -101,5 +71,6 @@ declare function login(credentials: Login, config?: AuthConfig): Promise<AuthTok
|
|
|
101
71
|
* ```
|
|
102
72
|
*/
|
|
103
73
|
declare function signup(details: Signup, config?: AuthConfig): Promise<AuthToken>;
|
|
104
|
-
|
|
74
|
+
//#endregion
|
|
105
75
|
export { type AuthConfig, login, signup };
|
|
76
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../../src/auth/config.ts","../../src/auth/password.ts"],"mappings":";;;;;;;;;;;;;;;;;;;KA2BY,aAAa,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;iBCiDR,MACrB,aAAa,OACb,SAAS,aACP,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;iBAiCW,OACrB,SAAS,QACT,SAAS,aACP,QAAQ"}
|
package/dist/auth/index.js
CHANGED
|
@@ -1,184 +1,106 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { i as DEFAULTS, t as errorMiddleware } from "../error-DmkKaDjI.js";
|
|
2
|
+
import createClient from "openapi-fetch";
|
|
2
3
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
};
|
|
17
|
-
|
|
18
|
-
//
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
if (Error.captureStackTrace) {
|
|
33
|
-
Error.captureStackTrace(this, this.constructor);
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
};
|
|
37
|
-
var NvisyApiError = class extends NvisyError {
|
|
38
|
-
/**
|
|
39
|
-
* The error type identifier (e.g., "ValidationError", "NotFoundError").
|
|
40
|
-
*/
|
|
41
|
-
name;
|
|
42
|
-
/**
|
|
43
|
-
* Human-readable error message safe for display to end users.
|
|
44
|
-
*/
|
|
45
|
-
message;
|
|
46
|
-
/**
|
|
47
|
-
* The resource type that the error relates to (e.g., "account", "project").
|
|
48
|
-
* May be null if the error is not resource-specific.
|
|
49
|
-
*/
|
|
50
|
-
resource;
|
|
51
|
-
/**
|
|
52
|
-
* A helpful suggestion for resolving the error.
|
|
53
|
-
* May be null if no suggestion is available.
|
|
54
|
-
*/
|
|
55
|
-
suggestion;
|
|
56
|
-
/**
|
|
57
|
-
* Field-specific validation errors.
|
|
58
|
-
* Present when the error is due to invalid input data.
|
|
59
|
-
*/
|
|
60
|
-
validation;
|
|
61
|
-
/**
|
|
62
|
-
* HTTP status code of the response (e.g., 400, 404, 500).
|
|
63
|
-
*/
|
|
64
|
-
statusCode;
|
|
65
|
-
/**
|
|
66
|
-
* Creates a new NvisyApiError from an API error response.
|
|
67
|
-
*
|
|
68
|
-
* @param response - The error response from the API
|
|
69
|
-
* @param statusCode - The HTTP status code of the response
|
|
70
|
-
*/
|
|
71
|
-
constructor(response, statusCode) {
|
|
72
|
-
super(response.message);
|
|
73
|
-
this.name = response.name;
|
|
74
|
-
this.message = response.message;
|
|
75
|
-
this.resource = response.resource;
|
|
76
|
-
this.suggestion = response.suggestion;
|
|
77
|
-
this.validation = response.validation;
|
|
78
|
-
this.statusCode = statusCode;
|
|
79
|
-
if (Error.captureStackTrace) {
|
|
80
|
-
Error.captureStackTrace(this, this.constructor);
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
/**
|
|
84
|
-
* Checks if this is a client error (4xx status code).
|
|
85
|
-
*
|
|
86
|
-
* Client errors indicate problems with the request itself, such as
|
|
87
|
-
* invalid input, missing authentication, or accessing non-existent resources.
|
|
88
|
-
*
|
|
89
|
-
* @returns True if the status code is in the 4xx range
|
|
90
|
-
*/
|
|
91
|
-
isClientError() {
|
|
92
|
-
return this.statusCode >= 400 && this.statusCode < 500;
|
|
93
|
-
}
|
|
94
|
-
/**
|
|
95
|
-
* Checks if this is a server error (5xx status code).
|
|
96
|
-
*
|
|
97
|
-
* Server errors indicate problems on the API side. These are typically
|
|
98
|
-
* transient and may succeed if retried.
|
|
99
|
-
*
|
|
100
|
-
* @returns True if the status code is in the 5xx range
|
|
101
|
-
*/
|
|
102
|
-
isServerError() {
|
|
103
|
-
return this.statusCode >= 500;
|
|
104
|
-
}
|
|
105
|
-
/**
|
|
106
|
-
* Determines if this error is safe to retry.
|
|
107
|
-
*
|
|
108
|
-
* An error is considered retryable if it's a server error (5xx),
|
|
109
|
-
* a request timeout (408), or rate limiting (429).
|
|
110
|
-
*
|
|
111
|
-
* @returns True if the request may succeed on retry
|
|
112
|
-
*/
|
|
113
|
-
isRetryable() {
|
|
114
|
-
return this.statusCode >= 500 || // Server errors
|
|
115
|
-
this.statusCode === 408 || // Request timeout
|
|
116
|
-
this.statusCode === 429;
|
|
117
|
-
}
|
|
118
|
-
/**
|
|
119
|
-
* Converts the error to a plain {@link ErrorResponse} object.
|
|
120
|
-
*
|
|
121
|
-
* Useful for serialization or logging.
|
|
122
|
-
*
|
|
123
|
-
* @returns A plain object representation of the error
|
|
124
|
-
*/
|
|
125
|
-
toJSON() {
|
|
126
|
-
return {
|
|
127
|
-
name: this.name,
|
|
128
|
-
message: this.message,
|
|
129
|
-
resource: this.resource,
|
|
130
|
-
suggestion: this.suggestion,
|
|
131
|
-
validation: this.validation
|
|
132
|
-
};
|
|
133
|
-
}
|
|
134
|
-
};
|
|
135
|
-
|
|
136
|
-
// src/middleware/error.ts
|
|
137
|
-
var errorMiddleware = {
|
|
138
|
-
async onResponse({ response }) {
|
|
139
|
-
if (!response.ok) {
|
|
140
|
-
const error = await response.clone().json();
|
|
141
|
-
throw new NvisyApiError(error, response.status);
|
|
142
|
-
}
|
|
143
|
-
return response;
|
|
144
|
-
},
|
|
145
|
-
onError({ error }) {
|
|
146
|
-
if (error instanceof Error) {
|
|
147
|
-
throw new NvisyError(error.message);
|
|
148
|
-
}
|
|
149
|
-
throw new NvisyError("An unknown network error occurred");
|
|
150
|
-
}
|
|
151
|
-
};
|
|
152
|
-
|
|
153
|
-
// src/auth/password.ts
|
|
4
|
+
//#region src/auth/password.ts
|
|
5
|
+
/**
|
|
6
|
+
* @fileoverview Standalone password-based authentication functions.
|
|
7
|
+
*
|
|
8
|
+
* This module provides functions for login and signup that don't require
|
|
9
|
+
* an existing API token. Use these to obtain an auth token, then create
|
|
10
|
+
* an authenticated {@link Client} instance.
|
|
11
|
+
*
|
|
12
|
+
* @module auth/password
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```typescript
|
|
16
|
+
* import { login, signup } from "@nvisy/sdk/auth";
|
|
17
|
+
* import { Nvisy } from "@nvisy/sdk";
|
|
18
|
+
*
|
|
19
|
+
* // Login to get a token
|
|
20
|
+
* const token = await login({ email: "user@example.com", password: "..." });
|
|
21
|
+
*
|
|
22
|
+
* // Create authenticated client
|
|
23
|
+
* const nvisy = new Nvisy({ apiToken: token.accessToken });
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
/**
|
|
27
|
+
* Creates an unauthenticated API client for auth operations.
|
|
28
|
+
*
|
|
29
|
+
* @param config - Optional configuration options
|
|
30
|
+
* @returns A configured openapi-fetch client without authentication
|
|
31
|
+
* @internal
|
|
32
|
+
*/
|
|
154
33
|
function createAuthClient(config) {
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
34
|
+
const headers = {
|
|
35
|
+
"Content-Type": "application/json",
|
|
36
|
+
"User-Agent": config?.userAgent ?? DEFAULTS.USER_AGENT,
|
|
37
|
+
...config?.headers
|
|
38
|
+
};
|
|
39
|
+
const client = createClient({
|
|
40
|
+
baseUrl: config?.baseUrl ?? DEFAULTS.BASE_URL,
|
|
41
|
+
headers
|
|
42
|
+
});
|
|
43
|
+
client.use(errorMiddleware);
|
|
44
|
+
return client;
|
|
166
45
|
}
|
|
46
|
+
/**
|
|
47
|
+
* Login with email and password to obtain an auth token.
|
|
48
|
+
*
|
|
49
|
+
* This is a standalone function that doesn't require an existing {@link Client}
|
|
50
|
+
* instance. Use the returned token to create an authenticated client.
|
|
51
|
+
*
|
|
52
|
+
* @param credentials - Login credentials (email and password)
|
|
53
|
+
* @param config - Optional configuration (baseUrl, headers, userAgent)
|
|
54
|
+
* @returns Promise that resolves with the auth token
|
|
55
|
+
* @throws {ApiError} If the credentials are invalid or the request fails
|
|
56
|
+
*
|
|
57
|
+
* @example
|
|
58
|
+
* ```typescript
|
|
59
|
+
* import { login } from "@nvisy/sdk/auth";
|
|
60
|
+
* import { Nvisy } from "@nvisy/sdk";
|
|
61
|
+
*
|
|
62
|
+
* const token = await login({
|
|
63
|
+
* email: "user@example.com",
|
|
64
|
+
* password: "your-password",
|
|
65
|
+
* });
|
|
66
|
+
*
|
|
67
|
+
* const nvisy = new Nvisy({ apiToken: token.accessToken });
|
|
68
|
+
* ```
|
|
69
|
+
*/
|
|
167
70
|
async function login(credentials, config) {
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
body: credentials
|
|
171
|
-
});
|
|
172
|
-
return data;
|
|
71
|
+
const { data } = await createAuthClient(config).POST("/auth/login/", { body: credentials });
|
|
72
|
+
return data;
|
|
173
73
|
}
|
|
74
|
+
/**
|
|
75
|
+
* Sign up a new account to obtain an auth token.
|
|
76
|
+
*
|
|
77
|
+
* This is a standalone function that doesn't require an existing {@link Client}
|
|
78
|
+
* instance. Use the returned token to create an authenticated client.
|
|
79
|
+
*
|
|
80
|
+
* @param details - Signup details (name, email, password, etc.)
|
|
81
|
+
* @param config - Optional configuration (baseUrl, headers, userAgent)
|
|
82
|
+
* @returns Promise that resolves with the auth token
|
|
83
|
+
* @throws {ApiError} If the signup fails (e.g., email already exists)
|
|
84
|
+
*
|
|
85
|
+
* @example
|
|
86
|
+
* ```typescript
|
|
87
|
+
* import { signup } from "@nvisy/sdk/auth";
|
|
88
|
+
* import { Nvisy } from "@nvisy/sdk";
|
|
89
|
+
*
|
|
90
|
+
* const token = await signup({
|
|
91
|
+
* name: "John Doe",
|
|
92
|
+
* email: "john@example.com",
|
|
93
|
+
* password: "secure-password",
|
|
94
|
+
* });
|
|
95
|
+
*
|
|
96
|
+
* const nvisy = new Nvisy({ apiToken: token.accessToken });
|
|
97
|
+
* ```
|
|
98
|
+
*/
|
|
174
99
|
async function signup(details, config) {
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
body: details
|
|
178
|
-
});
|
|
179
|
-
return data;
|
|
100
|
+
const { data } = await createAuthClient(config).POST("/auth/signup/", { body: details });
|
|
101
|
+
return data;
|
|
180
102
|
}
|
|
181
103
|
|
|
104
|
+
//#endregion
|
|
182
105
|
export { login, signup };
|
|
183
|
-
//# sourceMappingURL=index.js.map
|
|
184
106
|
//# sourceMappingURL=index.js.map
|
package/dist/auth/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/config.ts","../../src/errors.ts","../../src/middleware/error.ts","../../src/auth/password.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["/**\n * @fileoverview Configuration types and constants for the Nvisy SDK.\n *\n * This module provides configuration interfaces, default values, and environment\n * variable names used throughout the SDK.\n *\n * @module config\n */\n\n/**\n * Current SDK version.\n *\n * Used in the default user agent string and for version tracking.\n */\nexport const VERSION = \"0.3.0\";\n\n/**\n * Configuration options for creating a Nvisy client.\n *\n * The `apiToken` field is required for authentication. All other fields are optional\n * and will use sensible defaults when omitted.\n *\n * @example\n * ```typescript\n * const config: ClientConfig = {\n * apiToken: \"your-api-token\",\n * baseUrl: \"https://api.nvisy.com\",\n * headers: { \"X-Custom-Header\": \"value\" },\n * };\n * const client = new Client(config);\n * ```\n */\nexport interface ClientConfig {\n\t/**\n\t * API token for authentication.\n\t *\n\t * Tokens can be obtained from the Nvisy dashboard or via the auth endpoints.\n\t */\n\tapiToken: string;\n\n\t/**\n\t * Base URL for the Nvisy API.\n\t *\n\t * @default \"https://api.nvisy.com\"\n\t */\n\tbaseUrl?: string;\n\n\t/**\n\t * Custom headers to include with every request.\n\t *\n\t * These headers are merged with the default headers (Content-Type, User-Agent,\n\t * and Authorization). Custom headers take precedence over defaults if there\n\t * are conflicts.\n\t */\n\theaders?: Record<string, string>;\n\n\t/**\n\t * Custom user agent string to identify your application.\n\t *\n\t * @default \"@nvisy/sdk v.{version}\"\n\t */\n\tuserAgent?: string;\n\n\t/**\n\t * Enable logging for requests and responses.\n\t *\n\t * When enabled, logs request method, URL, status, and timing to console.\n\t *\n\t * @default false\n\t */\n\twithLogging?: boolean;\n}\n\n/**\n * Default configuration values used when options are not explicitly provided.\n */\nexport const DEFAULTS = {\n\t/**\n\t * Default base URL for the Nvisy API.\n\t */\n\tBASE_URL: \"https://api.nvisy.com\",\n\n\t/**\n\t * Default user agent string.\n\t */\n\tUSER_AGENT: `@nvisy/sdk v.${VERSION}`,\n} as const;\n","/**\n * @fileoverview Error types for the Nvisy SDK.\n *\n * This module defines the error hierarchy used throughout the SDK:\n * - {@link NvisyError} - Base error class for all SDK errors\n * - {@link NvisyApiError} - Errors returned by the Nvisy API (4xx/5xx responses)\n *\n * @module errors\n */\n\nimport type { ErrorResponse } from \"@/datatypes/index.js\";\n\n// Re-export ErrorResponse type for convenience\nexport type { ErrorResponse } from \"@/datatypes/index.js\";\n\n/**\n * Base error class for all Nvisy SDK errors.\n *\n * This class provides common functionality for all SDK errors.\n * It ensures proper error naming and stack traces.\n *\n * @example\n * ```typescript\n * try {\n * const client = new Client({ apiToken: \"\" });\n * } catch (error) {\n * if (error instanceof NvisyError) {\n * console.log(\"SDK error:\", error.message);\n * }\n * }\n * ```\n */\nexport class NvisyError extends Error {\n\t/**\n\t * The error class name.\n\t */\n\tpublic readonly name: string;\n\n\t/**\n\t * Creates a new NvisyError.\n\t *\n\t * @param message - The error message\n\t */\n\tconstructor(message: string) {\n\t\tsuper(message);\n\t\tthis.name = this.constructor.name;\n\n\t\tif (Error.captureStackTrace) {\n\t\t\tError.captureStackTrace(this, this.constructor);\n\t\t}\n\t}\n}\n\n/**\n * Error thrown when the Nvisy API returns an error response.\n *\n * This error class wraps the API's {@link ErrorResponse} format and adds\n * the HTTP status code. It provides helper methods to categorize errors\n * and determine if they are retryable.\n *\n * @example\n * ```typescript\n * try {\n * await client.account.getAccount();\n * } catch (error) {\n * if (error instanceof NvisyApiError) {\n * console.log(`API Error: ${error.message}`);\n * console.log(`Status: ${error.statusCode}`);\n * if (error.isRetryable()) {\n * // Implement retry logic\n * }\n * }\n * }\n * ```\n */\nexport class NvisyApiError extends NvisyError implements ErrorResponse {\n\t/**\n\t * The error type identifier (e.g., \"ValidationError\", \"NotFoundError\").\n\t */\n\tpublic readonly name: string;\n\n\t/**\n\t * Human-readable error message safe for display to end users.\n\t */\n\tpublic readonly message: string;\n\n\t/**\n\t * The resource type that the error relates to (e.g., \"account\", \"project\").\n\t * May be null if the error is not resource-specific.\n\t */\n\tpublic readonly resource?: string | null;\n\n\t/**\n\t * A helpful suggestion for resolving the error.\n\t * May be null if no suggestion is available.\n\t */\n\tpublic readonly suggestion?: string | null;\n\n\t/**\n\t * Field-specific validation errors.\n\t * Present when the error is due to invalid input data.\n\t */\n\tpublic readonly validation?: ErrorResponse[\"validation\"];\n\n\t/**\n\t * HTTP status code of the response (e.g., 400, 404, 500).\n\t */\n\tpublic readonly statusCode: number;\n\n\t/**\n\t * Creates a new NvisyApiError from an API error response.\n\t *\n\t * @param response - The error response from the API\n\t * @param statusCode - The HTTP status code of the response\n\t */\n\tconstructor(response: ErrorResponse, statusCode: number) {\n\t\tsuper(response.message);\n\t\tthis.name = response.name;\n\t\tthis.message = response.message;\n\t\tthis.resource = response.resource;\n\t\tthis.suggestion = response.suggestion;\n\t\tthis.validation = response.validation;\n\t\tthis.statusCode = statusCode;\n\n\t\tif (Error.captureStackTrace) {\n\t\t\tError.captureStackTrace(this, this.constructor);\n\t\t}\n\t}\n\n\t/**\n\t * Checks if this is a client error (4xx status code).\n\t *\n\t * Client errors indicate problems with the request itself, such as\n\t * invalid input, missing authentication, or accessing non-existent resources.\n\t *\n\t * @returns True if the status code is in the 4xx range\n\t */\n\tisClientError(): boolean {\n\t\treturn this.statusCode >= 400 && this.statusCode < 500;\n\t}\n\n\t/**\n\t * Checks if this is a server error (5xx status code).\n\t *\n\t * Server errors indicate problems on the API side. These are typically\n\t * transient and may succeed if retried.\n\t *\n\t * @returns True if the status code is in the 5xx range\n\t */\n\tisServerError(): boolean {\n\t\treturn this.statusCode >= 500;\n\t}\n\n\t/**\n\t * Determines if this error is safe to retry.\n\t *\n\t * An error is considered retryable if it's a server error (5xx),\n\t * a request timeout (408), or rate limiting (429).\n\t *\n\t * @returns True if the request may succeed on retry\n\t */\n\tisRetryable(): boolean {\n\t\treturn (\n\t\t\tthis.statusCode >= 500 || // Server errors\n\t\t\tthis.statusCode === 408 || // Request timeout\n\t\t\tthis.statusCode === 429 // Rate limited\n\t\t);\n\t}\n\n\t/**\n\t * Converts the error to a plain {@link ErrorResponse} object.\n\t *\n\t * Useful for serialization or logging.\n\t *\n\t * @returns A plain object representation of the error\n\t */\n\ttoJSON(): ErrorResponse {\n\t\treturn {\n\t\t\tname: this.name,\n\t\t\tmessage: this.message,\n\t\t\tresource: this.resource,\n\t\t\tsuggestion: this.suggestion,\n\t\t\tvalidation: this.validation,\n\t\t};\n\t}\n}\n","import type { Middleware } from \"openapi-fetch\";\nimport type { ErrorResponse } from \"@/datatypes/index.js\";\nimport { NvisyApiError, NvisyError } from \"@/errors.js\";\n\n/**\n * Middleware that automatically throws NvisyApiError for error responses.\n * This replaces the need for manual checks in services.\n */\nexport const errorMiddleware: Middleware = {\n\tasync onResponse({ response }) {\n\t\tif (!response.ok) {\n\t\t\tconst error = (await response.clone().json()) as ErrorResponse;\n\t\t\tthrow new NvisyApiError(error, response.status);\n\t\t}\n\t\treturn response;\n\t},\n\n\tonError({ error }) {\n\t\t// Wrap fetch errors (network failures, CORS, etc.) in NvisyError\n\t\tif (error instanceof Error) {\n\t\t\tthrow new NvisyError(error.message);\n\t\t}\n\t\tthrow new NvisyError(\"An unknown network error occurred\");\n\t},\n};\n","/**\n * @fileoverview Standalone password-based authentication functions.\n *\n * This module provides functions for login and signup that don't require\n * an existing API token. Use these to obtain an auth token, then create\n * an authenticated {@link Client} instance.\n *\n * @module auth/password\n *\n * @example\n * ```typescript\n * import { login, signup } from \"@nvisy/sdk/auth\";\n * import { Nvisy } from \"@nvisy/sdk\";\n *\n * // Login to get a token\n * const token = await login({ email: \"user@example.com\", password: \"...\" });\n *\n * // Create authenticated client\n * const nvisy = new Nvisy({ apiToken: token.accessToken });\n * ```\n */\n\nimport createClient from \"openapi-fetch\";\nimport type { AuthConfig } from \"@/auth/config.js\";\nimport { DEFAULTS } from \"@/config.js\";\nimport type { AuthToken, Login, Signup } from \"@/datatypes/index.js\";\nimport { errorMiddleware } from \"@/middleware/index.js\";\nimport type { paths } from \"@/schema/api.js\";\n\n/**\n * Creates an unauthenticated API client for auth operations.\n *\n * @param config - Optional configuration options\n * @returns A configured openapi-fetch client without authentication\n * @internal\n */\nfunction createAuthClient(config?: AuthConfig) {\n\tconst headers: Record<string, string> = {\n\t\t\"Content-Type\": \"application/json\",\n\t\t\"User-Agent\": config?.userAgent ?? DEFAULTS.USER_AGENT,\n\t\t...config?.headers,\n\t};\n\n\tconst client = createClient<paths>({\n\t\tbaseUrl: config?.baseUrl ?? DEFAULTS.BASE_URL,\n\t\theaders,\n\t});\n\n\tclient.use(errorMiddleware);\n\treturn client;\n}\n\n/**\n * Login with email and password to obtain an auth token.\n *\n * This is a standalone function that doesn't require an existing {@link Client}\n * instance. Use the returned token to create an authenticated client.\n *\n * @param credentials - Login credentials (email and password)\n * @param config - Optional configuration (baseUrl, headers, userAgent)\n * @returns Promise that resolves with the auth token\n * @throws {ApiError} If the credentials are invalid or the request fails\n *\n * @example\n * ```typescript\n * import { login } from \"@nvisy/sdk/auth\";\n * import { Nvisy } from \"@nvisy/sdk\";\n *\n * const token = await login({\n * email: \"user@example.com\",\n * password: \"your-password\",\n * });\n *\n * const nvisy = new Nvisy({ apiToken: token.accessToken });\n * ```\n */\nexport async function login(\n\tcredentials: Login,\n\tconfig?: AuthConfig,\n): Promise<AuthToken> {\n\tconst client = createAuthClient(config);\n\tconst { data } = await client.POST(\"/auth/login\", {\n\t\tbody: credentials,\n\t});\n\treturn data!;\n}\n\n/**\n * Sign up a new account to obtain an auth token.\n *\n * This is a standalone function that doesn't require an existing {@link Client}\n * instance. Use the returned token to create an authenticated client.\n *\n * @param details - Signup details (name, email, password, etc.)\n * @param config - Optional configuration (baseUrl, headers, userAgent)\n * @returns Promise that resolves with the auth token\n * @throws {ApiError} If the signup fails (e.g., email already exists)\n *\n * @example\n * ```typescript\n * import { signup } from \"@nvisy/sdk/auth\";\n * import { Nvisy } from \"@nvisy/sdk\";\n *\n * const token = await signup({\n * name: \"John Doe\",\n * email: \"john@example.com\",\n * password: \"secure-password\",\n * });\n *\n * const nvisy = new Nvisy({ apiToken: token.accessToken });\n * ```\n */\nexport async function signup(\n\tdetails: Signup,\n\tconfig?: AuthConfig,\n): Promise<AuthToken> {\n\tconst client = createAuthClient(config);\n\tconst { data } = await client.POST(\"/auth/signup\", {\n\t\tbody: details,\n\t});\n\treturn data!;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../src/auth/password.ts"],"sourcesContent":["/**\n * @fileoverview Standalone password-based authentication functions.\n *\n * This module provides functions for login and signup that don't require\n * an existing API token. Use these to obtain an auth token, then create\n * an authenticated {@link Client} instance.\n *\n * @module auth/password\n *\n * @example\n * ```typescript\n * import { login, signup } from \"@nvisy/sdk/auth\";\n * import { Nvisy } from \"@nvisy/sdk\";\n *\n * // Login to get a token\n * const token = await login({ email: \"user@example.com\", password: \"...\" });\n *\n * // Create authenticated client\n * const nvisy = new Nvisy({ apiToken: token.accessToken });\n * ```\n */\n\nimport createClient from \"openapi-fetch\";\nimport type { AuthConfig } from \"@/auth/config.js\";\nimport { DEFAULTS } from \"@/config.js\";\nimport type { AuthToken, Login, Signup } from \"@/datatypes/index.js\";\nimport { errorMiddleware } from \"@/middleware/index.js\";\nimport type { paths } from \"@/schema/api.js\";\n\n/**\n * Creates an unauthenticated API client for auth operations.\n *\n * @param config - Optional configuration options\n * @returns A configured openapi-fetch client without authentication\n * @internal\n */\nfunction createAuthClient(config?: AuthConfig) {\n\tconst headers: Record<string, string> = {\n\t\t\"Content-Type\": \"application/json\",\n\t\t\"User-Agent\": config?.userAgent ?? DEFAULTS.USER_AGENT,\n\t\t...config?.headers,\n\t};\n\n\tconst client = createClient<paths>({\n\t\tbaseUrl: config?.baseUrl ?? DEFAULTS.BASE_URL,\n\t\theaders,\n\t});\n\n\tclient.use(errorMiddleware);\n\treturn client;\n}\n\n/**\n * Login with email and password to obtain an auth token.\n *\n * This is a standalone function that doesn't require an existing {@link Client}\n * instance. Use the returned token to create an authenticated client.\n *\n * @param credentials - Login credentials (email and password)\n * @param config - Optional configuration (baseUrl, headers, userAgent)\n * @returns Promise that resolves with the auth token\n * @throws {ApiError} If the credentials are invalid or the request fails\n *\n * @example\n * ```typescript\n * import { login } from \"@nvisy/sdk/auth\";\n * import { Nvisy } from \"@nvisy/sdk\";\n *\n * const token = await login({\n * email: \"user@example.com\",\n * password: \"your-password\",\n * });\n *\n * const nvisy = new Nvisy({ apiToken: token.accessToken });\n * ```\n */\nexport async function login(\n\tcredentials: Login,\n\tconfig?: AuthConfig,\n): Promise<AuthToken> {\n\tconst client = createAuthClient(config);\n\tconst { data } = await client.POST(\"/auth/login/\", {\n\t\tbody: credentials,\n\t});\n\treturn data!;\n}\n\n/**\n * Sign up a new account to obtain an auth token.\n *\n * This is a standalone function that doesn't require an existing {@link Client}\n * instance. Use the returned token to create an authenticated client.\n *\n * @param details - Signup details (name, email, password, etc.)\n * @param config - Optional configuration (baseUrl, headers, userAgent)\n * @returns Promise that resolves with the auth token\n * @throws {ApiError} If the signup fails (e.g., email already exists)\n *\n * @example\n * ```typescript\n * import { signup } from \"@nvisy/sdk/auth\";\n * import { Nvisy } from \"@nvisy/sdk\";\n *\n * const token = await signup({\n * name: \"John Doe\",\n * email: \"john@example.com\",\n * password: \"secure-password\",\n * });\n *\n * const nvisy = new Nvisy({ apiToken: token.accessToken });\n * ```\n */\nexport async function signup(\n\tdetails: Signup,\n\tconfig?: AuthConfig,\n): Promise<AuthToken> {\n\tconst client = createAuthClient(config);\n\tconst { data } = await client.POST(\"/auth/signup/\", {\n\t\tbody: details,\n\t});\n\treturn data!;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoCA,SAAS,iBAAiB,QAAqB;CAC9C,MAAM,UAAkC;EACvC,gBAAgB;EAChB,cAAc,QAAQ,aAAa,SAAS;EAC5C,GAAG,QAAQ;CACZ;CAEA,MAAM,SAAS,aAAoB;EAClC,SAAS,QAAQ,WAAW,SAAS;EACrC;CACD,CAAC;CAED,OAAO,IAAI,eAAe;CAC1B,OAAO;AACR;;;;;;;;;;;;;;;;;;;;;;;;;AA0BA,eAAsB,MACrB,aACA,QACqB;CAErB,MAAM,EAAE,SAAS,MADF,iBAAiB,MACJ,CAAC,CAAC,KAAK,gBAAgB,EAClD,MAAM,YACP,CAAC;CACD,OAAO;AACR;;;;;;;;;;;;;;;;;;;;;;;;;;AA2BA,eAAsB,OACrB,SACA,QACqB;CAErB,MAAM,EAAE,SAAS,MADF,iBAAiB,MACJ,CAAC,CAAC,KAAK,iBAAiB,EACnD,MAAM,QACP,CAAC;CACD,OAAO;AACR"}
|