@plyaz/types 1.32.0 → 1.33.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.
@@ -3,4 +3,4 @@
3
3
  *
4
4
  * Core domain types for files/media service.
5
5
  */
6
- export { FileTypeSchema, type FileType, type FilesEntity, type FilesFrontendServiceConfig, type FilesDomainServiceConfig, type FilesDatabaseRow, type FilesCreateInput, type MediaVariantsDatabaseRow, type MediaVariantsCreateInput, type SingleUploadEventPayload, type BulkUploadEventPayload, } from './types';
6
+ export { FileTypeSchema, type FileType, type FilesEntity, type FilesFrontendServiceConfig, type FilesDomainServiceConfig, type FilesDatabaseRow, type FilesCreateInput, type MediaVariantsDatabaseRow, type MediaVariantsCreateInput, type SingleUploadEventPayload, type BulkUploadEventPayload, type FileUploadedEventPayload, type FileBulkUploadedEventPayload, type FilesUploadEventPayload, type FileDocumentGeneratedEventPayload, } from './types';
@@ -5,7 +5,7 @@
5
5
  * Store types are in @plyaz/types/store/files.
6
6
  * API types are in @plyaz/types/api/endpoints/files.
7
7
  */
8
- import type { FileVariant } from '../../../api/endpoints/files/schemas';
8
+ import type { FileVariant, UploadFileResponse, UploadFilesResponse, GenerateDocumentRequest, GenerateDocumentResponse } from '../../../api/endpoints/files';
9
9
  import type { CoreServiceInitConfig } from '../../init';
10
10
  import type { CoreInjectedServices } from '../types';
11
11
  import type { CoreBaseFrontendServiceConfig } from '../../frontend';
@@ -165,3 +165,31 @@ export interface BulkUploadEventPayload {
165
165
  results?: SingleUploadEventPayload['result'][];
166
166
  };
167
167
  }
168
+ /**
169
+ * Frontend event payload for single file upload
170
+ * Used by files:upload:uploaded event (when bulk=false)
171
+ */
172
+ export interface FileUploadedEventPayload {
173
+ result: UploadFileResponse;
174
+ bulk?: false;
175
+ }
176
+ /**
177
+ * Frontend event payload for bulk file upload
178
+ * Used by files:upload:uploaded event (when bulk=true)
179
+ */
180
+ export interface FileBulkUploadedEventPayload {
181
+ result: UploadFilesResponse;
182
+ bulk: true;
183
+ }
184
+ /**
185
+ * Union type for files:upload:uploaded event payload
186
+ */
187
+ export type FilesUploadEventPayload = FileUploadedEventPayload | FileBulkUploadedEventPayload;
188
+ /**
189
+ * Frontend event payload for document generation
190
+ * Used by files:document:generated event
191
+ */
192
+ export interface FileDocumentGeneratedEventPayload {
193
+ result: GenerateDocumentResponse;
194
+ request: GenerateDocumentRequest;
195
+ }
@@ -19,4 +19,4 @@
19
19
  */
20
20
  export { CoreEventScope, SystemEventAction, EntityEventAction, ValidationEventAction, SanitizationEventAction, ApiEventAction, CacheEventAction, AuthEventAction, DatabaseEventAction, FeatureFlagEventAction, StoreEventAction, StorageEventAction, NotificationEventAction, CORE_EVENTS, } from './enums';
21
21
  export type { CoreEventScopeType, SystemEventType, EntityEventType, ValidationEventType, SanitizationEventType, ApiEventType, CacheEventType, AuthEventType, DatabaseEventType, FeatureFlagEventType, StoreEventType, CoreEventType, } from './enums';
22
- export type { CoreEvent, CoreCrudOperation, CoreValidationStartedPayload, CoreValidationSuccessPayload, CoreValidationFailedPayload, CoreSanitizationStartedPayload, CoreSanitizationSuccessPayload, CoreSanitizationFailedPayload, CoreEntityCreatedPayload, CoreEntityUpdatedPayload, CoreEntityPatchedPayload, CoreEntityDeletedPayload, CoreEntityCreatingPayload, CoreEntityUpdatingPayload, CoreEntityPatchingPayload, CoreEntityDeletingPayload, CoreEntityErrorPayload, CoreEntityCompletePayload, CoreBulkCreatedPayload, CoreBulkDeletedPayload, CoreSystemInitializedPayload, CoreSystemReadyPayload, CoreSystemShutdownPayload, CoreSystemErrorPayload, CoreSystemWarningPayload, CoreApiRequestStartPayload, CoreApiRequestSuccessPayload, CoreApiRequestErrorPayload, CoreApiRetryPayload, CoreApiTimeoutPayload, CoreCacheHitPayload, CoreCacheMissPayload, CoreCacheSetPayload, CoreCacheDeletePayload, CoreCacheClearPayload, CoreCacheExpiredPayload, CoreCacheErrorPayload, CoreDatabaseConnectedPayload, CoreDatabaseDisconnectedPayload, CoreDatabaseQueryPayload, CoreDatabaseErrorPayload, CoreDatabaseTransactionStartPayload, CoreDatabaseTransactionCommitPayload, CoreDatabaseTransactionRollbackPayload, CoreAuthLoginPayload, CoreAuthLogoutPayload, CoreAuthTokenRefreshPayload, CoreAuthSessionExpiredPayload, CoreAuthUnauthorizedPayload, CoreFeatureFlagChangedPayload, CoreFeatureFlagEvaluatedPayload, CoreFeatureFlagRefreshedPayload, CoreStoreUpdatedPayload, CoreStoreResetPayload, CoreStoreHydratedPayload, CoreOperationRequestPayload, CoreOperationResultPayload, CoreOperationErrorPayload, CoreStorageUploadedPayload, CoreStorageDownloadedPayload, CoreStorageDeletedPayload, CoreStorageErrorPayload, CoreStorageHealthCheckPayload, CoreNotificationSentPayload, CoreNotificationFailedPayload, CoreNotificationDeliveredPayload, CoreNotificationOpenedPayload, CoreNotificationClickedPayload, CoreNotificationErrorPayload, CoreNotificationHealthCheckPayload, CoreEventPayloadMap, EventPersistenceConfig, DomainPersistenceConfig, PersistOperationConfig, } from './payloads';
22
+ export type { CoreEvent, CoreCrudOperation, CoreValidationStartedPayload, CoreValidationSuccessPayload, CoreValidationFailedPayload, CoreSanitizationStartedPayload, CoreSanitizationSuccessPayload, CoreSanitizationFailedPayload, CoreEntityCreatedPayload, CoreEntityUpdatedPayload, CoreEntityPatchedPayload, CoreEntityDeletedPayload, CoreEntityCreatingPayload, CoreEntityUpdatingPayload, CoreEntityPatchingPayload, CoreEntityDeletingPayload, CoreEntityErrorPayload, CoreEntityCompletePayload, CoreBulkCreatedPayload, CoreBulkDeletedPayload, CoreSystemInitializedPayload, CoreSystemReadyPayload, CoreSystemShutdownPayload, CoreSystemErrorPayload, CoreSystemWarningPayload, CoreApiRequestStartPayload, CoreApiRequestSuccessPayload, CoreApiRequestErrorPayload, CoreApiRetryPayload, CoreApiTimeoutPayload, CoreCacheHitPayload, CoreCacheMissPayload, CoreCacheSetPayload, CoreCacheDeletePayload, CoreCacheClearPayload, CoreCacheExpiredPayload, CoreCacheErrorPayload, CoreDatabaseConnectedPayload, CoreDatabaseDisconnectedPayload, CoreDatabaseQueryPayload, CoreDatabaseErrorPayload, CoreDatabaseTransactionStartPayload, CoreDatabaseTransactionCommitPayload, CoreDatabaseTransactionRollbackPayload, CoreAuthLoginPayload, CoreAuthLogoutPayload, CoreAuthTokenRefreshPayload, CoreAuthSessionExpiredPayload, CoreAuthUnauthorizedPayload, CoreFeatureFlagChangedPayload, CoreFeatureFlagEvaluatedPayload, CoreFeatureFlagRefreshedPayload, CoreStoreUpdatedPayload, CoreStoreResetPayload, CoreStoreHydratedPayload, CoreOperationRequestPayload, CoreOperationResultPayload, CoreOperationErrorPayload, CoreStorageUploadedPayload, CoreStorageDownloadedPayload, CoreStorageDeletedPayload, CoreStorageErrorPayload, CoreStorageHealthCheckPayload, CoreNotificationSentPayload, CoreNotificationFailedPayload, CoreNotificationDeliveredPayload, CoreNotificationOpenedPayload, CoreNotificationClickedPayload, CoreNotificationErrorPayload, CoreNotificationHealthCheckPayload, CoreEventPayloadMap, EventPersistenceConfig, DomainPersistenceConfig, PersistOperationConfig, FrontendEventHandlerConfig, DomainFrontendEventConfig, } from './payloads';
@@ -757,3 +757,74 @@ export interface DomainPersistenceConfig<TRepository = unknown, TMapper = unknow
757
757
  /** Enable verbose logging */
758
758
  verbose?: boolean;
759
759
  }
760
+ /**
761
+ * Frontend event handler configuration
762
+ * Defines how to extract payload and update store for a specific event
763
+ *
764
+ * @typeParam TStore - Store slice type
765
+ * @typeParam TItem - Item type extracted from payload
766
+ *
767
+ * @example
768
+ * ```typescript
769
+ * const uploadedHandler: FrontendEventHandlerConfig<FilesStoreSlice, FilesEntity> = {
770
+ * extractPayload: (payload) => payload.result,
771
+ * updateStore: async (store, item) => {
772
+ * if (Array.isArray(item)) {
773
+ * store.addUploads(item);
774
+ * } else {
775
+ * store.addUpload(item);
776
+ * }
777
+ * },
778
+ * isBulk: false,
779
+ * };
780
+ * ```
781
+ */
782
+ /**
783
+ * Frontend event handler configuration
784
+ *
785
+ * Simple: just a callback that receives store and payload.
786
+ * Do whatever you need - set loading state, add data, etc.
787
+ *
788
+ * @typeParam TStore - Store slice type
789
+ * @typeParam TPayload - Event payload type
790
+ */
791
+ export interface FrontendEventHandlerConfig<TStore = unknown, TPayload = unknown> {
792
+ /** Handle the event - receives store and typed payload */
793
+ handler: (store: TStore, payload: TPayload) => void | Promise<void>;
794
+ }
795
+ /**
796
+ * Domain frontend event handler configuration
797
+ * Used by FrontendEventPersistenceHandler to register event handlers
798
+ *
799
+ * @typeParam TStore - Store slice type (e.g., FilesFrontendStoreSlice)
800
+ * @typeParam TPayload - Event payload type
801
+ *
802
+ * @example
803
+ * ```typescript
804
+ * FrontendEventPersistenceHandler.register<FilesFrontendStoreSlice, FilesUploadEventPayload>({
805
+ * domain: 'files',
806
+ * events: {
807
+ * 'files:upload:uploading': {
808
+ * handler: (store) => store.setUploading(true),
809
+ * },
810
+ * 'files:upload:uploaded': {
811
+ * handler: (store, payload) => {
812
+ * store.setUploading(false);
813
+ * store.addUpload(FilesMapper.toDomain(payload.result));
814
+ * },
815
+ * },
816
+ * },
817
+ * getStore: () => Core._rootStore?.getState().files,
818
+ * });
819
+ * ```
820
+ */
821
+ export interface DomainFrontendEventConfig<TStore = unknown, TPayload = unknown> {
822
+ /** Domain name (e.g., 'files', 'notifications') */
823
+ domain: string;
824
+ /** Event configurations keyed by event name */
825
+ events: Record<string, FrontendEventHandlerConfig<TStore, TPayload>>;
826
+ /** Get store slice from root store (called per event, safe for SSR) */
827
+ getStore: () => TStore | undefined;
828
+ /** Enable verbose logging */
829
+ verbose?: boolean;
830
+ }
@@ -73,13 +73,13 @@ export interface FilesFrontendStoreData {
73
73
  * Files are immutable once uploaded - only metadata changes via storage service.
74
74
  */
75
75
  export interface FilesFrontendStoreActions extends CoreBaseFrontendStore<FilesFrontendStoreData> {
76
- addFile: (file: FilesEntity) => void;
76
+ addFile: (file: FilesEntity | FilesEntity[]) => void;
77
77
  removeFile: (id: string) => void;
78
78
  clearFiles: () => void;
79
- addUpload: (upload: FilesEntity) => void;
79
+ addUpload: (upload: FilesEntity | FilesEntity[]) => void;
80
80
  removeUpload: (id: string) => void;
81
81
  clearUploads: () => void;
82
- addGenerated: (file: GeneratedFileItem) => void;
82
+ addGenerated: (file: GeneratedFileItem | GeneratedFileItem[]) => void;
83
83
  removeGenerated: (id: string) => void;
84
84
  clearGenerated: () => void;
85
85
  setLoading: (isLoading: boolean) => void;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@plyaz/types",
3
- "version": "1.32.0",
3
+ "version": "1.33.0",
4
4
  "author": "Redeemer Pace",
5
5
  "license": "ISC",
6
6
  "description": "Provides shared TypeScript types and schema utilities for validation and parsing in the @playz ecosystem.",