@palbase/docs 0.4.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/dist/index.cjs +296 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +212 -1
- package/dist/index.d.ts +212 -1
- package/dist/index.js +284 -1
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.cjs
CHANGED
|
@@ -21,8 +21,19 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
21
21
|
var index_exports = {};
|
|
22
22
|
__export(index_exports, {
|
|
23
23
|
CollectionRef: () => CollectionRef,
|
|
24
|
+
CollectionsAdminClient: () => CollectionsAdminClient,
|
|
25
|
+
CustomIndexesAdminClient: () => CustomIndexesAdminClient,
|
|
26
|
+
DocsAdminClient: () => DocsAdminClient,
|
|
24
27
|
DocsClient: () => DocsClient,
|
|
25
|
-
DocumentRef: () => DocumentRef
|
|
28
|
+
DocumentRef: () => DocumentRef,
|
|
29
|
+
GeoIndexesAdminClient: () => GeoIndexesAdminClient,
|
|
30
|
+
IndexesAdminClient: () => IndexesAdminClient,
|
|
31
|
+
MetricsAdminClient: () => MetricsAdminClient,
|
|
32
|
+
RulesAdminClient: () => RulesAdminClient,
|
|
33
|
+
SchemasAdminClient: () => SchemasAdminClient,
|
|
34
|
+
SearchIndexesAdminClient: () => SearchIndexesAdminClient,
|
|
35
|
+
VectorIndexesAdminClient: () => VectorIndexesAdminClient,
|
|
36
|
+
WebhooksAdminClient: () => WebhooksAdminClient
|
|
26
37
|
});
|
|
27
38
|
module.exports = __toCommonJS(index_exports);
|
|
28
39
|
|
|
@@ -284,10 +295,293 @@ var DocsClient = class {
|
|
|
284
295
|
return this.httpClient.request("POST", "/v1/docs/batch", { body });
|
|
285
296
|
}
|
|
286
297
|
};
|
|
298
|
+
|
|
299
|
+
// src/admin-client.ts
|
|
300
|
+
var DocsAdminClient = class {
|
|
301
|
+
collections;
|
|
302
|
+
schemas;
|
|
303
|
+
rules;
|
|
304
|
+
indexes;
|
|
305
|
+
webhooks;
|
|
306
|
+
metrics;
|
|
307
|
+
constructor(httpClient) {
|
|
308
|
+
this.collections = new CollectionsAdminClient(httpClient);
|
|
309
|
+
this.schemas = new SchemasAdminClient(httpClient);
|
|
310
|
+
this.rules = new RulesAdminClient(httpClient);
|
|
311
|
+
this.indexes = new IndexesAdminClient(httpClient);
|
|
312
|
+
this.webhooks = new WebhooksAdminClient(httpClient);
|
|
313
|
+
this.metrics = new MetricsAdminClient(httpClient);
|
|
314
|
+
}
|
|
315
|
+
};
|
|
316
|
+
var CollectionsAdminClient = class {
|
|
317
|
+
constructor(http) {
|
|
318
|
+
this.http = http;
|
|
319
|
+
}
|
|
320
|
+
http;
|
|
321
|
+
list() {
|
|
322
|
+
return this.http.request("GET", "/internal/collections");
|
|
323
|
+
}
|
|
324
|
+
stats(collection) {
|
|
325
|
+
return this.http.request(
|
|
326
|
+
"GET",
|
|
327
|
+
`/internal/collections/${encodeURIComponent(collection)}/stats`
|
|
328
|
+
);
|
|
329
|
+
}
|
|
330
|
+
schemaSample(collection) {
|
|
331
|
+
return this.http.request(
|
|
332
|
+
"GET",
|
|
333
|
+
`/internal/collections/${encodeURIComponent(collection)}/schema-sample`
|
|
334
|
+
);
|
|
335
|
+
}
|
|
336
|
+
tree(collection) {
|
|
337
|
+
return this.http.request(
|
|
338
|
+
"GET",
|
|
339
|
+
`/internal/collections/${encodeURIComponent(collection)}/tree`
|
|
340
|
+
);
|
|
341
|
+
}
|
|
342
|
+
};
|
|
343
|
+
var SchemasAdminClient = class {
|
|
344
|
+
constructor(http) {
|
|
345
|
+
this.http = http;
|
|
346
|
+
}
|
|
347
|
+
http;
|
|
348
|
+
list() {
|
|
349
|
+
return this.http.request("GET", "/internal/schemas");
|
|
350
|
+
}
|
|
351
|
+
get(collection) {
|
|
352
|
+
return this.http.request(
|
|
353
|
+
"GET",
|
|
354
|
+
`/internal/schemas/${encodeURIComponent(collection)}`
|
|
355
|
+
);
|
|
356
|
+
}
|
|
357
|
+
set(collection, schema) {
|
|
358
|
+
return this.http.request(
|
|
359
|
+
"POST",
|
|
360
|
+
`/internal/schemas/${encodeURIComponent(collection)}`,
|
|
361
|
+
{ body: { schema } }
|
|
362
|
+
);
|
|
363
|
+
}
|
|
364
|
+
delete(collection) {
|
|
365
|
+
return this.http.request(
|
|
366
|
+
"DELETE",
|
|
367
|
+
`/internal/schemas/${encodeURIComponent(collection)}`
|
|
368
|
+
);
|
|
369
|
+
}
|
|
370
|
+
};
|
|
371
|
+
var RulesAdminClient = class {
|
|
372
|
+
constructor(http) {
|
|
373
|
+
this.http = http;
|
|
374
|
+
}
|
|
375
|
+
http;
|
|
376
|
+
list() {
|
|
377
|
+
return this.http.request("GET", "/internal/rules");
|
|
378
|
+
}
|
|
379
|
+
get(collection) {
|
|
380
|
+
return this.http.request(
|
|
381
|
+
"GET",
|
|
382
|
+
`/internal/rules/${encodeURIComponent(collection)}`
|
|
383
|
+
);
|
|
384
|
+
}
|
|
385
|
+
set(collection, rules) {
|
|
386
|
+
return this.http.request(
|
|
387
|
+
"POST",
|
|
388
|
+
`/internal/rules/${encodeURIComponent(collection)}`,
|
|
389
|
+
{ body: { rules } }
|
|
390
|
+
);
|
|
391
|
+
}
|
|
392
|
+
delete(collection) {
|
|
393
|
+
return this.http.request(
|
|
394
|
+
"DELETE",
|
|
395
|
+
`/internal/rules/${encodeURIComponent(collection)}`
|
|
396
|
+
);
|
|
397
|
+
}
|
|
398
|
+
};
|
|
399
|
+
var IndexesAdminClient = class {
|
|
400
|
+
search;
|
|
401
|
+
vector;
|
|
402
|
+
geo;
|
|
403
|
+
custom;
|
|
404
|
+
constructor(http) {
|
|
405
|
+
this.search = new SearchIndexesAdminClient(http);
|
|
406
|
+
this.vector = new VectorIndexesAdminClient(http);
|
|
407
|
+
this.geo = new GeoIndexesAdminClient(http);
|
|
408
|
+
this.custom = new CustomIndexesAdminClient(http);
|
|
409
|
+
}
|
|
410
|
+
};
|
|
411
|
+
var SearchIndexesAdminClient = class {
|
|
412
|
+
constructor(http) {
|
|
413
|
+
this.http = http;
|
|
414
|
+
}
|
|
415
|
+
http;
|
|
416
|
+
list() {
|
|
417
|
+
return this.http.request("GET", "/internal/search-indexes");
|
|
418
|
+
}
|
|
419
|
+
get(collection) {
|
|
420
|
+
return this.http.request(
|
|
421
|
+
"GET",
|
|
422
|
+
`/internal/search-indexes/${encodeURIComponent(collection)}`
|
|
423
|
+
);
|
|
424
|
+
}
|
|
425
|
+
create(collection, input) {
|
|
426
|
+
return this.http.request(
|
|
427
|
+
"POST",
|
|
428
|
+
`/internal/search-indexes/${encodeURIComponent(collection)}`,
|
|
429
|
+
{ body: input }
|
|
430
|
+
);
|
|
431
|
+
}
|
|
432
|
+
delete(collection) {
|
|
433
|
+
return this.http.request(
|
|
434
|
+
"DELETE",
|
|
435
|
+
`/internal/search-indexes/${encodeURIComponent(collection)}`
|
|
436
|
+
);
|
|
437
|
+
}
|
|
438
|
+
rebuild(collection) {
|
|
439
|
+
return this.http.request(
|
|
440
|
+
"POST",
|
|
441
|
+
`/internal/search-indexes/${encodeURIComponent(collection)}/rebuild`
|
|
442
|
+
);
|
|
443
|
+
}
|
|
444
|
+
};
|
|
445
|
+
var VectorIndexesAdminClient = class {
|
|
446
|
+
constructor(http) {
|
|
447
|
+
this.http = http;
|
|
448
|
+
}
|
|
449
|
+
http;
|
|
450
|
+
list() {
|
|
451
|
+
return this.http.request("GET", "/internal/vector-indexes");
|
|
452
|
+
}
|
|
453
|
+
create(collection, input) {
|
|
454
|
+
return this.http.request(
|
|
455
|
+
"POST",
|
|
456
|
+
`/internal/vector-indexes/${encodeURIComponent(collection)}`,
|
|
457
|
+
{ body: input }
|
|
458
|
+
);
|
|
459
|
+
}
|
|
460
|
+
delete(collection, field) {
|
|
461
|
+
return this.http.request(
|
|
462
|
+
"DELETE",
|
|
463
|
+
`/internal/vector-indexes/${encodeURIComponent(collection)}/${encodeURIComponent(field)}`
|
|
464
|
+
);
|
|
465
|
+
}
|
|
466
|
+
};
|
|
467
|
+
var GeoIndexesAdminClient = class {
|
|
468
|
+
constructor(http) {
|
|
469
|
+
this.http = http;
|
|
470
|
+
}
|
|
471
|
+
http;
|
|
472
|
+
list() {
|
|
473
|
+
return this.http.request("GET", "/internal/geo-indexes");
|
|
474
|
+
}
|
|
475
|
+
create(collection, input) {
|
|
476
|
+
return this.http.request(
|
|
477
|
+
"POST",
|
|
478
|
+
`/internal/geo-indexes/${encodeURIComponent(collection)}`,
|
|
479
|
+
{ body: input }
|
|
480
|
+
);
|
|
481
|
+
}
|
|
482
|
+
delete(collection, field) {
|
|
483
|
+
return this.http.request(
|
|
484
|
+
"DELETE",
|
|
485
|
+
`/internal/geo-indexes/${encodeURIComponent(collection)}/${encodeURIComponent(field)}`
|
|
486
|
+
);
|
|
487
|
+
}
|
|
488
|
+
};
|
|
489
|
+
var CustomIndexesAdminClient = class {
|
|
490
|
+
constructor(http) {
|
|
491
|
+
this.http = http;
|
|
492
|
+
}
|
|
493
|
+
http;
|
|
494
|
+
list() {
|
|
495
|
+
return this.http.request("GET", "/internal/indexes");
|
|
496
|
+
}
|
|
497
|
+
listByCollection(collection) {
|
|
498
|
+
return this.http.request(
|
|
499
|
+
"GET",
|
|
500
|
+
`/internal/indexes/${encodeURIComponent(collection)}`
|
|
501
|
+
);
|
|
502
|
+
}
|
|
503
|
+
create(collection, input) {
|
|
504
|
+
return this.http.request(
|
|
505
|
+
"POST",
|
|
506
|
+
`/internal/indexes/${encodeURIComponent(collection)}`,
|
|
507
|
+
{ body: input }
|
|
508
|
+
);
|
|
509
|
+
}
|
|
510
|
+
delete(collection, name) {
|
|
511
|
+
return this.http.request(
|
|
512
|
+
"DELETE",
|
|
513
|
+
`/internal/indexes/${encodeURIComponent(collection)}/${encodeURIComponent(name)}`
|
|
514
|
+
);
|
|
515
|
+
}
|
|
516
|
+
};
|
|
517
|
+
var WebhooksAdminClient = class {
|
|
518
|
+
constructor(http) {
|
|
519
|
+
this.http = http;
|
|
520
|
+
}
|
|
521
|
+
http;
|
|
522
|
+
list() {
|
|
523
|
+
return this.http.request("GET", "/internal/webhooks");
|
|
524
|
+
}
|
|
525
|
+
get(id) {
|
|
526
|
+
return this.http.request(
|
|
527
|
+
"GET",
|
|
528
|
+
`/internal/webhooks/${encodeURIComponent(id)}`
|
|
529
|
+
);
|
|
530
|
+
}
|
|
531
|
+
create(input) {
|
|
532
|
+
return this.http.request("POST", "/internal/webhooks", {
|
|
533
|
+
body: input
|
|
534
|
+
});
|
|
535
|
+
}
|
|
536
|
+
delete(id) {
|
|
537
|
+
return this.http.request(
|
|
538
|
+
"DELETE",
|
|
539
|
+
`/internal/webhooks/${encodeURIComponent(id)}`
|
|
540
|
+
);
|
|
541
|
+
}
|
|
542
|
+
deliveries(id) {
|
|
543
|
+
return this.http.request(
|
|
544
|
+
"GET",
|
|
545
|
+
`/internal/webhooks/${encodeURIComponent(id)}/deliveries`
|
|
546
|
+
);
|
|
547
|
+
}
|
|
548
|
+
};
|
|
549
|
+
var MetricsAdminClient = class {
|
|
550
|
+
constructor(http) {
|
|
551
|
+
this.http = http;
|
|
552
|
+
}
|
|
553
|
+
http;
|
|
554
|
+
project() {
|
|
555
|
+
return this.http.request("GET", "/internal/metrics");
|
|
556
|
+
}
|
|
557
|
+
collection(collection) {
|
|
558
|
+
return this.http.request(
|
|
559
|
+
"GET",
|
|
560
|
+
`/internal/metrics/${encodeURIComponent(collection)}`
|
|
561
|
+
);
|
|
562
|
+
}
|
|
563
|
+
timeseries(collection) {
|
|
564
|
+
return this.http.request(
|
|
565
|
+
"GET",
|
|
566
|
+
`/internal/metrics/${encodeURIComponent(collection)}/timeseries`
|
|
567
|
+
);
|
|
568
|
+
}
|
|
569
|
+
};
|
|
287
570
|
// Annotate the CommonJS export names for ESM import in node:
|
|
288
571
|
0 && (module.exports = {
|
|
289
572
|
CollectionRef,
|
|
573
|
+
CollectionsAdminClient,
|
|
574
|
+
CustomIndexesAdminClient,
|
|
575
|
+
DocsAdminClient,
|
|
290
576
|
DocsClient,
|
|
291
|
-
DocumentRef
|
|
577
|
+
DocumentRef,
|
|
578
|
+
GeoIndexesAdminClient,
|
|
579
|
+
IndexesAdminClient,
|
|
580
|
+
MetricsAdminClient,
|
|
581
|
+
RulesAdminClient,
|
|
582
|
+
SchemasAdminClient,
|
|
583
|
+
SearchIndexesAdminClient,
|
|
584
|
+
VectorIndexesAdminClient,
|
|
585
|
+
WebhooksAdminClient
|
|
292
586
|
});
|
|
293
587
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/docs-client.ts","../src/document-ref.ts","../src/collection-ref.ts"],"sourcesContent":["export { DocsClient } from './docs-client.js';\nexport { CollectionRef } from './collection-ref.js';\nexport { DocumentRef } from './document-ref.js';\nexport type {\n WhereOperator,\n OrderDirection,\n WhereClause,\n OrderByClause,\n DocumentData,\n DocumentSnapshot,\n DocChange,\n QuerySnapshot,\n SnapshotCallback,\n BatchOperationType,\n BatchOperation,\n} from './types.js';\n","import type { HttpClient, PalbaseResponse } from '@palbase/core';\nimport { PalbaseError } from '@palbase/core';\nimport { CollectionRef } from './collection-ref.js';\nimport type { BatchOperation, DocumentData } from './types.js';\n\nconst MAX_BATCH_SIZE = 500;\nconst SEGMENT_RE = /^[a-zA-Z0-9_\\-]+$/;\n\nfunction validateSegment(segment: string, label: string): void {\n if (!SEGMENT_RE.test(segment)) {\n throw new Error(`Invalid ${label}: \"${segment}\". Must match ${SEGMENT_RE.source}`);\n }\n}\n\nexport class DocsClient {\n private readonly httpClient: HttpClient;\n\n constructor(httpClient: HttpClient) {\n this.httpClient = httpClient;\n }\n\n collection<T = DocumentData>(name: string): CollectionRef<T> {\n validateSegment(name, 'collection name');\n return new CollectionRef<T>(this.httpClient, name);\n }\n\n async batch(operations: BatchOperation[]): Promise<PalbaseResponse<void>> {\n if (operations.length > MAX_BATCH_SIZE) {\n return {\n data: null,\n error: new PalbaseError(\n 'batch_too_large',\n `Batch size ${operations.length} exceeds maximum of ${MAX_BATCH_SIZE}`,\n 400,\n ),\n status: 400,\n };\n }\n\n if (operations.length === 0) {\n return { data: null, error: null, status: 200 };\n }\n\n const body = operations.map((op) => ({\n op: op.op,\n path: op.ref.path,\n data: op.data,\n }));\n\n return this.httpClient.request<void>('POST', '/v1/docs/batch', { body });\n }\n}\n","import type { HttpClient, PalbaseResponse } from '@palbase/core';\nimport { CollectionRef } from './collection-ref.js';\nimport type { DocumentData, DocumentSnapshot } from './types.js';\n\nconst SEGMENT_RE = /^[a-zA-Z0-9_\\-]+$/;\n\nfunction validateSegment(segment: string, label: string): void {\n if (!SEGMENT_RE.test(segment)) {\n throw new Error(`Invalid ${label}: \"${segment}\". Must match ${SEGMENT_RE.source}`);\n }\n}\n\nexport class DocumentRef<T = DocumentData> {\n readonly path: string;\n private readonly httpClient: HttpClient;\n\n constructor(httpClient: HttpClient, path: string) {\n this.httpClient = httpClient;\n this.path = path;\n }\n\n async set(data: T): Promise<PalbaseResponse<void>> {\n return this.httpClient.request<void>('PUT', `/v1/docs/${this.path}`, {\n body: data,\n });\n }\n\n async get(): Promise<PalbaseResponse<DocumentSnapshot<T>>> {\n const response = await this.httpClient.request<{ id: string; data: T; exists: boolean }>(\n 'GET',\n `/v1/docs/${this.path}`,\n );\n\n if (response.error) {\n return {\n data: null,\n error: response.error,\n status: response.status,\n };\n }\n\n const raw = response.data;\n const snapshot: DocumentSnapshot<T> = {\n id: raw?.id ?? this.getDocId(),\n exists: raw?.exists ?? false,\n data: () => raw?.data,\n ref: { path: this.path },\n };\n\n return { data: snapshot, error: null, status: response.status };\n }\n\n async update(data: Partial<T>): Promise<PalbaseResponse<void>> {\n return this.httpClient.request<void>('PATCH', `/v1/docs/${this.path}`, {\n body: data,\n });\n }\n\n async delete(): Promise<PalbaseResponse<void>> {\n return this.httpClient.request<void>('DELETE', `/v1/docs/${this.path}`);\n }\n\n collection(name: string): CollectionRef {\n validateSegment(name, 'subcollection name');\n return new CollectionRef(this.httpClient, `${this.path}/${name}`);\n }\n\n private getDocId(): string {\n const segments = this.path.split('/');\n return segments[segments.length - 1] ?? '';\n }\n}\n","import type { HttpClient, PalbaseResponse } from '@palbase/core';\nimport { DocumentRef } from './document-ref.js';\nimport type {\n DocumentData,\n DocumentSnapshot,\n OrderByClause,\n OrderDirection,\n QuerySnapshot,\n SnapshotCallback,\n WhereClause,\n WhereOperator,\n} from './types.js';\n\nconst SEGMENT_RE = /^[a-zA-Z0-9_\\-]+$/;\n\nfunction validateSegment(segment: string, label: string): void {\n if (!SEGMENT_RE.test(segment)) {\n throw new Error(`Invalid ${label}: \"${segment}\". Must match ${SEGMENT_RE.source}`);\n }\n}\n\nexport class CollectionRef<T = DocumentData> {\n readonly path: string;\n private readonly httpClient: HttpClient;\n private readonly whereClauses: WhereClause[] = [];\n private readonly orderByClauses: OrderByClause[] = [];\n private limitValue: number | undefined;\n\n constructor(httpClient: HttpClient, path: string) {\n this.httpClient = httpClient;\n this.path = path;\n }\n\n doc(id: string): DocumentRef<T> {\n validateSegment(id, 'document ID');\n return new DocumentRef<T>(this.httpClient, `${this.path}/${id}`);\n }\n\n async add(data: T): Promise<PalbaseResponse<DocumentRef<T>>> {\n const response = await this.httpClient.request<{ id: string }>(\n 'POST',\n `/v1/docs/${this.path}`,\n { body: data },\n );\n\n if (response.error || !response.data) {\n return {\n data: null,\n error: response.error,\n status: response.status,\n };\n }\n\n const ref = new DocumentRef<T>(this.httpClient, `${this.path}/${response.data.id}`);\n return { data: ref, error: null, status: response.status };\n }\n\n where(field: string, op: WhereOperator, value: unknown): CollectionRef<T> {\n const clone = this.clone();\n clone.whereClauses.push({ field, op, value });\n return clone;\n }\n\n orderBy(field: string, direction?: OrderDirection): CollectionRef<T> {\n const clone = this.clone();\n clone.orderByClauses.push({ field, direction: direction ?? 'asc' });\n return clone;\n }\n\n limit(n: number): CollectionRef<T> {\n const clone = this.clone();\n clone.limitValue = n;\n return clone;\n }\n\n async get(): Promise<PalbaseResponse<QuerySnapshot<T>>> {\n const hasQuery = this.whereClauses.length > 0 || this.orderByClauses.length > 0 || this.limitValue !== undefined;\n\n if (hasQuery) {\n return this.executeQuery();\n }\n\n const response = await this.httpClient.request<{ documents: { id: string; data: T }[] }>(\n 'GET',\n `/v1/docs/${this.path}`,\n );\n\n if (response.error) {\n return { data: null, error: response.error, status: response.status };\n }\n\n const docs = (response.data?.documents ?? []).map((doc) => this.toSnapshot(doc));\n return {\n data: this.toQuerySnapshot(docs),\n error: null,\n status: response.status,\n };\n }\n\n onSnapshot(callback: SnapshotCallback<T>): () => void {\n const body = this.buildQueryBody();\n\n let active = true;\n let controller: AbortController | undefined;\n\n const poll = async () => {\n if (!active) return;\n controller = new AbortController();\n\n const response = await this.httpClient.request<{ documents: { id: string; data: T }[] }>(\n 'POST',\n `/v1/docs/${this.path}/listen`,\n { body, signal: controller.signal },\n );\n\n if (!active) return;\n\n if (response.data) {\n const docs = (response.data.documents ?? []).map((doc) => this.toSnapshot(doc));\n callback(this.toQuerySnapshot(docs));\n }\n };\n\n // Start initial poll\n void poll();\n\n return () => {\n active = false;\n controller?.abort();\n };\n }\n\n private async executeQuery(): Promise<PalbaseResponse<QuerySnapshot<T>>> {\n const body = this.buildQueryBody();\n\n const response = await this.httpClient.request<{ documents: { id: string; data: T }[] }>(\n 'POST',\n `/v1/docs/${this.path}/query`,\n { body },\n );\n\n if (response.error) {\n return { data: null, error: response.error, status: response.status };\n }\n\n const docs = (response.data?.documents ?? []).map((doc) => this.toSnapshot(doc));\n return {\n data: this.toQuerySnapshot(docs),\n error: null,\n status: response.status,\n };\n }\n\n private buildQueryBody(): Record<string, unknown> {\n const body: Record<string, unknown> = {};\n\n if (this.whereClauses.length > 0) {\n body['where'] = this.whereClauses.map((w) => ({\n field: w.field,\n op: w.op,\n value: w.value,\n }));\n }\n\n if (this.orderByClauses.length > 0) {\n body['orderBy'] = this.orderByClauses.map((o) => ({\n field: o.field,\n direction: o.direction,\n }));\n }\n\n if (this.limitValue !== undefined) {\n body['limit'] = this.limitValue;\n }\n\n return body;\n }\n\n private toSnapshot(doc: { id: string; data: T }): DocumentSnapshot<T> {\n return {\n id: doc.id,\n exists: true,\n data: () => doc.data,\n ref: { path: `${this.path}/${doc.id}` },\n };\n }\n\n private toQuerySnapshot(docs: DocumentSnapshot<T>[]): QuerySnapshot<T> {\n return {\n docs,\n empty: docs.length === 0,\n size: docs.length,\n docChanges: () => docs.map((doc) => ({ type: 'added' as const, doc })),\n };\n }\n\n private clone(): CollectionRef<T> {\n const cloned = new CollectionRef<T>(this.httpClient, this.path);\n cloned.whereClauses.push(...this.whereClauses);\n cloned.orderByClauses.push(...this.orderByClauses);\n cloned.limitValue = this.limitValue;\n return cloned;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACCA,kBAA6B;;;ACG7B,IAAM,aAAa;AAEnB,SAAS,gBAAgB,SAAiB,OAAqB;AAC7D,MAAI,CAAC,WAAW,KAAK,OAAO,GAAG;AAC7B,UAAM,IAAI,MAAM,WAAW,KAAK,MAAM,OAAO,iBAAiB,WAAW,MAAM,EAAE;AAAA,EACnF;AACF;AAEO,IAAM,cAAN,MAAoC;AAAA,EAChC;AAAA,EACQ;AAAA,EAEjB,YAAY,YAAwB,MAAc;AAChD,SAAK,aAAa;AAClB,SAAK,OAAO;AAAA,EACd;AAAA,EAEA,MAAM,IAAI,MAAyC;AACjD,WAAO,KAAK,WAAW,QAAc,OAAO,YAAY,KAAK,IAAI,IAAI;AAAA,MACnE,MAAM;AAAA,IACR,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,MAAqD;AACzD,UAAM,WAAW,MAAM,KAAK,WAAW;AAAA,MACrC;AAAA,MACA,YAAY,KAAK,IAAI;AAAA,IACvB;AAEA,QAAI,SAAS,OAAO;AAClB,aAAO;AAAA,QACL,MAAM;AAAA,QACN,OAAO,SAAS;AAAA,QAChB,QAAQ,SAAS;AAAA,MACnB;AAAA,IACF;AAEA,UAAM,MAAM,SAAS;AACrB,UAAM,WAAgC;AAAA,MACpC,IAAI,KAAK,MAAM,KAAK,SAAS;AAAA,MAC7B,QAAQ,KAAK,UAAU;AAAA,MACvB,MAAM,MAAM,KAAK;AAAA,MACjB,KAAK,EAAE,MAAM,KAAK,KAAK;AAAA,IACzB;AAEA,WAAO,EAAE,MAAM,UAAU,OAAO,MAAM,QAAQ,SAAS,OAAO;AAAA,EAChE;AAAA,EAEA,MAAM,OAAO,MAAkD;AAC7D,WAAO,KAAK,WAAW,QAAc,SAAS,YAAY,KAAK,IAAI,IAAI;AAAA,MACrE,MAAM;AAAA,IACR,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,SAAyC;AAC7C,WAAO,KAAK,WAAW,QAAc,UAAU,YAAY,KAAK,IAAI,EAAE;AAAA,EACxE;AAAA,EAEA,WAAW,MAA6B;AACtC,oBAAgB,MAAM,oBAAoB;AAC1C,WAAO,IAAI,cAAc,KAAK,YAAY,GAAG,KAAK,IAAI,IAAI,IAAI,EAAE;AAAA,EAClE;AAAA,EAEQ,WAAmB;AACzB,UAAM,WAAW,KAAK,KAAK,MAAM,GAAG;AACpC,WAAO,SAAS,SAAS,SAAS,CAAC,KAAK;AAAA,EAC1C;AACF;;;AC1DA,IAAMA,cAAa;AAEnB,SAASC,iBAAgB,SAAiB,OAAqB;AAC7D,MAAI,CAACD,YAAW,KAAK,OAAO,GAAG;AAC7B,UAAM,IAAI,MAAM,WAAW,KAAK,MAAM,OAAO,iBAAiBA,YAAW,MAAM,EAAE;AAAA,EACnF;AACF;AAEO,IAAM,gBAAN,MAAM,eAAgC;AAAA,EAClC;AAAA,EACQ;AAAA,EACA,eAA8B,CAAC;AAAA,EAC/B,iBAAkC,CAAC;AAAA,EAC5C;AAAA,EAER,YAAY,YAAwB,MAAc;AAChD,SAAK,aAAa;AAClB,SAAK,OAAO;AAAA,EACd;AAAA,EAEA,IAAI,IAA4B;AAC9B,IAAAC,iBAAgB,IAAI,aAAa;AACjC,WAAO,IAAI,YAAe,KAAK,YAAY,GAAG,KAAK,IAAI,IAAI,EAAE,EAAE;AAAA,EACjE;AAAA,EAEA,MAAM,IAAI,MAAmD;AAC3D,UAAM,WAAW,MAAM,KAAK,WAAW;AAAA,MACrC;AAAA,MACA,YAAY,KAAK,IAAI;AAAA,MACrB,EAAE,MAAM,KAAK;AAAA,IACf;AAEA,QAAI,SAAS,SAAS,CAAC,SAAS,MAAM;AACpC,aAAO;AAAA,QACL,MAAM;AAAA,QACN,OAAO,SAAS;AAAA,QAChB,QAAQ,SAAS;AAAA,MACnB;AAAA,IACF;AAEA,UAAM,MAAM,IAAI,YAAe,KAAK,YAAY,GAAG,KAAK,IAAI,IAAI,SAAS,KAAK,EAAE,EAAE;AAClF,WAAO,EAAE,MAAM,KAAK,OAAO,MAAM,QAAQ,SAAS,OAAO;AAAA,EAC3D;AAAA,EAEA,MAAM,OAAe,IAAmB,OAAkC;AACxE,UAAM,QAAQ,KAAK,MAAM;AACzB,UAAM,aAAa,KAAK,EAAE,OAAO,IAAI,MAAM,CAAC;AAC5C,WAAO;AAAA,EACT;AAAA,EAEA,QAAQ,OAAe,WAA8C;AACnE,UAAM,QAAQ,KAAK,MAAM;AACzB,UAAM,eAAe,KAAK,EAAE,OAAO,WAAW,aAAa,MAAM,CAAC;AAClE,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,GAA6B;AACjC,UAAM,QAAQ,KAAK,MAAM;AACzB,UAAM,aAAa;AACnB,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,MAAkD;AACtD,UAAM,WAAW,KAAK,aAAa,SAAS,KAAK,KAAK,eAAe,SAAS,KAAK,KAAK,eAAe;AAEvG,QAAI,UAAU;AACZ,aAAO,KAAK,aAAa;AAAA,IAC3B;AAEA,UAAM,WAAW,MAAM,KAAK,WAAW;AAAA,MACrC;AAAA,MACA,YAAY,KAAK,IAAI;AAAA,IACvB;AAEA,QAAI,SAAS,OAAO;AAClB,aAAO,EAAE,MAAM,MAAM,OAAO,SAAS,OAAO,QAAQ,SAAS,OAAO;AAAA,IACtE;AAEA,UAAM,QAAQ,SAAS,MAAM,aAAa,CAAC,GAAG,IAAI,CAAC,QAAQ,KAAK,WAAW,GAAG,CAAC;AAC/E,WAAO;AAAA,MACL,MAAM,KAAK,gBAAgB,IAAI;AAAA,MAC/B,OAAO;AAAA,MACP,QAAQ,SAAS;AAAA,IACnB;AAAA,EACF;AAAA,EAEA,WAAW,UAA2C;AACpD,UAAM,OAAO,KAAK,eAAe;AAEjC,QAAI,SAAS;AACb,QAAI;AAEJ,UAAM,OAAO,YAAY;AACvB,UAAI,CAAC,OAAQ;AACb,mBAAa,IAAI,gBAAgB;AAEjC,YAAM,WAAW,MAAM,KAAK,WAAW;AAAA,QACrC;AAAA,QACA,YAAY,KAAK,IAAI;AAAA,QACrB,EAAE,MAAM,QAAQ,WAAW,OAAO;AAAA,MACpC;AAEA,UAAI,CAAC,OAAQ;AAEb,UAAI,SAAS,MAAM;AACjB,cAAM,QAAQ,SAAS,KAAK,aAAa,CAAC,GAAG,IAAI,CAAC,QAAQ,KAAK,WAAW,GAAG,CAAC;AAC9E,iBAAS,KAAK,gBAAgB,IAAI,CAAC;AAAA,MACrC;AAAA,IACF;AAGA,SAAK,KAAK;AAEV,WAAO,MAAM;AACX,eAAS;AACT,kBAAY,MAAM;AAAA,IACpB;AAAA,EACF;AAAA,EAEA,MAAc,eAA2D;AACvE,UAAM,OAAO,KAAK,eAAe;AAEjC,UAAM,WAAW,MAAM,KAAK,WAAW;AAAA,MACrC;AAAA,MACA,YAAY,KAAK,IAAI;AAAA,MACrB,EAAE,KAAK;AAAA,IACT;AAEA,QAAI,SAAS,OAAO;AAClB,aAAO,EAAE,MAAM,MAAM,OAAO,SAAS,OAAO,QAAQ,SAAS,OAAO;AAAA,IACtE;AAEA,UAAM,QAAQ,SAAS,MAAM,aAAa,CAAC,GAAG,IAAI,CAAC,QAAQ,KAAK,WAAW,GAAG,CAAC;AAC/E,WAAO;AAAA,MACL,MAAM,KAAK,gBAAgB,IAAI;AAAA,MAC/B,OAAO;AAAA,MACP,QAAQ,SAAS;AAAA,IACnB;AAAA,EACF;AAAA,EAEQ,iBAA0C;AAChD,UAAM,OAAgC,CAAC;AAEvC,QAAI,KAAK,aAAa,SAAS,GAAG;AAChC,WAAK,OAAO,IAAI,KAAK,aAAa,IAAI,CAAC,OAAO;AAAA,QAC5C,OAAO,EAAE;AAAA,QACT,IAAI,EAAE;AAAA,QACN,OAAO,EAAE;AAAA,MACX,EAAE;AAAA,IACJ;AAEA,QAAI,KAAK,eAAe,SAAS,GAAG;AAClC,WAAK,SAAS,IAAI,KAAK,eAAe,IAAI,CAAC,OAAO;AAAA,QAChD,OAAO,EAAE;AAAA,QACT,WAAW,EAAE;AAAA,MACf,EAAE;AAAA,IACJ;AAEA,QAAI,KAAK,eAAe,QAAW;AACjC,WAAK,OAAO,IAAI,KAAK;AAAA,IACvB;AAEA,WAAO;AAAA,EACT;AAAA,EAEQ,WAAW,KAAmD;AACpE,WAAO;AAAA,MACL,IAAI,IAAI;AAAA,MACR,QAAQ;AAAA,MACR,MAAM,MAAM,IAAI;AAAA,MAChB,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,IAAI,IAAI,EAAE,GAAG;AAAA,IACxC;AAAA,EACF;AAAA,EAEQ,gBAAgB,MAA+C;AACrE,WAAO;AAAA,MACL;AAAA,MACA,OAAO,KAAK,WAAW;AAAA,MACvB,MAAM,KAAK;AAAA,MACX,YAAY,MAAM,KAAK,IAAI,CAAC,SAAS,EAAE,MAAM,SAAkB,IAAI,EAAE;AAAA,IACvE;AAAA,EACF;AAAA,EAEQ,QAA0B;AAChC,UAAM,SAAS,IAAI,eAAiB,KAAK,YAAY,KAAK,IAAI;AAC9D,WAAO,aAAa,KAAK,GAAG,KAAK,YAAY;AAC7C,WAAO,eAAe,KAAK,GAAG,KAAK,cAAc;AACjD,WAAO,aAAa,KAAK;AACzB,WAAO;AAAA,EACT;AACF;;;AFtMA,IAAM,iBAAiB;AACvB,IAAMC,cAAa;AAEnB,SAASC,iBAAgB,SAAiB,OAAqB;AAC7D,MAAI,CAACD,YAAW,KAAK,OAAO,GAAG;AAC7B,UAAM,IAAI,MAAM,WAAW,KAAK,MAAM,OAAO,iBAAiBA,YAAW,MAAM,EAAE;AAAA,EACnF;AACF;AAEO,IAAM,aAAN,MAAiB;AAAA,EACL;AAAA,EAEjB,YAAY,YAAwB;AAClC,SAAK,aAAa;AAAA,EACpB;AAAA,EAEA,WAA6B,MAAgC;AAC3D,IAAAC,iBAAgB,MAAM,iBAAiB;AACvC,WAAO,IAAI,cAAiB,KAAK,YAAY,IAAI;AAAA,EACnD;AAAA,EAEA,MAAM,MAAM,YAA8D;AACxE,QAAI,WAAW,SAAS,gBAAgB;AACtC,aAAO;AAAA,QACL,MAAM;AAAA,QACN,OAAO,IAAI;AAAA,UACT;AAAA,UACA,cAAc,WAAW,MAAM,uBAAuB,cAAc;AAAA,UACpE;AAAA,QACF;AAAA,QACA,QAAQ;AAAA,MACV;AAAA,IACF;AAEA,QAAI,WAAW,WAAW,GAAG;AAC3B,aAAO,EAAE,MAAM,MAAM,OAAO,MAAM,QAAQ,IAAI;AAAA,IAChD;AAEA,UAAM,OAAO,WAAW,IAAI,CAAC,QAAQ;AAAA,MACnC,IAAI,GAAG;AAAA,MACP,MAAM,GAAG,IAAI;AAAA,MACb,MAAM,GAAG;AAAA,IACX,EAAE;AAEF,WAAO,KAAK,WAAW,QAAc,QAAQ,kBAAkB,EAAE,KAAK,CAAC;AAAA,EACzE;AACF;","names":["SEGMENT_RE","validateSegment","SEGMENT_RE","validateSegment"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/docs-client.ts","../src/document-ref.ts","../src/collection-ref.ts","../src/admin-client.ts"],"sourcesContent":["export { DocsClient } from './docs-client.js';\nexport { CollectionRef } from './collection-ref.js';\nexport { DocumentRef } from './document-ref.js';\nexport type {\n WhereOperator,\n OrderDirection,\n WhereClause,\n OrderByClause,\n DocumentData,\n DocumentSnapshot,\n DocChange,\n QuerySnapshot,\n SnapshotCallback,\n BatchOperationType,\n BatchOperation,\n} from './types.js';\n\n// Admin surface (wraps /internal/* routes on modules/documents).\nexport {\n DocsAdminClient,\n CollectionsAdminClient,\n SchemasAdminClient,\n RulesAdminClient,\n IndexesAdminClient,\n SearchIndexesAdminClient,\n VectorIndexesAdminClient,\n GeoIndexesAdminClient,\n CustomIndexesAdminClient,\n WebhooksAdminClient,\n MetricsAdminClient,\n} from './admin-client.js';\nexport type {\n CollectionSummary,\n CollectionStats,\n SchemaSample,\n CollectionTreeNode,\n CollectionSchema,\n CollectionRules,\n SearchIndex,\n VectorIndex,\n GeoIndex,\n CustomIndex,\n DocsWebhook,\n DocsWebhookDelivery,\n ProjectDocsMetrics,\n CollectionDocsMetrics,\n TimeseriesPoint,\n} from './admin-client.js';\n","import type { HttpClient, PalbaseResponse } from '@palbase/core';\nimport { PalbaseError } from '@palbase/core';\nimport { CollectionRef } from './collection-ref.js';\nimport type { BatchOperation, DocumentData } from './types.js';\n\nconst MAX_BATCH_SIZE = 500;\nconst SEGMENT_RE = /^[a-zA-Z0-9_\\-]+$/;\n\nfunction validateSegment(segment: string, label: string): void {\n if (!SEGMENT_RE.test(segment)) {\n throw new Error(`Invalid ${label}: \"${segment}\". Must match ${SEGMENT_RE.source}`);\n }\n}\n\nexport class DocsClient {\n private readonly httpClient: HttpClient;\n\n constructor(httpClient: HttpClient) {\n this.httpClient = httpClient;\n }\n\n collection<T = DocumentData>(name: string): CollectionRef<T> {\n validateSegment(name, 'collection name');\n return new CollectionRef<T>(this.httpClient, name);\n }\n\n async batch(operations: BatchOperation[]): Promise<PalbaseResponse<void>> {\n if (operations.length > MAX_BATCH_SIZE) {\n return {\n data: null,\n error: new PalbaseError(\n 'batch_too_large',\n `Batch size ${operations.length} exceeds maximum of ${MAX_BATCH_SIZE}`,\n 400,\n ),\n status: 400,\n };\n }\n\n if (operations.length === 0) {\n return { data: null, error: null, status: 200 };\n }\n\n const body = operations.map((op) => ({\n op: op.op,\n path: op.ref.path,\n data: op.data,\n }));\n\n return this.httpClient.request<void>('POST', '/v1/docs/batch', { body });\n }\n}\n","import type { HttpClient, PalbaseResponse } from '@palbase/core';\nimport { CollectionRef } from './collection-ref.js';\nimport type { DocumentData, DocumentSnapshot } from './types.js';\n\nconst SEGMENT_RE = /^[a-zA-Z0-9_\\-]+$/;\n\nfunction validateSegment(segment: string, label: string): void {\n if (!SEGMENT_RE.test(segment)) {\n throw new Error(`Invalid ${label}: \"${segment}\". Must match ${SEGMENT_RE.source}`);\n }\n}\n\nexport class DocumentRef<T = DocumentData> {\n readonly path: string;\n private readonly httpClient: HttpClient;\n\n constructor(httpClient: HttpClient, path: string) {\n this.httpClient = httpClient;\n this.path = path;\n }\n\n async set(data: T): Promise<PalbaseResponse<void>> {\n return this.httpClient.request<void>('PUT', `/v1/docs/${this.path}`, {\n body: data,\n });\n }\n\n async get(): Promise<PalbaseResponse<DocumentSnapshot<T>>> {\n const response = await this.httpClient.request<{ id: string; data: T; exists: boolean }>(\n 'GET',\n `/v1/docs/${this.path}`,\n );\n\n if (response.error) {\n return {\n data: null,\n error: response.error,\n status: response.status,\n };\n }\n\n const raw = response.data;\n const snapshot: DocumentSnapshot<T> = {\n id: raw?.id ?? this.getDocId(),\n exists: raw?.exists ?? false,\n data: () => raw?.data,\n ref: { path: this.path },\n };\n\n return { data: snapshot, error: null, status: response.status };\n }\n\n async update(data: Partial<T>): Promise<PalbaseResponse<void>> {\n return this.httpClient.request<void>('PATCH', `/v1/docs/${this.path}`, {\n body: data,\n });\n }\n\n async delete(): Promise<PalbaseResponse<void>> {\n return this.httpClient.request<void>('DELETE', `/v1/docs/${this.path}`);\n }\n\n collection(name: string): CollectionRef {\n validateSegment(name, 'subcollection name');\n return new CollectionRef(this.httpClient, `${this.path}/${name}`);\n }\n\n private getDocId(): string {\n const segments = this.path.split('/');\n return segments[segments.length - 1] ?? '';\n }\n}\n","import type { HttpClient, PalbaseResponse } from '@palbase/core';\nimport { DocumentRef } from './document-ref.js';\nimport type {\n DocumentData,\n DocumentSnapshot,\n OrderByClause,\n OrderDirection,\n QuerySnapshot,\n SnapshotCallback,\n WhereClause,\n WhereOperator,\n} from './types.js';\n\nconst SEGMENT_RE = /^[a-zA-Z0-9_\\-]+$/;\n\nfunction validateSegment(segment: string, label: string): void {\n if (!SEGMENT_RE.test(segment)) {\n throw new Error(`Invalid ${label}: \"${segment}\". Must match ${SEGMENT_RE.source}`);\n }\n}\n\nexport class CollectionRef<T = DocumentData> {\n readonly path: string;\n private readonly httpClient: HttpClient;\n private readonly whereClauses: WhereClause[] = [];\n private readonly orderByClauses: OrderByClause[] = [];\n private limitValue: number | undefined;\n\n constructor(httpClient: HttpClient, path: string) {\n this.httpClient = httpClient;\n this.path = path;\n }\n\n doc(id: string): DocumentRef<T> {\n validateSegment(id, 'document ID');\n return new DocumentRef<T>(this.httpClient, `${this.path}/${id}`);\n }\n\n async add(data: T): Promise<PalbaseResponse<DocumentRef<T>>> {\n const response = await this.httpClient.request<{ id: string }>(\n 'POST',\n `/v1/docs/${this.path}`,\n { body: data },\n );\n\n if (response.error || !response.data) {\n return {\n data: null,\n error: response.error,\n status: response.status,\n };\n }\n\n const ref = new DocumentRef<T>(this.httpClient, `${this.path}/${response.data.id}`);\n return { data: ref, error: null, status: response.status };\n }\n\n where(field: string, op: WhereOperator, value: unknown): CollectionRef<T> {\n const clone = this.clone();\n clone.whereClauses.push({ field, op, value });\n return clone;\n }\n\n orderBy(field: string, direction?: OrderDirection): CollectionRef<T> {\n const clone = this.clone();\n clone.orderByClauses.push({ field, direction: direction ?? 'asc' });\n return clone;\n }\n\n limit(n: number): CollectionRef<T> {\n const clone = this.clone();\n clone.limitValue = n;\n return clone;\n }\n\n async get(): Promise<PalbaseResponse<QuerySnapshot<T>>> {\n const hasQuery = this.whereClauses.length > 0 || this.orderByClauses.length > 0 || this.limitValue !== undefined;\n\n if (hasQuery) {\n return this.executeQuery();\n }\n\n const response = await this.httpClient.request<{ documents: { id: string; data: T }[] }>(\n 'GET',\n `/v1/docs/${this.path}`,\n );\n\n if (response.error) {\n return { data: null, error: response.error, status: response.status };\n }\n\n const docs = (response.data?.documents ?? []).map((doc) => this.toSnapshot(doc));\n return {\n data: this.toQuerySnapshot(docs),\n error: null,\n status: response.status,\n };\n }\n\n onSnapshot(callback: SnapshotCallback<T>): () => void {\n const body = this.buildQueryBody();\n\n let active = true;\n let controller: AbortController | undefined;\n\n const poll = async () => {\n if (!active) return;\n controller = new AbortController();\n\n const response = await this.httpClient.request<{ documents: { id: string; data: T }[] }>(\n 'POST',\n `/v1/docs/${this.path}/listen`,\n { body, signal: controller.signal },\n );\n\n if (!active) return;\n\n if (response.data) {\n const docs = (response.data.documents ?? []).map((doc) => this.toSnapshot(doc));\n callback(this.toQuerySnapshot(docs));\n }\n };\n\n // Start initial poll\n void poll();\n\n return () => {\n active = false;\n controller?.abort();\n };\n }\n\n private async executeQuery(): Promise<PalbaseResponse<QuerySnapshot<T>>> {\n const body = this.buildQueryBody();\n\n const response = await this.httpClient.request<{ documents: { id: string; data: T }[] }>(\n 'POST',\n `/v1/docs/${this.path}/query`,\n { body },\n );\n\n if (response.error) {\n return { data: null, error: response.error, status: response.status };\n }\n\n const docs = (response.data?.documents ?? []).map((doc) => this.toSnapshot(doc));\n return {\n data: this.toQuerySnapshot(docs),\n error: null,\n status: response.status,\n };\n }\n\n private buildQueryBody(): Record<string, unknown> {\n const body: Record<string, unknown> = {};\n\n if (this.whereClauses.length > 0) {\n body['where'] = this.whereClauses.map((w) => ({\n field: w.field,\n op: w.op,\n value: w.value,\n }));\n }\n\n if (this.orderByClauses.length > 0) {\n body['orderBy'] = this.orderByClauses.map((o) => ({\n field: o.field,\n direction: o.direction,\n }));\n }\n\n if (this.limitValue !== undefined) {\n body['limit'] = this.limitValue;\n }\n\n return body;\n }\n\n private toSnapshot(doc: { id: string; data: T }): DocumentSnapshot<T> {\n return {\n id: doc.id,\n exists: true,\n data: () => doc.data,\n ref: { path: `${this.path}/${doc.id}` },\n };\n }\n\n private toQuerySnapshot(docs: DocumentSnapshot<T>[]): QuerySnapshot<T> {\n return {\n docs,\n empty: docs.length === 0,\n size: docs.length,\n docChanges: () => docs.map((doc) => ({ type: 'added' as const, doc })),\n };\n }\n\n private clone(): CollectionRef<T> {\n const cloned = new CollectionRef<T>(this.httpClient, this.path);\n cloned.whereClauses.push(...this.whereClauses);\n cloned.orderByClauses.push(...this.orderByClauses);\n cloned.limitValue = this.limitValue;\n return cloned;\n }\n}\n","import type { HttpClient, PalbaseResponse } from '@palbase/core';\n\n/**\n * Admin client for the documents module — wraps the `/internal/*` HTTP\n * surface exposed by `modules/documents`. The backend sits behind\n * service-role / HMAC auth; all requests go through an HttpClient that\n * has the project admin token attached.\n *\n * Surfaces: collections browser, schemas, rules, indexes (search / vector\n * / geo / generic), webhooks, and project-level metrics. Import/export,\n * schedules and materialised views are intentionally out of scope for\n * this first cut.\n */\nexport class DocsAdminClient {\n readonly collections: CollectionsAdminClient;\n readonly schemas: SchemasAdminClient;\n readonly rules: RulesAdminClient;\n readonly indexes: IndexesAdminClient;\n readonly webhooks: WebhooksAdminClient;\n readonly metrics: MetricsAdminClient;\n\n constructor(httpClient: HttpClient) {\n this.collections = new CollectionsAdminClient(httpClient);\n this.schemas = new SchemasAdminClient(httpClient);\n this.rules = new RulesAdminClient(httpClient);\n this.indexes = new IndexesAdminClient(httpClient);\n this.webhooks = new WebhooksAdminClient(httpClient);\n this.metrics = new MetricsAdminClient(httpClient);\n }\n}\n\n// ── Collections (browser) ────────────────────────────────────\n\n/** Row from `GET /internal/collections`. */\nexport interface CollectionSummary {\n name: string;\n document_count: number;\n bytes?: number;\n last_written_at?: string;\n}\n\nexport interface CollectionStats {\n name: string;\n document_count: number;\n bytes: number;\n avg_document_bytes: number;\n indexes: number;\n}\n\nexport interface SchemaSample {\n fields: Array<{ name: string; type: string; occurrences: number }>;\n sample_size: number;\n}\n\nexport interface CollectionTreeNode {\n path: string;\n documents: number;\n subcollections: CollectionTreeNode[];\n}\n\nexport class CollectionsAdminClient {\n constructor(private readonly http: HttpClient) {}\n\n list(): Promise<PalbaseResponse<CollectionSummary[]>> {\n return this.http.request<CollectionSummary[]>('GET', '/internal/collections');\n }\n\n stats(collection: string): Promise<PalbaseResponse<CollectionStats>> {\n return this.http.request<CollectionStats>(\n 'GET',\n `/internal/collections/${encodeURIComponent(collection)}/stats`,\n );\n }\n\n schemaSample(collection: string): Promise<PalbaseResponse<SchemaSample>> {\n return this.http.request<SchemaSample>(\n 'GET',\n `/internal/collections/${encodeURIComponent(collection)}/schema-sample`,\n );\n }\n\n tree(collection: string): Promise<PalbaseResponse<CollectionTreeNode>> {\n return this.http.request<CollectionTreeNode>(\n 'GET',\n `/internal/collections/${encodeURIComponent(collection)}/tree`,\n );\n }\n}\n\n// ── Schemas ─────────────────────────────────────────────────\n\nexport interface CollectionSchema {\n collection: string;\n /** JSON-schema document. Shape passes through as-is. */\n schema: Record<string, unknown>;\n updated_at?: string;\n}\n\nexport class SchemasAdminClient {\n constructor(private readonly http: HttpClient) {}\n\n list(): Promise<PalbaseResponse<CollectionSchema[]>> {\n return this.http.request<CollectionSchema[]>('GET', '/internal/schemas');\n }\n\n get(collection: string): Promise<PalbaseResponse<CollectionSchema>> {\n return this.http.request<CollectionSchema>(\n 'GET',\n `/internal/schemas/${encodeURIComponent(collection)}`,\n );\n }\n\n set(\n collection: string,\n schema: Record<string, unknown>,\n ): Promise<PalbaseResponse<CollectionSchema>> {\n return this.http.request<CollectionSchema>(\n 'POST',\n `/internal/schemas/${encodeURIComponent(collection)}`,\n { body: { schema } },\n );\n }\n\n delete(collection: string): Promise<PalbaseResponse<void>> {\n return this.http.request<void>(\n 'DELETE',\n `/internal/schemas/${encodeURIComponent(collection)}`,\n );\n }\n}\n\n// ── Security rules ──────────────────────────────────────────\n\nexport interface CollectionRules {\n collection: string;\n /** Palbase rules DSL source. */\n rules: string;\n updated_at?: string;\n}\n\nexport class RulesAdminClient {\n constructor(private readonly http: HttpClient) {}\n\n list(): Promise<PalbaseResponse<CollectionRules[]>> {\n return this.http.request<CollectionRules[]>('GET', '/internal/rules');\n }\n\n get(collection: string): Promise<PalbaseResponse<CollectionRules>> {\n return this.http.request<CollectionRules>(\n 'GET',\n `/internal/rules/${encodeURIComponent(collection)}`,\n );\n }\n\n set(collection: string, rules: string): Promise<PalbaseResponse<CollectionRules>> {\n return this.http.request<CollectionRules>(\n 'POST',\n `/internal/rules/${encodeURIComponent(collection)}`,\n { body: { rules } },\n );\n }\n\n delete(collection: string): Promise<PalbaseResponse<void>> {\n return this.http.request<void>(\n 'DELETE',\n `/internal/rules/${encodeURIComponent(collection)}`,\n );\n }\n}\n\n// ── Indexes ─────────────────────────────────────────────────\n\nexport interface SearchIndex {\n collection: string;\n fields: string[];\n analyzer?: string;\n created_at?: string;\n}\n\nexport interface VectorIndex {\n collection: string;\n field: string;\n dimensions: number;\n metric?: 'cosine' | 'dot' | 'l2';\n}\n\nexport interface GeoIndex {\n collection: string;\n field: string;\n}\n\nexport interface CustomIndex {\n collection: string;\n name: string;\n fields: Array<{ field: string; direction?: 'asc' | 'desc' }>;\n unique?: boolean;\n}\n\n/**\n * Indexes surface groups together the four index types the documents\n * module manages: search, vector, geo, and custom (b-tree) indexes.\n * Each sub-namespace wraps its `/internal/<kind>-indexes` (or\n * `/internal/indexes`) routes.\n */\nexport class IndexesAdminClient {\n readonly search: SearchIndexesAdminClient;\n readonly vector: VectorIndexesAdminClient;\n readonly geo: GeoIndexesAdminClient;\n readonly custom: CustomIndexesAdminClient;\n\n constructor(http: HttpClient) {\n this.search = new SearchIndexesAdminClient(http);\n this.vector = new VectorIndexesAdminClient(http);\n this.geo = new GeoIndexesAdminClient(http);\n this.custom = new CustomIndexesAdminClient(http);\n }\n}\n\nexport class SearchIndexesAdminClient {\n constructor(private readonly http: HttpClient) {}\n\n list(): Promise<PalbaseResponse<SearchIndex[]>> {\n return this.http.request<SearchIndex[]>('GET', '/internal/search-indexes');\n }\n\n get(collection: string): Promise<PalbaseResponse<SearchIndex>> {\n return this.http.request<SearchIndex>(\n 'GET',\n `/internal/search-indexes/${encodeURIComponent(collection)}`,\n );\n }\n\n create(\n collection: string,\n input: { fields: string[]; analyzer?: string },\n ): Promise<PalbaseResponse<SearchIndex>> {\n return this.http.request<SearchIndex>(\n 'POST',\n `/internal/search-indexes/${encodeURIComponent(collection)}`,\n { body: input },\n );\n }\n\n delete(collection: string): Promise<PalbaseResponse<void>> {\n return this.http.request<void>(\n 'DELETE',\n `/internal/search-indexes/${encodeURIComponent(collection)}`,\n );\n }\n\n rebuild(collection: string): Promise<PalbaseResponse<void>> {\n return this.http.request<void>(\n 'POST',\n `/internal/search-indexes/${encodeURIComponent(collection)}/rebuild`,\n );\n }\n}\n\nexport class VectorIndexesAdminClient {\n constructor(private readonly http: HttpClient) {}\n\n list(): Promise<PalbaseResponse<VectorIndex[]>> {\n return this.http.request<VectorIndex[]>('GET', '/internal/vector-indexes');\n }\n\n create(\n collection: string,\n input: { field: string; dimensions: number; metric?: VectorIndex['metric'] },\n ): Promise<PalbaseResponse<VectorIndex>> {\n return this.http.request<VectorIndex>(\n 'POST',\n `/internal/vector-indexes/${encodeURIComponent(collection)}`,\n { body: input },\n );\n }\n\n delete(collection: string, field: string): Promise<PalbaseResponse<void>> {\n return this.http.request<void>(\n 'DELETE',\n `/internal/vector-indexes/${encodeURIComponent(collection)}/${encodeURIComponent(field)}`,\n );\n }\n}\n\nexport class GeoIndexesAdminClient {\n constructor(private readonly http: HttpClient) {}\n\n list(): Promise<PalbaseResponse<GeoIndex[]>> {\n return this.http.request<GeoIndex[]>('GET', '/internal/geo-indexes');\n }\n\n create(\n collection: string,\n input: { field: string },\n ): Promise<PalbaseResponse<GeoIndex>> {\n return this.http.request<GeoIndex>(\n 'POST',\n `/internal/geo-indexes/${encodeURIComponent(collection)}`,\n { body: input },\n );\n }\n\n delete(collection: string, field: string): Promise<PalbaseResponse<void>> {\n return this.http.request<void>(\n 'DELETE',\n `/internal/geo-indexes/${encodeURIComponent(collection)}/${encodeURIComponent(field)}`,\n );\n }\n}\n\nexport class CustomIndexesAdminClient {\n constructor(private readonly http: HttpClient) {}\n\n list(): Promise<PalbaseResponse<CustomIndex[]>> {\n return this.http.request<CustomIndex[]>('GET', '/internal/indexes');\n }\n\n listByCollection(collection: string): Promise<PalbaseResponse<CustomIndex[]>> {\n return this.http.request<CustomIndex[]>(\n 'GET',\n `/internal/indexes/${encodeURIComponent(collection)}`,\n );\n }\n\n create(\n collection: string,\n input: Pick<CustomIndex, 'name' | 'fields' | 'unique'>,\n ): Promise<PalbaseResponse<CustomIndex>> {\n return this.http.request<CustomIndex>(\n 'POST',\n `/internal/indexes/${encodeURIComponent(collection)}`,\n { body: input },\n );\n }\n\n delete(collection: string, name: string): Promise<PalbaseResponse<void>> {\n return this.http.request<void>(\n 'DELETE',\n `/internal/indexes/${encodeURIComponent(collection)}/${encodeURIComponent(name)}`,\n );\n }\n}\n\n// ── Webhooks ────────────────────────────────────────────────\n\nexport interface DocsWebhook {\n id: string;\n url: string;\n events: string[];\n collection?: string;\n secret?: string;\n created_at?: string;\n}\n\nexport interface DocsWebhookDelivery {\n id: string;\n webhook_id: string;\n status: 'pending' | 'success' | 'failed';\n attempts: number;\n response_status?: number;\n last_error?: string;\n created_at: string;\n}\n\nexport class WebhooksAdminClient {\n constructor(private readonly http: HttpClient) {}\n\n list(): Promise<PalbaseResponse<DocsWebhook[]>> {\n return this.http.request<DocsWebhook[]>('GET', '/internal/webhooks');\n }\n\n get(id: string): Promise<PalbaseResponse<DocsWebhook>> {\n return this.http.request<DocsWebhook>(\n 'GET',\n `/internal/webhooks/${encodeURIComponent(id)}`,\n );\n }\n\n create(\n input: Pick<DocsWebhook, 'url' | 'events' | 'collection' | 'secret'>,\n ): Promise<PalbaseResponse<DocsWebhook>> {\n return this.http.request<DocsWebhook>('POST', '/internal/webhooks', {\n body: input,\n });\n }\n\n delete(id: string): Promise<PalbaseResponse<void>> {\n return this.http.request<void>(\n 'DELETE',\n `/internal/webhooks/${encodeURIComponent(id)}`,\n );\n }\n\n deliveries(id: string): Promise<PalbaseResponse<DocsWebhookDelivery[]>> {\n return this.http.request<DocsWebhookDelivery[]>(\n 'GET',\n `/internal/webhooks/${encodeURIComponent(id)}/deliveries`,\n );\n }\n}\n\n// ── Metrics ─────────────────────────────────────────────────\n\nexport interface ProjectDocsMetrics {\n total_documents: number;\n total_bytes: number;\n collection_count: number;\n reads_last_24h?: number;\n writes_last_24h?: number;\n}\n\nexport interface CollectionDocsMetrics extends ProjectDocsMetrics {\n collection: string;\n}\n\nexport interface TimeseriesPoint {\n t: number;\n reads: number;\n writes: number;\n deletes: number;\n}\n\nexport class MetricsAdminClient {\n constructor(private readonly http: HttpClient) {}\n\n project(): Promise<PalbaseResponse<ProjectDocsMetrics>> {\n return this.http.request<ProjectDocsMetrics>('GET', '/internal/metrics');\n }\n\n collection(collection: string): Promise<PalbaseResponse<CollectionDocsMetrics>> {\n return this.http.request<CollectionDocsMetrics>(\n 'GET',\n `/internal/metrics/${encodeURIComponent(collection)}`,\n );\n }\n\n timeseries(collection: string): Promise<PalbaseResponse<TimeseriesPoint[]>> {\n return this.http.request<TimeseriesPoint[]>(\n 'GET',\n `/internal/metrics/${encodeURIComponent(collection)}/timeseries`,\n );\n }\n}\n"],"mappings":"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","names":["SEGMENT_RE","validateSegment","SEGMENT_RE","validateSegment"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -82,4 +82,215 @@ declare class DocsClient {
|
|
|
82
82
|
batch(operations: BatchOperation[]): Promise<PalbaseResponse<void>>;
|
|
83
83
|
}
|
|
84
84
|
|
|
85
|
-
|
|
85
|
+
/**
|
|
86
|
+
* Admin client for the documents module — wraps the `/internal/*` HTTP
|
|
87
|
+
* surface exposed by `modules/documents`. The backend sits behind
|
|
88
|
+
* service-role / HMAC auth; all requests go through an HttpClient that
|
|
89
|
+
* has the project admin token attached.
|
|
90
|
+
*
|
|
91
|
+
* Surfaces: collections browser, schemas, rules, indexes (search / vector
|
|
92
|
+
* / geo / generic), webhooks, and project-level metrics. Import/export,
|
|
93
|
+
* schedules and materialised views are intentionally out of scope for
|
|
94
|
+
* this first cut.
|
|
95
|
+
*/
|
|
96
|
+
declare class DocsAdminClient {
|
|
97
|
+
readonly collections: CollectionsAdminClient;
|
|
98
|
+
readonly schemas: SchemasAdminClient;
|
|
99
|
+
readonly rules: RulesAdminClient;
|
|
100
|
+
readonly indexes: IndexesAdminClient;
|
|
101
|
+
readonly webhooks: WebhooksAdminClient;
|
|
102
|
+
readonly metrics: MetricsAdminClient;
|
|
103
|
+
constructor(httpClient: HttpClient);
|
|
104
|
+
}
|
|
105
|
+
/** Row from `GET /internal/collections`. */
|
|
106
|
+
interface CollectionSummary {
|
|
107
|
+
name: string;
|
|
108
|
+
document_count: number;
|
|
109
|
+
bytes?: number;
|
|
110
|
+
last_written_at?: string;
|
|
111
|
+
}
|
|
112
|
+
interface CollectionStats {
|
|
113
|
+
name: string;
|
|
114
|
+
document_count: number;
|
|
115
|
+
bytes: number;
|
|
116
|
+
avg_document_bytes: number;
|
|
117
|
+
indexes: number;
|
|
118
|
+
}
|
|
119
|
+
interface SchemaSample {
|
|
120
|
+
fields: Array<{
|
|
121
|
+
name: string;
|
|
122
|
+
type: string;
|
|
123
|
+
occurrences: number;
|
|
124
|
+
}>;
|
|
125
|
+
sample_size: number;
|
|
126
|
+
}
|
|
127
|
+
interface CollectionTreeNode {
|
|
128
|
+
path: string;
|
|
129
|
+
documents: number;
|
|
130
|
+
subcollections: CollectionTreeNode[];
|
|
131
|
+
}
|
|
132
|
+
declare class CollectionsAdminClient {
|
|
133
|
+
private readonly http;
|
|
134
|
+
constructor(http: HttpClient);
|
|
135
|
+
list(): Promise<PalbaseResponse<CollectionSummary[]>>;
|
|
136
|
+
stats(collection: string): Promise<PalbaseResponse<CollectionStats>>;
|
|
137
|
+
schemaSample(collection: string): Promise<PalbaseResponse<SchemaSample>>;
|
|
138
|
+
tree(collection: string): Promise<PalbaseResponse<CollectionTreeNode>>;
|
|
139
|
+
}
|
|
140
|
+
interface CollectionSchema {
|
|
141
|
+
collection: string;
|
|
142
|
+
/** JSON-schema document. Shape passes through as-is. */
|
|
143
|
+
schema: Record<string, unknown>;
|
|
144
|
+
updated_at?: string;
|
|
145
|
+
}
|
|
146
|
+
declare class SchemasAdminClient {
|
|
147
|
+
private readonly http;
|
|
148
|
+
constructor(http: HttpClient);
|
|
149
|
+
list(): Promise<PalbaseResponse<CollectionSchema[]>>;
|
|
150
|
+
get(collection: string): Promise<PalbaseResponse<CollectionSchema>>;
|
|
151
|
+
set(collection: string, schema: Record<string, unknown>): Promise<PalbaseResponse<CollectionSchema>>;
|
|
152
|
+
delete(collection: string): Promise<PalbaseResponse<void>>;
|
|
153
|
+
}
|
|
154
|
+
interface CollectionRules {
|
|
155
|
+
collection: string;
|
|
156
|
+
/** Palbase rules DSL source. */
|
|
157
|
+
rules: string;
|
|
158
|
+
updated_at?: string;
|
|
159
|
+
}
|
|
160
|
+
declare class RulesAdminClient {
|
|
161
|
+
private readonly http;
|
|
162
|
+
constructor(http: HttpClient);
|
|
163
|
+
list(): Promise<PalbaseResponse<CollectionRules[]>>;
|
|
164
|
+
get(collection: string): Promise<PalbaseResponse<CollectionRules>>;
|
|
165
|
+
set(collection: string, rules: string): Promise<PalbaseResponse<CollectionRules>>;
|
|
166
|
+
delete(collection: string): Promise<PalbaseResponse<void>>;
|
|
167
|
+
}
|
|
168
|
+
interface SearchIndex {
|
|
169
|
+
collection: string;
|
|
170
|
+
fields: string[];
|
|
171
|
+
analyzer?: string;
|
|
172
|
+
created_at?: string;
|
|
173
|
+
}
|
|
174
|
+
interface VectorIndex {
|
|
175
|
+
collection: string;
|
|
176
|
+
field: string;
|
|
177
|
+
dimensions: number;
|
|
178
|
+
metric?: 'cosine' | 'dot' | 'l2';
|
|
179
|
+
}
|
|
180
|
+
interface GeoIndex {
|
|
181
|
+
collection: string;
|
|
182
|
+
field: string;
|
|
183
|
+
}
|
|
184
|
+
interface CustomIndex {
|
|
185
|
+
collection: string;
|
|
186
|
+
name: string;
|
|
187
|
+
fields: Array<{
|
|
188
|
+
field: string;
|
|
189
|
+
direction?: 'asc' | 'desc';
|
|
190
|
+
}>;
|
|
191
|
+
unique?: boolean;
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Indexes surface groups together the four index types the documents
|
|
195
|
+
* module manages: search, vector, geo, and custom (b-tree) indexes.
|
|
196
|
+
* Each sub-namespace wraps its `/internal/<kind>-indexes` (or
|
|
197
|
+
* `/internal/indexes`) routes.
|
|
198
|
+
*/
|
|
199
|
+
declare class IndexesAdminClient {
|
|
200
|
+
readonly search: SearchIndexesAdminClient;
|
|
201
|
+
readonly vector: VectorIndexesAdminClient;
|
|
202
|
+
readonly geo: GeoIndexesAdminClient;
|
|
203
|
+
readonly custom: CustomIndexesAdminClient;
|
|
204
|
+
constructor(http: HttpClient);
|
|
205
|
+
}
|
|
206
|
+
declare class SearchIndexesAdminClient {
|
|
207
|
+
private readonly http;
|
|
208
|
+
constructor(http: HttpClient);
|
|
209
|
+
list(): Promise<PalbaseResponse<SearchIndex[]>>;
|
|
210
|
+
get(collection: string): Promise<PalbaseResponse<SearchIndex>>;
|
|
211
|
+
create(collection: string, input: {
|
|
212
|
+
fields: string[];
|
|
213
|
+
analyzer?: string;
|
|
214
|
+
}): Promise<PalbaseResponse<SearchIndex>>;
|
|
215
|
+
delete(collection: string): Promise<PalbaseResponse<void>>;
|
|
216
|
+
rebuild(collection: string): Promise<PalbaseResponse<void>>;
|
|
217
|
+
}
|
|
218
|
+
declare class VectorIndexesAdminClient {
|
|
219
|
+
private readonly http;
|
|
220
|
+
constructor(http: HttpClient);
|
|
221
|
+
list(): Promise<PalbaseResponse<VectorIndex[]>>;
|
|
222
|
+
create(collection: string, input: {
|
|
223
|
+
field: string;
|
|
224
|
+
dimensions: number;
|
|
225
|
+
metric?: VectorIndex['metric'];
|
|
226
|
+
}): Promise<PalbaseResponse<VectorIndex>>;
|
|
227
|
+
delete(collection: string, field: string): Promise<PalbaseResponse<void>>;
|
|
228
|
+
}
|
|
229
|
+
declare class GeoIndexesAdminClient {
|
|
230
|
+
private readonly http;
|
|
231
|
+
constructor(http: HttpClient);
|
|
232
|
+
list(): Promise<PalbaseResponse<GeoIndex[]>>;
|
|
233
|
+
create(collection: string, input: {
|
|
234
|
+
field: string;
|
|
235
|
+
}): Promise<PalbaseResponse<GeoIndex>>;
|
|
236
|
+
delete(collection: string, field: string): Promise<PalbaseResponse<void>>;
|
|
237
|
+
}
|
|
238
|
+
declare class CustomIndexesAdminClient {
|
|
239
|
+
private readonly http;
|
|
240
|
+
constructor(http: HttpClient);
|
|
241
|
+
list(): Promise<PalbaseResponse<CustomIndex[]>>;
|
|
242
|
+
listByCollection(collection: string): Promise<PalbaseResponse<CustomIndex[]>>;
|
|
243
|
+
create(collection: string, input: Pick<CustomIndex, 'name' | 'fields' | 'unique'>): Promise<PalbaseResponse<CustomIndex>>;
|
|
244
|
+
delete(collection: string, name: string): Promise<PalbaseResponse<void>>;
|
|
245
|
+
}
|
|
246
|
+
interface DocsWebhook {
|
|
247
|
+
id: string;
|
|
248
|
+
url: string;
|
|
249
|
+
events: string[];
|
|
250
|
+
collection?: string;
|
|
251
|
+
secret?: string;
|
|
252
|
+
created_at?: string;
|
|
253
|
+
}
|
|
254
|
+
interface DocsWebhookDelivery {
|
|
255
|
+
id: string;
|
|
256
|
+
webhook_id: string;
|
|
257
|
+
status: 'pending' | 'success' | 'failed';
|
|
258
|
+
attempts: number;
|
|
259
|
+
response_status?: number;
|
|
260
|
+
last_error?: string;
|
|
261
|
+
created_at: string;
|
|
262
|
+
}
|
|
263
|
+
declare class WebhooksAdminClient {
|
|
264
|
+
private readonly http;
|
|
265
|
+
constructor(http: HttpClient);
|
|
266
|
+
list(): Promise<PalbaseResponse<DocsWebhook[]>>;
|
|
267
|
+
get(id: string): Promise<PalbaseResponse<DocsWebhook>>;
|
|
268
|
+
create(input: Pick<DocsWebhook, 'url' | 'events' | 'collection' | 'secret'>): Promise<PalbaseResponse<DocsWebhook>>;
|
|
269
|
+
delete(id: string): Promise<PalbaseResponse<void>>;
|
|
270
|
+
deliveries(id: string): Promise<PalbaseResponse<DocsWebhookDelivery[]>>;
|
|
271
|
+
}
|
|
272
|
+
interface ProjectDocsMetrics {
|
|
273
|
+
total_documents: number;
|
|
274
|
+
total_bytes: number;
|
|
275
|
+
collection_count: number;
|
|
276
|
+
reads_last_24h?: number;
|
|
277
|
+
writes_last_24h?: number;
|
|
278
|
+
}
|
|
279
|
+
interface CollectionDocsMetrics extends ProjectDocsMetrics {
|
|
280
|
+
collection: string;
|
|
281
|
+
}
|
|
282
|
+
interface TimeseriesPoint {
|
|
283
|
+
t: number;
|
|
284
|
+
reads: number;
|
|
285
|
+
writes: number;
|
|
286
|
+
deletes: number;
|
|
287
|
+
}
|
|
288
|
+
declare class MetricsAdminClient {
|
|
289
|
+
private readonly http;
|
|
290
|
+
constructor(http: HttpClient);
|
|
291
|
+
project(): Promise<PalbaseResponse<ProjectDocsMetrics>>;
|
|
292
|
+
collection(collection: string): Promise<PalbaseResponse<CollectionDocsMetrics>>;
|
|
293
|
+
timeseries(collection: string): Promise<PalbaseResponse<TimeseriesPoint[]>>;
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
export { type BatchOperation, type BatchOperationType, type CollectionDocsMetrics, CollectionRef, type CollectionRules, type CollectionSchema, type CollectionStats, type CollectionSummary, type CollectionTreeNode, CollectionsAdminClient, type CustomIndex, CustomIndexesAdminClient, type DocChange, DocsAdminClient, DocsClient, type DocsWebhook, type DocsWebhookDelivery, type DocumentData, DocumentRef, type DocumentSnapshot, type GeoIndex, GeoIndexesAdminClient, IndexesAdminClient, MetricsAdminClient, type OrderByClause, type OrderDirection, type ProjectDocsMetrics, type QuerySnapshot, RulesAdminClient, type SchemaSample, SchemasAdminClient, type SearchIndex, SearchIndexesAdminClient, type SnapshotCallback, type TimeseriesPoint, type VectorIndex, VectorIndexesAdminClient, WebhooksAdminClient, type WhereClause, type WhereOperator };
|
package/dist/index.d.ts
CHANGED
|
@@ -82,4 +82,215 @@ declare class DocsClient {
|
|
|
82
82
|
batch(operations: BatchOperation[]): Promise<PalbaseResponse<void>>;
|
|
83
83
|
}
|
|
84
84
|
|
|
85
|
-
|
|
85
|
+
/**
|
|
86
|
+
* Admin client for the documents module — wraps the `/internal/*` HTTP
|
|
87
|
+
* surface exposed by `modules/documents`. The backend sits behind
|
|
88
|
+
* service-role / HMAC auth; all requests go through an HttpClient that
|
|
89
|
+
* has the project admin token attached.
|
|
90
|
+
*
|
|
91
|
+
* Surfaces: collections browser, schemas, rules, indexes (search / vector
|
|
92
|
+
* / geo / generic), webhooks, and project-level metrics. Import/export,
|
|
93
|
+
* schedules and materialised views are intentionally out of scope for
|
|
94
|
+
* this first cut.
|
|
95
|
+
*/
|
|
96
|
+
declare class DocsAdminClient {
|
|
97
|
+
readonly collections: CollectionsAdminClient;
|
|
98
|
+
readonly schemas: SchemasAdminClient;
|
|
99
|
+
readonly rules: RulesAdminClient;
|
|
100
|
+
readonly indexes: IndexesAdminClient;
|
|
101
|
+
readonly webhooks: WebhooksAdminClient;
|
|
102
|
+
readonly metrics: MetricsAdminClient;
|
|
103
|
+
constructor(httpClient: HttpClient);
|
|
104
|
+
}
|
|
105
|
+
/** Row from `GET /internal/collections`. */
|
|
106
|
+
interface CollectionSummary {
|
|
107
|
+
name: string;
|
|
108
|
+
document_count: number;
|
|
109
|
+
bytes?: number;
|
|
110
|
+
last_written_at?: string;
|
|
111
|
+
}
|
|
112
|
+
interface CollectionStats {
|
|
113
|
+
name: string;
|
|
114
|
+
document_count: number;
|
|
115
|
+
bytes: number;
|
|
116
|
+
avg_document_bytes: number;
|
|
117
|
+
indexes: number;
|
|
118
|
+
}
|
|
119
|
+
interface SchemaSample {
|
|
120
|
+
fields: Array<{
|
|
121
|
+
name: string;
|
|
122
|
+
type: string;
|
|
123
|
+
occurrences: number;
|
|
124
|
+
}>;
|
|
125
|
+
sample_size: number;
|
|
126
|
+
}
|
|
127
|
+
interface CollectionTreeNode {
|
|
128
|
+
path: string;
|
|
129
|
+
documents: number;
|
|
130
|
+
subcollections: CollectionTreeNode[];
|
|
131
|
+
}
|
|
132
|
+
declare class CollectionsAdminClient {
|
|
133
|
+
private readonly http;
|
|
134
|
+
constructor(http: HttpClient);
|
|
135
|
+
list(): Promise<PalbaseResponse<CollectionSummary[]>>;
|
|
136
|
+
stats(collection: string): Promise<PalbaseResponse<CollectionStats>>;
|
|
137
|
+
schemaSample(collection: string): Promise<PalbaseResponse<SchemaSample>>;
|
|
138
|
+
tree(collection: string): Promise<PalbaseResponse<CollectionTreeNode>>;
|
|
139
|
+
}
|
|
140
|
+
interface CollectionSchema {
|
|
141
|
+
collection: string;
|
|
142
|
+
/** JSON-schema document. Shape passes through as-is. */
|
|
143
|
+
schema: Record<string, unknown>;
|
|
144
|
+
updated_at?: string;
|
|
145
|
+
}
|
|
146
|
+
declare class SchemasAdminClient {
|
|
147
|
+
private readonly http;
|
|
148
|
+
constructor(http: HttpClient);
|
|
149
|
+
list(): Promise<PalbaseResponse<CollectionSchema[]>>;
|
|
150
|
+
get(collection: string): Promise<PalbaseResponse<CollectionSchema>>;
|
|
151
|
+
set(collection: string, schema: Record<string, unknown>): Promise<PalbaseResponse<CollectionSchema>>;
|
|
152
|
+
delete(collection: string): Promise<PalbaseResponse<void>>;
|
|
153
|
+
}
|
|
154
|
+
interface CollectionRules {
|
|
155
|
+
collection: string;
|
|
156
|
+
/** Palbase rules DSL source. */
|
|
157
|
+
rules: string;
|
|
158
|
+
updated_at?: string;
|
|
159
|
+
}
|
|
160
|
+
declare class RulesAdminClient {
|
|
161
|
+
private readonly http;
|
|
162
|
+
constructor(http: HttpClient);
|
|
163
|
+
list(): Promise<PalbaseResponse<CollectionRules[]>>;
|
|
164
|
+
get(collection: string): Promise<PalbaseResponse<CollectionRules>>;
|
|
165
|
+
set(collection: string, rules: string): Promise<PalbaseResponse<CollectionRules>>;
|
|
166
|
+
delete(collection: string): Promise<PalbaseResponse<void>>;
|
|
167
|
+
}
|
|
168
|
+
interface SearchIndex {
|
|
169
|
+
collection: string;
|
|
170
|
+
fields: string[];
|
|
171
|
+
analyzer?: string;
|
|
172
|
+
created_at?: string;
|
|
173
|
+
}
|
|
174
|
+
interface VectorIndex {
|
|
175
|
+
collection: string;
|
|
176
|
+
field: string;
|
|
177
|
+
dimensions: number;
|
|
178
|
+
metric?: 'cosine' | 'dot' | 'l2';
|
|
179
|
+
}
|
|
180
|
+
interface GeoIndex {
|
|
181
|
+
collection: string;
|
|
182
|
+
field: string;
|
|
183
|
+
}
|
|
184
|
+
interface CustomIndex {
|
|
185
|
+
collection: string;
|
|
186
|
+
name: string;
|
|
187
|
+
fields: Array<{
|
|
188
|
+
field: string;
|
|
189
|
+
direction?: 'asc' | 'desc';
|
|
190
|
+
}>;
|
|
191
|
+
unique?: boolean;
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Indexes surface groups together the four index types the documents
|
|
195
|
+
* module manages: search, vector, geo, and custom (b-tree) indexes.
|
|
196
|
+
* Each sub-namespace wraps its `/internal/<kind>-indexes` (or
|
|
197
|
+
* `/internal/indexes`) routes.
|
|
198
|
+
*/
|
|
199
|
+
declare class IndexesAdminClient {
|
|
200
|
+
readonly search: SearchIndexesAdminClient;
|
|
201
|
+
readonly vector: VectorIndexesAdminClient;
|
|
202
|
+
readonly geo: GeoIndexesAdminClient;
|
|
203
|
+
readonly custom: CustomIndexesAdminClient;
|
|
204
|
+
constructor(http: HttpClient);
|
|
205
|
+
}
|
|
206
|
+
declare class SearchIndexesAdminClient {
|
|
207
|
+
private readonly http;
|
|
208
|
+
constructor(http: HttpClient);
|
|
209
|
+
list(): Promise<PalbaseResponse<SearchIndex[]>>;
|
|
210
|
+
get(collection: string): Promise<PalbaseResponse<SearchIndex>>;
|
|
211
|
+
create(collection: string, input: {
|
|
212
|
+
fields: string[];
|
|
213
|
+
analyzer?: string;
|
|
214
|
+
}): Promise<PalbaseResponse<SearchIndex>>;
|
|
215
|
+
delete(collection: string): Promise<PalbaseResponse<void>>;
|
|
216
|
+
rebuild(collection: string): Promise<PalbaseResponse<void>>;
|
|
217
|
+
}
|
|
218
|
+
declare class VectorIndexesAdminClient {
|
|
219
|
+
private readonly http;
|
|
220
|
+
constructor(http: HttpClient);
|
|
221
|
+
list(): Promise<PalbaseResponse<VectorIndex[]>>;
|
|
222
|
+
create(collection: string, input: {
|
|
223
|
+
field: string;
|
|
224
|
+
dimensions: number;
|
|
225
|
+
metric?: VectorIndex['metric'];
|
|
226
|
+
}): Promise<PalbaseResponse<VectorIndex>>;
|
|
227
|
+
delete(collection: string, field: string): Promise<PalbaseResponse<void>>;
|
|
228
|
+
}
|
|
229
|
+
declare class GeoIndexesAdminClient {
|
|
230
|
+
private readonly http;
|
|
231
|
+
constructor(http: HttpClient);
|
|
232
|
+
list(): Promise<PalbaseResponse<GeoIndex[]>>;
|
|
233
|
+
create(collection: string, input: {
|
|
234
|
+
field: string;
|
|
235
|
+
}): Promise<PalbaseResponse<GeoIndex>>;
|
|
236
|
+
delete(collection: string, field: string): Promise<PalbaseResponse<void>>;
|
|
237
|
+
}
|
|
238
|
+
declare class CustomIndexesAdminClient {
|
|
239
|
+
private readonly http;
|
|
240
|
+
constructor(http: HttpClient);
|
|
241
|
+
list(): Promise<PalbaseResponse<CustomIndex[]>>;
|
|
242
|
+
listByCollection(collection: string): Promise<PalbaseResponse<CustomIndex[]>>;
|
|
243
|
+
create(collection: string, input: Pick<CustomIndex, 'name' | 'fields' | 'unique'>): Promise<PalbaseResponse<CustomIndex>>;
|
|
244
|
+
delete(collection: string, name: string): Promise<PalbaseResponse<void>>;
|
|
245
|
+
}
|
|
246
|
+
interface DocsWebhook {
|
|
247
|
+
id: string;
|
|
248
|
+
url: string;
|
|
249
|
+
events: string[];
|
|
250
|
+
collection?: string;
|
|
251
|
+
secret?: string;
|
|
252
|
+
created_at?: string;
|
|
253
|
+
}
|
|
254
|
+
interface DocsWebhookDelivery {
|
|
255
|
+
id: string;
|
|
256
|
+
webhook_id: string;
|
|
257
|
+
status: 'pending' | 'success' | 'failed';
|
|
258
|
+
attempts: number;
|
|
259
|
+
response_status?: number;
|
|
260
|
+
last_error?: string;
|
|
261
|
+
created_at: string;
|
|
262
|
+
}
|
|
263
|
+
declare class WebhooksAdminClient {
|
|
264
|
+
private readonly http;
|
|
265
|
+
constructor(http: HttpClient);
|
|
266
|
+
list(): Promise<PalbaseResponse<DocsWebhook[]>>;
|
|
267
|
+
get(id: string): Promise<PalbaseResponse<DocsWebhook>>;
|
|
268
|
+
create(input: Pick<DocsWebhook, 'url' | 'events' | 'collection' | 'secret'>): Promise<PalbaseResponse<DocsWebhook>>;
|
|
269
|
+
delete(id: string): Promise<PalbaseResponse<void>>;
|
|
270
|
+
deliveries(id: string): Promise<PalbaseResponse<DocsWebhookDelivery[]>>;
|
|
271
|
+
}
|
|
272
|
+
interface ProjectDocsMetrics {
|
|
273
|
+
total_documents: number;
|
|
274
|
+
total_bytes: number;
|
|
275
|
+
collection_count: number;
|
|
276
|
+
reads_last_24h?: number;
|
|
277
|
+
writes_last_24h?: number;
|
|
278
|
+
}
|
|
279
|
+
interface CollectionDocsMetrics extends ProjectDocsMetrics {
|
|
280
|
+
collection: string;
|
|
281
|
+
}
|
|
282
|
+
interface TimeseriesPoint {
|
|
283
|
+
t: number;
|
|
284
|
+
reads: number;
|
|
285
|
+
writes: number;
|
|
286
|
+
deletes: number;
|
|
287
|
+
}
|
|
288
|
+
declare class MetricsAdminClient {
|
|
289
|
+
private readonly http;
|
|
290
|
+
constructor(http: HttpClient);
|
|
291
|
+
project(): Promise<PalbaseResponse<ProjectDocsMetrics>>;
|
|
292
|
+
collection(collection: string): Promise<PalbaseResponse<CollectionDocsMetrics>>;
|
|
293
|
+
timeseries(collection: string): Promise<PalbaseResponse<TimeseriesPoint[]>>;
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
export { type BatchOperation, type BatchOperationType, type CollectionDocsMetrics, CollectionRef, type CollectionRules, type CollectionSchema, type CollectionStats, type CollectionSummary, type CollectionTreeNode, CollectionsAdminClient, type CustomIndex, CustomIndexesAdminClient, type DocChange, DocsAdminClient, DocsClient, type DocsWebhook, type DocsWebhookDelivery, type DocumentData, DocumentRef, type DocumentSnapshot, type GeoIndex, GeoIndexesAdminClient, IndexesAdminClient, MetricsAdminClient, type OrderByClause, type OrderDirection, type ProjectDocsMetrics, type QuerySnapshot, RulesAdminClient, type SchemaSample, SchemasAdminClient, type SearchIndex, SearchIndexesAdminClient, type SnapshotCallback, type TimeseriesPoint, type VectorIndex, VectorIndexesAdminClient, WebhooksAdminClient, type WhereClause, type WhereOperator };
|
package/dist/index.js
CHANGED
|
@@ -256,9 +256,292 @@ var DocsClient = class {
|
|
|
256
256
|
return this.httpClient.request("POST", "/v1/docs/batch", { body });
|
|
257
257
|
}
|
|
258
258
|
};
|
|
259
|
+
|
|
260
|
+
// src/admin-client.ts
|
|
261
|
+
var DocsAdminClient = class {
|
|
262
|
+
collections;
|
|
263
|
+
schemas;
|
|
264
|
+
rules;
|
|
265
|
+
indexes;
|
|
266
|
+
webhooks;
|
|
267
|
+
metrics;
|
|
268
|
+
constructor(httpClient) {
|
|
269
|
+
this.collections = new CollectionsAdminClient(httpClient);
|
|
270
|
+
this.schemas = new SchemasAdminClient(httpClient);
|
|
271
|
+
this.rules = new RulesAdminClient(httpClient);
|
|
272
|
+
this.indexes = new IndexesAdminClient(httpClient);
|
|
273
|
+
this.webhooks = new WebhooksAdminClient(httpClient);
|
|
274
|
+
this.metrics = new MetricsAdminClient(httpClient);
|
|
275
|
+
}
|
|
276
|
+
};
|
|
277
|
+
var CollectionsAdminClient = class {
|
|
278
|
+
constructor(http) {
|
|
279
|
+
this.http = http;
|
|
280
|
+
}
|
|
281
|
+
http;
|
|
282
|
+
list() {
|
|
283
|
+
return this.http.request("GET", "/internal/collections");
|
|
284
|
+
}
|
|
285
|
+
stats(collection) {
|
|
286
|
+
return this.http.request(
|
|
287
|
+
"GET",
|
|
288
|
+
`/internal/collections/${encodeURIComponent(collection)}/stats`
|
|
289
|
+
);
|
|
290
|
+
}
|
|
291
|
+
schemaSample(collection) {
|
|
292
|
+
return this.http.request(
|
|
293
|
+
"GET",
|
|
294
|
+
`/internal/collections/${encodeURIComponent(collection)}/schema-sample`
|
|
295
|
+
);
|
|
296
|
+
}
|
|
297
|
+
tree(collection) {
|
|
298
|
+
return this.http.request(
|
|
299
|
+
"GET",
|
|
300
|
+
`/internal/collections/${encodeURIComponent(collection)}/tree`
|
|
301
|
+
);
|
|
302
|
+
}
|
|
303
|
+
};
|
|
304
|
+
var SchemasAdminClient = class {
|
|
305
|
+
constructor(http) {
|
|
306
|
+
this.http = http;
|
|
307
|
+
}
|
|
308
|
+
http;
|
|
309
|
+
list() {
|
|
310
|
+
return this.http.request("GET", "/internal/schemas");
|
|
311
|
+
}
|
|
312
|
+
get(collection) {
|
|
313
|
+
return this.http.request(
|
|
314
|
+
"GET",
|
|
315
|
+
`/internal/schemas/${encodeURIComponent(collection)}`
|
|
316
|
+
);
|
|
317
|
+
}
|
|
318
|
+
set(collection, schema) {
|
|
319
|
+
return this.http.request(
|
|
320
|
+
"POST",
|
|
321
|
+
`/internal/schemas/${encodeURIComponent(collection)}`,
|
|
322
|
+
{ body: { schema } }
|
|
323
|
+
);
|
|
324
|
+
}
|
|
325
|
+
delete(collection) {
|
|
326
|
+
return this.http.request(
|
|
327
|
+
"DELETE",
|
|
328
|
+
`/internal/schemas/${encodeURIComponent(collection)}`
|
|
329
|
+
);
|
|
330
|
+
}
|
|
331
|
+
};
|
|
332
|
+
var RulesAdminClient = class {
|
|
333
|
+
constructor(http) {
|
|
334
|
+
this.http = http;
|
|
335
|
+
}
|
|
336
|
+
http;
|
|
337
|
+
list() {
|
|
338
|
+
return this.http.request("GET", "/internal/rules");
|
|
339
|
+
}
|
|
340
|
+
get(collection) {
|
|
341
|
+
return this.http.request(
|
|
342
|
+
"GET",
|
|
343
|
+
`/internal/rules/${encodeURIComponent(collection)}`
|
|
344
|
+
);
|
|
345
|
+
}
|
|
346
|
+
set(collection, rules) {
|
|
347
|
+
return this.http.request(
|
|
348
|
+
"POST",
|
|
349
|
+
`/internal/rules/${encodeURIComponent(collection)}`,
|
|
350
|
+
{ body: { rules } }
|
|
351
|
+
);
|
|
352
|
+
}
|
|
353
|
+
delete(collection) {
|
|
354
|
+
return this.http.request(
|
|
355
|
+
"DELETE",
|
|
356
|
+
`/internal/rules/${encodeURIComponent(collection)}`
|
|
357
|
+
);
|
|
358
|
+
}
|
|
359
|
+
};
|
|
360
|
+
var IndexesAdminClient = class {
|
|
361
|
+
search;
|
|
362
|
+
vector;
|
|
363
|
+
geo;
|
|
364
|
+
custom;
|
|
365
|
+
constructor(http) {
|
|
366
|
+
this.search = new SearchIndexesAdminClient(http);
|
|
367
|
+
this.vector = new VectorIndexesAdminClient(http);
|
|
368
|
+
this.geo = new GeoIndexesAdminClient(http);
|
|
369
|
+
this.custom = new CustomIndexesAdminClient(http);
|
|
370
|
+
}
|
|
371
|
+
};
|
|
372
|
+
var SearchIndexesAdminClient = class {
|
|
373
|
+
constructor(http) {
|
|
374
|
+
this.http = http;
|
|
375
|
+
}
|
|
376
|
+
http;
|
|
377
|
+
list() {
|
|
378
|
+
return this.http.request("GET", "/internal/search-indexes");
|
|
379
|
+
}
|
|
380
|
+
get(collection) {
|
|
381
|
+
return this.http.request(
|
|
382
|
+
"GET",
|
|
383
|
+
`/internal/search-indexes/${encodeURIComponent(collection)}`
|
|
384
|
+
);
|
|
385
|
+
}
|
|
386
|
+
create(collection, input) {
|
|
387
|
+
return this.http.request(
|
|
388
|
+
"POST",
|
|
389
|
+
`/internal/search-indexes/${encodeURIComponent(collection)}`,
|
|
390
|
+
{ body: input }
|
|
391
|
+
);
|
|
392
|
+
}
|
|
393
|
+
delete(collection) {
|
|
394
|
+
return this.http.request(
|
|
395
|
+
"DELETE",
|
|
396
|
+
`/internal/search-indexes/${encodeURIComponent(collection)}`
|
|
397
|
+
);
|
|
398
|
+
}
|
|
399
|
+
rebuild(collection) {
|
|
400
|
+
return this.http.request(
|
|
401
|
+
"POST",
|
|
402
|
+
`/internal/search-indexes/${encodeURIComponent(collection)}/rebuild`
|
|
403
|
+
);
|
|
404
|
+
}
|
|
405
|
+
};
|
|
406
|
+
var VectorIndexesAdminClient = class {
|
|
407
|
+
constructor(http) {
|
|
408
|
+
this.http = http;
|
|
409
|
+
}
|
|
410
|
+
http;
|
|
411
|
+
list() {
|
|
412
|
+
return this.http.request("GET", "/internal/vector-indexes");
|
|
413
|
+
}
|
|
414
|
+
create(collection, input) {
|
|
415
|
+
return this.http.request(
|
|
416
|
+
"POST",
|
|
417
|
+
`/internal/vector-indexes/${encodeURIComponent(collection)}`,
|
|
418
|
+
{ body: input }
|
|
419
|
+
);
|
|
420
|
+
}
|
|
421
|
+
delete(collection, field) {
|
|
422
|
+
return this.http.request(
|
|
423
|
+
"DELETE",
|
|
424
|
+
`/internal/vector-indexes/${encodeURIComponent(collection)}/${encodeURIComponent(field)}`
|
|
425
|
+
);
|
|
426
|
+
}
|
|
427
|
+
};
|
|
428
|
+
var GeoIndexesAdminClient = class {
|
|
429
|
+
constructor(http) {
|
|
430
|
+
this.http = http;
|
|
431
|
+
}
|
|
432
|
+
http;
|
|
433
|
+
list() {
|
|
434
|
+
return this.http.request("GET", "/internal/geo-indexes");
|
|
435
|
+
}
|
|
436
|
+
create(collection, input) {
|
|
437
|
+
return this.http.request(
|
|
438
|
+
"POST",
|
|
439
|
+
`/internal/geo-indexes/${encodeURIComponent(collection)}`,
|
|
440
|
+
{ body: input }
|
|
441
|
+
);
|
|
442
|
+
}
|
|
443
|
+
delete(collection, field) {
|
|
444
|
+
return this.http.request(
|
|
445
|
+
"DELETE",
|
|
446
|
+
`/internal/geo-indexes/${encodeURIComponent(collection)}/${encodeURIComponent(field)}`
|
|
447
|
+
);
|
|
448
|
+
}
|
|
449
|
+
};
|
|
450
|
+
var CustomIndexesAdminClient = class {
|
|
451
|
+
constructor(http) {
|
|
452
|
+
this.http = http;
|
|
453
|
+
}
|
|
454
|
+
http;
|
|
455
|
+
list() {
|
|
456
|
+
return this.http.request("GET", "/internal/indexes");
|
|
457
|
+
}
|
|
458
|
+
listByCollection(collection) {
|
|
459
|
+
return this.http.request(
|
|
460
|
+
"GET",
|
|
461
|
+
`/internal/indexes/${encodeURIComponent(collection)}`
|
|
462
|
+
);
|
|
463
|
+
}
|
|
464
|
+
create(collection, input) {
|
|
465
|
+
return this.http.request(
|
|
466
|
+
"POST",
|
|
467
|
+
`/internal/indexes/${encodeURIComponent(collection)}`,
|
|
468
|
+
{ body: input }
|
|
469
|
+
);
|
|
470
|
+
}
|
|
471
|
+
delete(collection, name) {
|
|
472
|
+
return this.http.request(
|
|
473
|
+
"DELETE",
|
|
474
|
+
`/internal/indexes/${encodeURIComponent(collection)}/${encodeURIComponent(name)}`
|
|
475
|
+
);
|
|
476
|
+
}
|
|
477
|
+
};
|
|
478
|
+
var WebhooksAdminClient = class {
|
|
479
|
+
constructor(http) {
|
|
480
|
+
this.http = http;
|
|
481
|
+
}
|
|
482
|
+
http;
|
|
483
|
+
list() {
|
|
484
|
+
return this.http.request("GET", "/internal/webhooks");
|
|
485
|
+
}
|
|
486
|
+
get(id) {
|
|
487
|
+
return this.http.request(
|
|
488
|
+
"GET",
|
|
489
|
+
`/internal/webhooks/${encodeURIComponent(id)}`
|
|
490
|
+
);
|
|
491
|
+
}
|
|
492
|
+
create(input) {
|
|
493
|
+
return this.http.request("POST", "/internal/webhooks", {
|
|
494
|
+
body: input
|
|
495
|
+
});
|
|
496
|
+
}
|
|
497
|
+
delete(id) {
|
|
498
|
+
return this.http.request(
|
|
499
|
+
"DELETE",
|
|
500
|
+
`/internal/webhooks/${encodeURIComponent(id)}`
|
|
501
|
+
);
|
|
502
|
+
}
|
|
503
|
+
deliveries(id) {
|
|
504
|
+
return this.http.request(
|
|
505
|
+
"GET",
|
|
506
|
+
`/internal/webhooks/${encodeURIComponent(id)}/deliveries`
|
|
507
|
+
);
|
|
508
|
+
}
|
|
509
|
+
};
|
|
510
|
+
var MetricsAdminClient = class {
|
|
511
|
+
constructor(http) {
|
|
512
|
+
this.http = http;
|
|
513
|
+
}
|
|
514
|
+
http;
|
|
515
|
+
project() {
|
|
516
|
+
return this.http.request("GET", "/internal/metrics");
|
|
517
|
+
}
|
|
518
|
+
collection(collection) {
|
|
519
|
+
return this.http.request(
|
|
520
|
+
"GET",
|
|
521
|
+
`/internal/metrics/${encodeURIComponent(collection)}`
|
|
522
|
+
);
|
|
523
|
+
}
|
|
524
|
+
timeseries(collection) {
|
|
525
|
+
return this.http.request(
|
|
526
|
+
"GET",
|
|
527
|
+
`/internal/metrics/${encodeURIComponent(collection)}/timeseries`
|
|
528
|
+
);
|
|
529
|
+
}
|
|
530
|
+
};
|
|
259
531
|
export {
|
|
260
532
|
CollectionRef,
|
|
533
|
+
CollectionsAdminClient,
|
|
534
|
+
CustomIndexesAdminClient,
|
|
535
|
+
DocsAdminClient,
|
|
261
536
|
DocsClient,
|
|
262
|
-
DocumentRef
|
|
537
|
+
DocumentRef,
|
|
538
|
+
GeoIndexesAdminClient,
|
|
539
|
+
IndexesAdminClient,
|
|
540
|
+
MetricsAdminClient,
|
|
541
|
+
RulesAdminClient,
|
|
542
|
+
SchemasAdminClient,
|
|
543
|
+
SearchIndexesAdminClient,
|
|
544
|
+
VectorIndexesAdminClient,
|
|
545
|
+
WebhooksAdminClient
|
|
263
546
|
};
|
|
264
547
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/docs-client.ts","../src/document-ref.ts","../src/collection-ref.ts"],"sourcesContent":["import type { HttpClient, PalbaseResponse } from '@palbase/core';\nimport { PalbaseError } from '@palbase/core';\nimport { CollectionRef } from './collection-ref.js';\nimport type { BatchOperation, DocumentData } from './types.js';\n\nconst MAX_BATCH_SIZE = 500;\nconst SEGMENT_RE = /^[a-zA-Z0-9_\\-]+$/;\n\nfunction validateSegment(segment: string, label: string): void {\n if (!SEGMENT_RE.test(segment)) {\n throw new Error(`Invalid ${label}: \"${segment}\". Must match ${SEGMENT_RE.source}`);\n }\n}\n\nexport class DocsClient {\n private readonly httpClient: HttpClient;\n\n constructor(httpClient: HttpClient) {\n this.httpClient = httpClient;\n }\n\n collection<T = DocumentData>(name: string): CollectionRef<T> {\n validateSegment(name, 'collection name');\n return new CollectionRef<T>(this.httpClient, name);\n }\n\n async batch(operations: BatchOperation[]): Promise<PalbaseResponse<void>> {\n if (operations.length > MAX_BATCH_SIZE) {\n return {\n data: null,\n error: new PalbaseError(\n 'batch_too_large',\n `Batch size ${operations.length} exceeds maximum of ${MAX_BATCH_SIZE}`,\n 400,\n ),\n status: 400,\n };\n }\n\n if (operations.length === 0) {\n return { data: null, error: null, status: 200 };\n }\n\n const body = operations.map((op) => ({\n op: op.op,\n path: op.ref.path,\n data: op.data,\n }));\n\n return this.httpClient.request<void>('POST', '/v1/docs/batch', { body });\n }\n}\n","import type { HttpClient, PalbaseResponse } from '@palbase/core';\nimport { CollectionRef } from './collection-ref.js';\nimport type { DocumentData, DocumentSnapshot } from './types.js';\n\nconst SEGMENT_RE = /^[a-zA-Z0-9_\\-]+$/;\n\nfunction validateSegment(segment: string, label: string): void {\n if (!SEGMENT_RE.test(segment)) {\n throw new Error(`Invalid ${label}: \"${segment}\". Must match ${SEGMENT_RE.source}`);\n }\n}\n\nexport class DocumentRef<T = DocumentData> {\n readonly path: string;\n private readonly httpClient: HttpClient;\n\n constructor(httpClient: HttpClient, path: string) {\n this.httpClient = httpClient;\n this.path = path;\n }\n\n async set(data: T): Promise<PalbaseResponse<void>> {\n return this.httpClient.request<void>('PUT', `/v1/docs/${this.path}`, {\n body: data,\n });\n }\n\n async get(): Promise<PalbaseResponse<DocumentSnapshot<T>>> {\n const response = await this.httpClient.request<{ id: string; data: T; exists: boolean }>(\n 'GET',\n `/v1/docs/${this.path}`,\n );\n\n if (response.error) {\n return {\n data: null,\n error: response.error,\n status: response.status,\n };\n }\n\n const raw = response.data;\n const snapshot: DocumentSnapshot<T> = {\n id: raw?.id ?? this.getDocId(),\n exists: raw?.exists ?? false,\n data: () => raw?.data,\n ref: { path: this.path },\n };\n\n return { data: snapshot, error: null, status: response.status };\n }\n\n async update(data: Partial<T>): Promise<PalbaseResponse<void>> {\n return this.httpClient.request<void>('PATCH', `/v1/docs/${this.path}`, {\n body: data,\n });\n }\n\n async delete(): Promise<PalbaseResponse<void>> {\n return this.httpClient.request<void>('DELETE', `/v1/docs/${this.path}`);\n }\n\n collection(name: string): CollectionRef {\n validateSegment(name, 'subcollection name');\n return new CollectionRef(this.httpClient, `${this.path}/${name}`);\n }\n\n private getDocId(): string {\n const segments = this.path.split('/');\n return segments[segments.length - 1] ?? '';\n }\n}\n","import type { HttpClient, PalbaseResponse } from '@palbase/core';\nimport { DocumentRef } from './document-ref.js';\nimport type {\n DocumentData,\n DocumentSnapshot,\n OrderByClause,\n OrderDirection,\n QuerySnapshot,\n SnapshotCallback,\n WhereClause,\n WhereOperator,\n} from './types.js';\n\nconst SEGMENT_RE = /^[a-zA-Z0-9_\\-]+$/;\n\nfunction validateSegment(segment: string, label: string): void {\n if (!SEGMENT_RE.test(segment)) {\n throw new Error(`Invalid ${label}: \"${segment}\". Must match ${SEGMENT_RE.source}`);\n }\n}\n\nexport class CollectionRef<T = DocumentData> {\n readonly path: string;\n private readonly httpClient: HttpClient;\n private readonly whereClauses: WhereClause[] = [];\n private readonly orderByClauses: OrderByClause[] = [];\n private limitValue: number | undefined;\n\n constructor(httpClient: HttpClient, path: string) {\n this.httpClient = httpClient;\n this.path = path;\n }\n\n doc(id: string): DocumentRef<T> {\n validateSegment(id, 'document ID');\n return new DocumentRef<T>(this.httpClient, `${this.path}/${id}`);\n }\n\n async add(data: T): Promise<PalbaseResponse<DocumentRef<T>>> {\n const response = await this.httpClient.request<{ id: string }>(\n 'POST',\n `/v1/docs/${this.path}`,\n { body: data },\n );\n\n if (response.error || !response.data) {\n return {\n data: null,\n error: response.error,\n status: response.status,\n };\n }\n\n const ref = new DocumentRef<T>(this.httpClient, `${this.path}/${response.data.id}`);\n return { data: ref, error: null, status: response.status };\n }\n\n where(field: string, op: WhereOperator, value: unknown): CollectionRef<T> {\n const clone = this.clone();\n clone.whereClauses.push({ field, op, value });\n return clone;\n }\n\n orderBy(field: string, direction?: OrderDirection): CollectionRef<T> {\n const clone = this.clone();\n clone.orderByClauses.push({ field, direction: direction ?? 'asc' });\n return clone;\n }\n\n limit(n: number): CollectionRef<T> {\n const clone = this.clone();\n clone.limitValue = n;\n return clone;\n }\n\n async get(): Promise<PalbaseResponse<QuerySnapshot<T>>> {\n const hasQuery = this.whereClauses.length > 0 || this.orderByClauses.length > 0 || this.limitValue !== undefined;\n\n if (hasQuery) {\n return this.executeQuery();\n }\n\n const response = await this.httpClient.request<{ documents: { id: string; data: T }[] }>(\n 'GET',\n `/v1/docs/${this.path}`,\n );\n\n if (response.error) {\n return { data: null, error: response.error, status: response.status };\n }\n\n const docs = (response.data?.documents ?? []).map((doc) => this.toSnapshot(doc));\n return {\n data: this.toQuerySnapshot(docs),\n error: null,\n status: response.status,\n };\n }\n\n onSnapshot(callback: SnapshotCallback<T>): () => void {\n const body = this.buildQueryBody();\n\n let active = true;\n let controller: AbortController | undefined;\n\n const poll = async () => {\n if (!active) return;\n controller = new AbortController();\n\n const response = await this.httpClient.request<{ documents: { id: string; data: T }[] }>(\n 'POST',\n `/v1/docs/${this.path}/listen`,\n { body, signal: controller.signal },\n );\n\n if (!active) return;\n\n if (response.data) {\n const docs = (response.data.documents ?? []).map((doc) => this.toSnapshot(doc));\n callback(this.toQuerySnapshot(docs));\n }\n };\n\n // Start initial poll\n void poll();\n\n return () => {\n active = false;\n controller?.abort();\n };\n }\n\n private async executeQuery(): Promise<PalbaseResponse<QuerySnapshot<T>>> {\n const body = this.buildQueryBody();\n\n const response = await this.httpClient.request<{ documents: { id: string; data: T }[] }>(\n 'POST',\n `/v1/docs/${this.path}/query`,\n { body },\n );\n\n if (response.error) {\n return { data: null, error: response.error, status: response.status };\n }\n\n const docs = (response.data?.documents ?? []).map((doc) => this.toSnapshot(doc));\n return {\n data: this.toQuerySnapshot(docs),\n error: null,\n status: response.status,\n };\n }\n\n private buildQueryBody(): Record<string, unknown> {\n const body: Record<string, unknown> = {};\n\n if (this.whereClauses.length > 0) {\n body['where'] = this.whereClauses.map((w) => ({\n field: w.field,\n op: w.op,\n value: w.value,\n }));\n }\n\n if (this.orderByClauses.length > 0) {\n body['orderBy'] = this.orderByClauses.map((o) => ({\n field: o.field,\n direction: o.direction,\n }));\n }\n\n if (this.limitValue !== undefined) {\n body['limit'] = this.limitValue;\n }\n\n return body;\n }\n\n private toSnapshot(doc: { id: string; data: T }): DocumentSnapshot<T> {\n return {\n id: doc.id,\n exists: true,\n data: () => doc.data,\n ref: { path: `${this.path}/${doc.id}` },\n };\n }\n\n private toQuerySnapshot(docs: DocumentSnapshot<T>[]): QuerySnapshot<T> {\n return {\n docs,\n empty: docs.length === 0,\n size: docs.length,\n docChanges: () => docs.map((doc) => ({ type: 'added' as const, doc })),\n };\n }\n\n private clone(): CollectionRef<T> {\n const cloned = new CollectionRef<T>(this.httpClient, this.path);\n cloned.whereClauses.push(...this.whereClauses);\n cloned.orderByClauses.push(...this.orderByClauses);\n cloned.limitValue = this.limitValue;\n return cloned;\n }\n}\n"],"mappings":"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","names":["SEGMENT_RE","validateSegment","SEGMENT_RE","validateSegment"]}
|
|
1
|
+
{"version":3,"sources":["../src/docs-client.ts","../src/document-ref.ts","../src/collection-ref.ts","../src/admin-client.ts"],"sourcesContent":["import type { HttpClient, PalbaseResponse } from '@palbase/core';\nimport { PalbaseError } from '@palbase/core';\nimport { CollectionRef } from './collection-ref.js';\nimport type { BatchOperation, DocumentData } from './types.js';\n\nconst MAX_BATCH_SIZE = 500;\nconst SEGMENT_RE = /^[a-zA-Z0-9_\\-]+$/;\n\nfunction validateSegment(segment: string, label: string): void {\n if (!SEGMENT_RE.test(segment)) {\n throw new Error(`Invalid ${label}: \"${segment}\". Must match ${SEGMENT_RE.source}`);\n }\n}\n\nexport class DocsClient {\n private readonly httpClient: HttpClient;\n\n constructor(httpClient: HttpClient) {\n this.httpClient = httpClient;\n }\n\n collection<T = DocumentData>(name: string): CollectionRef<T> {\n validateSegment(name, 'collection name');\n return new CollectionRef<T>(this.httpClient, name);\n }\n\n async batch(operations: BatchOperation[]): Promise<PalbaseResponse<void>> {\n if (operations.length > MAX_BATCH_SIZE) {\n return {\n data: null,\n error: new PalbaseError(\n 'batch_too_large',\n `Batch size ${operations.length} exceeds maximum of ${MAX_BATCH_SIZE}`,\n 400,\n ),\n status: 400,\n };\n }\n\n if (operations.length === 0) {\n return { data: null, error: null, status: 200 };\n }\n\n const body = operations.map((op) => ({\n op: op.op,\n path: op.ref.path,\n data: op.data,\n }));\n\n return this.httpClient.request<void>('POST', '/v1/docs/batch', { body });\n }\n}\n","import type { HttpClient, PalbaseResponse } from '@palbase/core';\nimport { CollectionRef } from './collection-ref.js';\nimport type { DocumentData, DocumentSnapshot } from './types.js';\n\nconst SEGMENT_RE = /^[a-zA-Z0-9_\\-]+$/;\n\nfunction validateSegment(segment: string, label: string): void {\n if (!SEGMENT_RE.test(segment)) {\n throw new Error(`Invalid ${label}: \"${segment}\". Must match ${SEGMENT_RE.source}`);\n }\n}\n\nexport class DocumentRef<T = DocumentData> {\n readonly path: string;\n private readonly httpClient: HttpClient;\n\n constructor(httpClient: HttpClient, path: string) {\n this.httpClient = httpClient;\n this.path = path;\n }\n\n async set(data: T): Promise<PalbaseResponse<void>> {\n return this.httpClient.request<void>('PUT', `/v1/docs/${this.path}`, {\n body: data,\n });\n }\n\n async get(): Promise<PalbaseResponse<DocumentSnapshot<T>>> {\n const response = await this.httpClient.request<{ id: string; data: T; exists: boolean }>(\n 'GET',\n `/v1/docs/${this.path}`,\n );\n\n if (response.error) {\n return {\n data: null,\n error: response.error,\n status: response.status,\n };\n }\n\n const raw = response.data;\n const snapshot: DocumentSnapshot<T> = {\n id: raw?.id ?? this.getDocId(),\n exists: raw?.exists ?? false,\n data: () => raw?.data,\n ref: { path: this.path },\n };\n\n return { data: snapshot, error: null, status: response.status };\n }\n\n async update(data: Partial<T>): Promise<PalbaseResponse<void>> {\n return this.httpClient.request<void>('PATCH', `/v1/docs/${this.path}`, {\n body: data,\n });\n }\n\n async delete(): Promise<PalbaseResponse<void>> {\n return this.httpClient.request<void>('DELETE', `/v1/docs/${this.path}`);\n }\n\n collection(name: string): CollectionRef {\n validateSegment(name, 'subcollection name');\n return new CollectionRef(this.httpClient, `${this.path}/${name}`);\n }\n\n private getDocId(): string {\n const segments = this.path.split('/');\n return segments[segments.length - 1] ?? '';\n }\n}\n","import type { HttpClient, PalbaseResponse } from '@palbase/core';\nimport { DocumentRef } from './document-ref.js';\nimport type {\n DocumentData,\n DocumentSnapshot,\n OrderByClause,\n OrderDirection,\n QuerySnapshot,\n SnapshotCallback,\n WhereClause,\n WhereOperator,\n} from './types.js';\n\nconst SEGMENT_RE = /^[a-zA-Z0-9_\\-]+$/;\n\nfunction validateSegment(segment: string, label: string): void {\n if (!SEGMENT_RE.test(segment)) {\n throw new Error(`Invalid ${label}: \"${segment}\". Must match ${SEGMENT_RE.source}`);\n }\n}\n\nexport class CollectionRef<T = DocumentData> {\n readonly path: string;\n private readonly httpClient: HttpClient;\n private readonly whereClauses: WhereClause[] = [];\n private readonly orderByClauses: OrderByClause[] = [];\n private limitValue: number | undefined;\n\n constructor(httpClient: HttpClient, path: string) {\n this.httpClient = httpClient;\n this.path = path;\n }\n\n doc(id: string): DocumentRef<T> {\n validateSegment(id, 'document ID');\n return new DocumentRef<T>(this.httpClient, `${this.path}/${id}`);\n }\n\n async add(data: T): Promise<PalbaseResponse<DocumentRef<T>>> {\n const response = await this.httpClient.request<{ id: string }>(\n 'POST',\n `/v1/docs/${this.path}`,\n { body: data },\n );\n\n if (response.error || !response.data) {\n return {\n data: null,\n error: response.error,\n status: response.status,\n };\n }\n\n const ref = new DocumentRef<T>(this.httpClient, `${this.path}/${response.data.id}`);\n return { data: ref, error: null, status: response.status };\n }\n\n where(field: string, op: WhereOperator, value: unknown): CollectionRef<T> {\n const clone = this.clone();\n clone.whereClauses.push({ field, op, value });\n return clone;\n }\n\n orderBy(field: string, direction?: OrderDirection): CollectionRef<T> {\n const clone = this.clone();\n clone.orderByClauses.push({ field, direction: direction ?? 'asc' });\n return clone;\n }\n\n limit(n: number): CollectionRef<T> {\n const clone = this.clone();\n clone.limitValue = n;\n return clone;\n }\n\n async get(): Promise<PalbaseResponse<QuerySnapshot<T>>> {\n const hasQuery = this.whereClauses.length > 0 || this.orderByClauses.length > 0 || this.limitValue !== undefined;\n\n if (hasQuery) {\n return this.executeQuery();\n }\n\n const response = await this.httpClient.request<{ documents: { id: string; data: T }[] }>(\n 'GET',\n `/v1/docs/${this.path}`,\n );\n\n if (response.error) {\n return { data: null, error: response.error, status: response.status };\n }\n\n const docs = (response.data?.documents ?? []).map((doc) => this.toSnapshot(doc));\n return {\n data: this.toQuerySnapshot(docs),\n error: null,\n status: response.status,\n };\n }\n\n onSnapshot(callback: SnapshotCallback<T>): () => void {\n const body = this.buildQueryBody();\n\n let active = true;\n let controller: AbortController | undefined;\n\n const poll = async () => {\n if (!active) return;\n controller = new AbortController();\n\n const response = await this.httpClient.request<{ documents: { id: string; data: T }[] }>(\n 'POST',\n `/v1/docs/${this.path}/listen`,\n { body, signal: controller.signal },\n );\n\n if (!active) return;\n\n if (response.data) {\n const docs = (response.data.documents ?? []).map((doc) => this.toSnapshot(doc));\n callback(this.toQuerySnapshot(docs));\n }\n };\n\n // Start initial poll\n void poll();\n\n return () => {\n active = false;\n controller?.abort();\n };\n }\n\n private async executeQuery(): Promise<PalbaseResponse<QuerySnapshot<T>>> {\n const body = this.buildQueryBody();\n\n const response = await this.httpClient.request<{ documents: { id: string; data: T }[] }>(\n 'POST',\n `/v1/docs/${this.path}/query`,\n { body },\n );\n\n if (response.error) {\n return { data: null, error: response.error, status: response.status };\n }\n\n const docs = (response.data?.documents ?? []).map((doc) => this.toSnapshot(doc));\n return {\n data: this.toQuerySnapshot(docs),\n error: null,\n status: response.status,\n };\n }\n\n private buildQueryBody(): Record<string, unknown> {\n const body: Record<string, unknown> = {};\n\n if (this.whereClauses.length > 0) {\n body['where'] = this.whereClauses.map((w) => ({\n field: w.field,\n op: w.op,\n value: w.value,\n }));\n }\n\n if (this.orderByClauses.length > 0) {\n body['orderBy'] = this.orderByClauses.map((o) => ({\n field: o.field,\n direction: o.direction,\n }));\n }\n\n if (this.limitValue !== undefined) {\n body['limit'] = this.limitValue;\n }\n\n return body;\n }\n\n private toSnapshot(doc: { id: string; data: T }): DocumentSnapshot<T> {\n return {\n id: doc.id,\n exists: true,\n data: () => doc.data,\n ref: { path: `${this.path}/${doc.id}` },\n };\n }\n\n private toQuerySnapshot(docs: DocumentSnapshot<T>[]): QuerySnapshot<T> {\n return {\n docs,\n empty: docs.length === 0,\n size: docs.length,\n docChanges: () => docs.map((doc) => ({ type: 'added' as const, doc })),\n };\n }\n\n private clone(): CollectionRef<T> {\n const cloned = new CollectionRef<T>(this.httpClient, this.path);\n cloned.whereClauses.push(...this.whereClauses);\n cloned.orderByClauses.push(...this.orderByClauses);\n cloned.limitValue = this.limitValue;\n return cloned;\n }\n}\n","import type { HttpClient, PalbaseResponse } from '@palbase/core';\n\n/**\n * Admin client for the documents module — wraps the `/internal/*` HTTP\n * surface exposed by `modules/documents`. The backend sits behind\n * service-role / HMAC auth; all requests go through an HttpClient that\n * has the project admin token attached.\n *\n * Surfaces: collections browser, schemas, rules, indexes (search / vector\n * / geo / generic), webhooks, and project-level metrics. Import/export,\n * schedules and materialised views are intentionally out of scope for\n * this first cut.\n */\nexport class DocsAdminClient {\n readonly collections: CollectionsAdminClient;\n readonly schemas: SchemasAdminClient;\n readonly rules: RulesAdminClient;\n readonly indexes: IndexesAdminClient;\n readonly webhooks: WebhooksAdminClient;\n readonly metrics: MetricsAdminClient;\n\n constructor(httpClient: HttpClient) {\n this.collections = new CollectionsAdminClient(httpClient);\n this.schemas = new SchemasAdminClient(httpClient);\n this.rules = new RulesAdminClient(httpClient);\n this.indexes = new IndexesAdminClient(httpClient);\n this.webhooks = new WebhooksAdminClient(httpClient);\n this.metrics = new MetricsAdminClient(httpClient);\n }\n}\n\n// ── Collections (browser) ────────────────────────────────────\n\n/** Row from `GET /internal/collections`. */\nexport interface CollectionSummary {\n name: string;\n document_count: number;\n bytes?: number;\n last_written_at?: string;\n}\n\nexport interface CollectionStats {\n name: string;\n document_count: number;\n bytes: number;\n avg_document_bytes: number;\n indexes: number;\n}\n\nexport interface SchemaSample {\n fields: Array<{ name: string; type: string; occurrences: number }>;\n sample_size: number;\n}\n\nexport interface CollectionTreeNode {\n path: string;\n documents: number;\n subcollections: CollectionTreeNode[];\n}\n\nexport class CollectionsAdminClient {\n constructor(private readonly http: HttpClient) {}\n\n list(): Promise<PalbaseResponse<CollectionSummary[]>> {\n return this.http.request<CollectionSummary[]>('GET', '/internal/collections');\n }\n\n stats(collection: string): Promise<PalbaseResponse<CollectionStats>> {\n return this.http.request<CollectionStats>(\n 'GET',\n `/internal/collections/${encodeURIComponent(collection)}/stats`,\n );\n }\n\n schemaSample(collection: string): Promise<PalbaseResponse<SchemaSample>> {\n return this.http.request<SchemaSample>(\n 'GET',\n `/internal/collections/${encodeURIComponent(collection)}/schema-sample`,\n );\n }\n\n tree(collection: string): Promise<PalbaseResponse<CollectionTreeNode>> {\n return this.http.request<CollectionTreeNode>(\n 'GET',\n `/internal/collections/${encodeURIComponent(collection)}/tree`,\n );\n }\n}\n\n// ── Schemas ─────────────────────────────────────────────────\n\nexport interface CollectionSchema {\n collection: string;\n /** JSON-schema document. Shape passes through as-is. */\n schema: Record<string, unknown>;\n updated_at?: string;\n}\n\nexport class SchemasAdminClient {\n constructor(private readonly http: HttpClient) {}\n\n list(): Promise<PalbaseResponse<CollectionSchema[]>> {\n return this.http.request<CollectionSchema[]>('GET', '/internal/schemas');\n }\n\n get(collection: string): Promise<PalbaseResponse<CollectionSchema>> {\n return this.http.request<CollectionSchema>(\n 'GET',\n `/internal/schemas/${encodeURIComponent(collection)}`,\n );\n }\n\n set(\n collection: string,\n schema: Record<string, unknown>,\n ): Promise<PalbaseResponse<CollectionSchema>> {\n return this.http.request<CollectionSchema>(\n 'POST',\n `/internal/schemas/${encodeURIComponent(collection)}`,\n { body: { schema } },\n );\n }\n\n delete(collection: string): Promise<PalbaseResponse<void>> {\n return this.http.request<void>(\n 'DELETE',\n `/internal/schemas/${encodeURIComponent(collection)}`,\n );\n }\n}\n\n// ── Security rules ──────────────────────────────────────────\n\nexport interface CollectionRules {\n collection: string;\n /** Palbase rules DSL source. */\n rules: string;\n updated_at?: string;\n}\n\nexport class RulesAdminClient {\n constructor(private readonly http: HttpClient) {}\n\n list(): Promise<PalbaseResponse<CollectionRules[]>> {\n return this.http.request<CollectionRules[]>('GET', '/internal/rules');\n }\n\n get(collection: string): Promise<PalbaseResponse<CollectionRules>> {\n return this.http.request<CollectionRules>(\n 'GET',\n `/internal/rules/${encodeURIComponent(collection)}`,\n );\n }\n\n set(collection: string, rules: string): Promise<PalbaseResponse<CollectionRules>> {\n return this.http.request<CollectionRules>(\n 'POST',\n `/internal/rules/${encodeURIComponent(collection)}`,\n { body: { rules } },\n );\n }\n\n delete(collection: string): Promise<PalbaseResponse<void>> {\n return this.http.request<void>(\n 'DELETE',\n `/internal/rules/${encodeURIComponent(collection)}`,\n );\n }\n}\n\n// ── Indexes ─────────────────────────────────────────────────\n\nexport interface SearchIndex {\n collection: string;\n fields: string[];\n analyzer?: string;\n created_at?: string;\n}\n\nexport interface VectorIndex {\n collection: string;\n field: string;\n dimensions: number;\n metric?: 'cosine' | 'dot' | 'l2';\n}\n\nexport interface GeoIndex {\n collection: string;\n field: string;\n}\n\nexport interface CustomIndex {\n collection: string;\n name: string;\n fields: Array<{ field: string; direction?: 'asc' | 'desc' }>;\n unique?: boolean;\n}\n\n/**\n * Indexes surface groups together the four index types the documents\n * module manages: search, vector, geo, and custom (b-tree) indexes.\n * Each sub-namespace wraps its `/internal/<kind>-indexes` (or\n * `/internal/indexes`) routes.\n */\nexport class IndexesAdminClient {\n readonly search: SearchIndexesAdminClient;\n readonly vector: VectorIndexesAdminClient;\n readonly geo: GeoIndexesAdminClient;\n readonly custom: CustomIndexesAdminClient;\n\n constructor(http: HttpClient) {\n this.search = new SearchIndexesAdminClient(http);\n this.vector = new VectorIndexesAdminClient(http);\n this.geo = new GeoIndexesAdminClient(http);\n this.custom = new CustomIndexesAdminClient(http);\n }\n}\n\nexport class SearchIndexesAdminClient {\n constructor(private readonly http: HttpClient) {}\n\n list(): Promise<PalbaseResponse<SearchIndex[]>> {\n return this.http.request<SearchIndex[]>('GET', '/internal/search-indexes');\n }\n\n get(collection: string): Promise<PalbaseResponse<SearchIndex>> {\n return this.http.request<SearchIndex>(\n 'GET',\n `/internal/search-indexes/${encodeURIComponent(collection)}`,\n );\n }\n\n create(\n collection: string,\n input: { fields: string[]; analyzer?: string },\n ): Promise<PalbaseResponse<SearchIndex>> {\n return this.http.request<SearchIndex>(\n 'POST',\n `/internal/search-indexes/${encodeURIComponent(collection)}`,\n { body: input },\n );\n }\n\n delete(collection: string): Promise<PalbaseResponse<void>> {\n return this.http.request<void>(\n 'DELETE',\n `/internal/search-indexes/${encodeURIComponent(collection)}`,\n );\n }\n\n rebuild(collection: string): Promise<PalbaseResponse<void>> {\n return this.http.request<void>(\n 'POST',\n `/internal/search-indexes/${encodeURIComponent(collection)}/rebuild`,\n );\n }\n}\n\nexport class VectorIndexesAdminClient {\n constructor(private readonly http: HttpClient) {}\n\n list(): Promise<PalbaseResponse<VectorIndex[]>> {\n return this.http.request<VectorIndex[]>('GET', '/internal/vector-indexes');\n }\n\n create(\n collection: string,\n input: { field: string; dimensions: number; metric?: VectorIndex['metric'] },\n ): Promise<PalbaseResponse<VectorIndex>> {\n return this.http.request<VectorIndex>(\n 'POST',\n `/internal/vector-indexes/${encodeURIComponent(collection)}`,\n { body: input },\n );\n }\n\n delete(collection: string, field: string): Promise<PalbaseResponse<void>> {\n return this.http.request<void>(\n 'DELETE',\n `/internal/vector-indexes/${encodeURIComponent(collection)}/${encodeURIComponent(field)}`,\n );\n }\n}\n\nexport class GeoIndexesAdminClient {\n constructor(private readonly http: HttpClient) {}\n\n list(): Promise<PalbaseResponse<GeoIndex[]>> {\n return this.http.request<GeoIndex[]>('GET', '/internal/geo-indexes');\n }\n\n create(\n collection: string,\n input: { field: string },\n ): Promise<PalbaseResponse<GeoIndex>> {\n return this.http.request<GeoIndex>(\n 'POST',\n `/internal/geo-indexes/${encodeURIComponent(collection)}`,\n { body: input },\n );\n }\n\n delete(collection: string, field: string): Promise<PalbaseResponse<void>> {\n return this.http.request<void>(\n 'DELETE',\n `/internal/geo-indexes/${encodeURIComponent(collection)}/${encodeURIComponent(field)}`,\n );\n }\n}\n\nexport class CustomIndexesAdminClient {\n constructor(private readonly http: HttpClient) {}\n\n list(): Promise<PalbaseResponse<CustomIndex[]>> {\n return this.http.request<CustomIndex[]>('GET', '/internal/indexes');\n }\n\n listByCollection(collection: string): Promise<PalbaseResponse<CustomIndex[]>> {\n return this.http.request<CustomIndex[]>(\n 'GET',\n `/internal/indexes/${encodeURIComponent(collection)}`,\n );\n }\n\n create(\n collection: string,\n input: Pick<CustomIndex, 'name' | 'fields' | 'unique'>,\n ): Promise<PalbaseResponse<CustomIndex>> {\n return this.http.request<CustomIndex>(\n 'POST',\n `/internal/indexes/${encodeURIComponent(collection)}`,\n { body: input },\n );\n }\n\n delete(collection: string, name: string): Promise<PalbaseResponse<void>> {\n return this.http.request<void>(\n 'DELETE',\n `/internal/indexes/${encodeURIComponent(collection)}/${encodeURIComponent(name)}`,\n );\n }\n}\n\n// ── Webhooks ────────────────────────────────────────────────\n\nexport interface DocsWebhook {\n id: string;\n url: string;\n events: string[];\n collection?: string;\n secret?: string;\n created_at?: string;\n}\n\nexport interface DocsWebhookDelivery {\n id: string;\n webhook_id: string;\n status: 'pending' | 'success' | 'failed';\n attempts: number;\n response_status?: number;\n last_error?: string;\n created_at: string;\n}\n\nexport class WebhooksAdminClient {\n constructor(private readonly http: HttpClient) {}\n\n list(): Promise<PalbaseResponse<DocsWebhook[]>> {\n return this.http.request<DocsWebhook[]>('GET', '/internal/webhooks');\n }\n\n get(id: string): Promise<PalbaseResponse<DocsWebhook>> {\n return this.http.request<DocsWebhook>(\n 'GET',\n `/internal/webhooks/${encodeURIComponent(id)}`,\n );\n }\n\n create(\n input: Pick<DocsWebhook, 'url' | 'events' | 'collection' | 'secret'>,\n ): Promise<PalbaseResponse<DocsWebhook>> {\n return this.http.request<DocsWebhook>('POST', '/internal/webhooks', {\n body: input,\n });\n }\n\n delete(id: string): Promise<PalbaseResponse<void>> {\n return this.http.request<void>(\n 'DELETE',\n `/internal/webhooks/${encodeURIComponent(id)}`,\n );\n }\n\n deliveries(id: string): Promise<PalbaseResponse<DocsWebhookDelivery[]>> {\n return this.http.request<DocsWebhookDelivery[]>(\n 'GET',\n `/internal/webhooks/${encodeURIComponent(id)}/deliveries`,\n );\n }\n}\n\n// ── Metrics ─────────────────────────────────────────────────\n\nexport interface ProjectDocsMetrics {\n total_documents: number;\n total_bytes: number;\n collection_count: number;\n reads_last_24h?: number;\n writes_last_24h?: number;\n}\n\nexport interface CollectionDocsMetrics extends ProjectDocsMetrics {\n collection: string;\n}\n\nexport interface TimeseriesPoint {\n t: number;\n reads: number;\n writes: number;\n deletes: number;\n}\n\nexport class MetricsAdminClient {\n constructor(private readonly http: HttpClient) {}\n\n project(): Promise<PalbaseResponse<ProjectDocsMetrics>> {\n return this.http.request<ProjectDocsMetrics>('GET', '/internal/metrics');\n }\n\n collection(collection: string): Promise<PalbaseResponse<CollectionDocsMetrics>> {\n return this.http.request<CollectionDocsMetrics>(\n 'GET',\n `/internal/metrics/${encodeURIComponent(collection)}`,\n );\n }\n\n timeseries(collection: string): Promise<PalbaseResponse<TimeseriesPoint[]>> {\n return this.http.request<TimeseriesPoint[]>(\n 'GET',\n `/internal/metrics/${encodeURIComponent(collection)}/timeseries`,\n );\n }\n}\n"],"mappings":"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","names":["SEGMENT_RE","validateSegment","SEGMENT_RE","validateSegment"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@palbase/docs",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"dist"
|
|
23
23
|
],
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@palbase/core": "0.
|
|
25
|
+
"@palbase/core": "0.5.0"
|
|
26
26
|
},
|
|
27
27
|
"devDependencies": {
|
|
28
28
|
"@biomejs/biome": "^2.0.0",
|