fix(storage): rename S3 configuration and change stream interfaces to storage-oriented types

This commit is contained in:
2026-03-14 23:27:25 +00:00
parent 2da2d57df1
commit a829f76d4b
21 changed files with 2133 additions and 2014 deletions

View File

@@ -1,13 +1,6 @@
import * as plugins from '../plugins.js';
// Import interfaces from shared types
// Note: In bundled form these are inlined
export interface IS3Object {
key: string;
size?: number;
lastModified?: string;
isPrefix?: boolean;
}
import type { IStorageObject } from '@design.estate/dees-catalog';
export type { IStorageObject };
export interface IMongoDatabase {
name: string;
@@ -100,7 +93,7 @@ export class ApiService {
bucketName: string,
prefix?: string,
delimiter?: string
): Promise<{ objects: IS3Object[]; prefixes: string[] }> {
): Promise<{ objects: IStorageObject[]; prefixes: string[] }> {
return this.request('listObjects', { bucketName, prefix, delimiter });
}

View File

@@ -1,4 +1,6 @@
import * as plugins from '../plugins.js';
import type { IStorageChangeEvent } from '@design.estate/dees-catalog';
export type { IStorageChangeEvent };
/**
* MongoDB change event
@@ -16,25 +18,13 @@ export interface IMongoChangeEvent {
timestamp: string;
}
/**
* S3 change event
*/
export interface IS3ChangeEvent {
type: 'add' | 'modify' | 'delete';
key: string;
size?: number;
etag?: string;
lastModified?: Date;
bucket: string;
}
/**
* Combined activity event
*/
export interface IActivityEvent {
id: string;
source: 'mongodb' | 's3';
event: IMongoChangeEvent | IS3ChangeEvent;
source: 'mongodb' | 'storage';
event: IMongoChangeEvent | IStorageChangeEvent;
timestamp: string;
}
@@ -42,7 +32,7 @@ export interface IActivityEvent {
* Subscription info tracked by the service
*/
interface ISubscription {
type: 'mongo' | 's3' | 'activity';
type: 'mongo' | 'storage' | 'activity';
key: string; // "db/collection" or "bucket/prefix" or "activity"
subscriptionId: string;
}
@@ -69,7 +59,7 @@ export class ChangeStreamService {
// RxJS Subjects for UI components
public readonly mongoChanges$ = new plugins.smartrx.rxjs.Subject<IMongoChangeEvent>();
public readonly s3Changes$ = new plugins.smartrx.rxjs.Subject<IS3ChangeEvent>();
public readonly storageChanges$ = new plugins.smartrx.rxjs.Subject<IStorageChangeEvent>();
public readonly activityEvents$ = new plugins.smartrx.rxjs.Subject<IActivityEvent>();
public readonly connectionStatus$ = new plugins.smartrx.rxjs.ReplaySubject<'connected' | 'disconnected' | 'connecting'>(1);
@@ -193,8 +183,8 @@ export class ChangeStreamService {
router.addTypedHandler(
new plugins.typedrequest.TypedHandler<any>(
'pushS3Change',
async (data: { event: IS3ChangeEvent }) => {
this.s3Changes$.next(data.event);
async (data: { event: IStorageChangeEvent }) => {
this.storageChanges$.next(data.event);
return { received: true };
}
)
@@ -540,8 +530,8 @@ export class ChangeStreamService {
/**
* Get S3 changes as an Observable
*/
public getS3Changes(): plugins.smartrx.rxjs.Observable<IS3ChangeEvent> {
return this.s3Changes$.asObservable();
public getStorageChanges(): plugins.smartrx.rxjs.Observable<IStorageChangeEvent> {
return this.storageChanges$.asObservable();
}
/**
@@ -565,8 +555,8 @@ export class ChangeStreamService {
/**
* Get filtered S3 changes for a specific bucket/prefix
*/
public getBucketChanges(bucket: string, prefix?: string): plugins.smartrx.rxjs.Observable<IS3ChangeEvent> {
return this.s3Changes$.pipe(
public getBucketChanges(bucket: string, prefix?: string): plugins.smartrx.rxjs.Observable<IStorageChangeEvent> {
return this.storageChanges$.pipe(
plugins.smartrx.rxjs.ops.filter((event) => {
if (event.bucket !== bucket) return false;
if (prefix && !event.key.startsWith(prefix)) return false;