@podge/sdk-node 0.2.0-beta.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 +31 -0
- package/README.md +304 -0
- package/dist/cjs/index.d.ts +216 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +306 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/esm/index.d.ts +216 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +276 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/package.json +3 -0
- package/package.json +55 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
This project follows [Semantic Versioning](https://semver.org/). During the `0.x` beta period, minor version bumps may contain breaking changes.
|
|
6
|
+
|
|
7
|
+
## [0.2.0-beta.0] - 2026-03-19
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
- Dual CJS/ESM package output with proper `exports` field
|
|
11
|
+
- GitHub Actions CI workflow (lint, build, test on Node 18/20/22)
|
|
12
|
+
- GitHub Actions release workflow (publish to npm on version tags)
|
|
13
|
+
- CHANGELOG.md
|
|
14
|
+
|
|
15
|
+
### Changed
|
|
16
|
+
- Version bump from 0.1.0 to 0.2.0-beta.0 (semver beta)
|
|
17
|
+
- License changed from UNLICENSED to MIT
|
|
18
|
+
- `prepublishOnly` now runs clean + build + test
|
|
19
|
+
- Updated gap documentation with resolution status
|
|
20
|
+
|
|
21
|
+
## [0.1.0] - 2025-01-15
|
|
22
|
+
|
|
23
|
+
### Added
|
|
24
|
+
- Initial SDK with environment, collection, item, search, and import job methods
|
|
25
|
+
- Typed error handling (`PodgeError`, `PodgeValidationError`, `PodgeNotFoundError`)
|
|
26
|
+
- Document delete and update operations
|
|
27
|
+
- Search mode support (`keyword`, `semantic`, `hybrid`)
|
|
28
|
+
- Collection schema management (`getCollectionSchema`, `updateCollectionSchema`)
|
|
29
|
+
- Batch item creation
|
|
30
|
+
- Dry run support for item creation
|
|
31
|
+
- Overloaded method signatures (implicit or explicit workspace/environment)
|
package/README.md
ADDED
|
@@ -0,0 +1,304 @@
|
|
|
1
|
+
# @podge/sdk-node
|
|
2
|
+
|
|
3
|
+
TypeScript SDK for the Podge API. Provides a typed client for managing workspaces, environments, collections, and full-text search.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
pnpm add @podge/sdk-node
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Getting Started
|
|
12
|
+
|
|
13
|
+
```typescript
|
|
14
|
+
import { PodgeSDK } from "@podge/sdk-node";
|
|
15
|
+
|
|
16
|
+
interface Product {
|
|
17
|
+
title: string;
|
|
18
|
+
category: string;
|
|
19
|
+
price: number;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
const podge = new PodgeSDK({
|
|
23
|
+
apiKey: "your-api-key",
|
|
24
|
+
workspace: "my-workspace",
|
|
25
|
+
environment: "production",
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
// Insert a typed item
|
|
29
|
+
await podge.createItem<Product>("products", {
|
|
30
|
+
title: "Ergonomic Keyboard",
|
|
31
|
+
category: "Electronics",
|
|
32
|
+
price: 149.99,
|
|
33
|
+
});
|
|
34
|
+
|
|
35
|
+
// Search — results are typed as Product
|
|
36
|
+
const { results } = await podge.search<Product>("products", {
|
|
37
|
+
search: "keyboard",
|
|
38
|
+
});
|
|
39
|
+
console.log(results[0].document.title);
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Usage
|
|
43
|
+
|
|
44
|
+
### Inserting Items
|
|
45
|
+
|
|
46
|
+
```typescript
|
|
47
|
+
// Insert a single item
|
|
48
|
+
await podge.createItem<Product>("products", {
|
|
49
|
+
title: "Ergonomic Keyboard",
|
|
50
|
+
category: "Electronics",
|
|
51
|
+
price: 149.99,
|
|
52
|
+
});
|
|
53
|
+
|
|
54
|
+
// Dry run — validate without persisting
|
|
55
|
+
await podge.createItem("products", { title: "Test" }, { dryRun: true });
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Items are ingested asynchronously — after insertion, the document is queued for tokenization and indexing. Use `getDocument()` to check ingestion status. Typical ingestion latency is a few seconds for single items.
|
|
59
|
+
|
|
60
|
+
### Search
|
|
61
|
+
|
|
62
|
+
```typescript
|
|
63
|
+
// Simple search
|
|
64
|
+
const { results } = await podge.search<Product>("products", {
|
|
65
|
+
search: "keyboard",
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
// With filters, facets, sorting, and highlighting
|
|
69
|
+
const { results, facets } = await podge.search<Product>("products", {
|
|
70
|
+
search: "ergonomic",
|
|
71
|
+
filters: {
|
|
72
|
+
category: "Electronics",
|
|
73
|
+
price: { gte: 50, lte: 500 },
|
|
74
|
+
},
|
|
75
|
+
options: {
|
|
76
|
+
requireAllWords: true,
|
|
77
|
+
limit: 20,
|
|
78
|
+
offset: 0,
|
|
79
|
+
rank: true,
|
|
80
|
+
highlight: {
|
|
81
|
+
fields: ["title", "description"],
|
|
82
|
+
pre_tag: "<b>",
|
|
83
|
+
post_tag: "</b>",
|
|
84
|
+
},
|
|
85
|
+
},
|
|
86
|
+
facets: ["category", "brand"],
|
|
87
|
+
sort: [{ field: "price", order: "asc" }],
|
|
88
|
+
});
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
#### Search behavior
|
|
92
|
+
|
|
93
|
+
- **Default mode**: Token matching with term count scoring. Each word in the query is matched independently. Results are ranked by how many query terms appear in the document.
|
|
94
|
+
- **`rank: true`**: Enables BM25 relevance scoring (k1=2.5, b=0.75). Documents are ranked by statistical relevance rather than simple term counts.
|
|
95
|
+
- **`requireAllWords: true`**: All query terms must appear in the document (AND logic). Default is OR logic.
|
|
96
|
+
- **Quoted phrases**: Use `"exact phrase"` in the search string for contiguous word matching.
|
|
97
|
+
- **Exclusions**: Prefix a term with `-` to exclude documents containing that word (e.g., `keyboard -wireless`).
|
|
98
|
+
- **Field-scoped search**: Use `field` option to restrict which fields are searched instead of searching all indexed fields.
|
|
99
|
+
|
|
100
|
+
#### Pagination
|
|
101
|
+
|
|
102
|
+
- `limit`: 1–100 (default 25)
|
|
103
|
+
- `offset`: 0-based offset for pagination
|
|
104
|
+
- Response includes `total` (total matching documents) and `count` (results in this page)
|
|
105
|
+
|
|
106
|
+
#### Facets
|
|
107
|
+
|
|
108
|
+
- Request facets by passing field names in the `facets` array
|
|
109
|
+
- Returns up to 100 values per faceted field, sorted by count
|
|
110
|
+
- Facet counts reflect all matching documents, not just the current page
|
|
111
|
+
|
|
112
|
+
#### Sorting
|
|
113
|
+
|
|
114
|
+
- Sort by any indexed field with `sort: [{ field: "price", order: "asc" }]`
|
|
115
|
+
- Use `_score` as a special field name to sort by relevance score
|
|
116
|
+
|
|
117
|
+
### Filters
|
|
118
|
+
|
|
119
|
+
Filters support direct values for exact match, or operator objects for advanced filtering:
|
|
120
|
+
|
|
121
|
+
```typescript
|
|
122
|
+
// Exact match
|
|
123
|
+
filters: { category: "Electronics" }
|
|
124
|
+
|
|
125
|
+
// Comparison operators
|
|
126
|
+
filters: { price: { gte: 50, lte: 500 } }
|
|
127
|
+
|
|
128
|
+
// Not equal
|
|
129
|
+
filters: { status: { ne: "discontinued" } }
|
|
130
|
+
|
|
131
|
+
// Match any value in a list
|
|
132
|
+
filters: { category: { in: ["Electronics", "Accessories"] } }
|
|
133
|
+
|
|
134
|
+
// Exclude values
|
|
135
|
+
filters: { category: { nin: ["Furniture"] } }
|
|
136
|
+
|
|
137
|
+
// Field existence
|
|
138
|
+
filters: { description: { exists: true } }
|
|
139
|
+
|
|
140
|
+
// Nested fields use dot notation
|
|
141
|
+
filters: { "metadata.region": "us-east" }
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
Available operators: `eq`, `ne`, `gt`, `gte`, `lt`, `lte`, `in`, `nin`, `exists`.
|
|
145
|
+
|
|
146
|
+
**Operator–type compatibility:**
|
|
147
|
+
|
|
148
|
+
| Operator | string | number | date | boolean |
|
|
149
|
+
|----------|--------|--------|------|---------|
|
|
150
|
+
| `eq`, `ne` | yes | yes | yes | yes |
|
|
151
|
+
| `gt`, `gte`, `lt`, `lte` | no | yes | yes | no |
|
|
152
|
+
| `in`, `nin` | yes | yes | yes | yes |
|
|
153
|
+
| `exists` | yes | yes | yes | yes |
|
|
154
|
+
|
|
155
|
+
### Field Types and Schema
|
|
156
|
+
|
|
157
|
+
Documents are schema-on-write — field types are automatically detected when documents are ingested:
|
|
158
|
+
|
|
159
|
+
| Detected type | Examples | Storage |
|
|
160
|
+
|---|---|---|
|
|
161
|
+
| `string` | Any text value | string map (searchable) |
|
|
162
|
+
| `number` | Integer values | number map (filterable/sortable) |
|
|
163
|
+
| `date` | ISO 8601, `MM/DD/YYYY`, `DD/MM/YYYY`, RFC 2822, Unix timestamps | datetime map (filterable/sortable) |
|
|
164
|
+
| `boolean` | `true`, `false` | string map |
|
|
165
|
+
|
|
166
|
+
Nested objects are flattened with dot notation (e.g., `address.city`).
|
|
167
|
+
|
|
168
|
+
All fields default to `search` status (indexed and searchable). Use `updateCollectionSchema` to set fields to `ignore` if they should be excluded from search results:
|
|
169
|
+
|
|
170
|
+
```typescript
|
|
171
|
+
// View discovered fields and their types
|
|
172
|
+
const schema = await podge.getCollectionSchema("products");
|
|
173
|
+
// schema.fields → [{ field: "title", fieldType: "string", status: "search", ... }]
|
|
174
|
+
|
|
175
|
+
// Exclude a field from search indexing
|
|
176
|
+
await podge.updateCollectionSchema("products", {
|
|
177
|
+
fields: [{ field: "internal_id", status: "ignore" }],
|
|
178
|
+
});
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
### Collections
|
|
182
|
+
|
|
183
|
+
```typescript
|
|
184
|
+
const collection = await podge.createCollection({ name: "Products" });
|
|
185
|
+
|
|
186
|
+
const collections = await podge.listCollections();
|
|
187
|
+
|
|
188
|
+
const schema = await podge.getCollectionSchema("products");
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
### Batch Insert
|
|
192
|
+
|
|
193
|
+
```typescript
|
|
194
|
+
await podge.createItemsBatch<Product>("products", [
|
|
195
|
+
{ title: "Standing Desk", category: "Furniture", price: 599.99 },
|
|
196
|
+
{ title: "Monitor Arm", category: "Accessories", price: 89.99 },
|
|
197
|
+
]);
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
### Bulk Import
|
|
201
|
+
|
|
202
|
+
For large datasets, use import jobs with presigned S3 upload URLs.
|
|
203
|
+
|
|
204
|
+
**Supported formats:** JSON arrays (`[{...}, {...}]`) or single JSON objects (`{...}`).
|
|
205
|
+
|
|
206
|
+
**Limits:** 200 MB max per file, 10 MB JSON buffer limit.
|
|
207
|
+
|
|
208
|
+
```typescript
|
|
209
|
+
// Create an import job with presigned upload URLs
|
|
210
|
+
const job = await podge.createImportJob("products", {
|
|
211
|
+
fileCount: 2,
|
|
212
|
+
fileNames: ["batch-1.json", "batch-2.json"],
|
|
213
|
+
});
|
|
214
|
+
|
|
215
|
+
// Upload files to the presigned URLs (expire after 1 hour)
|
|
216
|
+
for (const { url } of job.uploadUrls) {
|
|
217
|
+
await fetch(url, {
|
|
218
|
+
method: "PUT",
|
|
219
|
+
headers: { "Content-Type": "application/json" },
|
|
220
|
+
body: JSON.stringify([{ title: "Product", price: 9.99 }]),
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
// Poll job status
|
|
225
|
+
const status = await podge.getImportJob(job.jobId);
|
|
226
|
+
console.log(status.status);
|
|
227
|
+
// Job progresses: "created" → "streaming" → "ingesting" → "completed" | "failed"
|
|
228
|
+
// Track progress: status.ingestedItems, status.failedItems, status.totalItems
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
### Environments
|
|
232
|
+
|
|
233
|
+
```typescript
|
|
234
|
+
const environments = await podge.listEnvironments();
|
|
235
|
+
|
|
236
|
+
const env = await podge.createEnvironment({ name: "staging" });
|
|
237
|
+
```
|
|
238
|
+
|
|
239
|
+
### Document Retrieval
|
|
240
|
+
|
|
241
|
+
```typescript
|
|
242
|
+
const doc = await podge.getDocument<Product>("products", "doc-abc123");
|
|
243
|
+
console.log(doc.status); // "INGESTED" | "PENDING"
|
|
244
|
+
console.log(doc.document?.title);
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
### Error Handling
|
|
248
|
+
|
|
249
|
+
The SDK uses Axios under the hood. API errors are thrown as `AxiosError` instances:
|
|
250
|
+
|
|
251
|
+
```typescript
|
|
252
|
+
import { AxiosError } from "axios";
|
|
253
|
+
|
|
254
|
+
try {
|
|
255
|
+
await podge.search("products", { search: "test" });
|
|
256
|
+
} catch (err) {
|
|
257
|
+
if (err instanceof AxiosError) {
|
|
258
|
+
console.error(err.response?.status); // 401, 400, 404, etc.
|
|
259
|
+
console.error(err.response?.data); // Error details from API
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
Common error status codes:
|
|
265
|
+
|
|
266
|
+
| Status | Meaning |
|
|
267
|
+
|--------|---------|
|
|
268
|
+
| 400 | Validation error — check request body/parameters |
|
|
269
|
+
| 401 | Invalid or missing API key |
|
|
270
|
+
| 403 | API key does not have access to this workspace/environment |
|
|
271
|
+
| 404 | Workspace, environment, or collection not found |
|
|
272
|
+
|
|
273
|
+
## Development
|
|
274
|
+
|
|
275
|
+
```bash
|
|
276
|
+
# Install dependencies
|
|
277
|
+
pnpm install
|
|
278
|
+
|
|
279
|
+
# Build
|
|
280
|
+
pnpm run build
|
|
281
|
+
|
|
282
|
+
# Run tests
|
|
283
|
+
pnpm test
|
|
284
|
+
|
|
285
|
+
# Watch mode
|
|
286
|
+
pnpm run dev
|
|
287
|
+
|
|
288
|
+
# Lint
|
|
289
|
+
pnpm run lint
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
## Examples
|
|
293
|
+
|
|
294
|
+
See the [`examples/`](./examples) directory for runnable scripts:
|
|
295
|
+
|
|
296
|
+
- **`basic-usage.ts`** — End-to-end walkthrough: create environments, collections, insert items, and search
|
|
297
|
+
- **`bulk-import.ts`** — Import workflow with presigned uploads and job polling
|
|
298
|
+
- **`search-with-facets.ts`** — Advanced search with filters, facets, sorting, and highlighting
|
|
299
|
+
|
|
300
|
+
Run any example with:
|
|
301
|
+
|
|
302
|
+
```bash
|
|
303
|
+
PODGE_API_KEY=your-key npx tsx examples/basic-usage.ts
|
|
304
|
+
```
|
|
@@ -0,0 +1,216 @@
|
|
|
1
|
+
export interface PodgeSDKConfig {
|
|
2
|
+
apiKey: string;
|
|
3
|
+
workspace?: string;
|
|
4
|
+
environment?: string;
|
|
5
|
+
useDevService?: boolean;
|
|
6
|
+
/** @internal Override base URL for local development/testing. */
|
|
7
|
+
_debugBaseURL?: string;
|
|
8
|
+
}
|
|
9
|
+
export interface Environment {
|
|
10
|
+
id: string;
|
|
11
|
+
name: string;
|
|
12
|
+
key: string;
|
|
13
|
+
workspaceId?: string;
|
|
14
|
+
}
|
|
15
|
+
export interface Collection {
|
|
16
|
+
id: string;
|
|
17
|
+
name: string;
|
|
18
|
+
key: string;
|
|
19
|
+
description?: string;
|
|
20
|
+
workspaceId?: string;
|
|
21
|
+
environmentId?: string;
|
|
22
|
+
}
|
|
23
|
+
export type FieldStatus = "search" | "ignore";
|
|
24
|
+
export interface CollectionSchemaField {
|
|
25
|
+
field: string;
|
|
26
|
+
fieldType: string;
|
|
27
|
+
status: FieldStatus;
|
|
28
|
+
documentCount: number;
|
|
29
|
+
percentage: number;
|
|
30
|
+
lastIngested: string;
|
|
31
|
+
}
|
|
32
|
+
export interface CollectionSchema {
|
|
33
|
+
totalDocuments: number;
|
|
34
|
+
fields: CollectionSchemaField[];
|
|
35
|
+
}
|
|
36
|
+
export interface InsertItemResponse {
|
|
37
|
+
id: string;
|
|
38
|
+
documentId: string;
|
|
39
|
+
transactionId: string;
|
|
40
|
+
}
|
|
41
|
+
export interface DocumentStatus<T = Record<string, unknown>> {
|
|
42
|
+
documentId: string;
|
|
43
|
+
status: "INGESTED" | "PENDING";
|
|
44
|
+
document: T | null;
|
|
45
|
+
}
|
|
46
|
+
export interface ImportJob {
|
|
47
|
+
jobId: string;
|
|
48
|
+
status: string;
|
|
49
|
+
totalItems?: number;
|
|
50
|
+
processedItems: number;
|
|
51
|
+
ingestedItems: number;
|
|
52
|
+
failedItems: number;
|
|
53
|
+
fileNames?: string[];
|
|
54
|
+
createdAt: string;
|
|
55
|
+
updatedAt: string;
|
|
56
|
+
}
|
|
57
|
+
export interface CreateEnvironmentRequest {
|
|
58
|
+
name: string;
|
|
59
|
+
}
|
|
60
|
+
export interface CreateCollectionRequest {
|
|
61
|
+
name: string;
|
|
62
|
+
description?: string;
|
|
63
|
+
}
|
|
64
|
+
type FilterValue = string | number | Date | boolean;
|
|
65
|
+
export interface FilterOperators {
|
|
66
|
+
eq?: FilterValue;
|
|
67
|
+
ne?: FilterValue;
|
|
68
|
+
lt?: number | Date;
|
|
69
|
+
lte?: number | Date;
|
|
70
|
+
gt?: number | Date;
|
|
71
|
+
gte?: number | Date;
|
|
72
|
+
in?: FilterValue[];
|
|
73
|
+
nin?: FilterValue[];
|
|
74
|
+
exists?: boolean;
|
|
75
|
+
}
|
|
76
|
+
export type SearchFilters = Record<string, FilterValue | FilterOperators>;
|
|
77
|
+
export interface SearchRequest {
|
|
78
|
+
search: string;
|
|
79
|
+
filters?: SearchFilters;
|
|
80
|
+
options?: {
|
|
81
|
+
requireAllWords?: boolean;
|
|
82
|
+
field?: string | string[];
|
|
83
|
+
rank?: boolean;
|
|
84
|
+
limit?: number;
|
|
85
|
+
offset?: number;
|
|
86
|
+
mode?: "keyword" | "semantic" | "hybrid";
|
|
87
|
+
highlight?: {
|
|
88
|
+
fields?: string[];
|
|
89
|
+
pre_tag?: string;
|
|
90
|
+
post_tag?: string;
|
|
91
|
+
};
|
|
92
|
+
};
|
|
93
|
+
facets?: string[];
|
|
94
|
+
sort?: Array<{
|
|
95
|
+
field: string;
|
|
96
|
+
order: "asc" | "desc";
|
|
97
|
+
}>;
|
|
98
|
+
}
|
|
99
|
+
export interface CreateImportJobRequest {
|
|
100
|
+
fileCount?: number;
|
|
101
|
+
fileNames?: string[];
|
|
102
|
+
}
|
|
103
|
+
export interface UpdateCollectionSchemaRequest {
|
|
104
|
+
fields: Array<{
|
|
105
|
+
field: string;
|
|
106
|
+
status: FieldStatus;
|
|
107
|
+
}>;
|
|
108
|
+
}
|
|
109
|
+
export interface SearchResult<T = Record<string, unknown>> {
|
|
110
|
+
document_id: string;
|
|
111
|
+
document: T;
|
|
112
|
+
_highlights?: Record<string, string>;
|
|
113
|
+
bm25_score?: number;
|
|
114
|
+
term_count?: number;
|
|
115
|
+
}
|
|
116
|
+
export interface SearchResponse<T = Record<string, unknown>> {
|
|
117
|
+
results: SearchResult<T>[];
|
|
118
|
+
count: number;
|
|
119
|
+
total?: number;
|
|
120
|
+
query_statistics: {
|
|
121
|
+
elapsed?: number;
|
|
122
|
+
rows_read?: number;
|
|
123
|
+
bytes_read?: number;
|
|
124
|
+
};
|
|
125
|
+
facets?: Record<string, Array<{
|
|
126
|
+
value: string;
|
|
127
|
+
count: number;
|
|
128
|
+
}>>;
|
|
129
|
+
}
|
|
130
|
+
export interface CreateImportJobResponse {
|
|
131
|
+
jobId: string;
|
|
132
|
+
uploadUrls: Array<{
|
|
133
|
+
url: string;
|
|
134
|
+
fileId: string;
|
|
135
|
+
}>;
|
|
136
|
+
}
|
|
137
|
+
export interface DeleteDocumentResponse {
|
|
138
|
+
documentId: string;
|
|
139
|
+
status: string;
|
|
140
|
+
}
|
|
141
|
+
export interface UpdateDocumentResponse {
|
|
142
|
+
documentId: string;
|
|
143
|
+
status: string;
|
|
144
|
+
}
|
|
145
|
+
export interface ItemOptions {
|
|
146
|
+
dryRun?: boolean;
|
|
147
|
+
}
|
|
148
|
+
export interface SearchOptions {
|
|
149
|
+
noQueryCache?: boolean;
|
|
150
|
+
}
|
|
151
|
+
export declare class PodgeError extends Error {
|
|
152
|
+
readonly code: string;
|
|
153
|
+
readonly status: number;
|
|
154
|
+
readonly details?: unknown;
|
|
155
|
+
constructor(code: string, message: string, status: number, details?: unknown);
|
|
156
|
+
}
|
|
157
|
+
export declare class PodgeValidationError extends PodgeError {
|
|
158
|
+
constructor(message: string, details?: unknown);
|
|
159
|
+
}
|
|
160
|
+
export declare class PodgeNotFoundError extends PodgeError {
|
|
161
|
+
constructor(message: string);
|
|
162
|
+
}
|
|
163
|
+
export declare class PodgeSDK {
|
|
164
|
+
private client;
|
|
165
|
+
private _workspace?;
|
|
166
|
+
private _environment?;
|
|
167
|
+
constructor(config: PodgeSDKConfig);
|
|
168
|
+
private resolveWs;
|
|
169
|
+
private resolveEnv;
|
|
170
|
+
private wsPath;
|
|
171
|
+
private envPath;
|
|
172
|
+
private colPath;
|
|
173
|
+
listEnvironments(): Promise<Environment[]>;
|
|
174
|
+
listEnvironments(ws: string): Promise<Environment[]>;
|
|
175
|
+
getEnvironment(): Promise<Environment>;
|
|
176
|
+
getEnvironment(ws: string, env: string): Promise<Environment>;
|
|
177
|
+
createEnvironment(body: CreateEnvironmentRequest): Promise<Environment>;
|
|
178
|
+
createEnvironment(ws: string, body: CreateEnvironmentRequest): Promise<Environment>;
|
|
179
|
+
listCollections(): Promise<Collection[]>;
|
|
180
|
+
listCollections(ws: string, env: string): Promise<Collection[]>;
|
|
181
|
+
getCollection(col: string): Promise<Collection>;
|
|
182
|
+
getCollection(ws: string, env: string, col: string): Promise<Collection>;
|
|
183
|
+
createCollection(body: CreateCollectionRequest): Promise<Collection>;
|
|
184
|
+
createCollection(ws: string, env: string, body: CreateCollectionRequest): Promise<Collection>;
|
|
185
|
+
getCollectionSchema(col: string): Promise<CollectionSchema>;
|
|
186
|
+
getCollectionSchema(ws: string, env: string, col: string): Promise<CollectionSchema>;
|
|
187
|
+
updateCollectionSchema(col: string, body: UpdateCollectionSchemaRequest): Promise<CollectionSchema>;
|
|
188
|
+
updateCollectionSchema(ws: string, env: string, col: string, body: UpdateCollectionSchemaRequest): Promise<CollectionSchema>;
|
|
189
|
+
createItem<T extends Record<string, unknown> = Record<string, unknown>>(col: string, document: T, opts?: ItemOptions): Promise<InsertItemResponse>;
|
|
190
|
+
createItem<T extends Record<string, unknown> = Record<string, unknown>>(ws: string, env: string, col: string, document: T, opts?: ItemOptions): Promise<InsertItemResponse>;
|
|
191
|
+
createItemsBatch<T extends Record<string, unknown> = Record<string, unknown>>(col: string, items: T[], opts?: ItemOptions): Promise<InsertItemResponse[]>;
|
|
192
|
+
createItemsBatch<T extends Record<string, unknown> = Record<string, unknown>>(ws: string, env: string, col: string, items: T[], opts?: ItemOptions): Promise<InsertItemResponse[]>;
|
|
193
|
+
getDocument<T = Record<string, unknown>>(col: string, docId: string): Promise<DocumentStatus<T>>;
|
|
194
|
+
getDocument<T = Record<string, unknown>>(ws: string, env: string, col: string, docId: string): Promise<DocumentStatus<T>>;
|
|
195
|
+
deleteDocument(col: string, docId: string): Promise<DeleteDocumentResponse>;
|
|
196
|
+
deleteDocument(ws: string, env: string, col: string, docId: string): Promise<DeleteDocumentResponse>;
|
|
197
|
+
updateDocument<T extends Record<string, unknown> = Record<string, unknown>>(col: string, docId: string, document: T): Promise<UpdateDocumentResponse>;
|
|
198
|
+
updateDocument<T extends Record<string, unknown> = Record<string, unknown>>(ws: string, env: string, col: string, docId: string, document: T): Promise<UpdateDocumentResponse>;
|
|
199
|
+
search<T = Record<string, unknown>>(col: string, request: SearchRequest, opts?: SearchOptions): Promise<SearchResponse<T>>;
|
|
200
|
+
search<T = Record<string, unknown>>(ws: string, env: string, col: string, request: SearchRequest, opts?: SearchOptions): Promise<SearchResponse<T>>;
|
|
201
|
+
generateUploadUrl(col: string): Promise<{
|
|
202
|
+
url: string;
|
|
203
|
+
fileId: string;
|
|
204
|
+
}>;
|
|
205
|
+
generateUploadUrl(ws: string, env: string, col: string): Promise<{
|
|
206
|
+
url: string;
|
|
207
|
+
fileId: string;
|
|
208
|
+
}>;
|
|
209
|
+
createImportJob(col: string, body?: CreateImportJobRequest): Promise<CreateImportJobResponse>;
|
|
210
|
+
createImportJob(ws: string, env: string, col: string, body?: CreateImportJobRequest): Promise<CreateImportJobResponse>;
|
|
211
|
+
listImportJobs(col: string): Promise<ImportJob[]>;
|
|
212
|
+
listImportJobs(ws: string, env: string, col: string): Promise<ImportJob[]>;
|
|
213
|
+
getImportJob(jobId: string): Promise<ImportJob>;
|
|
214
|
+
}
|
|
215
|
+
export default PodgeSDK;
|
|
216
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|