@push.rocks/smartdb 4.1.0 → 4.2.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.
Binary file
Binary file
@@ -3,7 +3,7 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@push.rocks/smartdb',
6
- version: '4.1.0',
6
+ version: '4.2.0',
7
7
  description: 'A MongoDB-compatible embedded database server with wire protocol support, backed by a high-performance Rust engine.'
8
8
  };
9
9
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSxxQkFBcUI7SUFDM0IsT0FBTyxFQUFFLE9BQU87SUFDaEIsV0FBVyxFQUFFLHFIQUFxSDtDQUNuSSxDQUFBIn0=
@@ -1,7 +1,7 @@
1
1
  import { commitinfo } from './00_commitinfo_data.js';
2
2
  export * from './ts_smartdb/index.js';
3
3
  export { LocalSmartDb } from './ts_local/index.js';
4
- export type { ILocalSmartDbOptions, ILocalSmartDbConnectionInfo, ILocalSmartDbOfflineInspectionLimits, ILocalSmartDbOfflineStringValueInspection, TLocalSmartDbOfflineStringValueInspectionResult, } from './ts_local/index.js';
4
+ export type { ILocalSmartDbOptions, ILocalSmartDbConnectionInfo, ILocalSmartDbOfflineInspectionLimits, ILocalSmartDbOfflinePhysicalNamespaceInspectionLimits, ILocalSmartDbOfflinePhysicalNamespaceInspection, ILocalSmartDbOfflinePhysicalNamespaceInspectionResult, ILocalSmartDbOfflineStringValueInspection, TLocalSmartDbOfflineStringValueInspectionResult, } from './ts_local/index.js';
5
5
  export { AuthMetadataMigrationRunner, StorageMigrator, type IAuthMetadataPermissionMigrationBridge, type TAuthMetadataMigrationRunnerStatus, } from './ts_migration/index.js';
6
6
  export { commitinfo };
7
7
  export type { IOpLogEntry, IOpLogResult, IOpLogStats, IRevertResult, ICollectionInfo, IDocumentsResult, ISmartDbMetrics, ISmartDbHealth, ISmartDbResourceFence, ISmartDbResourceFenceReceipt, ISmartDbHeldPublicationReceipt, ISmartDbCommitDatabasePublicationInput, ISmartDbManagementOperationOptions, ISmartDbDatabaseResourceFenceState, ISmartDbDatabaseAllocationIdentity, ISmartDbDatabaseAllocationLifecycle, ISmartDbDatabaseAllocationReadAccessGrantIdentity, ISmartDbIssueDatabaseAllocationReadAccessGrantInput, ISmartDbIssueDatabaseAllocationReadAccessGrantResult, ISmartDbRevokeDatabaseAllocationReadAccessGrantInput, ISmartDbRevokeDatabaseAllocationReadAccessGrantResult, TSmartDbCommitDatabasePublicationResult, TSmartDbResourceFenceErrorCode, TSmartDbAllocationReadAccessGrantErrorCode, ISmartDbDatabaseTenantInput, ISmartDbAttestDatabaseTenantInput, ISmartDbAttestDatabaseTenantResult, ISmartDbEnsureDatabaseTenantInput, ISmartDbEnsureDatabaseTenantResult, ISmartDbAllocateDatabaseTenantInput, ISmartDbAllocateDatabaseTenantResult, ISmartDbDeleteDatabaseTenantInput, ISmartDbRotateDatabaseTenantPasswordInput, ISmartDbDatabaseTenantDescriptor, ISmartDbDeleteDatabaseTenantResult, ISmartDbDatabaseExportCollection, ISmartDbDatabaseExport, ISmartDbDatabaseExportLimits, ISmartDbExportDatabaseInput, ISmartDbDatabaseContentDigestLimits, ISmartDbGetDatabaseContentDigestInput, ISmartDbDatabaseContentDigest, ISmartDbImportDatabaseInput, ISmartDbImportDatabaseResult, TSmartDbEffectivePayloadInputV1, } from './ts_smartdb/index.js';
package/dist_ts/index.js CHANGED
@@ -8,4 +8,4 @@ export { AuthMetadataMigrationRunner, StorageMigrator, } from './ts_migration/in
8
8
  // Export commitinfo
9
9
  export { commitinfo };
10
10
  export { SmartDbAllocationReadAccessGrantError, normalizeSmartDbAllocationReadAccessGrantError, smartDbAllocationReadAccessGrantErrorCodes, SmartDbResourceFenceError, normalizeSmartDbResourceFenceError, smartDbResourceFenceErrorCodes, createSmartDbEffectivePayloadSha256V1, } from './ts_smartdb/index.js';
11
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFckQsNkJBQTZCO0FBQzdCLGNBQWMsdUJBQXVCLENBQUM7QUFFdEMsc0JBQXNCO0FBQ3RCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQVNuRCxtQkFBbUI7QUFDbkIsT0FBTyxFQUNMLDJCQUEyQixFQUMzQixlQUFlLEdBR2hCLE1BQU0seUJBQXlCLENBQUM7QUFFakMsb0JBQW9CO0FBQ3BCLE9BQU8sRUFBRSxVQUFVLEVBQUUsQ0FBQztBQWtEdEIsT0FBTyxFQUNMLHFDQUFxQyxFQUNyQyw4Q0FBOEMsRUFDOUMsMENBQTBDLEVBQzFDLHlCQUF5QixFQUN6QixrQ0FBa0MsRUFDbEMsOEJBQThCLEVBQzlCLHFDQUFxQyxHQUN0QyxNQUFNLHVCQUF1QixDQUFDIn0=
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFckQsNkJBQTZCO0FBQzdCLGNBQWMsdUJBQXVCLENBQUM7QUFFdEMsc0JBQXNCO0FBQ3RCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQVluRCxtQkFBbUI7QUFDbkIsT0FBTyxFQUNMLDJCQUEyQixFQUMzQixlQUFlLEdBR2hCLE1BQU0seUJBQXlCLENBQUM7QUFFakMsb0JBQW9CO0FBQ3BCLE9BQU8sRUFBRSxVQUFVLEVBQUUsQ0FBQztBQWtEdEIsT0FBTyxFQUNMLHFDQUFxQyxFQUNyQyw4Q0FBOEMsRUFDOUMsMENBQTBDLEVBQzFDLHlCQUF5QixFQUN6QixrQ0FBa0MsRUFDbEMsOEJBQThCLEVBQzlCLHFDQUFxQyxHQUN0QyxNQUFNLHVCQUF1QixDQUFDIn0=
@@ -1,4 +1,4 @@
1
- import { SmartdbServer, type ILocalSmartDbOfflineStringValueInspection, type ISmartDbManagementOperationOptions, type TLocalSmartDbOfflineStringValueInspectionResult } from '../ts_smartdb/index.js';
1
+ import { SmartdbServer, type ILocalSmartDbOfflinePhysicalNamespaceInspection, type ILocalSmartDbOfflinePhysicalNamespaceInspectionResult, type ILocalSmartDbOfflineStringValueInspection, type ISmartDbManagementOperationOptions, type TLocalSmartDbOfflineStringValueInspectionResult } from '../ts_smartdb/index.js';
2
2
  /**
3
3
  * Connection information returned by LocalSmartDb.start()
4
4
  */
@@ -48,6 +48,12 @@ export declare class LocalSmartDb {
48
48
  private generatedSocketPath;
49
49
  constructor(options: ILocalSmartDbOptions);
50
50
  private static createOfflineInspectionBridge;
51
+ private static runOfflineInspection;
52
+ /**
53
+ * Inspect physical database and collection names while the owning engine is stopped.
54
+ * This starts only the Rust management sidecar and never initializes storage.
55
+ */
56
+ static inspectOfflinePhysicalNamespaces(inputArg: ILocalSmartDbOfflinePhysicalNamespaceInspection, optionsArg?: ISmartDbManagementOperationOptions): Promise<ILocalSmartDbOfflinePhysicalNamespaceInspectionResult>;
51
57
  /**
52
58
  * Inspect one exact string value while the owning LocalSmartDb engine is stopped.
53
59
  * This starts only the Rust management sidecar and never initializes storage.
@@ -5,7 +5,7 @@ import * as path from 'path';
5
5
  import * as os from 'os';
6
6
  import { RustDbBridge, SmartdbServer, } from '../ts_smartdb/index.js';
7
7
  import { StorageMigrator } from '../ts_migration/index.js';
8
- import { normalizeLocalSmartDbOfflineInspectionInput, validateSmartDbManagementOperationOptions, } from '../ts_smartdb/offline-inspection.js';
8
+ import { normalizeLocalSmartDbOfflinePhysicalNamespaceInspectionInput, normalizeLocalSmartDbOfflineInspectionInput, validateSmartDbManagementOperationOptions, } from '../ts_smartdb/offline-inspection.js';
9
9
  /**
10
10
  * LocalSmartDb - Lightweight local MongoDB-compatible database using Unix sockets
11
11
  *
@@ -43,15 +43,11 @@ export class LocalSmartDb {
43
43
  static createOfflineInspectionBridge() {
44
44
  return new RustDbBridge();
45
45
  }
46
- /**
47
- * Inspect one exact string value while the owning LocalSmartDb engine is stopped.
48
- * This starts only the Rust management sidecar and never initializes storage.
49
- */
50
- static async inspectOfflineStringValue(inputArg, optionsArg) {
51
- const validatedInput = normalizeLocalSmartDbOfflineInspectionInput(inputArg);
46
+ static async runOfflineInspection(inputArg, optionsArg, normalizeInputArg, inspectArg) {
47
+ const validatedInput = normalizeInputArg(inputArg);
52
48
  validateSmartDbManagementOperationOptions(optionsArg);
53
49
  optionsArg?.signal?.throwIfAborted();
54
- const input = normalizeLocalSmartDbOfflineInspectionInput({
50
+ const input = normalizeInputArg({
55
51
  ...validatedInput,
56
52
  folderPath: path.resolve(validatedInput.folderPath),
57
53
  });
@@ -89,7 +85,7 @@ export class LocalSmartDb {
89
85
  timeoutMs: remainingMs,
90
86
  };
91
87
  }
92
- result = await bridge.inspectOfflineStringValue(input, commandOptions);
88
+ result = await inspectArg(bridge, input, commandOptions);
93
89
  }
94
90
  catch (error) {
95
91
  operationFailed = true;
@@ -109,6 +105,20 @@ export class LocalSmartDb {
109
105
  }
110
106
  return result;
111
107
  }
108
+ /**
109
+ * Inspect physical database and collection names while the owning engine is stopped.
110
+ * This starts only the Rust management sidecar and never initializes storage.
111
+ */
112
+ static async inspectOfflinePhysicalNamespaces(inputArg, optionsArg) {
113
+ return LocalSmartDb.runOfflineInspection(inputArg, optionsArg, normalizeLocalSmartDbOfflinePhysicalNamespaceInspectionInput, (bridgeArg, input, commandOptions) => bridgeArg.inspectOfflinePhysicalNamespaces(input, commandOptions));
114
+ }
115
+ /**
116
+ * Inspect one exact string value while the owning LocalSmartDb engine is stopped.
117
+ * This starts only the Rust management sidecar and never initializes storage.
118
+ */
119
+ static async inspectOfflineStringValue(inputArg, optionsArg) {
120
+ return LocalSmartDb.runOfflineInspection(inputArg, optionsArg, normalizeLocalSmartDbOfflineInspectionInput, (bridgeArg, input, commandOptions) => bridgeArg.inspectOfflineStringValue(input, commandOptions));
121
+ }
112
122
  /**
113
123
  * Generate a unique socket path in /tmp
114
124
  */
@@ -236,4 +246,4 @@ export class LocalSmartDb {
236
246
  }
237
247
  }
238
248
  }
239
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5sb2NhbHNtYXJ0ZGIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy90c19sb2NhbC9jbGFzc2VzLmxvY2Fsc21hcnRkYi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUNqQyxPQUFPLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNsQyxPQUFPLEtBQUssR0FBRyxNQUFNLEtBQUssQ0FBQztBQUMzQixPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQztBQUN6QixPQUFPLEVBQ0wsWUFBWSxFQUNaLGFBQWEsR0FJZCxNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQ0wsMkNBQTJDLEVBQzNDLHlDQUF5QyxHQUMxQyxNQUFNLHFDQUFxQyxDQUFDO0FBbUI3Qzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBMkJHO0FBQ0gsTUFBTSxPQUFPLFlBQVk7SUFLdkIsWUFBWSxPQUE2QjtRQUhqQyxXQUFNLEdBQXlCLElBQUksQ0FBQztRQUNwQyx3QkFBbUIsR0FBa0IsSUFBSSxDQUFDO1FBR2hELElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0lBQ3pCLENBQUM7SUFFTyxNQUFNLENBQUMsNkJBQTZCO1FBQzFDLE9BQU8sSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksTUFBTSxDQUFDLEtBQUssQ0FBQyx5QkFBeUIsQ0FDM0MsUUFBbUQsRUFDbkQsVUFBK0M7UUFFL0MsTUFBTSxjQUFjLEdBQUcsMkNBQTJDLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDN0UseUNBQXlDLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDdEQsVUFBVSxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsQ0FBQztRQUVyQyxNQUFNLEtBQUssR0FBRywyQ0FBMkMsQ0FBQztZQUN4RCxHQUFHLGNBQWM7WUFDakIsVUFBVSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLFVBQVUsQ0FBQztTQUNwRCxDQUFDLENBQUM7UUFDSCxNQUFNLFFBQVEsR0FBRyxVQUFVLEVBQUUsU0FBUyxLQUFLLFNBQVM7WUFDbEQsQ0FBQyxDQUFDLFNBQVM7WUFDWCxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLFVBQVUsQ0FBQyxTQUFTLENBQUM7UUFDdEMsTUFBTSxNQUFNLEdBQUcsWUFBWSxDQUFDLDZCQUE2QixFQUFFLENBQUM7UUFDNUQsSUFBSSxlQUFlLEdBQUcsS0FBSyxDQUFDO1FBQzVCLElBQUksY0FBdUIsQ0FBQztRQUM1QixJQUFJLE1BQW1FLENBQUM7UUFDeEUsSUFBSSxDQUFDO1lBQ0gsSUFBSSxZQUFZLEdBQUcsVUFBVSxDQUFDO1lBQzlCLElBQUksUUFBUSxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUMzQixNQUFNLFdBQVcsR0FBRyxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO2dCQUMxQyxJQUFJLFdBQVcsSUFBSSxDQUFDLEVBQUUsQ0FBQztvQkFDckIsTUFBTSxJQUFJLEtBQUssQ0FBQywyREFBMkQsQ0FBQyxDQUFDO2dCQUMvRSxDQUFDO2dCQUNELFlBQVksR0FBRztvQkFDYixNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU07b0JBQzFCLFNBQVMsRUFBRSxXQUFXO2lCQUN2QixDQUFDO1lBQ0osQ0FBQztZQUNELElBQUksQ0FBQyxNQUFNLE1BQU0sQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztnQkFDdEMsTUFBTSxJQUFJLEtBQUssQ0FDYixrRUFBa0U7b0JBQ2xFLCtEQUErRCxDQUNoRSxDQUFDO1lBQ0osQ0FBQztZQUNELElBQUksY0FBYyxHQUFHLFVBQVUsQ0FBQztZQUNoQyxJQUFJLFFBQVEsS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDM0IsTUFBTSxXQUFXLEdBQUcsUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDMUMsSUFBSSxXQUFXLElBQUksQ0FBQyxFQUFFLENBQUM7b0JBQ3JCLE1BQU0sSUFBSSxLQUFLLENBQUMsaUVBQWlFLENBQUMsQ0FBQztnQkFDckYsQ0FBQztnQkFDRCxjQUFjLEdBQUc7b0JBQ2YsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNO29CQUMxQixTQUFTLEVBQUUsV0FBVztpQkFDdkIsQ0FBQztZQUNKLENBQUM7WUFDRCxNQUFNLEdBQUcsTUFBTSxNQUFNLENBQUMseUJBQXlCLENBQUMsS0FBSyxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQ3pFLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsZUFBZSxHQUFHLElBQUksQ0FBQztZQUN2QixjQUFjLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLENBQUM7UUFFRCxJQUFJLENBQUM7WUFDSCxNQUFNLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBRSxhQUFhLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMvQyxDQUFDO1FBQUMsT0FBTyxnQkFBZ0IsRUFBRSxDQUFDO1lBQzFCLElBQUksZUFBZSxFQUFFLENBQUM7Z0JBQ3BCLE1BQU0sSUFBSSxjQUFjLENBQ3RCLENBQUMsY0FBYyxFQUFFLGdCQUFnQixDQUFDLEVBQ2xDLDBFQUEwRSxFQUMxRSxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsQ0FDMUIsQ0FBQztZQUNKLENBQUM7WUFDRCxNQUFNLGdCQUFnQixDQUFDO1FBQ3pCLENBQUM7UUFDRCxJQUFJLGVBQWUsRUFBRSxDQUFDO1lBQ3BCLE1BQU0sY0FBYyxDQUFDO1FBQ3ZCLENBQUM7UUFDRCxPQUFPLE1BQXlELENBQUM7SUFDbkUsQ0FBQztJQUVEOztPQUVHO0lBQ0ssa0JBQWtCO1FBQ3hCLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3ZELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUUsV0FBVyxRQUFRLE9BQU8sQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRDs7T0FFRztJQUNLLE1BQU0sQ0FBQyxhQUFhLENBQUMsVUFBa0I7UUFDN0MsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQzdCLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsRUFBRSxHQUFHLEVBQUU7Z0JBQzdELE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDakIsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2hCLENBQUMsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFO2dCQUN0QixPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDakIsQ0FBQyxDQUFDLENBQUM7WUFDSCxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUU7Z0JBQzFCLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDakIsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2pCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssTUFBTSxDQUFDLEtBQUssQ0FBQyxpQkFBaUI7UUFDcEMsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQzNCLElBQUksT0FBaUIsQ0FBQztRQUN0QixJQUFJLENBQUM7WUFDSCxPQUFPLEdBQUcsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3JDLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxPQUFPO1FBQ1QsQ0FBQztRQUNELE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQ2hDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQ3ZELENBQUM7UUFDRixLQUFLLE1BQU0sSUFBSSxJQUFJLFdBQVcsRUFBRSxDQUFDO1lBQy9CLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3pDLElBQUksQ0FBQztnQkFDSCxNQUFNLElBQUksR0FBRyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQ3JDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO29CQUFFLFNBQVM7Z0JBQy9CLE1BQU0sS0FBSyxHQUFHLE1BQU0sWUFBWSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDekQsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO29CQUNYLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDNUIsQ0FBQztZQUNILENBQUM7WUFBQyxNQUFNLENBQUM7Z0JBQ1AsNkNBQTZDO1lBQy9DLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLEtBQUs7UUFDVCxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNoQixNQUFNLElBQUksS0FBSyxDQUFDLGlDQUFpQyxDQUFDLENBQUM7UUFDckQsQ0FBQztRQUVELHlEQUF5RDtRQUN6RCxNQUFNLFlBQVksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBRXZDLHdEQUF3RDtRQUN4RCxNQUFNLFFBQVEsR0FBRyxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzlELE1BQU0sUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBRXJCLDJDQUEyQztRQUMzQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFFaEYsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLGFBQWEsQ0FBQztZQUM5QixVQUFVLEVBQUUsSUFBSSxDQUFDLG1CQUFtQjtZQUNwQyxPQUFPLEVBQUUsTUFBTTtZQUNmLFdBQVcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVU7U0FDckMsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBRTFCLE9BQU87WUFDTCxVQUFVLEVBQUUsSUFBSSxDQUFDLG1CQUFtQjtZQUNwQyxhQUFhLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRTtTQUM5QyxDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0gsaUJBQWlCO1FBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUM5QyxNQUFNLElBQUksS0FBSyxDQUFDLGtEQUFrRCxDQUFDLENBQUM7UUFDdEUsQ0FBQztRQUNELE9BQU87WUFDTCxVQUFVLEVBQUUsSUFBSSxDQUFDLG1CQUFtQjtZQUNwQyxhQUFhLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRTtTQUM5QyxDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0gsU0FBUztRQUNQLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDakIsTUFBTSxJQUFJLEtBQUssQ0FBQyxrREFBa0QsQ0FBQyxDQUFDO1FBQ3RFLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsZ0JBQWdCO1FBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNqQixNQUFNLElBQUksS0FBSyxDQUFDLGtEQUFrRCxDQUFDLENBQUM7UUFDdEUsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQ3hDLENBQUM7SUFFRDs7T0FFRztJQUNILElBQUksT0FBTztRQUNULE9BQU8sSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUM7SUFDckQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsS0FBSyxDQUFDLElBQUk7UUFDUixJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNoQixNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7WUFDbkIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQztRQUNsQyxDQUFDO0lBQ0gsQ0FBQztDQUNGIn0=
249
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5sb2NhbHNtYXJ0ZGIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy90c19sb2NhbC9jbGFzc2VzLmxvY2Fsc21hcnRkYi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUNqQyxPQUFPLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNsQyxPQUFPLEtBQUssR0FBRyxNQUFNLEtBQUssQ0FBQztBQUMzQixPQUFPLEtBQUssSUFBSSxNQUFNLE1BQU0sQ0FBQztBQUM3QixPQUFPLEtBQUssRUFBRSxNQUFNLElBQUksQ0FBQztBQUN6QixPQUFPLEVBQ0wsWUFBWSxFQUNaLGFBQWEsR0FNZCxNQUFNLHdCQUF3QixDQUFDO0FBQ2hDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQ0wsNERBQTRELEVBQzVELDJDQUEyQyxFQUMzQyx5Q0FBeUMsR0FDMUMsTUFBTSxxQ0FBcUMsQ0FBQztBQW1CN0M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTJCRztBQUNILE1BQU0sT0FBTyxZQUFZO0lBS3ZCLFlBQVksT0FBNkI7UUFIakMsV0FBTSxHQUF5QixJQUFJLENBQUM7UUFDcEMsd0JBQW1CLEdBQWtCLElBQUksQ0FBQztRQUdoRCxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztJQUN6QixDQUFDO0lBRU8sTUFBTSxDQUFDLDZCQUE2QjtRQUMxQyxPQUFPLElBQUksWUFBWSxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVPLE1BQU0sQ0FBQyxLQUFLLENBQUMsb0JBQW9CLENBSXZDLFFBQWdCLEVBQ2hCLFVBQTBELEVBQzFELGlCQUErQyxFQUMvQyxVQUlxQjtRQUVyQixNQUFNLGNBQWMsR0FBRyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNuRCx5Q0FBeUMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUN0RCxV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
@@ -1,3 +1,3 @@
1
1
  export { LocalSmartDb } from './classes.localsmartdb.js';
2
2
  export type { ILocalSmartDbOptions, ILocalSmartDbConnectionInfo } from './classes.localsmartdb.js';
3
- export type { ILocalSmartDbOfflineInspectionLimits, ILocalSmartDbOfflineStringValueInspection, TLocalSmartDbOfflineStringValueInspectionResult, } from '../ts_smartdb/service-types.js';
3
+ export type { ILocalSmartDbOfflineInspectionLimits, ILocalSmartDbOfflinePhysicalNamespaceInspectionLimits, ILocalSmartDbOfflinePhysicalNamespaceInspection, ILocalSmartDbOfflinePhysicalNamespaceInspectionResult, ILocalSmartDbOfflineStringValueInspection, TLocalSmartDbOfflineStringValueInspectionResult, } from '../ts_smartdb/service-types.js';
@@ -2,7 +2,7 @@ export { SmartdbServer } from './server/SmartdbServer.js';
2
2
  export type { ISmartdbAuthOptions, ISmartdbAuthUser, ISmartdbOplogOptions, ISmartdbServerOptions, ISmartdbTlsOptions, } from './server/SmartdbServer.js';
3
3
  export { RustDbBridge, SmartDbManagementOperationTerminationError, } from './rust-db-bridge.js';
4
4
  export type { IOpLogEntry, IOpLogResult, IOpLogStats, IRevertResult, ICollectionInfo, IDocumentsResult, ISmartDbMetrics, } from './rust-db-bridge.js';
5
- export type { ISmartDbHealth, ISmartDbResourceFence, ISmartDbResourceFenceReceipt, ISmartDbHeldPublicationReceipt, ISmartDbCommitDatabasePublicationInput, ISmartDbManagementOperationOptions, ISmartDbDatabaseResourceFenceState, ISmartDbDatabaseAllocationIdentity, ISmartDbDatabaseAllocationLifecycle, ISmartDbDatabaseAllocationReadAccessGrantIdentity, ISmartDbIssueDatabaseAllocationReadAccessGrantInput, ISmartDbIssueDatabaseAllocationReadAccessGrantResult, ISmartDbRevokeDatabaseAllocationReadAccessGrantInput, ISmartDbRevokeDatabaseAllocationReadAccessGrantResult, ILocalSmartDbOfflineInspectionLimits, ILocalSmartDbOfflineStringValueInspection, TLocalSmartDbOfflineStringValueInspectionResult, TSmartDbCommitDatabasePublicationResult, TSmartDbResourceFenceErrorCode, TSmartDbAllocationReadAccessGrantErrorCode, ISmartDbDatabaseTenantInput, ISmartDbAttestDatabaseTenantInput, ISmartDbAttestDatabaseTenantResult, ISmartDbEnsureDatabaseTenantInput, ISmartDbEnsureDatabaseTenantResult, ISmartDbAllocateDatabaseTenantInput, ISmartDbAllocateDatabaseTenantResult, ISmartDbDeleteDatabaseTenantInput, ISmartDbRotateDatabaseTenantPasswordInput, ISmartDbDatabaseTenantDescriptor, ISmartDbDeleteDatabaseTenantResult, ISmartDbDatabaseExportCollection, ISmartDbDatabaseExport, ISmartDbDatabaseExportLimits, ISmartDbExportDatabaseInput, ISmartDbDatabaseContentDigestLimits, ISmartDbGetDatabaseContentDigestInput, ISmartDbDatabaseContentDigest, ISmartDbImportDatabaseInput, ISmartDbImportDatabaseResult, } from './service-types.js';
5
+ export type { ISmartDbHealth, ISmartDbResourceFence, ISmartDbResourceFenceReceipt, ISmartDbHeldPublicationReceipt, ISmartDbCommitDatabasePublicationInput, ISmartDbManagementOperationOptions, ISmartDbDatabaseResourceFenceState, ISmartDbDatabaseAllocationIdentity, ISmartDbDatabaseAllocationLifecycle, ISmartDbDatabaseAllocationReadAccessGrantIdentity, ISmartDbIssueDatabaseAllocationReadAccessGrantInput, ISmartDbIssueDatabaseAllocationReadAccessGrantResult, ISmartDbRevokeDatabaseAllocationReadAccessGrantInput, ISmartDbRevokeDatabaseAllocationReadAccessGrantResult, ILocalSmartDbOfflineInspectionLimits, ILocalSmartDbOfflinePhysicalNamespaceInspectionLimits, ILocalSmartDbOfflinePhysicalNamespaceInspection, ILocalSmartDbOfflinePhysicalNamespaceInspectionResult, ILocalSmartDbOfflineStringValueInspection, TLocalSmartDbOfflineStringValueInspectionResult, TSmartDbCommitDatabasePublicationResult, TSmartDbResourceFenceErrorCode, TSmartDbAllocationReadAccessGrantErrorCode, ISmartDbDatabaseTenantInput, ISmartDbAttestDatabaseTenantInput, ISmartDbAttestDatabaseTenantResult, ISmartDbEnsureDatabaseTenantInput, ISmartDbEnsureDatabaseTenantResult, ISmartDbAllocateDatabaseTenantInput, ISmartDbAllocateDatabaseTenantResult, ISmartDbDeleteDatabaseTenantInput, ISmartDbRotateDatabaseTenantPasswordInput, ISmartDbDatabaseTenantDescriptor, ISmartDbDeleteDatabaseTenantResult, ISmartDbDatabaseExportCollection, ISmartDbDatabaseExport, ISmartDbDatabaseExportLimits, ISmartDbExportDatabaseInput, ISmartDbDatabaseContentDigestLimits, ISmartDbGetDatabaseContentDigestInput, ISmartDbDatabaseContentDigest, ISmartDbImportDatabaseInput, ISmartDbImportDatabaseResult, } from './service-types.js';
6
6
  export { SmartDbAllocationReadAccessGrantError, normalizeSmartDbAllocationReadAccessGrantError, smartDbAllocationReadAccessGrantErrorCodes, SmartDbResourceFenceError, normalizeSmartDbResourceFenceError, smartDbResourceFenceErrorCodes, } from './service-types.js';
7
7
  export type { TSmartDbEffectivePayloadInputV1 } from './resource-fencing.js';
8
8
  export { createSmartDbEffectivePayloadSha256V1 } from './resource-fencing.js';
@@ -5,4 +5,4 @@ export { SmartdbServer } from './server/SmartdbServer.js';
5
5
  export { RustDbBridge, SmartDbManagementOperationTerminationError, } from './rust-db-bridge.js';
6
6
  export { SmartDbAllocationReadAccessGrantError, normalizeSmartDbAllocationReadAccessGrantError, smartDbAllocationReadAccessGrantErrorCodes, SmartDbResourceFenceError, normalizeSmartDbResourceFenceError, smartDbResourceFenceErrorCodes, } from './service-types.js';
7
7
  export { createSmartDbEffectivePayloadSha256V1 } from './resource-fencing.js';
8
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy90c19zbWFydGRiL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDhEQUE4RDtBQUU5RCx5REFBeUQ7QUFDekQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBUzFELHNFQUFzRTtBQUN0RSxPQUFPLEVBQ0wsWUFBWSxFQUNaLDBDQUEwQyxHQUMzQyxNQUFNLHFCQUFxQixDQUFDO0FBd0Q3QixPQUFPLEVBQ0wscUNBQXFDLEVBQ3JDLDhDQUE4QyxFQUM5QywwQ0FBMEMsRUFDMUMseUJBQXlCLEVBQ3pCLGtDQUFrQyxFQUNsQyw4QkFBOEIsR0FDL0IsTUFBTSxvQkFBb0IsQ0FBQztBQUU1QixPQUFPLEVBQUUscUNBQXFDLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQyJ9
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy90c19zbWFydGRiL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDhEQUE4RDtBQUU5RCx5REFBeUQ7QUFDekQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBUzFELHNFQUFzRTtBQUN0RSxPQUFPLEVBQ0wsWUFBWSxFQUNaLDBDQUEwQyxHQUMzQyxNQUFNLHFCQUFxQixDQUFDO0FBMkQ3QixPQUFPLEVBQ0wscUNBQXFDLEVBQ3JDLDhDQUE4QyxFQUM5QywwQ0FBMEMsRUFDMUMseUJBQXlCLEVBQ3pCLGtDQUFrQyxFQUNsQyw4QkFBOEIsR0FDL0IsTUFBTSxvQkFBb0IsQ0FBQztBQUU1QixPQUFPLEVBQUUscUNBQXFDLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQyJ9
@@ -1,4 +1,4 @@
1
- import type { ILocalSmartDbOfflineStringValueInspection, ISmartDbManagementOperationOptions } from './service-types.js';
1
+ import type { ILocalSmartDbOfflinePhysicalNamespaceInspection, ILocalSmartDbOfflineStringValueInspection, ISmartDbManagementOperationOptions } from './service-types.js';
2
2
  export declare const localSmartDbOfflineInspectionBounds: {
3
3
  readonly maximumFolderPathBytes: 4096;
4
4
  readonly maximumNamespaceComponentBytes: 255;
@@ -29,5 +29,56 @@ export declare const localSmartDbOfflineInspectionBounds: {
29
29
  };
30
30
  };
31
31
  };
32
+ export declare const localSmartDbOfflinePhysicalNamespaceInspectionBounds: {
33
+ readonly maximumFolderPathBytes: 4096;
34
+ readonly maximumRequestBytes: number;
35
+ readonly limits: {
36
+ readonly maximumEntries: {
37
+ readonly minimum: 1;
38
+ readonly maximum: 100000;
39
+ };
40
+ readonly maximumDatabases: {
41
+ readonly minimum: 1;
42
+ readonly maximum: 4096;
43
+ };
44
+ readonly maximumCollections: {
45
+ readonly minimum: 1;
46
+ readonly maximum: 10000;
47
+ };
48
+ readonly maximumIndexes: {
49
+ readonly minimum: 1;
50
+ readonly maximum: 100000;
51
+ };
52
+ readonly maximumDataFileBytes: {
53
+ readonly minimum: 64;
54
+ readonly maximum: number;
55
+ };
56
+ readonly maximumWalFileBytes: {
57
+ readonly minimum: 64;
58
+ readonly maximum: number;
59
+ };
60
+ readonly maximumIndexFileBytes: {
61
+ readonly minimum: 2;
62
+ readonly maximum: number;
63
+ };
64
+ readonly maximumTotalFileBytes: {
65
+ readonly minimum: 1;
66
+ readonly maximum: number;
67
+ };
68
+ readonly maximumRecordsPerCollection: {
69
+ readonly minimum: 1;
70
+ readonly maximum: 1000000;
71
+ };
72
+ readonly maximumRecordBytes: {
73
+ readonly minimum: 22;
74
+ readonly maximum: number;
75
+ };
76
+ readonly maximumResultBytes: {
77
+ readonly minimum: 32;
78
+ readonly maximum: number;
79
+ };
80
+ };
81
+ };
32
82
  export declare const normalizeLocalSmartDbOfflineInspectionInput: (inputArg: ILocalSmartDbOfflineStringValueInspection) => ILocalSmartDbOfflineStringValueInspection;
83
+ export declare const normalizeLocalSmartDbOfflinePhysicalNamespaceInspectionInput: (inputArg: ILocalSmartDbOfflinePhysicalNamespaceInspection) => ILocalSmartDbOfflinePhysicalNamespaceInspection;
33
84
  export declare const validateSmartDbManagementOperationOptions: (optionsArg?: ISmartDbManagementOperationOptions) => void;
@@ -14,6 +14,23 @@ export const localSmartDbOfflineInspectionBounds = {
14
14
  maximumResultBytes: { minimum: 1, maximum: 16 * 1024 * 1024 },
15
15
  },
16
16
  };
17
+ export const localSmartDbOfflinePhysicalNamespaceInspectionBounds = {
18
+ maximumFolderPathBytes: 4096,
19
+ maximumRequestBytes: 2 * 1024 * 1024,
20
+ limits: {
21
+ maximumEntries: { minimum: 1, maximum: 100_000 },
22
+ maximumDatabases: { minimum: 1, maximum: 4096 },
23
+ maximumCollections: { minimum: 1, maximum: 10_000 },
24
+ maximumIndexes: { minimum: 1, maximum: 100_000 },
25
+ maximumDataFileBytes: { minimum: 64, maximum: 256 * 1024 * 1024 },
26
+ maximumWalFileBytes: { minimum: 64, maximum: 64 * 1024 * 1024 },
27
+ maximumIndexFileBytes: { minimum: 2, maximum: 16 * 1024 * 1024 },
28
+ maximumTotalFileBytes: { minimum: 1, maximum: 1024 * 1024 * 1024 * 1024 },
29
+ maximumRecordsPerCollection: { minimum: 1, maximum: 1_000_000 },
30
+ maximumRecordBytes: { minimum: 22, maximum: 17 * 1024 * 1024 },
31
+ maximumResultBytes: { minimum: 32, maximum: 16 * 1024 * 1024 },
32
+ },
33
+ };
17
34
  const inputKeys = new Set([
18
35
  'folderPath',
19
36
  'databaseName',
@@ -33,7 +50,41 @@ const limitKeys = [
33
50
  const limitKeySet = new Set(limitKeys);
34
51
  const requestStructuralBytes = plugins.buffer.Buffer.byteLength('{"folderPath":,"databaseName":,"collectionName":,"match":{"field":,"value":},"valueField":,"limits":{"maximumDataFileBytes":,"maximumWalFileBytes":,"maximumRecords":,"maximumRecordBytes":,"maximumResultBytes":}}', 'utf8');
35
52
  const requestEnvelopeBytes = plugins.buffer.Buffer.byteLength('{"id":"req_9007199254740991","method":"inspectOfflineStringValue","params":}', 'utf8');
53
+ const physicalNamespaceInputKeys = new Set(['folderPath', 'limits']);
54
+ const physicalNamespaceLimitKeys = [
55
+ 'maximumEntries',
56
+ 'maximumDatabases',
57
+ 'maximumCollections',
58
+ 'maximumIndexes',
59
+ 'maximumDataFileBytes',
60
+ 'maximumWalFileBytes',
61
+ 'maximumIndexFileBytes',
62
+ 'maximumTotalFileBytes',
63
+ 'maximumRecordsPerCollection',
64
+ 'maximumRecordBytes',
65
+ 'maximumResultBytes',
66
+ ];
67
+ const physicalNamespaceLimitKeySet = new Set(physicalNamespaceLimitKeys);
36
68
  const isRecord = (valueArg) => typeof valueArg === 'object' && valueArg !== null && !Array.isArray(valueArg);
69
+ const requirePhysicalNamespacePlainObject = (valueArg, allowedKeysArg, labelArg) => {
70
+ if (!isRecord(valueArg)) {
71
+ throw new TypeError(`LocalSmartDb offline physical namespace inspection ${labelArg} must be a plain object`);
72
+ }
73
+ for (const key in valueArg) {
74
+ if (!allowedKeysArg.has(key)) {
75
+ throw new TypeError(`LocalSmartDb offline physical namespace inspection ${labelArg} contains unknown key '${key}'`);
76
+ }
77
+ }
78
+ if (Object.getPrototypeOf(valueArg) !== Object.prototype) {
79
+ throw new TypeError(`LocalSmartDb offline physical namespace inspection ${labelArg} must be a plain object`);
80
+ }
81
+ for (const key of allowedKeysArg) {
82
+ if (!Object.prototype.propertyIsEnumerable.call(valueArg, key)) {
83
+ throw new TypeError(`LocalSmartDb offline physical namespace inspection ${labelArg} must contain own enumerable key '${key}'`);
84
+ }
85
+ }
86
+ return valueArg;
87
+ };
37
88
  const rejectUnknownEnumerableKeys = (valueArg, allowedKeysArg, labelArg) => {
38
89
  for (const key in valueArg) {
39
90
  if (!allowedKeysArg.has(key)) {
@@ -171,6 +222,58 @@ export const normalizeLocalSmartDbOfflineInspectionInput = (inputArg) => {
171
222
  }
172
223
  return normalized;
173
224
  };
225
+ export const normalizeLocalSmartDbOfflinePhysicalNamespaceInspectionInput = (inputArg) => {
226
+ const inputRecord = requirePhysicalNamespacePlainObject(inputArg, physicalNamespaceInputKeys, 'input');
227
+ const limits = requirePhysicalNamespacePlainObject(inputRecord.limits, physicalNamespaceLimitKeySet, 'limits');
228
+ const normalized = {
229
+ folderPath: inputRecord.folderPath,
230
+ limits: {
231
+ maximumEntries: limits.maximumEntries,
232
+ maximumDatabases: limits.maximumDatabases,
233
+ maximumCollections: limits.maximumCollections,
234
+ maximumIndexes: limits.maximumIndexes,
235
+ maximumDataFileBytes: limits.maximumDataFileBytes,
236
+ maximumWalFileBytes: limits.maximumWalFileBytes,
237
+ maximumIndexFileBytes: limits.maximumIndexFileBytes,
238
+ maximumTotalFileBytes: limits.maximumTotalFileBytes,
239
+ maximumRecordsPerCollection: limits.maximumRecordsPerCollection,
240
+ maximumRecordBytes: limits.maximumRecordBytes,
241
+ maximumResultBytes: limits.maximumResultBytes,
242
+ },
243
+ };
244
+ const bounds = localSmartDbOfflinePhysicalNamespaceInspectionBounds;
245
+ if (typeof normalized.folderPath !== 'string') {
246
+ throw new TypeError('LocalSmartDb offline physical namespace inspection folderPath must be a string');
247
+ }
248
+ const folderPathBytes = plugins.buffer.Buffer.byteLength(normalized.folderPath, 'utf8');
249
+ if (folderPathBytes < 1 || folderPathBytes > bounds.maximumFolderPathBytes) {
250
+ throw new RangeError(`LocalSmartDb offline physical namespace inspection folderPath must be between 1 and ${bounds.maximumFolderPathBytes} UTF-8 bytes`);
251
+ }
252
+ for (const character of normalized.folderPath) {
253
+ if (/\p{Cc}/u.test(character)) {
254
+ throw new TypeError('LocalSmartDb offline physical namespace inspection folderPath must not contain control characters');
255
+ }
256
+ }
257
+ for (const key of physicalNamespaceLimitKeys) {
258
+ const value = normalized.limits[key];
259
+ const range = bounds.limits[key];
260
+ if (!Number.isSafeInteger(value) || value < range.minimum || value > range.maximum) {
261
+ throw new RangeError(`LocalSmartDb offline physical namespace inspection limits.${key} must be a safe integer between ${range.minimum} and ${range.maximum}`);
262
+ }
263
+ }
264
+ const requestBytes = plugins.buffer.Buffer.byteLength(JSON.stringify({
265
+ id: 'req_9007199254740991',
266
+ method: 'inspectOfflinePhysicalNamespaces',
267
+ params: {
268
+ folderPath: normalized.folderPath,
269
+ ...normalized.limits,
270
+ },
271
+ }), 'utf8');
272
+ if (requestBytes > bounds.maximumRequestBytes) {
273
+ throw new RangeError(`LocalSmartDb offline physical namespace inspection request exceeds the ${bounds.maximumRequestBytes}-byte serialized limit`);
274
+ }
275
+ return normalized;
276
+ };
174
277
  export const validateSmartDbManagementOperationOptions = (optionsArg) => {
175
278
  if (optionsArg === undefined)
176
279
  return;
@@ -184,4 +287,4 @@ export const validateSmartDbManagementOperationOptions = (optionsArg) => {
184
287
  throw new RangeError(`SmartDB management operation timeoutMs must be an integer between 1 and ${localSmartDbOfflineInspectionBounds.maximumTimeoutMs}`);
185
288
  }
186
289
  };
187
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2ZmbGluZS1pbnNwZWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvdHNfc21hcnRkYi9vZmZsaW5lLWluc3BlY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFNeEMsTUFBTSxDQUFDLE1BQU0sbUNBQW1DLEdBQUc7SUFDakQsc0JBQXNCLEVBQUUsSUFBSTtJQUM1Qiw4QkFBOEIsRUFBRSxHQUFHO0lBQ25DLHFCQUFxQixFQUFFLEdBQUc7SUFDMUIsc0JBQXNCLEVBQUUsSUFBSSxHQUFHLElBQUk7SUFDbkMsbUJBQW1CLEVBQUUsQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJO0lBQ3BDLGdCQUFnQixFQUFFLGFBQWE7SUFDL0IsTUFBTSxFQUFFO1FBQ04sb0JBQW9CLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxHQUFHLEdBQUcsSUFBSSxHQUFHLElBQUksRUFBRTtRQUNqRSxtQkFBbUIsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsR0FBRyxJQUFJLEdBQUcsSUFBSSxFQUFFO1FBQy9ELGNBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRTtRQUNsRCxrQkFBa0IsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsR0FBRyxJQUFJLEdBQUcsSUFBSSxFQUFFO1FBQzlELGtCQUFrQixFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRSxHQUFHLElBQUksR0FBRyxJQUFJLEVBQUU7S0FDOUQ7Q0FDTyxDQUFDO0FBRVgsTUFBTSxTQUFTLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDeEIsWUFBWTtJQUNaLGNBQWM7SUFDZCxnQkFBZ0I7SUFDaEIsT0FBTztJQUNQLFlBQVk7SUFDWixRQUFRO0NB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
290
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib2ZmbGluZS1pbnNwZWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vdHMvdHNfc21hcnRkYi9vZmZsaW5lLWluc3BlY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFPeEMsTUFBTSxDQUFDLE1BQU0sbUNBQW1DLEdBQUc7SUFDakQsc0JBQXNCLEVBQUUsSUFBSTtJQUM1Qiw4QkFBOEIsRUFBRSxHQUFHO0lBQ25DLHFCQUFxQixFQUFFLEdBQUc7SUFDMUIsc0JBQXNCLEVBQUUsSUFBSSxHQUFHLElBQUk7SUFDbkMsbUJBQW1CLEVBQUUsQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJO0lBQ3BDLGdCQUFnQixFQUFFLGFBQWE7SUFDL0IsTUFBTSxFQUFFO1FBQ04sb0JBQW9CLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLE9BQU8sRUFBRSxHQUFHLEdBQUcsSUFBSSxHQUFHLElBQUksRUFBRTtRQUNqRSxtQkFBbUIsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsR0FBRyxJQUFJLEdBQUcsSUFBSSxFQUFFO1FBQy9ELGNBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRTtRQUNsRCxrQkFBa0IsRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLEVBQUUsR0FBRyxJQUFJLEdBQUcsSUFBSSxFQUFFO1FBQzlELGtCQUFrQixFQUFFLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRSxHQUFHLElBQUksR0FBRyxJQUFJLEVBQUU7S0FDOUQ7Q0FDTyxDQUFDO0FBRVgsTUFBTSxDQUFDLE1BQU0sb0RBQW9ELEdBQUc7SUFDbEUsc0JBQXNCLEVBQUUsSUFBSTtJQUM1QixtQkFBbUIsRUFBRSxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUk7SUFD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
@@ -1,7 +1,7 @@
1
1
  import * as plugins from './plugins.js';
2
2
  import { EventEmitter } from 'events';
3
- import type { ISmartDbHealth, ISmartDbDatabaseTenantInput, ISmartDbAttestDatabaseTenantInput, ISmartDbAttestDatabaseTenantResult, ISmartDbEnsureDatabaseTenantInput, ISmartDbEnsureDatabaseTenantResult, ISmartDbAllocateDatabaseTenantInput, ISmartDbAllocateDatabaseTenantResult, ISmartDbDeleteDatabaseTenantInput, ISmartDbRotateDatabaseTenantPasswordInput, ISmartDbDatabaseTenantDescriptor, ISmartDbDeleteDatabaseTenantResult, ISmartDbIssueDatabaseAllocationReadAccessGrantInput, ISmartDbIssueDatabaseAllocationReadAccessGrantResult, ISmartDbRevokeDatabaseAllocationReadAccessGrantInput, ISmartDbRevokeDatabaseAllocationReadAccessGrantResult, ISmartDbDatabaseExport, ISmartDbExportDatabaseInput, ISmartDbDatabaseContentDigest, ISmartDbGetDatabaseContentDigestInput, ISmartDbImportDatabaseInput, ISmartDbImportDatabaseResult, ISmartDbCommitDatabasePublicationInput, ISmartDbManagementOperationOptions, ISmartDbDatabaseResourceFenceState, ILocalSmartDbOfflineStringValueInspection, TLocalSmartDbOfflineStringValueInspectionResult, TSmartDbCommitDatabasePublicationResult } from './service-types.js';
4
- export type { ISmartDbHealth, ISmartDbDatabaseTenantInput, ISmartDbAttestDatabaseTenantInput, ISmartDbAttestDatabaseTenantResult, ISmartDbEnsureDatabaseTenantInput, ISmartDbEnsureDatabaseTenantResult, ISmartDbAllocateDatabaseTenantInput, ISmartDbAllocateDatabaseTenantResult, ISmartDbDeleteDatabaseTenantInput, ISmartDbRotateDatabaseTenantPasswordInput, ISmartDbDatabaseTenantDescriptor, ISmartDbDeleteDatabaseTenantResult, ISmartDbDatabaseAllocationReadAccessGrantIdentity, ISmartDbIssueDatabaseAllocationReadAccessGrantInput, ISmartDbIssueDatabaseAllocationReadAccessGrantResult, ISmartDbRevokeDatabaseAllocationReadAccessGrantInput, ISmartDbRevokeDatabaseAllocationReadAccessGrantResult, ISmartDbDatabaseExportCollection, ISmartDbDatabaseExport, ISmartDbImportDatabaseInput, ISmartDbImportDatabaseResult, ISmartDbHeldPublicationReceipt, ISmartDbCommitDatabasePublicationInput, ISmartDbManagementOperationOptions, ISmartDbDatabaseResourceFenceState, ILocalSmartDbOfflineInspectionLimits, ILocalSmartDbOfflineStringValueInspection, TLocalSmartDbOfflineStringValueInspectionResult, TSmartDbCommitDatabasePublicationResult, } from './service-types.js';
3
+ import type { ISmartDbHealth, ISmartDbDatabaseTenantInput, ISmartDbAttestDatabaseTenantInput, ISmartDbAttestDatabaseTenantResult, ISmartDbEnsureDatabaseTenantInput, ISmartDbEnsureDatabaseTenantResult, ISmartDbAllocateDatabaseTenantInput, ISmartDbAllocateDatabaseTenantResult, ISmartDbDeleteDatabaseTenantInput, ISmartDbRotateDatabaseTenantPasswordInput, ISmartDbDatabaseTenantDescriptor, ISmartDbDeleteDatabaseTenantResult, ISmartDbIssueDatabaseAllocationReadAccessGrantInput, ISmartDbIssueDatabaseAllocationReadAccessGrantResult, ISmartDbRevokeDatabaseAllocationReadAccessGrantInput, ISmartDbRevokeDatabaseAllocationReadAccessGrantResult, ISmartDbDatabaseExport, ISmartDbExportDatabaseInput, ISmartDbDatabaseContentDigest, ISmartDbGetDatabaseContentDigestInput, ISmartDbImportDatabaseInput, ISmartDbImportDatabaseResult, ISmartDbCommitDatabasePublicationInput, ISmartDbManagementOperationOptions, ISmartDbDatabaseResourceFenceState, ILocalSmartDbOfflinePhysicalNamespaceInspection, ILocalSmartDbOfflinePhysicalNamespaceInspectionResult, ILocalSmartDbOfflineStringValueInspection, TLocalSmartDbOfflineStringValueInspectionResult, TSmartDbCommitDatabasePublicationResult } from './service-types.js';
4
+ export type { ISmartDbHealth, ISmartDbDatabaseTenantInput, ISmartDbAttestDatabaseTenantInput, ISmartDbAttestDatabaseTenantResult, ISmartDbEnsureDatabaseTenantInput, ISmartDbEnsureDatabaseTenantResult, ISmartDbAllocateDatabaseTenantInput, ISmartDbAllocateDatabaseTenantResult, ISmartDbDeleteDatabaseTenantInput, ISmartDbRotateDatabaseTenantPasswordInput, ISmartDbDatabaseTenantDescriptor, ISmartDbDeleteDatabaseTenantResult, ISmartDbDatabaseAllocationReadAccessGrantIdentity, ISmartDbIssueDatabaseAllocationReadAccessGrantInput, ISmartDbIssueDatabaseAllocationReadAccessGrantResult, ISmartDbRevokeDatabaseAllocationReadAccessGrantInput, ISmartDbRevokeDatabaseAllocationReadAccessGrantResult, ISmartDbDatabaseExportCollection, ISmartDbDatabaseExport, ISmartDbImportDatabaseInput, ISmartDbImportDatabaseResult, ISmartDbHeldPublicationReceipt, ISmartDbCommitDatabasePublicationInput, ISmartDbManagementOperationOptions, ISmartDbDatabaseResourceFenceState, ILocalSmartDbOfflineInspectionLimits, ILocalSmartDbOfflinePhysicalNamespaceInspectionLimits, ILocalSmartDbOfflinePhysicalNamespaceInspection, ILocalSmartDbOfflinePhysicalNamespaceInspectionResult, ILocalSmartDbOfflineStringValueInspection, TLocalSmartDbOfflineStringValueInspectionResult, TSmartDbCommitDatabasePublicationResult, } from './service-types.js';
5
5
  /**
6
6
  * A single oplog entry returned from the Rust engine.
7
7
  */
@@ -145,6 +145,7 @@ export declare class RustDbBridge extends EventEmitter {
145
145
  get running(): boolean;
146
146
  get ownershipReleased(): boolean;
147
147
  private awaitManagementOperationTermination;
148
+ inspectOfflinePhysicalNamespaces(inputArg: ILocalSmartDbOfflinePhysicalNamespaceInspection, optionsArg?: ISmartDbManagementOperationOptions): Promise<ILocalSmartDbOfflinePhysicalNamespaceInspectionResult>;
148
149
  inspectOfflineStringValue(inputArg: ILocalSmartDbOfflineStringValueInspection, optionsArg?: ISmartDbManagementOperationOptions): Promise<TLocalSmartDbOfflineStringValueInspectionResult>;
149
150
  transitionAuthMetadataPermissions(usersPathArg: string, expectedModeArg: number, targetModeArg: number, optionsArg?: ISmartDbManagementOperationOptions): Promise<TAuthMetadataPermissionTransitionStatus>;
150
151
  startDb(config: ISmartDbRustConfig, optionsArg?: ISmartDbManagementOperationOptions): Promise<{
@@ -3,7 +3,7 @@ import * as path from 'path';
3
3
  import * as url from 'url';
4
4
  import { EventEmitter } from 'events';
5
5
  import { normalizeSmartDbAllocationReadAccessGrantError, normalizeSmartDbResourceFenceError, } from './service-types.js';
6
- import { normalizeLocalSmartDbOfflineInspectionInput, validateSmartDbManagementOperationOptions, } from './offline-inspection.js';
6
+ import { normalizeLocalSmartDbOfflinePhysicalNamespaceInspectionInput, normalizeLocalSmartDbOfflineInspectionInput, validateSmartDbManagementOperationOptions, } from './offline-inspection.js';
7
7
  export class SmartDbManagementOperationTerminationError extends AggregateError {
8
8
  constructor(operationErrorArg, terminationErrorArg) {
9
9
  super([operationErrorArg, terminationErrorArg], 'SmartDB management operation failed and Rust engine termination was incomplete', { cause: operationErrorArg });
@@ -205,6 +205,21 @@ export class RustDbBridge extends EventEmitter {
205
205
  }
206
206
  }
207
207
  // --- Convenience methods for each management command ---
208
+ async inspectOfflinePhysicalNamespaces(inputArg, optionsArg) {
209
+ const input = normalizeLocalSmartDbOfflinePhysicalNamespaceInspectionInput(inputArg);
210
+ validateSmartDbManagementOperationOptions(optionsArg);
211
+ const params = {
212
+ folderPath: input.folderPath,
213
+ ...input.limits,
214
+ };
215
+ try {
216
+ return await this.bridge.sendCommand('inspectOfflinePhysicalNamespaces', params, optionsArg);
217
+ }
218
+ catch (error) {
219
+ await this.awaitManagementOperationTermination(error);
220
+ throw error;
221
+ }
222
+ }
208
223
  async inspectOfflineStringValue(inputArg, optionsArg) {
209
224
  const input = normalizeLocalSmartDbOfflineInspectionInput(inputArg);
210
225
  validateSmartDbManagementOperationOptions(optionsArg);
@@ -397,4 +412,4 @@ export class RustDbBridge extends EventEmitter {
397
412
  return this.bridge.sendCommand('getDocuments', { db, collection, limit, skip });
398
413
  }
399
414
  }
400
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVzdC1kYi1icmlkZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy90c19zbWFydGRiL3J1c3QtZGItYnJpZGdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBQ3hDLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sS0FBSyxHQUFHLE1BQU0sS0FBSyxDQUFDO0FBQzNCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDdEMsT0FBTyxFQUNMLDhDQUE4QyxFQUM5QyxrQ0FBa0MsR0FDbkMsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQ0wsMkNBQTJDLEVBQzNDLHlDQUF5QyxHQUMxQyxNQUFNLHlCQUF5QixDQUFDO0FBbUlqQyxNQUFNLE9BQU8sMENBQTJDLFNBQVEsY0FBYztJQUM1RSxZQUFZLGlCQUEwQixFQUFFLG1CQUE0QjtRQUNsRSxLQUFLLENBQ0gsQ0FBQyxpQkFBaUIsRUFBRSxtQkFBbUIsQ0FBQyxFQUN4QyxnRkFBZ0YsRUFDaEYsRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsQ0FDN0IsQ0FBQztRQUNGLElBQUksQ0FBQyxJQUFJLEdBQUcsNENBQTRDLENBQUM7SUFDM0QsQ0FBQztDQUNGO0FBeUpEOzs7R0FHRztBQUNILFNBQVMsY0FBYztJQUNyQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2pFLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzNDLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFTLHVCQUF1QjtJQUM5QixNQUFNLE9BQU8sR0FBMkIsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLEtB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
415
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVzdC1kYi1icmlkZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi90cy90c19zbWFydGRiL3J1c3QtZGItYnJpZGdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBQ3hDLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sS0FBSyxHQUFHLE1BQU0sS0FBSyxDQUFDO0FBQzNCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFDdEMsT0FBTyxFQUNMLDhDQUE4QyxFQUM5QyxrQ0FBa0MsR0FDbkMsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQ0wsNERBQTRELEVBQzVELDJDQUEyQyxFQUMzQyx5Q0FBeUMsR0FDMUMsTUFBTSx5QkFBeUIsQ0FBQztBQXdJakMsTUFBTSxPQUFPLDBDQUEyQyxTQUFRLGNBQWM7SUFDNUUsWUFBWSxpQkFBMEIsRUFBRSxtQkFBNEI7UUFDbEUsS0FBSyxDQUNILENBQUMsaUJBQWlCLEVBQUUsbUJBQW1CLENBQUMsRUFDeEMsZ0ZBQWdGLEVBQ2hGLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixFQUFFLENBQzdCLENBQUM7UUFDRixJQUFJLENBQUMsSUFBSSxHQUFHLDRDQUE0QyxDQUFDO0lBQzNELENBQUM7Q0FDRjtBQWlLRDs7O0dBR0c7QUFDSCxTQUFTLGNBQWM7SUFDckIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNqRSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztBQUMzQyxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsU0FBUyx1QkFBdUI7SUFDOUIsTUFBTSxPQUFPLEdBQTJCLEVBQUUsR0FBRyxFQUFF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
@@ -44,6 +44,30 @@ export type TLocalSmartDbOfflineStringValueInspectionResult = {
44
44
  status: 'found';
45
45
  value: string;
46
46
  };
47
+ export interface ILocalSmartDbOfflinePhysicalNamespaceInspectionLimits {
48
+ maximumEntries: number;
49
+ maximumDatabases: number;
50
+ maximumCollections: number;
51
+ maximumIndexes: number;
52
+ maximumDataFileBytes: number;
53
+ maximumWalFileBytes: number;
54
+ maximumIndexFileBytes: number;
55
+ maximumTotalFileBytes: number;
56
+ maximumRecordsPerCollection: number;
57
+ maximumRecordBytes: number;
58
+ maximumResultBytes: number;
59
+ }
60
+ export interface ILocalSmartDbOfflinePhysicalNamespaceInspection {
61
+ folderPath: string;
62
+ limits: ILocalSmartDbOfflinePhysicalNamespaceInspectionLimits;
63
+ }
64
+ export interface ILocalSmartDbOfflinePhysicalNamespaceInspectionResult {
65
+ schemaVersion: 1;
66
+ databases: Array<{
67
+ name: string;
68
+ collections: string[];
69
+ }>;
70
+ }
47
71
  export declare const smartDbResourceFenceErrorCodes: readonly ["EFENCE_REQUIRED", "EFENCE_STALE", "EFENCE_SCOPE_MISMATCH", "EFENCE_UNSUPPORTED", "EFENCE_MUTATION_MISMATCH", "EFENCE_OWNERSHIP_MISMATCH", "EFENCE_STATE_CORRUPT", "EFENCE_RECEIPT_LIMIT", "EFENCE_BUSY", "EFENCE_PUBLICATION_HELD", "EFENCE_CAPABILITY_MISMATCH", "EFENCE_NOT_HELD", "EALLOCATION_EXPECTED_ABSENT_CONFLICT", "EALLOCATION_REQUIRED", "EALLOCATION_MISMATCH", "EALLOCATION_GENERATION_EXHAUSTED", "EALLOCATION_DEPROVISIONED"];
48
72
  export type TSmartDbResourceFenceErrorCode = (typeof smartDbResourceFenceErrorCodes)[number];
49
73
  export interface ISmartDbResourceFence {
@@ -59,4 +59,4 @@ export const normalizeSmartDbResourceFenceError = (errorArg) => {
59
59
  }
60
60
  return new SmartDbResourceFenceError(match[1], match[2], error);
61
61
  };
62
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS10eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL3RzX3NtYXJ0ZGIvc2VydmljZS10eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUErQ0EsTUFBTSxDQUFDLE1BQU0sOEJBQThCLEdBQUc7SUFDNUMsaUJBQWlCO0lBQ2pCLGNBQWM7SUFDZCx1QkFBdUI7SUFDdkIsb0JBQW9CO0lBQ3BCLDBCQUEwQjtJQUMxQiwyQkFBMkI7SUFDM0Isc0JBQXNCO0lBQ3RCLHNCQUFzQjtJQUN0QixhQUFhO0lBQ2IseUJBQXlCO0lBQ3pCLDRCQUE0QjtJQUM1QixpQkFBaUI7SUFDakIsc0NBQXNDO0lBQ3RDLHNCQUFzQjtJQUN0QixzQkFBc0I7SUFDdEIsa0NBQWtDO0lBQ2xDLDJCQUEyQjtDQUNuQixDQUFDO0FBdUdYLE1BQU0sQ0FBQyxNQUFNLDBDQUEwQyxHQUFHO0lBQ3hELHdCQUF3QjtJQUN4Qiw0QkFBNEI7SUFDNUIsaUJBQWlCO0lBQ2pCLHdCQUF3QjtJQUN4QiwwQkFBMEI7Q0FDbEIsQ0FBQztBQUtYLE1BQU0sT0FBTyxxQ0FBc0MsU0FBUSxLQUFLO0lBRzlELFlBQ0UsT0FBbUQsRUFDbkQsVUFBa0IsRUFDbEIsUUFBa0I7UUFFbEIsS0FBSyxDQUFDLEdBQUcsT0FBTyxLQUFLLFVBQVUsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLElBQUksR0FBRyx1Q0FBdUMsQ0FBQztRQUNwRCxJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQztJQUN0QixDQUFDO0NBQ0Y7QUFFRCxNQUFNLENBQUMsTUFBTSw4Q0FBOEMsR0FBRyxDQUM1RCxRQUFpQixFQUNqQixPQUFpQixFQUNWLEVBQUU7SUFDVCxNQUFNLEtBQUssR0FDVCxRQUFRLFlBQVksS0FBSztRQUN2QixDQUFDLENBQUMsUUFBUTtRQUNWLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUNsQyxJQUNFLE9BQU8sT0FBTyxLQUFLLFFBQVE7V0FDeEIsQ0FBQywwQ0FBMEMsQ0FBQyxRQUFRLENBQ3JELE9BQXFELENBQ3RELEVBQ0QsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUNELE9BQU8sSUFBSSxxQ0FBcUMsQ0FDOUMsT0FBcUQsRUFDckQsS0FBSyxDQUFDLE9BQU8sRUFDYixLQUFLLENBQ04sQ0FBQztBQUNKLENBQUMsQ0FBQztBQXdDRixNQUFNLE9BQU8seUJBQTBCLFNBQVEsS0FBSztJQUdsRCxZQUNFLE9BQXVDLEVBQ3ZDLFVBQWtCLEVBQ2xCLFFBQWtCO1FBRWxCLEtBQUssQ0FBQyxHQUFHLE9BQU8sS0FBSyxVQUFVLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ3hELElBQUksQ0FBQyxJQUFJLEdBQUcsMkJBQTJCLENBQUM7UUFDeEMsSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUM7SUFDdEIsQ0FBQztDQUNGO0FBRUQsTUFBTSxDQUFDLE1BQU0sa0NBQWtDLEdBQUcsQ0FDaEQsUUFBaUIsRUFDVixFQUFFO0lBQ1QsTUFBTSxLQUFLLEdBQ1QsUUFBUSxZQUFZLEtBQUs7UUFDdkIsQ0FBQyxDQUFDLFFBQVE7UUFDVixDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDbEMsTUFBTSxLQUFLLEdBQUcsNkNBQTZDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNoRixJQUNFLENBQUMsS0FBSztRQUNOLENBQUMsOEJBQThCLENBQUMsUUFBUSxDQUN0QyxLQUFLLENBQUMsQ0FBQyxDQUFtQyxDQUMzQyxFQUNELENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDRCxPQUFPLElBQUkseUJBQXlCLENBQ2xDLEtBQUssQ0FBQyxDQUFDLENBQW1DLEVBQzFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixLQUFLLENBQ04sQ0FBQztBQUNKLENBQUMsQ0FBQyJ9
62
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS10eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3RzL3RzX3NtYXJ0ZGIvc2VydmljZS10eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUEwRUEsTUFBTSxDQUFDLE1BQU0sOEJBQThCLEdBQUc7SUFDNUMsaUJBQWlCO0lBQ2pCLGNBQWM7SUFDZCx1QkFBdUI7SUFDdkIsb0JBQW9CO0lBQ3BCLDBCQUEwQjtJQUMxQiwyQkFBMkI7SUFDM0Isc0JBQXNCO0lBQ3RCLHNCQUFzQjtJQUN0QixhQUFhO0lBQ2IseUJBQXlCO0lBQ3pCLDRCQUE0QjtJQUM1QixpQkFBaUI7SUFDakIsc0NBQXNDO0lBQ3RDLHNCQUFzQjtJQUN0QixzQkFBc0I7SUFDdEIsa0NBQWtDO0lBQ2xDLDJCQUEyQjtDQUNuQixDQUFDO0FBdUdYLE1BQU0sQ0FBQyxNQUFNLDBDQUEwQyxHQUFHO0lBQ3hELHdCQUF3QjtJQUN4Qiw0QkFBNEI7SUFDNUIsaUJBQWlCO0lBQ2pCLHdCQUF3QjtJQUN4QiwwQkFBMEI7Q0FDbEIsQ0FBQztBQUtYLE1BQU0sT0FBTyxxQ0FBc0MsU0FBUSxLQUFLO0lBRzlELFlBQ0UsT0FBbUQsRUFDbkQsVUFBa0IsRUFDbEIsUUFBa0I7UUFFbEIsS0FBSyxDQUFDLEdBQUcsT0FBTyxLQUFLLFVBQVUsRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLElBQUksR0FBRyx1Q0FBdUMsQ0FBQztRQUNwRCxJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQztJQUN0QixDQUFDO0NBQ0Y7QUFFRCxNQUFNLENBQUMsTUFBTSw4Q0FBOEMsR0FBRyxDQUM1RCxRQUFpQixFQUNqQixPQUFpQixFQUNWLEVBQUU7SUFDVCxNQUFNLEtBQUssR0FDVCxRQUFRLFlBQVksS0FBSztRQUN2QixDQUFDLENBQUMsUUFBUTtRQUNWLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUNsQyxJQUNFLE9BQU8sT0FBTyxLQUFLLFFBQVE7V0FDeEIsQ0FBQywwQ0FBMEMsQ0FBQyxRQUFRLENBQ3JELE9BQXFELENBQ3RELEVBQ0QsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUNELE9BQU8sSUFBSSxxQ0FBcUMsQ0FDOUMsT0FBcUQsRUFDckQsS0FBSyxDQUFDLE9BQU8sRUFDYixLQUFLLENBQ04sQ0FBQztBQUNKLENBQUMsQ0FBQztBQXdDRixNQUFNLE9BQU8seUJBQTBCLFNBQVEsS0FBSztJQUdsRCxZQUNFLE9BQXVDLEVBQ3ZDLFVBQWtCLEVBQ2xCLFFBQWtCO1FBRWxCLEtBQUssQ0FBQyxHQUFHLE9BQU8sS0FBSyxVQUFVLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ3hELElBQUksQ0FBQyxJQUFJLEdBQUcsMkJBQTJCLENBQUM7UUFDeEMsSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUM7SUFDdEIsQ0FBQztDQUNGO0FBRUQsTUFBTSxDQUFDLE1BQU0sa0NBQWtDLEdBQUcsQ0FDaEQsUUFBaUIsRUFDVixFQUFFO0lBQ1QsTUFBTSxLQUFLLEdBQ1QsUUFBUSxZQUFZLEtBQUs7UUFDdkIsQ0FBQyxDQUFDLFFBQVE7UUFDVixDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDbEMsTUFBTSxLQUFLLEdBQUcsNkNBQTZDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNoRixJQUNFLENBQUMsS0FBSztRQUNOLENBQUMsOEJBQThCLENBQUMsUUFBUSxDQUN0QyxLQUFLLENBQUMsQ0FBQyxDQUFtQyxDQUMzQyxFQUNELENBQUM7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFDRCxPQUFPLElBQUkseUJBQXlCLENBQ2xDLEtBQUssQ0FBQyxDQUFDLENBQW1DLEVBQzFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFDUixLQUFLLENBQ04sQ0FBQztBQUNKLENBQUMsQ0FBQyJ9
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@push.rocks/smartdb",
3
- "version": "4.1.0",
3
+ "version": "4.2.0",
4
4
  "private": false,
5
5
  "description": "A MongoDB-compatible embedded database server with wire protocol support, backed by a high-performance Rust engine.",
6
6
  "exports": {
package/readme.md CHANGED
@@ -540,6 +540,7 @@ const db = new LocalSmartDb({
540
540
  | `getServer()` | `SmartdbServer` | Access the underlying server |
541
541
  | `running` | `boolean` | Whether the server is running |
542
542
  | `LocalSmartDb.inspectOfflineStringValue(input, options?)` | `Promise<TLocalSmartDbOfflineStringValueInspectionResult>` | Read one exact top-level string value from stopped file storage without starting or mutating the engine |
543
+ | `LocalSmartDb.inspectOfflinePhysicalNamespaces(input, options?)` | `Promise<ILocalSmartDbOfflinePhysicalNamespaceInspectionResult>` | Validate stopped physical file storage and return only deterministic database and collection names |
543
544
 
544
545
  #### Offline String-Value Inspection
545
546
 
@@ -593,6 +594,67 @@ The TypeScript API enforces these bounds before creating the sidecar or serializ
593
594
 
594
595
  All numeric limits must be positive safe integers. The caller must stop and retain external ownership of the `LocalSmartDb` daemon for the full call. Current storage roots additionally enforce this through SmartDB's storage-owner lock. Roots created before that lock existed rely on the caller's external single-owner coordination plus descriptor and stability validation. One `timeoutMs` budget covers sidecar lookup/spawn, readiness, and the command. Cancellation or timeout kills and reaps the disposable sidecar before the call rejects.
595
596
 
597
+ #### Offline Physical Namespace Inspection
598
+
599
+ `inspectOfflinePhysicalNamespaces()` is a Linux-only management API for validating and listing the physical database and collection namespaces in a stopped SmartDB file-storage root. It uses Linux `openat2` descriptor traversal and starts only the disposable Rust management sidecar. It never calls `SmartdbServer.start()`, opens a database listener, initializes the storage adapter, runs migration or recovery, repairs a tail, truncates a WAL, compacts data, or persists a hint.
600
+
601
+ ```typescript
602
+ import { LocalSmartDb } from '@push.rocks/smartdb';
603
+
604
+ const namespaces = await LocalSmartDb.inspectOfflinePhysicalNamespaces({
605
+ folderPath: '/var/lib/myapp/smartdb',
606
+ limits: {
607
+ maximumEntries: 100_000,
608
+ maximumDatabases: 4096,
609
+ maximumCollections: 10_000,
610
+ maximumIndexes: 100_000,
611
+ maximumDataFileBytes: 256 * 1024 * 1024,
612
+ maximumWalFileBytes: 64 * 1024 * 1024,
613
+ maximumIndexFileBytes: 16 * 1024 * 1024,
614
+ maximumTotalFileBytes: 1024 * 1024 * 1024 * 1024,
615
+ maximumRecordsPerCollection: 1_000_000,
616
+ maximumRecordBytes: 17 * 1024 * 1024,
617
+ maximumResultBytes: 16 * 1024 * 1024,
618
+ },
619
+ }, {
620
+ timeoutMs: 30_000,
621
+ });
622
+
623
+ // {
624
+ // schemaVersion: 1,
625
+ // databases: [
626
+ // { name: 'myapp', collections: ['MetadataDoc', 'system.views'] },
627
+ // ],
628
+ // }
629
+ ```
630
+
631
+ The result is exactly `{ schemaVersion: 1, databases: Array<{ name, collections }> }`. Databases and each database's collections are sorted by physical name, empty database directories are retained, and no documents, index definitions, record identifiers, or values cross the management boundary.
632
+
633
+ The accepted root must contain the current `.__rustdb_internal/storage-owner.lock`; legacy roots without that lock are rejected. The sidecar takes the shared owner lock, so an active engine causes the call to fail. Every reported collection must have the canonical complete profile of regular `data.rdb`, `wal.rdb`, and `indexes.json` files. A regular `keydir.hint` is optional and is treated only as an allowed cache file. Missing canonical files, unexpected collection entries, malformed index metadata, invalid data or WAL records, symlinks, cross-filesystem traversal, resource-limit exhaustion, and changes observed during inspection fail the complete operation. No partial result is returned and the storage tree is not mutated.
634
+
635
+ Inspection performs two full bounded passes and returns only if their namespace results and retained filesystem observations agree. The entry, database, collection, index, file-byte, and record limits are enforced independently on each pass, so total validation work is at most twice the corresponding caller cap. The result-size cap applies to the single serialized result. This is a contract for the current owner-locked canonical SmartDB file-storage profile, not a claim of compatibility with arbitrary MongoDB layouts, legacy SmartDB roots, or unspecified future storage formats.
636
+
637
+ All limits are required; this API supplies no defaults or compatibility aliases. TypeScript validates the following bounds before creating the sidecar and revalidates `folderPath` after resolving it to an absolute path:
638
+
639
+ | Input | Enforced range |
640
+ |---|---|
641
+ | `folderPath` | 1 to 4096 UTF-8 bytes before and after absolute resolution; no control characters |
642
+ | Complete serialized request | At most 2,097,152 bytes |
643
+ | `timeoutMs` | 1 to 2,147,483,647 milliseconds |
644
+ | `maximumEntries` | 1 to 100,000 directory entries per pass |
645
+ | `maximumDatabases` | 1 to 4,096 databases per pass |
646
+ | `maximumCollections` | 1 to 10,000 collections per pass |
647
+ | `maximumIndexes` | 1 to 100,000 index definitions per pass |
648
+ | `maximumDataFileBytes` | 64 to 268,435,456 bytes per data file |
649
+ | `maximumWalFileBytes` | 64 to 67,108,864 bytes per WAL file |
650
+ | `maximumIndexFileBytes` | 2 to 16,777,216 bytes per index file |
651
+ | `maximumTotalFileBytes` | 1 to 1,099,511,627,776 aggregate canonical collection-file bytes per pass |
652
+ | `maximumRecordsPerCollection` | 1 to 1,000,000 data records plus WAL records/commit markers per collection per pass |
653
+ | `maximumRecordBytes` | 22 to 17,825,792 bytes per record |
654
+ | `maximumResultBytes` | 32 to 16,777,216 serialized result bytes |
655
+
656
+ Every numeric value must be a safe integer. One optional `timeoutMs` budget and `AbortSignal` cover sidecar lookup/spawn, readiness, both inspection passes, and response delivery; timeout or cancellation kills and reaps the sidecar before rejection. For a point-in-time ownership proof, the caller must exclude every engine start and other storage lifecycle change continuously from before invocation through acceptance or handoff of the returned result. The owner lock proves that the engine was stopped during inspection, but it cannot replace that caller-held lifecycle exclusion after the sidecar releases its lock.
657
+
596
658
  ### SmartdbDebugServer
597
659
 
598
660
  Web-based debug dashboard served via `@api.global/typedserver`. Import from the `debugserver` subpath:
@@ -3,6 +3,6 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@push.rocks/smartdb',
6
- version: '4.1.0',
6
+ version: '4.2.0',
7
7
  description: 'A MongoDB-compatible embedded database server with wire protocol support, backed by a high-performance Rust engine.'
8
8
  }
package/ts/index.ts CHANGED
@@ -9,6 +9,9 @@ export type {
9
9
  ILocalSmartDbOptions,
10
10
  ILocalSmartDbConnectionInfo,
11
11
  ILocalSmartDbOfflineInspectionLimits,
12
+ ILocalSmartDbOfflinePhysicalNamespaceInspectionLimits,
13
+ ILocalSmartDbOfflinePhysicalNamespaceInspection,
14
+ ILocalSmartDbOfflinePhysicalNamespaceInspectionResult,
12
15
  ILocalSmartDbOfflineStringValueInspection,
13
16
  TLocalSmartDbOfflineStringValueInspectionResult,
14
17
  } from './ts_local/index.js';
@@ -6,12 +6,15 @@ import * as os from 'os';
6
6
  import {
7
7
  RustDbBridge,
8
8
  SmartdbServer,
9
+ type ILocalSmartDbOfflinePhysicalNamespaceInspection,
10
+ type ILocalSmartDbOfflinePhysicalNamespaceInspectionResult,
9
11
  type ILocalSmartDbOfflineStringValueInspection,
10
12
  type ISmartDbManagementOperationOptions,
11
13
  type TLocalSmartDbOfflineStringValueInspectionResult,
12
14
  } from '../ts_smartdb/index.js';
13
15
  import { StorageMigrator } from '../ts_migration/index.js';
14
16
  import {
17
+ normalizeLocalSmartDbOfflinePhysicalNamespaceInspectionInput,
15
18
  normalizeLocalSmartDbOfflineInspectionInput,
16
19
  validateSmartDbManagementOperationOptions,
17
20
  } from '../ts_smartdb/offline-inspection.js';
@@ -74,19 +77,24 @@ export class LocalSmartDb {
74
77
  return new RustDbBridge();
75
78
  }
76
79
 
77
- /**
78
- * Inspect one exact string value while the owning LocalSmartDb engine is stopped.
79
- * This starts only the Rust management sidecar and never initializes storage.
80
- */
81
- public static async inspectOfflineStringValue(
82
- inputArg: ILocalSmartDbOfflineStringValueInspection,
83
- optionsArg?: ISmartDbManagementOperationOptions,
84
- ): Promise<TLocalSmartDbOfflineStringValueInspectionResult> {
85
- const validatedInput = normalizeLocalSmartDbOfflineInspectionInput(inputArg);
80
+ private static async runOfflineInspection<
81
+ TInput extends { folderPath: string },
82
+ TResult,
83
+ >(
84
+ inputArg: TInput,
85
+ optionsArg: ISmartDbManagementOperationOptions | undefined,
86
+ normalizeInputArg: (inputArg: TInput) => TInput,
87
+ inspectArg: (
88
+ bridgeArg: RustDbBridge,
89
+ inputArg: TInput,
90
+ optionsArg?: ISmartDbManagementOperationOptions,
91
+ ) => Promise<TResult>,
92
+ ): Promise<TResult> {
93
+ const validatedInput = normalizeInputArg(inputArg);
86
94
  validateSmartDbManagementOperationOptions(optionsArg);
87
95
  optionsArg?.signal?.throwIfAborted();
88
96
 
89
- const input = normalizeLocalSmartDbOfflineInspectionInput({
97
+ const input = normalizeInputArg({
90
98
  ...validatedInput,
91
99
  folderPath: path.resolve(validatedInput.folderPath),
92
100
  });
@@ -96,7 +104,7 @@ export class LocalSmartDb {
96
104
  const bridge = LocalSmartDb.createOfflineInspectionBridge();
97
105
  let operationFailed = false;
98
106
  let operationError: unknown;
99
- let result: TLocalSmartDbOfflineStringValueInspectionResult | undefined;
107
+ let result: TResult | undefined;
100
108
  try {
101
109
  let spawnOptions = optionsArg;
102
110
  if (deadline !== undefined) {
@@ -126,7 +134,7 @@ export class LocalSmartDb {
126
134
  timeoutMs: remainingMs,
127
135
  };
128
136
  }
129
- result = await bridge.inspectOfflineStringValue(input, commandOptions);
137
+ result = await inspectArg(bridge, input, commandOptions);
130
138
  } catch (error) {
131
139
  operationFailed = true;
132
140
  operationError = error;
@@ -147,7 +155,41 @@ export class LocalSmartDb {
147
155
  if (operationFailed) {
148
156
  throw operationError;
149
157
  }
150
- return result as TLocalSmartDbOfflineStringValueInspectionResult;
158
+ return result as TResult;
159
+ }
160
+
161
+ /**
162
+ * Inspect physical database and collection names while the owning engine is stopped.
163
+ * This starts only the Rust management sidecar and never initializes storage.
164
+ */
165
+ public static async inspectOfflinePhysicalNamespaces(
166
+ inputArg: ILocalSmartDbOfflinePhysicalNamespaceInspection,
167
+ optionsArg?: ISmartDbManagementOperationOptions,
168
+ ): Promise<ILocalSmartDbOfflinePhysicalNamespaceInspectionResult> {
169
+ return LocalSmartDb.runOfflineInspection(
170
+ inputArg,
171
+ optionsArg,
172
+ normalizeLocalSmartDbOfflinePhysicalNamespaceInspectionInput,
173
+ (bridgeArg, input, commandOptions) =>
174
+ bridgeArg.inspectOfflinePhysicalNamespaces(input, commandOptions),
175
+ );
176
+ }
177
+
178
+ /**
179
+ * Inspect one exact string value while the owning LocalSmartDb engine is stopped.
180
+ * This starts only the Rust management sidecar and never initializes storage.
181
+ */
182
+ public static async inspectOfflineStringValue(
183
+ inputArg: ILocalSmartDbOfflineStringValueInspection,
184
+ optionsArg?: ISmartDbManagementOperationOptions,
185
+ ): Promise<TLocalSmartDbOfflineStringValueInspectionResult> {
186
+ return LocalSmartDb.runOfflineInspection(
187
+ inputArg,
188
+ optionsArg,
189
+ normalizeLocalSmartDbOfflineInspectionInput,
190
+ (bridgeArg, input, commandOptions) =>
191
+ bridgeArg.inspectOfflineStringValue(input, commandOptions),
192
+ );
151
193
  }
152
194
 
153
195
  /**
@@ -2,6 +2,9 @@ export { LocalSmartDb } from './classes.localsmartdb.js';
2
2
  export type { ILocalSmartDbOptions, ILocalSmartDbConnectionInfo } from './classes.localsmartdb.js';
3
3
  export type {
4
4
  ILocalSmartDbOfflineInspectionLimits,
5
+ ILocalSmartDbOfflinePhysicalNamespaceInspectionLimits,
6
+ ILocalSmartDbOfflinePhysicalNamespaceInspection,
7
+ ILocalSmartDbOfflinePhysicalNamespaceInspectionResult,
5
8
  ILocalSmartDbOfflineStringValueInspection,
6
9
  TLocalSmartDbOfflineStringValueInspectionResult,
7
10
  } from '../ts_smartdb/service-types.js';
@@ -44,6 +44,9 @@ export type {
44
44
  ISmartDbRevokeDatabaseAllocationReadAccessGrantInput,
45
45
  ISmartDbRevokeDatabaseAllocationReadAccessGrantResult,
46
46
  ILocalSmartDbOfflineInspectionLimits,
47
+ ILocalSmartDbOfflinePhysicalNamespaceInspectionLimits,
48
+ ILocalSmartDbOfflinePhysicalNamespaceInspection,
49
+ ILocalSmartDbOfflinePhysicalNamespaceInspectionResult,
47
50
  ILocalSmartDbOfflineStringValueInspection,
48
51
  TLocalSmartDbOfflineStringValueInspectionResult,
49
52
  TSmartDbCommitDatabasePublicationResult,
@@ -1,5 +1,6 @@
1
1
  import * as plugins from './plugins.js';
2
2
  import type {
3
+ ILocalSmartDbOfflinePhysicalNamespaceInspection,
3
4
  ILocalSmartDbOfflineStringValueInspection,
4
5
  ISmartDbManagementOperationOptions,
5
6
  } from './service-types.js';
@@ -20,6 +21,24 @@ export const localSmartDbOfflineInspectionBounds = {
20
21
  },
21
22
  } as const;
22
23
 
24
+ export const localSmartDbOfflinePhysicalNamespaceInspectionBounds = {
25
+ maximumFolderPathBytes: 4096,
26
+ maximumRequestBytes: 2 * 1024 * 1024,
27
+ limits: {
28
+ maximumEntries: { minimum: 1, maximum: 100_000 },
29
+ maximumDatabases: { minimum: 1, maximum: 4096 },
30
+ maximumCollections: { minimum: 1, maximum: 10_000 },
31
+ maximumIndexes: { minimum: 1, maximum: 100_000 },
32
+ maximumDataFileBytes: { minimum: 64, maximum: 256 * 1024 * 1024 },
33
+ maximumWalFileBytes: { minimum: 64, maximum: 64 * 1024 * 1024 },
34
+ maximumIndexFileBytes: { minimum: 2, maximum: 16 * 1024 * 1024 },
35
+ maximumTotalFileBytes: { minimum: 1, maximum: 1024 * 1024 * 1024 * 1024 },
36
+ maximumRecordsPerCollection: { minimum: 1, maximum: 1_000_000 },
37
+ maximumRecordBytes: { minimum: 22, maximum: 17 * 1024 * 1024 },
38
+ maximumResultBytes: { minimum: 32, maximum: 16 * 1024 * 1024 },
39
+ },
40
+ } as const;
41
+
23
42
  const inputKeys = new Set([
24
43
  'folderPath',
25
44
  'databaseName',
@@ -46,9 +65,57 @@ const requestEnvelopeBytes = plugins.buffer.Buffer.byteLength(
46
65
  'utf8',
47
66
  );
48
67
 
68
+ const physicalNamespaceInputKeys = new Set(['folderPath', 'limits']);
69
+ const physicalNamespaceLimitKeys = [
70
+ 'maximumEntries',
71
+ 'maximumDatabases',
72
+ 'maximumCollections',
73
+ 'maximumIndexes',
74
+ 'maximumDataFileBytes',
75
+ 'maximumWalFileBytes',
76
+ 'maximumIndexFileBytes',
77
+ 'maximumTotalFileBytes',
78
+ 'maximumRecordsPerCollection',
79
+ 'maximumRecordBytes',
80
+ 'maximumResultBytes',
81
+ ] as const;
82
+ const physicalNamespaceLimitKeySet = new Set<string>(physicalNamespaceLimitKeys);
83
+
49
84
  const isRecord = (valueArg: unknown): valueArg is Record<string, unknown> =>
50
85
  typeof valueArg === 'object' && valueArg !== null && !Array.isArray(valueArg);
51
86
 
87
+ const requirePhysicalNamespacePlainObject = (
88
+ valueArg: unknown,
89
+ allowedKeysArg: Set<string>,
90
+ labelArg: string,
91
+ ): Record<string, unknown> => {
92
+ if (!isRecord(valueArg)) {
93
+ throw new TypeError(
94
+ `LocalSmartDb offline physical namespace inspection ${labelArg} must be a plain object`,
95
+ );
96
+ }
97
+ for (const key in valueArg) {
98
+ if (!allowedKeysArg.has(key)) {
99
+ throw new TypeError(
100
+ `LocalSmartDb offline physical namespace inspection ${labelArg} contains unknown key '${key}'`,
101
+ );
102
+ }
103
+ }
104
+ if (Object.getPrototypeOf(valueArg) !== Object.prototype) {
105
+ throw new TypeError(
106
+ `LocalSmartDb offline physical namespace inspection ${labelArg} must be a plain object`,
107
+ );
108
+ }
109
+ for (const key of allowedKeysArg) {
110
+ if (!Object.prototype.propertyIsEnumerable.call(valueArg, key)) {
111
+ throw new TypeError(
112
+ `LocalSmartDb offline physical namespace inspection ${labelArg} must contain own enumerable key '${key}'`,
113
+ );
114
+ }
115
+ }
116
+ return valueArg;
117
+ };
118
+
52
119
  const rejectUnknownEnumerableKeys = (
53
120
  valueArg: object,
54
121
  allowedKeysArg: Set<string>,
@@ -219,6 +286,81 @@ export const normalizeLocalSmartDbOfflineInspectionInput = (
219
286
  return normalized;
220
287
  };
221
288
 
289
+ export const normalizeLocalSmartDbOfflinePhysicalNamespaceInspectionInput = (
290
+ inputArg: ILocalSmartDbOfflinePhysicalNamespaceInspection,
291
+ ): ILocalSmartDbOfflinePhysicalNamespaceInspection => {
292
+ const inputRecord = requirePhysicalNamespacePlainObject(
293
+ inputArg,
294
+ physicalNamespaceInputKeys,
295
+ 'input',
296
+ );
297
+ const limits = requirePhysicalNamespacePlainObject(
298
+ inputRecord.limits,
299
+ physicalNamespaceLimitKeySet,
300
+ 'limits',
301
+ );
302
+ const normalized: ILocalSmartDbOfflinePhysicalNamespaceInspection = {
303
+ folderPath: inputRecord.folderPath as string,
304
+ limits: {
305
+ maximumEntries: limits.maximumEntries as number,
306
+ maximumDatabases: limits.maximumDatabases as number,
307
+ maximumCollections: limits.maximumCollections as number,
308
+ maximumIndexes: limits.maximumIndexes as number,
309
+ maximumDataFileBytes: limits.maximumDataFileBytes as number,
310
+ maximumWalFileBytes: limits.maximumWalFileBytes as number,
311
+ maximumIndexFileBytes: limits.maximumIndexFileBytes as number,
312
+ maximumTotalFileBytes: limits.maximumTotalFileBytes as number,
313
+ maximumRecordsPerCollection: limits.maximumRecordsPerCollection as number,
314
+ maximumRecordBytes: limits.maximumRecordBytes as number,
315
+ maximumResultBytes: limits.maximumResultBytes as number,
316
+ },
317
+ };
318
+ const bounds = localSmartDbOfflinePhysicalNamespaceInspectionBounds;
319
+ if (typeof normalized.folderPath !== 'string') {
320
+ throw new TypeError(
321
+ 'LocalSmartDb offline physical namespace inspection folderPath must be a string',
322
+ );
323
+ }
324
+ const folderPathBytes = plugins.buffer.Buffer.byteLength(normalized.folderPath, 'utf8');
325
+ if (folderPathBytes < 1 || folderPathBytes > bounds.maximumFolderPathBytes) {
326
+ throw new RangeError(
327
+ `LocalSmartDb offline physical namespace inspection folderPath must be between 1 and ${bounds.maximumFolderPathBytes} UTF-8 bytes`,
328
+ );
329
+ }
330
+ for (const character of normalized.folderPath) {
331
+ if (/\p{Cc}/u.test(character)) {
332
+ throw new TypeError(
333
+ 'LocalSmartDb offline physical namespace inspection folderPath must not contain control characters',
334
+ );
335
+ }
336
+ }
337
+
338
+ for (const key of physicalNamespaceLimitKeys) {
339
+ const value = normalized.limits[key];
340
+ const range = bounds.limits[key];
341
+ if (!Number.isSafeInteger(value) || value < range.minimum || value > range.maximum) {
342
+ throw new RangeError(
343
+ `LocalSmartDb offline physical namespace inspection limits.${key} must be a safe integer between ${range.minimum} and ${range.maximum}`,
344
+ );
345
+ }
346
+ }
347
+
348
+ const requestBytes = plugins.buffer.Buffer.byteLength(JSON.stringify({
349
+ id: 'req_9007199254740991',
350
+ method: 'inspectOfflinePhysicalNamespaces',
351
+ params: {
352
+ folderPath: normalized.folderPath,
353
+ ...normalized.limits,
354
+ },
355
+ }), 'utf8');
356
+ if (requestBytes > bounds.maximumRequestBytes) {
357
+ throw new RangeError(
358
+ `LocalSmartDb offline physical namespace inspection request exceeds the ${bounds.maximumRequestBytes}-byte serialized limit`,
359
+ );
360
+ }
361
+ return normalized;
362
+ };
363
+
222
364
  export const validateSmartDbManagementOperationOptions = (
223
365
  optionsArg?: ISmartDbManagementOperationOptions,
224
366
  ): void => {
@@ -7,6 +7,7 @@ import {
7
7
  normalizeSmartDbResourceFenceError,
8
8
  } from './service-types.js';
9
9
  import {
10
+ normalizeLocalSmartDbOfflinePhysicalNamespaceInspectionInput,
10
11
  normalizeLocalSmartDbOfflineInspectionInput,
11
12
  validateSmartDbManagementOperationOptions,
12
13
  } from './offline-inspection.js';
@@ -36,6 +37,8 @@ import type {
36
37
  ISmartDbCommitDatabasePublicationInput,
37
38
  ISmartDbManagementOperationOptions,
38
39
  ISmartDbDatabaseResourceFenceState,
40
+ ILocalSmartDbOfflinePhysicalNamespaceInspection,
41
+ ILocalSmartDbOfflinePhysicalNamespaceInspectionResult,
39
42
  ILocalSmartDbOfflineStringValueInspection,
40
43
  TLocalSmartDbOfflineStringValueInspectionResult,
41
44
  TSmartDbCommitDatabasePublicationResult,
@@ -68,6 +71,9 @@ export type {
68
71
  ISmartDbManagementOperationOptions,
69
72
  ISmartDbDatabaseResourceFenceState,
70
73
  ILocalSmartDbOfflineInspectionLimits,
74
+ ILocalSmartDbOfflinePhysicalNamespaceInspectionLimits,
75
+ ILocalSmartDbOfflinePhysicalNamespaceInspection,
76
+ ILocalSmartDbOfflinePhysicalNamespaceInspectionResult,
71
77
  ILocalSmartDbOfflineStringValueInspection,
72
78
  TLocalSmartDbOfflineStringValueInspectionResult,
73
79
  TSmartDbCommitDatabasePublicationResult,
@@ -169,7 +175,15 @@ export interface ISmartDbMetrics {
169
175
  /**
170
176
  * Type-safe command definitions for the RustDb IPC protocol.
171
177
  */
178
+ type TOfflinePhysicalNamespaceInspectionCommandParams = {
179
+ folderPath: string;
180
+ } & ILocalSmartDbOfflinePhysicalNamespaceInspection['limits'];
181
+
172
182
  type TSmartDbCommands = {
183
+ inspectOfflinePhysicalNamespaces: {
184
+ params: TOfflinePhysicalNamespaceInspectionCommandParams;
185
+ result: ILocalSmartDbOfflinePhysicalNamespaceInspectionResult;
186
+ };
173
187
  inspectOfflineStringValue: {
174
188
  params: ILocalSmartDbOfflineStringValueInspection;
175
189
  result: TLocalSmartDbOfflineStringValueInspectionResult;
@@ -543,6 +557,28 @@ export class RustDbBridge extends EventEmitter {
543
557
 
544
558
  // --- Convenience methods for each management command ---
545
559
 
560
+ public async inspectOfflinePhysicalNamespaces(
561
+ inputArg: ILocalSmartDbOfflinePhysicalNamespaceInspection,
562
+ optionsArg?: ISmartDbManagementOperationOptions,
563
+ ): Promise<ILocalSmartDbOfflinePhysicalNamespaceInspectionResult> {
564
+ const input = normalizeLocalSmartDbOfflinePhysicalNamespaceInspectionInput(inputArg);
565
+ validateSmartDbManagementOperationOptions(optionsArg);
566
+ const params: TOfflinePhysicalNamespaceInspectionCommandParams = {
567
+ folderPath: input.folderPath,
568
+ ...input.limits,
569
+ };
570
+ try {
571
+ return await this.bridge.sendCommand(
572
+ 'inspectOfflinePhysicalNamespaces',
573
+ params,
574
+ optionsArg,
575
+ ) as ILocalSmartDbOfflinePhysicalNamespaceInspectionResult;
576
+ } catch (error) {
577
+ await this.awaitManagementOperationTermination(error);
578
+ throw error;
579
+ }
580
+ }
581
+
546
582
  public async inspectOfflineStringValue(
547
583
  inputArg: ILocalSmartDbOfflineStringValueInspection,
548
584
  optionsArg?: ISmartDbManagementOperationOptions,
@@ -45,6 +45,33 @@ export type TLocalSmartDbOfflineStringValueInspectionResult =
45
45
  | { status: 'not-found' }
46
46
  | { status: 'found'; value: string };
47
47
 
48
+ export interface ILocalSmartDbOfflinePhysicalNamespaceInspectionLimits {
49
+ maximumEntries: number;
50
+ maximumDatabases: number;
51
+ maximumCollections: number;
52
+ maximumIndexes: number;
53
+ maximumDataFileBytes: number;
54
+ maximumWalFileBytes: number;
55
+ maximumIndexFileBytes: number;
56
+ maximumTotalFileBytes: number;
57
+ maximumRecordsPerCollection: number;
58
+ maximumRecordBytes: number;
59
+ maximumResultBytes: number;
60
+ }
61
+
62
+ export interface ILocalSmartDbOfflinePhysicalNamespaceInspection {
63
+ folderPath: string;
64
+ limits: ILocalSmartDbOfflinePhysicalNamespaceInspectionLimits;
65
+ }
66
+
67
+ export interface ILocalSmartDbOfflinePhysicalNamespaceInspectionResult {
68
+ schemaVersion: 1;
69
+ databases: Array<{
70
+ name: string;
71
+ collections: string[];
72
+ }>;
73
+ }
74
+
48
75
  export const smartDbResourceFenceErrorCodes = [
49
76
  'EFENCE_REQUIRED',
50
77
  'EFENCE_STALE',