@progressive-development/pd-spa-helper 0.3.35 → 0.3.37

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.
@@ -10,7 +10,7 @@ export { DefaultWizard } from './defaultpage/default-wizard.js';
10
10
  export { DefaultWizardStep } from './defaultpage/default-wizard-step.js';
11
11
  export { DefaultStepAddress } from './defaultpage/default-step-address.js';
12
12
  export { DefaultStepSummary, OrderStep } from './defaultpage/default-step-summary.js';
13
- export { loginImpl, logoutImpl, getUser, isAuthenticatedImpl, callFunctionImpl, uploadFile, downloadFile, getStorageFileList, activateCollectionListener, } from './service-provider/service-provider-impl.js';
13
+ export { loginImpl, logoutImpl, getUser, isAuthenticatedImpl, callFunctionImpl, uploadFile, downloadFile, deleteFile, getStorageFileList, getStorageFile, activateCollectionListener, } from './service-provider/service-provider-impl.js';
14
14
  export { pdStore } from './store/mini-rx.store.js';
15
15
  export { setRouteElement } from './store/spa-app-effects.js';
16
16
  export * as pdAction from './store/spa-app-actions.js';
package/dist/src/index.js CHANGED
@@ -10,7 +10,7 @@ export { DefaultWizard } from './defaultpage/default-wizard.js';
10
10
  export { DefaultWizardStep } from './defaultpage/default-wizard-step.js';
11
11
  export { DefaultStepAddress } from './defaultpage/default-step-address.js';
12
12
  export { DefaultStepSummary } from './defaultpage/default-step-summary.js';
13
- export { loginImpl, logoutImpl, getUser, isAuthenticatedImpl, callFunctionImpl, uploadFile, downloadFile, getStorageFileList, activateCollectionListener, } from './service-provider/service-provider-impl.js';
13
+ export { loginImpl, logoutImpl, getUser, isAuthenticatedImpl, callFunctionImpl, uploadFile, downloadFile, deleteFile, getStorageFileList, getStorageFile, activateCollectionListener, } from './service-provider/service-provider-impl.js';
14
14
  export { pdStore } from './store/mini-rx.store.js';
15
15
  export { setRouteElement } from './store/spa-app-effects.js';
16
16
  export * as pdAction from './store/spa-app-actions.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,SAAS,GACV,MAAM,kBAAkB,CAAC;AAE1B,OAAO,KAAK,UAAU,MAAM,8CAA8C,CAAC;AAC3E,OAAO,KAAK,WAAW,MAAM,sBAAsB,CAAC;AAEpD,OAAO,KAAK,WAAW,MAAM,0BAA0B,CAAC;AAExD,OAAO,EAAC,eAAe,EAAC,MAAM,oCAAoC,CAAC;AAEnE,OAAO,EAAC,mBAAmB,EAAa,gBAAgB,EAAE,gBAAgB,EAAC,MAAM,wCAAwC,CAAC;AAE1H,OAAO,EAAC,kBAAkB,EAAC,MAAM,uCAAuC,CAAC;AAEzE,OAAO,EAAC,YAAY,EAAC,MAAM,gCAAgC,CAAC;AAE5D,OAAO,EAAC,aAAa,EAAC,MAAM,iCAAiC,CAAC;AAE9D,OAAO,EAAC,iBAAiB,EAAC,MAAM,sCAAsC,CAAC;AAEvE,OAAO,EAAC,kBAAkB,EAAC,MAAM,uCAAuC,CAAC;AAEzE,OAAO,EAAC,kBAAkB,EAAY,MAAM,uCAAuC,CAAC;AAEpF,OAAO,EACL,SAAS,EACT,UAAU,EACV,OAAO,EACP,mBAAmB,EACnB,gBAAgB,EAChB,UAAU,EACV,YAAY,EACZ,kBAAkB,EAClB,0BAA0B,GAC3B,MAAM,6CAA6C,CAAA;AAEpD,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAE7D,OAAO,KAAK,QAAQ,MAAM,4BAA4B,CAAC;AACvD,OAAO,KAAK,UAAU,MAAM,6BAA6B,CAAC;AAE1D,OAAO,KAAK,IAAI,MAAM,oBAAoB,CAAA;AAE1C,OAAO,EAAE,SAAS,IAAI,UAAU,EAAC,MAAM,0CAA0C,CAAA;AACjF,OAAO,EAAE,SAAS,IAAI,UAAU,EAAC,MAAM,0CAA0C,CAAA;AACjF,OAAO,EAAE,SAAS,IAAI,UAAU,EAAC,MAAM,0CAA0C,CAAA;AAEjF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,OAAW,EAAE,GAAU,EAAE,SAAiB,EAAE,OAAe,EAAE,EAAE;IAChG,OAAO,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,aAAa,EAAC;QAClD,MAAM,EAAE;YACN,GAAG;YACH,SAAS;YACT,OAAO;SACR;QACD,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,IAAI;KACf,CAAC,CAAC,CAAC;AACN,CAAC,CAAA","sourcesContent":["export { \n PdSpaHelper, \n startInit, \n} from './PdSpaHelper.js';\n\nexport * as pdSpaModel from './service-provider/service-provider-model.js';\nexport * as pdSpaModel2 from './model/spa-model.js';\n\nexport * as pdSpaHelper from './helper/helper-utils.js';\n\nexport {DefaultViewPage} from './defaultpage/default-view-page.js';\n\nexport {DefaultConfirmPopup, PopupType, ABORT_EVENT_NAME, STORE_EVENT_NAME} from './defaultpage/default-confirm-popup.js';\n\nexport {DefaultDialogPopup} from './defaultpage/default-dialog-popup.js';\n\nexport {DefaultPopup} from './defaultpage/default-popup.js';\n\nexport {DefaultWizard} from './defaultpage/default-wizard.js';\n\nexport {DefaultWizardStep} from './defaultpage/default-wizard-step.js';\n\nexport {DefaultStepAddress} from './defaultpage/default-step-address.js';\n\nexport {DefaultStepSummary, OrderStep} from './defaultpage/default-step-summary.js';\n\nexport {\n loginImpl,\n logoutImpl,\n getUser,\n isAuthenticatedImpl,\n callFunctionImpl,\n uploadFile,\n downloadFile,\n getStorageFileList,\n activateCollectionListener,\n} from './service-provider/service-provider-impl.js'\n\nexport { pdStore } from './store/mini-rx.store.js';\nexport { setRouteElement } from './store/spa-app-effects.js';\n\nexport * as pdAction from './store/spa-app-actions.js';\nexport * as pdSelector from './store/spa-app-selector.js';\n\nexport * as pdDB from './store/indexDB.js'\n\nexport { templates as beTemplaes} from './generated/locale-wrapper/be-wrapper.js'\nexport { templates as deTemplaes} from './generated/locale-wrapper/de-wrapper.js'\nexport { templates as enTemplaes} from './generated/locale-wrapper/en-wrapper.js'\n\nexport const dispatchToastEvent = (element:any, txt:string, isSuccess:boolean, isError:boolean) => {\n element.dispatchEvent(new CustomEvent(\"toast-event\",{\n detail: {\n txt,\n isSuccess,\n isError\n },\n bubbles: true,\n composed: true\n }));\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,SAAS,GACV,MAAM,kBAAkB,CAAC;AAE1B,OAAO,KAAK,UAAU,MAAM,8CAA8C,CAAC;AAC3E,OAAO,KAAK,WAAW,MAAM,sBAAsB,CAAC;AAEpD,OAAO,KAAK,WAAW,MAAM,0BAA0B,CAAC;AAExD,OAAO,EAAC,eAAe,EAAC,MAAM,oCAAoC,CAAC;AAEnE,OAAO,EAAC,mBAAmB,EAAa,gBAAgB,EAAE,gBAAgB,EAAC,MAAM,wCAAwC,CAAC;AAE1H,OAAO,EAAC,kBAAkB,EAAC,MAAM,uCAAuC,CAAC;AAEzE,OAAO,EAAC,YAAY,EAAC,MAAM,gCAAgC,CAAC;AAE5D,OAAO,EAAC,aAAa,EAAC,MAAM,iCAAiC,CAAC;AAE9D,OAAO,EAAC,iBAAiB,EAAC,MAAM,sCAAsC,CAAC;AAEvE,OAAO,EAAC,kBAAkB,EAAC,MAAM,uCAAuC,CAAC;AAEzE,OAAO,EAAC,kBAAkB,EAAY,MAAM,uCAAuC,CAAC;AAEpF,OAAO,EACL,SAAS,EACT,UAAU,EACV,OAAO,EACP,mBAAmB,EACnB,gBAAgB,EAChB,UAAU,EACV,YAAY,EACZ,UAAU,EACV,kBAAkB,EAClB,cAAc,EACd,0BAA0B,GAC3B,MAAM,6CAA6C,CAAA;AAEpD,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAE7D,OAAO,KAAK,QAAQ,MAAM,4BAA4B,CAAC;AACvD,OAAO,KAAK,UAAU,MAAM,6BAA6B,CAAC;AAE1D,OAAO,KAAK,IAAI,MAAM,oBAAoB,CAAA;AAE1C,OAAO,EAAE,SAAS,IAAI,UAAU,EAAC,MAAM,0CAA0C,CAAA;AACjF,OAAO,EAAE,SAAS,IAAI,UAAU,EAAC,MAAM,0CAA0C,CAAA;AACjF,OAAO,EAAE,SAAS,IAAI,UAAU,EAAC,MAAM,0CAA0C,CAAA;AAEjF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,OAAW,EAAE,GAAU,EAAE,SAAiB,EAAE,OAAe,EAAE,EAAE;IAChG,OAAO,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,aAAa,EAAC;QAClD,MAAM,EAAE;YACN,GAAG;YACH,SAAS;YACT,OAAO;SACR;QACD,OAAO,EAAE,IAAI;QACb,QAAQ,EAAE,IAAI;KACf,CAAC,CAAC,CAAC;AACN,CAAC,CAAA","sourcesContent":["export { \n PdSpaHelper, \n startInit, \n} from './PdSpaHelper.js';\n\nexport * as pdSpaModel from './service-provider/service-provider-model.js';\nexport * as pdSpaModel2 from './model/spa-model.js';\n\nexport * as pdSpaHelper from './helper/helper-utils.js';\n\nexport {DefaultViewPage} from './defaultpage/default-view-page.js';\n\nexport {DefaultConfirmPopup, PopupType, ABORT_EVENT_NAME, STORE_EVENT_NAME} from './defaultpage/default-confirm-popup.js';\n\nexport {DefaultDialogPopup} from './defaultpage/default-dialog-popup.js';\n\nexport {DefaultPopup} from './defaultpage/default-popup.js';\n\nexport {DefaultWizard} from './defaultpage/default-wizard.js';\n\nexport {DefaultWizardStep} from './defaultpage/default-wizard-step.js';\n\nexport {DefaultStepAddress} from './defaultpage/default-step-address.js';\n\nexport {DefaultStepSummary, OrderStep} from './defaultpage/default-step-summary.js';\n\nexport {\n loginImpl,\n logoutImpl,\n getUser,\n isAuthenticatedImpl,\n callFunctionImpl,\n uploadFile,\n downloadFile,\n deleteFile,\n getStorageFileList,\n getStorageFile,\n activateCollectionListener,\n} from './service-provider/service-provider-impl.js'\n\nexport { pdStore } from './store/mini-rx.store.js';\nexport { setRouteElement } from './store/spa-app-effects.js';\n\nexport * as pdAction from './store/spa-app-actions.js';\nexport * as pdSelector from './store/spa-app-selector.js';\n\nexport * as pdDB from './store/indexDB.js'\n\nexport { templates as beTemplaes} from './generated/locale-wrapper/be-wrapper.js'\nexport { templates as deTemplaes} from './generated/locale-wrapper/de-wrapper.js'\nexport { templates as enTemplaes} from './generated/locale-wrapper/en-wrapper.js'\n\nexport const dispatchToastEvent = (element:any, txt:string, isSuccess:boolean, isError:boolean) => {\n element.dispatchEvent(new CustomEvent(\"toast-event\",{\n detail: {\n txt,\n isSuccess,\n isError\n },\n bubbles: true,\n composed: true\n }));\n}\n"]}
@@ -8,5 +8,13 @@ import { FileStorageConfig, StorageDocument, UploadFile } from '../service-provi
8
8
  */
9
9
  export declare const initFirestorage: (app: FirebaseApp, defaultStorage?: string, storageConfig?: FileStorageConfig) => void;
10
10
  export declare const uploadFirestorageFile: (file: UploadFile) => Promise<UploadResult>;
11
+ export declare const getFirestorageFile: (storageName: string, refKey: string, storageURI: string, includeMetaData?: boolean) => Promise<StorageDocument>;
11
12
  export declare const getFirestorageFileList: (storageName: string, refKey: string, subFolder?: string, includeMetaData?: boolean) => Promise<StorageDocument[]>;
12
13
  export declare const downloadFileFirestorage: (file: StorageDocument) => Promise<string>;
14
+ /**
15
+ * Löscht eine Datei in Firebase Storage basierend auf den Informationen im StorageDocument.
16
+ *
17
+ * @param deleteFile - Das StorageDocument-Objekt, das die zu löschende Datei beschreibt.
18
+ * @returns Ein Promise, das erfüllt wird, wenn die Datei gelöscht wurde, oder abgelehnt wird, wenn ein Fehler auftritt.
19
+ */
20
+ export declare function deleteFirestorageDocument(deleteFile: StorageDocument): Promise<void>;
@@ -1,4 +1,4 @@
1
- import { getDownloadURL, getMetadata, getStorage, listAll, ref, uploadString } from "firebase/storage";
1
+ import { deleteObject, getDownloadURL, getMetadata, getStorage, listAll, ref, uploadString } from "firebase/storage";
2
2
  import { getUser } from '../service-provider-impl.js';
3
3
  const DEFAULT_STORAGE = "default_storage";
4
4
  const storageMap = new Map();
@@ -66,6 +66,7 @@ export const uploadFirestorageFile = (file) => {
66
66
  'creator': (_a = getUser()) === null || _a === void 0 ? void 0 : _a.displayName,
67
67
  'comment': file.description,
68
68
  'name': file.descriptionName,
69
+ 'readonly': file.readonly ? "true" : "false",
69
70
  }
70
71
  };
71
72
  return uploadString(fileRef, file.base64DataURL, 'data_url', metadata);
@@ -78,7 +79,7 @@ const fetchItemsAndFolders = async (usedRef, storageName, refKey, includeMetaDat
78
79
  const res = await listAll(usedRef);
79
80
  // Hilfsfunktion zur Verarbeitung der Metadaten
80
81
  const processMetadata = (item, metadata) => {
81
- var _a, _b, _c;
82
+ var _a, _b, _c, _d;
82
83
  return ({
83
84
  ...item,
84
85
  creation: new Date(metadata.timeCreated),
@@ -87,6 +88,7 @@ const fetchItemsAndFolders = async (usedRef, storageName, refKey, includeMetaDat
87
88
  descriptionName: (_b = metadata.customMetadata) === null || _b === void 0 ? void 0 : _b.name,
88
89
  description: (_c = metadata.customMetadata) === null || _c === void 0 ? void 0 : _c.comment,
89
90
  size: metadata.size,
91
+ readonly: ((_d = metadata.customMetadata) === null || _d === void 0 ? void 0 : _d.readonly) === "true",
90
92
  metaData: metadata
91
93
  });
92
94
  };
@@ -134,6 +136,48 @@ const fetchItemsAndFolders = async (usedRef, storageName, refKey, includeMetaDat
134
136
  throw error;
135
137
  }
136
138
  };
139
+ // Funktion, um `StorageDocument` von einer `storageURI` zu erstellen
140
+ export const getFirestorageFile = async (storageName, refKey, storageURI, includeMetaData = false) => {
141
+ var _a, _b, _c, _d;
142
+ try {
143
+ if (!storageMap || storageMap.size === 0) {
144
+ throw new Error("No storage is configured");
145
+ }
146
+ // get storage
147
+ const storageConf = storageMap.get(storageName);
148
+ if (!storageConf) {
149
+ throw new Error(`Invalid storage name: ${storageName}`);
150
+ }
151
+ const storageRef = ref(storageConf.storage, storageURI);
152
+ // Basis-StorageDocument ohne Metadaten
153
+ const storageDocument = {
154
+ fileName: storageRef.name,
155
+ filePath: storageRef.fullPath,
156
+ storageName,
157
+ refKey,
158
+ };
159
+ // Falls Metadaten angefordert, lade und füge sie hinzu
160
+ if (includeMetaData) {
161
+ const metadata = await getMetadata(storageRef);
162
+ return {
163
+ ...storageDocument,
164
+ creation: new Date(metadata.timeCreated),
165
+ documentType: metadata.contentType,
166
+ creator: (_a = metadata.customMetadata) === null || _a === void 0 ? void 0 : _a.creator,
167
+ descriptionName: (_b = metadata.customMetadata) === null || _b === void 0 ? void 0 : _b.name,
168
+ description: (_c = metadata.customMetadata) === null || _c === void 0 ? void 0 : _c.comment,
169
+ size: metadata.size,
170
+ readonly: ((_d = metadata.customMetadata) === null || _d === void 0 ? void 0 : _d.readonly) === "true",
171
+ metaData: metadata
172
+ };
173
+ }
174
+ return storageDocument; // Rückgabe ohne Metadaten
175
+ }
176
+ catch (error) {
177
+ console.error("Error creating StorageDocument:", error);
178
+ throw error;
179
+ }
180
+ };
137
181
  export const getFirestorageFileList = (storageName, refKey, subFolder, includeMetaData) => {
138
182
  if (!storageMap || storageMap.size === 0) {
139
183
  throw new Error("No storage is configured");
@@ -166,6 +210,33 @@ export const downloadFileFirestorage = (file) => {
166
210
  const usedRef = ref(storageConf.storage, file.filePath);
167
211
  return getDownloadURL(usedRef);
168
212
  };
213
+ /**
214
+ * Löscht eine Datei in Firebase Storage basierend auf den Informationen im StorageDocument.
215
+ *
216
+ * @param deleteFile - Das StorageDocument-Objekt, das die zu löschende Datei beschreibt.
217
+ * @returns Ein Promise, das erfüllt wird, wenn die Datei gelöscht wurde, oder abgelehnt wird, wenn ein Fehler auftritt.
218
+ */
219
+ export async function deleteFirestorageDocument(deleteFile) {
220
+ if (!deleteFile.filePath) {
221
+ throw new Error("File path is required to delete a document.");
222
+ }
223
+ // Hole die Storage-Konfiguration basierend auf dem storageName
224
+ const storageConf = storageMap.get(deleteFile.storageName);
225
+ if (!storageConf) {
226
+ throw new Error(`Invalid storage name: ${deleteFile.storageName}`);
227
+ }
228
+ // Erstelle eine Referenz zur Datei in Firebase Storage
229
+ const deleteRef = ref(storageConf.storage, deleteFile.filePath);
230
+ try {
231
+ // Lösche die Datei
232
+ await deleteObject(deleteRef);
233
+ console.log(`File ${deleteFile.fileName} successfully deleted.`);
234
+ }
235
+ catch (error) {
236
+ console.error("Error deleting file:", error);
237
+ throw error;
238
+ }
239
+ }
169
240
  /* Firestorage Error List: https://firebase.google.com/docs/storage/web/handle-errors */
170
241
  /*
171
242
  storage/unknown An unknown error occurred.
@@ -1 +1 @@
1
- {"version":3,"file":"firestorage-client.js","sourceRoot":"","sources":["../../../../src/service-provider/firebase/firestorage-client.ts"],"names":[],"mappings":"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","sourcesContent":["import { FirebaseApp } from 'firebase/app';\nimport { FirebaseStorage, FullMetadata, ListResult, StorageReference, UploadResult, getDownloadURL, getMetadata, getStorage, listAll, ref, uploadString } from \"firebase/storage\";\n\nimport { FileStorageConfig, StorageDocument, UploadFile } from '../service-provider-model.js';\nimport { getUser } from '../service-provider-impl.js';\n\nconst DEFAULT_STORAGE = \"default_storage\";\n\nconst storageMap:Map<string, { \n storage: FirebaseStorage,\n references?: {\n key: string,\n storageRef: StorageReference\n }[],\n}> = new Map();\n\n/**\n * During start/load application, initialize functions.\n *\n * @param {*} app - initialized app.\n */\nexport const initFirestorage = (\n app: FirebaseApp, \n defaultStorage?: string, \n storageConfig?: FileStorageConfig\n) => {\n try {\n\n // add default storage\n if (defaultStorage) {\n storageMap.set(DEFAULT_STORAGE, {\n storage: getStorage(app)\n });\n } \n \n // add specific storages\n storageConfig?.storage.forEach(storeConfig => {\n\n const storage = getStorage(app, storeConfig.name);\n const storageRootRef = ref(storage);\n\n storageMap.set(storeConfig.name, {\n storage,\n references: [\n {\n key: \"ROOT\",\n storageRef: storageRootRef\n },\n ...storeConfig.references.map(refConfigString => ({\n key: refConfigString,\n storageRef: ref(storageRootRef, refConfigString)\n }))\n ]\n });\n }); \n\n } catch (error) {\n console.error(error);\n }\n};\n\nexport const uploadFirestorageFile = (file: UploadFile):Promise<UploadResult> => { \n\n if (!storageMap || storageMap.size === 0) {\n throw new Error(\"No storage is configured\");\n } \n\n // get storage\n const {storageName, referenceKey, subFolderName, fileName} = file;\n const storageConf = storageMap.get(storageName || DEFAULT_STORAGE);\n if (!storageConf ) {\n throw new Error(`Invalid storage name: ${storageName || DEFAULT_STORAGE}`);\n } \n if (!storageConf.references || storageConf.references.length === 0) {\n throw new Error(`No references configured for storage: ${storageName || DEFAULT_STORAGE}`);\n }\n\n // get reference to path\n const uploadRefConf = referenceKey ? (storageConf.references.filter(filterRef => filterRef.key === referenceKey)[0]) : storageConf.references[0];\n if (!uploadRefConf || !uploadRefConf.storageRef) {\n throw new Error(`No valid reference for key: ${referenceKey}`);\n }\n\n // create file reference and upload\n const fileRef = ref(uploadRefConf.storageRef, subFolderName ? `${subFolderName}/${fileName}` : fileName);\n\n // default usefull metadata: contentType, size, timeCreated, updated\n\n // additional custom metadata\n const metadata = {\n customMetadata: {\n 'creator': (getUser() as any)?.displayName,\n 'comment': file.description,\n 'name': file.descriptionName,\n }\n };\n \n return uploadString(fileRef, file.base64DataURL, 'data_url', metadata);\n};\n\nconst fetchItemsAndFolders = async (\n usedRef: StorageReference,\n storageName: string,\n refKey: string,\n includeMetaData = false,\n includeFolder = false\n): Promise<StorageDocument[]> => {\n try {\n const itemRefs: StorageDocument[] = [];\n const metaPromises: Promise<FullMetadata>[] = [];\n \n // Hole alle Items und Folder direkt unter `usedRef`\n const res: ListResult = await listAll(usedRef);\n\n // Hilfsfunktion zur Verarbeitung der Metadaten\n const processMetadata = (item: StorageDocument, metadata: FullMetadata): StorageDocument => ({\n ...item,\n creation: new Date(metadata.timeCreated),\n documentType: metadata.contentType,\n creator: metadata.customMetadata?.creator,\n descriptionName: metadata.customMetadata?.name,\n description: metadata.customMetadata?.comment,\n size: metadata.size,\n metaData: metadata\n });\n \n // 1. Items direkt im usedRef-Ordner verarbeiten\n res.items.forEach((itemRef) => {\n itemRefs.push({\n fileName: itemRef.name,\n filePath: itemRef.fullPath,\n storageName,\n refKey\n });\n\n // Erzeuge die Metadaten-Promises direkt, wenn `includeMetaData` aktiv ist\n if (includeMetaData) {\n metaPromises.push(getMetadata(itemRef));\n }\n });\n\n // 2. Verarbeite alle Ordner direkt unter usedRef, falls includeFolder gesetzt ist\n if (includeFolder) {\n await Promise.all(\n res.prefixes.map(async (folderRef) => {\n const folderRes = await listAll(folderRef);\n folderRes.items.forEach((subItemRef) => {\n itemRefs.push({\n fileName: subItemRef.name,\n filePath: subItemRef.fullPath,\n storageName,\n refKey,\n subFolderName: folderRef.name\n });\n\n // Erzeuge Metadaten-Promises für die Ordner-Inhalte, wenn `includeMetaData` aktiv ist\n if (includeMetaData) {\n metaPromises.push(getMetadata(subItemRef));\n }\n });\n })\n );\n }\n\n // 3. Falls `includeMetaData`, warte auf alle Metadaten und ordne sie den `itemRefs` zu\n if (includeMetaData) {\n const metaResults = await Promise.all(metaPromises);\n return itemRefs.map((item, index) => processMetadata(item, metaResults[index]));\n }\n \n return itemRefs; // Rückgabe ohne Metadaten, falls nicht angefordert\n } catch (error) {\n console.error(\"Error during file and folder listing:\", error);\n throw error;\n }\n}\n\nexport const getFirestorageFileList = (\n storageName: string, \n refKey: string, \n subFolder?: string,\n includeMetaData?: boolean\n):Promise<StorageDocument[]> => { \n\n if (!storageMap || storageMap.size === 0) {\n throw new Error(\"No storage is configured\");\n }\n\n // get storage \n const storageConf = storageMap.get(storageName);\n if (!storageConf ) {\n throw new Error(`Invalid storage name: ${storageName}`);\n } \n if (!storageConf.references || storageConf.references.length === 0) {\n throw new Error(`No references configured for storage: ${storageName || DEFAULT_STORAGE}`);\n }\n\n // get refrence\n const storageRef = storageConf.references.filter(refIt => refIt.key === refKey)[0];\n if (!storageRef) {\n throw new Error(`No reference available for storage: ${storageName || DEFAULT_STORAGE} and ref: ${refKey}`);\n }\n\n const usedRef = subFolder ? ref(storageRef.storageRef, subFolder) : storageRef.storageRef; \n return fetchItemsAndFolders(usedRef, storageName, refKey, includeMetaData, true);\n};\n\n\nexport const downloadFileFirestorage = (file: StorageDocument) => {\n\n if (!storageMap || storageMap.size === 0) {\n throw new Error(\"No storage is configured\");\n }\n\n // get storage \n const storageConf = storageMap.get(file.storageName);\n if (!storageConf ) {\n throw new Error(`Invalid storage name: ${file.storageName}`);\n } \n const usedRef = ref(storageConf.storage, file.filePath);\n return getDownloadURL(usedRef);\n}\n\n\n/* Firestorage Error List: https://firebase.google.com/docs/storage/web/handle-errors */\n/* \nstorage/unknown\tAn unknown error occurred.\nstorage/object-not-found\tNo object exists at the desired reference.\nstorage/bucket-not-found\tNo bucket is configured for Cloud Storage\nstorage/project-not-found\tNo project is configured for Cloud Storage\nstorage/quota-exceeded\tQuota on your Cloud Storage bucket has been exceeded. If you're on the no-cost tier, upgrade to a paid plan. If you're on a paid plan, reach out to Firebase support.\nstorage/unauthenticated\tUser is unauthenticated, please authenticate and try again.\nstorage/unauthorized\tUser is not authorized to perform the desired action, check your security rules to ensure they are correct.\nstorage/retry-limit-exceeded\tThe maximum time limit on an operation (upload, download, delete, etc.) has been excceded. Try uploading again.\nstorage/invalid-checksum\tFile on the client does not match the checksum of the file received by the server. Try uploading again.\nstorage/canceled\tUser canceled the operation.\nstorage/invalid-event-name\tInvalid event name provided. Must be one of [`running`, `progress`, `pause`]\nstorage/invalid-url\tInvalid URL provided to refFromURL(). Must be of the form: gs://bucket/object or https://firebasestorage.googleapis.com/v0/b/bucket/o/object?token=<TOKEN>\nstorage/invalid-argument\tThe argument passed to put() must be `File`, `Blob`, or `UInt8` Array. The argument passed to putString() must be a raw, `Base64`, or `Base64URL` string.\nstorage/no-default-bucket\tNo bucket has been set in your config's storageBucket property.\nstorage/cannot-slice-blob\tCommonly occurs when the local file has changed (deleted, saved again, etc.). Try uploading again after verifying that the file hasn't changed.\nstorage/server-file-wrong-size\n*/"]}
1
+ {"version":3,"file":"firestorage-client.js","sourceRoot":"","sources":["../../../../src/service-provider/firebase/firestorage-client.ts"],"names":[],"mappings":"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","sourcesContent":["import { FirebaseApp } from 'firebase/app';\nimport { FirebaseStorage, FullMetadata, ListResult, StorageReference, UploadResult, deleteObject, getDownloadURL, getMetadata, getStorage, listAll, ref, uploadString } from \"firebase/storage\";\n\nimport { FileStorageConfig, StorageDocument, UploadFile } from '../service-provider-model.js';\nimport { getUser } from '../service-provider-impl.js';\n\nconst DEFAULT_STORAGE = \"default_storage\";\n\nconst storageMap:Map<string, { \n storage: FirebaseStorage,\n references?: {\n key: string,\n storageRef: StorageReference\n }[],\n}> = new Map();\n\n/**\n * During start/load application, initialize functions.\n *\n * @param {*} app - initialized app.\n */\nexport const initFirestorage = (\n app: FirebaseApp, \n defaultStorage?: string, \n storageConfig?: FileStorageConfig\n) => {\n try {\n\n // add default storage\n if (defaultStorage) {\n storageMap.set(DEFAULT_STORAGE, {\n storage: getStorage(app)\n });\n } \n \n // add specific storages\n storageConfig?.storage.forEach(storeConfig => {\n\n const storage = getStorage(app, storeConfig.name);\n const storageRootRef = ref(storage);\n\n storageMap.set(storeConfig.name, {\n storage,\n references: [\n {\n key: \"ROOT\",\n storageRef: storageRootRef\n },\n ...storeConfig.references.map(refConfigString => ({\n key: refConfigString,\n storageRef: ref(storageRootRef, refConfigString)\n }))\n ]\n });\n }); \n\n } catch (error) {\n console.error(error);\n }\n};\n\nexport const uploadFirestorageFile = (file: UploadFile):Promise<UploadResult> => { \n\n if (!storageMap || storageMap.size === 0) {\n throw new Error(\"No storage is configured\");\n } \n\n // get storage\n const {storageName, referenceKey, subFolderName, fileName} = file;\n const storageConf = storageMap.get(storageName || DEFAULT_STORAGE);\n if (!storageConf ) {\n throw new Error(`Invalid storage name: ${storageName || DEFAULT_STORAGE}`);\n } \n if (!storageConf.references || storageConf.references.length === 0) {\n throw new Error(`No references configured for storage: ${storageName || DEFAULT_STORAGE}`);\n }\n\n // get reference to path\n const uploadRefConf = referenceKey ? (storageConf.references.filter(filterRef => filterRef.key === referenceKey)[0]) : storageConf.references[0];\n if (!uploadRefConf || !uploadRefConf.storageRef) {\n throw new Error(`No valid reference for key: ${referenceKey}`);\n }\n\n // create file reference and upload\n const fileRef = ref(uploadRefConf.storageRef, subFolderName ? `${subFolderName}/${fileName}` : fileName);\n\n // default usefull metadata: contentType, size, timeCreated, updated\n\n // additional custom metadata\n const metadata = {\n customMetadata: {\n 'creator': (getUser() as any)?.displayName,\n 'comment': file.description,\n 'name': file.descriptionName,\n 'readonly': file.readonly ? \"true\" : \"false\",\n }\n };\n \n return uploadString(fileRef, file.base64DataURL, 'data_url', metadata);\n};\n\nconst fetchItemsAndFolders = async (\n usedRef: StorageReference,\n storageName: string,\n refKey: string,\n includeMetaData = false,\n includeFolder = false\n): Promise<StorageDocument[]> => {\n try {\n const itemRefs: StorageDocument[] = [];\n const metaPromises: Promise<FullMetadata>[] = [];\n \n // Hole alle Items und Folder direkt unter `usedRef`\n const res: ListResult = await listAll(usedRef);\n\n // Hilfsfunktion zur Verarbeitung der Metadaten\n const processMetadata = (item: StorageDocument, metadata: FullMetadata): StorageDocument => ({\n ...item,\n creation: new Date(metadata.timeCreated),\n documentType: metadata.contentType,\n creator: metadata.customMetadata?.creator,\n descriptionName: metadata.customMetadata?.name,\n description: metadata.customMetadata?.comment,\n size: metadata.size,\n readonly: metadata.customMetadata?.readonly === \"true\",\n metaData: metadata\n });\n \n // 1. Items direkt im usedRef-Ordner verarbeiten\n res.items.forEach((itemRef) => {\n itemRefs.push({\n fileName: itemRef.name,\n filePath: itemRef.fullPath,\n storageName,\n refKey\n });\n\n // Erzeuge die Metadaten-Promises direkt, wenn `includeMetaData` aktiv ist\n if (includeMetaData) {\n metaPromises.push(getMetadata(itemRef));\n }\n });\n\n // 2. Verarbeite alle Ordner direkt unter usedRef, falls includeFolder gesetzt ist\n if (includeFolder) {\n await Promise.all(\n res.prefixes.map(async (folderRef) => {\n const folderRes = await listAll(folderRef);\n folderRes.items.forEach((subItemRef) => {\n itemRefs.push({\n fileName: subItemRef.name,\n filePath: subItemRef.fullPath,\n storageName,\n refKey,\n subFolderName: folderRef.name\n });\n\n // Erzeuge Metadaten-Promises für die Ordner-Inhalte, wenn `includeMetaData` aktiv ist\n if (includeMetaData) {\n metaPromises.push(getMetadata(subItemRef));\n }\n });\n })\n );\n }\n\n // 3. Falls `includeMetaData`, warte auf alle Metadaten und ordne sie den `itemRefs` zu\n if (includeMetaData) {\n const metaResults = await Promise.all(metaPromises);\n return itemRefs.map((item, index) => processMetadata(item, metaResults[index]));\n }\n \n return itemRefs; // Rückgabe ohne Metadaten, falls nicht angefordert\n } catch (error) {\n console.error(\"Error during file and folder listing:\", error);\n throw error;\n }\n}\n\n// Funktion, um `StorageDocument` von einer `storageURI` zu erstellen\nexport const getFirestorageFile = async (\n storageName: string, \n refKey:string,\n storageURI: string,\n includeMetaData = false\n): Promise<StorageDocument> => {\n try {\n \n if (!storageMap || storageMap.size === 0) {\n throw new Error(\"No storage is configured\");\n }\n \n // get storage \n const storageConf = storageMap.get(storageName);\n if (!storageConf ) {\n throw new Error(`Invalid storage name: ${storageName}`);\n } \n const storageRef = ref(storageConf.storage, storageURI);\n\n // Basis-StorageDocument ohne Metadaten\n const storageDocument: StorageDocument = {\n fileName: storageRef.name,\n filePath: storageRef.fullPath,\n storageName,\n refKey,\n };\n\n // Falls Metadaten angefordert, lade und füge sie hinzu\n if (includeMetaData) {\n const metadata = await getMetadata(storageRef);\n\n return {\n ...storageDocument,\n creation: new Date(metadata.timeCreated),\n documentType: metadata.contentType,\n creator: metadata.customMetadata?.creator,\n descriptionName: metadata.customMetadata?.name,\n description: metadata.customMetadata?.comment,\n size: metadata.size,\n readonly: metadata.customMetadata?.readonly === \"true\",\n metaData: metadata\n };\n }\n\n return storageDocument; // Rückgabe ohne Metadaten\n } catch (error) {\n console.error(\"Error creating StorageDocument:\", error);\n throw error;\n }\n};\n\nexport const getFirestorageFileList = (\n storageName: string, \n refKey: string, \n subFolder?: string,\n includeMetaData?: boolean\n):Promise<StorageDocument[]> => { \n\n if (!storageMap || storageMap.size === 0) {\n throw new Error(\"No storage is configured\");\n }\n\n // get storage \n const storageConf = storageMap.get(storageName);\n if (!storageConf ) {\n throw new Error(`Invalid storage name: ${storageName}`);\n } \n if (!storageConf.references || storageConf.references.length === 0) {\n throw new Error(`No references configured for storage: ${storageName || DEFAULT_STORAGE}`);\n }\n\n // get refrence\n const storageRef = storageConf.references.filter(refIt => refIt.key === refKey)[0];\n if (!storageRef) {\n throw new Error(`No reference available for storage: ${storageName || DEFAULT_STORAGE} and ref: ${refKey}`);\n }\n\n const usedRef = subFolder ? ref(storageRef.storageRef, subFolder) : storageRef.storageRef; \n return fetchItemsAndFolders(usedRef, storageName, refKey, includeMetaData, true);\n};\n\n\nexport const downloadFileFirestorage = (file: StorageDocument) => {\n\n if (!storageMap || storageMap.size === 0) {\n throw new Error(\"No storage is configured\");\n }\n\n // get storage \n const storageConf = storageMap.get(file.storageName);\n if (!storageConf ) {\n throw new Error(`Invalid storage name: ${file.storageName}`);\n } \n const usedRef = ref(storageConf.storage, file.filePath);\n return getDownloadURL(usedRef);\n}\n\n/**\n * Löscht eine Datei in Firebase Storage basierend auf den Informationen im StorageDocument.\n *\n * @param deleteFile - Das StorageDocument-Objekt, das die zu löschende Datei beschreibt.\n * @returns Ein Promise, das erfüllt wird, wenn die Datei gelöscht wurde, oder abgelehnt wird, wenn ein Fehler auftritt.\n */\nexport async function deleteFirestorageDocument(deleteFile: StorageDocument): Promise<void> {\n if (!deleteFile.filePath) {\n throw new Error(\"File path is required to delete a document.\");\n }\n\n // Hole die Storage-Konfiguration basierend auf dem storageName\n const storageConf = storageMap.get(deleteFile.storageName);\n if (!storageConf) {\n throw new Error(`Invalid storage name: ${deleteFile.storageName}`);\n }\n\n // Erstelle eine Referenz zur Datei in Firebase Storage\n const deleteRef = ref(storageConf.storage, deleteFile.filePath);\n\n try {\n // Lösche die Datei\n await deleteObject(deleteRef);\n console.log(`File ${deleteFile.fileName} successfully deleted.`);\n } catch (error) {\n console.error(\"Error deleting file:\", error);\n throw error;\n }\n}\n\n\n/* Firestorage Error List: https://firebase.google.com/docs/storage/web/handle-errors */\n/* \nstorage/unknown\tAn unknown error occurred.\nstorage/object-not-found\tNo object exists at the desired reference.\nstorage/bucket-not-found\tNo bucket is configured for Cloud Storage\nstorage/project-not-found\tNo project is configured for Cloud Storage\nstorage/quota-exceeded\tQuota on your Cloud Storage bucket has been exceeded. If you're on the no-cost tier, upgrade to a paid plan. If you're on a paid plan, reach out to Firebase support.\nstorage/unauthenticated\tUser is unauthenticated, please authenticate and try again.\nstorage/unauthorized\tUser is not authorized to perform the desired action, check your security rules to ensure they are correct.\nstorage/retry-limit-exceeded\tThe maximum time limit on an operation (upload, download, delete, etc.) has been excceded. Try uploading again.\nstorage/invalid-checksum\tFile on the client does not match the checksum of the file received by the server. Try uploading again.\nstorage/canceled\tUser canceled the operation.\nstorage/invalid-event-name\tInvalid event name provided. Must be one of [`running`, `progress`, `pause`]\nstorage/invalid-url\tInvalid URL provided to refFromURL(). Must be of the form: gs://bucket/object or https://firebasestorage.googleapis.com/v0/b/bucket/o/object?token=<TOKEN>\nstorage/invalid-argument\tThe argument passed to put() must be `File`, `Blob`, or `UInt8` Array. The argument passed to putString() must be a raw, `Base64`, or `Base64URL` string.\nstorage/no-default-bucket\tNo bucket has been set in your config's storageBucket property.\nstorage/cannot-slice-blob\tCommonly occurs when the local file has changed (deleted, saved again, etc.). Try uploading again after verifying that the file hasn't changed.\nstorage/server-file-wrong-size\n*/"]}
@@ -11,5 +11,7 @@ export declare const logoutImpl: () => Promise<boolean>;
11
11
  export declare const getUser: () => unknown;
12
12
  export declare const uploadFile: (file: UploadFile) => Promise<unknown>;
13
13
  export declare const getStorageFileList: (storageName: string, keyRef: string, subFolder?: string, includeMetadata?: boolean) => Promise<StorageDocument[]>;
14
+ export declare const getStorageFile: (storageName: string, refKey: string, storageURI: string, includeMetaData: boolean) => Promise<unknown>;
14
15
  export declare const downloadFile: (file: StorageDocument) => Promise<unknown>;
16
+ export declare const deleteFile: (file: StorageDocument) => Promise<unknown>;
15
17
  export declare const activateCollectionListener: (callback: Function, col: string, constraints?: CollectionContraint[]) => "" | import("@firebase/firestore").Unsubscribe;
@@ -4,7 +4,7 @@ import { authStateChangedMock, getAuthUserMock, isAuthenticatedMock, loginMock,
4
4
  import { callFunction, initFunctions } from "./firebase/functions-client.js";
5
5
  import { getFirebaseCollectionListener, initFirestore } from "./firebase/firestore-client.js";
6
6
  import { callFunctionMock, initMockResponse } from "./mock/function-client.js";
7
- import { downloadFileFirestorage, getFirestorageFileList, initFirestorage, uploadFirestorageFile } from "./firebase/firestorage-client.js";
7
+ import { deleteFirestorageDocument, downloadFileFirestorage, getFirestorageFile, getFirestorageFileList, initFirestorage, uploadFirestorageFile } from "./firebase/firestorage-client.js";
8
8
  import { downloadFileMock, getMockFileList, initStorageMock, uploadStorageFileMock } from "./mock/storage-client.js";
9
9
  import { initFirebaseMessaging } from "./firebase/messagingFirebaseClient.js";
10
10
  let provider;
@@ -155,6 +155,12 @@ export const getStorageFileList = (storageName, keyRef, subFolder, includeMetada
155
155
  }
156
156
  return throwUndefinedProviderError();
157
157
  };
158
+ export const getStorageFile = (storageName, refKey, storageURI, includeMetaData) => {
159
+ if (provider === "firebase") {
160
+ return getFirestorageFile(storageName, refKey, storageURI, includeMetaData);
161
+ }
162
+ return throwUndefinedProviderError();
163
+ };
158
164
  export const downloadFile = (file) => {
159
165
  if (provider === "firebase") {
160
166
  return downloadFileFirestorage(file);
@@ -164,6 +170,12 @@ export const downloadFile = (file) => {
164
170
  }
165
171
  return throwUndefinedProviderError();
166
172
  };
173
+ export const deleteFile = (file) => {
174
+ if (provider === "firebase") {
175
+ return deleteFirestorageDocument(file);
176
+ }
177
+ return throwUndefinedProviderError();
178
+ };
167
179
  /* #########################################
168
180
  * Remote Database Implementation
169
181
  * ######################################### */
@@ -1 +1 @@
1
- {"version":3,"file":"service-provider-impl.js","sourceRoot":"","sources":["../../../src/service-provider/service-provider-impl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,aAAa,EAAE,MAAM,cAAc,CAAC;AAE1D,OAAO,EAAE,gBAAgB,EAAE,WAAW,EAAE,QAAQ,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC7G,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,mBAAmB,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAKnH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC7E,OAAO,EAAE,6BAA6B,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC9F,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAE/E,OAAO,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,kCAAkC,CAAC;AAC3I,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACrH,OAAO,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAE9E,IAAI,QAAkD,CAAC;AACvD,IAAI,UAAiC,CAAC;AAEtC,MAAM,2BAA2B,GAAG,GAAG,EAAE;IACvC,MAAM,IAAI,KAAK,CAAC,4FAA4F,CAAC,CAAC;AAChH,CAAC,CAAA;AAED;;2BAE2B;AAE3B,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,aAA4C,EAAE,EAAE;IACjF,QAAQ,GAAG,aAAa,CAAC;AAC3B,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,eAAsC,EAAE,EAAE;IACvE,UAAU,GAAG,eAAe,CAAA;AAC9B,CAAC,CAAA;AAED,MAAM,+BAA+B,GAAG,CACtC,WAAwB,EACxB,MAAwB,EACxB,EAAE;;IAEF,4BAA4B;IAC5B,QAAQ,CAAC,WAAW,CAAC,CAAC;IACtB,aAAa,CAAC,WAAW,CAAC,CAAC;IAE3B,IAAI,MAAM,CAAC,eAAe,EAAE;QAC1B,aAAa,CAAC,WAAW,EAAE,MAAM,CAAC,eAAe,CAAC,CAAC;QACnD,OAAO,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;KAC1C;IAED,IAAI,CAAA,MAAA,MAAM,CAAC,cAAc,0CAAE,aAAa,KAAI,MAAM,CAAC,aAAa,EAAE;QAChE,eAAe,CACb,WAAW,EACX,MAAA,MAAM,CAAC,cAAc,0CAAE,aAAa,EACpC,MAAM,CAAC,aAAa,CACrB,CAAC;QACF,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;KACxC;IAED,IAAI,MAAM,CAAC,eAAe,EAAE;QAC1B,qBAAqB,CAAC,WAAW,EAAE,MAAM,CAAC,eAAe,CAAC,CAAC;QAC3D,OAAO,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;KAC1C;IAED,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;AACxC,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,MAAwB,EAAE,EAAE;IAEtD,IAAI,QAAQ,KAAK,UAAU,IAAI,MAAM,CAAC,cAAc,EAAE;QACpD,MAAM,GAAG,GAAe,aAAa,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QAC7D,mDAAmD;QACnD,+BAA+B,CAC7B,GAAG,EACH,MAAM,CACP,CAAC;KACH;SAAM,IAAI,QAAQ,KAAK,MAAM,EAAE;QAC9B,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC9B,eAAe,CAAC,SAAS,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;KAClD;SAAM;QACL,2BAA2B,EAAE,CAAC;KAC/B;AACH,CAAC,CAAA;AAED;;2BAE2B;AAC3B,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EAAE,GAAuB,EAAE,aAAkB,EAA2B,EAAE;IAE7G,MAAM,cAAc,GAAG,CAAC,OAAqB,EAAE,EAAE;QAC/C,IAAI,UAAU,EAAE;YACd,UAAU,CAAC,eAAe,GAAG,EAAC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAC,CAAC;SACnD;IACH,CAAC,CAAA;IAED,IAAI,QAAQ,KAAK,UAAU,EAAE;QAC3B,MAAM,OAAO,GAAG,YAAY,CAAC,GAAG,EAAE,aAAa,CAAC,CAAA;QAChD,cAAc,CAAC,OAAO,CAAC,CAAC;QACxB,OAAO,OAAO,CAAC;KAChB;IACD,IAAI,QAAQ,KAAK,MAAM,EAAE;QACvB,MAAM,OAAO,GAAG,gBAAgB,CAAC,GAAG,EAAE,aAAa,CAAC,CAAA;QACpD,cAAc,CAAC,OAAO,CAAC,CAAC;QACxB,OAAO,OAAO,CAAC;KAChB;IAED,OAAO,2BAA2B,EAAE,CAAC;AACvC,CAAC,CAAA;AAID;;2BAE2B;AAG3B,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,QAAkB,EAClB,EAAE;IACF,IAAI,QAAQ,KAAK,UAAU,EAAE;QAC3B,gBAAgB,CAAC,QAAQ,CAAC,CAAC;KAC5B;SAAM,IAAI,QAAQ,KAAK,MAAM,EAAE;QAC9B,oBAAoB,CAAC,QAAQ,CAAC,CAAC;KAChC;SAAM;QACL,2BAA2B,EAAE,CAAC;KAC/B;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,mBAAmB,GAAG,GAAG,EAAE;IACtC,IAAI,QAAQ,KAAK,UAAU,EAAE;QAC3B,OAAO,eAAe,EAAE,CAAC;KAC1B;IACD,IAAI,QAAQ,KAAK,MAAM,EAAE;QACvB,OAAO,mBAAmB,EAAE,CAAC;KAC9B;IACD,OAAO,2BAA2B,EAAE,CAAC;AACvC,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,IAAY,EAAE,GAAW,EAAE,EAAE;IAErD,IAAI,CAAC,IAAI,EAAE;QACT,MAAM,WAAW,GAAG,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;QAC5C,OAAO,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;KACpC;IACD,IAAI,CAAC,GAAG,EAAE;QACR,MAAM,WAAW,GAAG,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;QAChD,OAAO,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;KACpC;IAED,IAAI,QAAQ,KAAK,UAAU,EAAE;QAC3B,OAAO,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;KACzB;IACD,IAAI,QAAQ,KAAK,MAAM,EAAE;QACvB,OAAO,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;KAC7B;IACD,OAAO,2BAA2B,EAAE,CAAC;AACvC,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,UAAU,GAAG,GAAG,EAAE;IAC7B,IAAI,QAAQ,KAAK,UAAU,EAAE;QAC3B,OAAO,MAAM,EAAE,CAAC;KACjB;IACD,IAAI,QAAQ,KAAK,MAAM,EAAE;QACvB,OAAO,UAAU,EAAE,CAAC;KACrB;IACD,OAAO,2BAA2B,EAAE,CAAC;AACvC,CAAC,CAAC;AAEF,uCAAuC;AACvC,MAAM,CAAC,MAAM,OAAO,GAAG,GAAG,EAAE;IAC1B,IAAI,QAAQ,KAAK,UAAU,EAAE;QAC3B,OAAO,WAAW,EAAE,CAAC;KACtB;IACD,IAAI,QAAQ,KAAK,MAAM,EAAE;QACvB,OAAO,eAAe,EAAE,CAAC;KAC1B;IACD,OAAO,2BAA2B,EAAE,CAAC;AACvC,CAAC,CAAA;AAED;;2BAE2B;AAC3B,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,IAAgB,EAAoB,EAAE;IAC/D,IAAI,QAAQ,KAAK,UAAU,EAAE;QAC3B,OAAO,qBAAqB,CAAC,IAAI,CAAC,CAAC;KACpC;IACD,IAAI,QAAQ,KAAK,MAAM,EAAE;QACvB,OAAO,qBAAqB,CAAC,IAAI,CAAC,CAAA;KACnC;IACD,OAAO,2BAA2B,EAAE,CAAC;AACvC,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,WAAmB,EACnB,MAAc,EACd,SAAkB,EAClB,eAAwB,EACI,EAAE;IAC9B,IAAI,QAAQ,KAAK,UAAU,EAAE;QAC3B,OAAO,sBAAsB,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;KAChF;IACD,IAAI,QAAQ,KAAK,MAAM,EAAE;QACvB,OAAO,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;KACzE;IACD,OAAO,2BAA2B,EAAE,CAAC;AACvC,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,IAAqB,EAAoB,EAAE;IACtE,IAAI,QAAQ,KAAK,UAAU,EAAE;QAC3B,OAAO,uBAAuB,CAAC,IAAI,CAAC,CAAC;KACtC;IACD,IAAI,QAAQ,KAAK,MAAM,EAAE;QACvB,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAA;KAC9B;IACD,OAAO,2BAA2B,EAAE,CAAC;AACvC,CAAC,CAAA;AAED;;+CAE+C;AAC/C,MAAM,CAAC,MAAM,0BAA0B,GAAG,CACxC,QAAkB,EAAE,GAAW,EAAE,WAAkC,EACnE,EAAE;IACF,IAAI,QAAQ,KAAK,UAAU,EAAE;QAC3B,OAAO,6BAA6B,CAAC,QAAQ,EAAE,GAAG,EAAE,WAAW,CAAC,CAAC;KAClE;IACD,IAAI,QAAQ,KAAK,MAAM,EAAE;QACvB,OAAO,CAAC,GAAG,CAAC,2DAA2D,CAAC,CAAC;QACzE,OAAO,EAAE,CAAC;KACX;IACD,OAAO,2BAA2B,EAAE,CAAC;AACvC,CAAC,CAAC","sourcesContent":["import { FirebaseApp, initializeApp } from \"firebase/app\";\n\nimport { authStateChanged, getAuthUser, initAuth, isAuthenticated, login, logout } from \"./firebase/auth.js\";\nimport { authStateChangedMock, getAuthUserMock, isAuthenticatedMock, loginMock, logoutMock } from \"./mock/auth.js\";\nimport { \n AppConfiguration, CollectionContraint, FunctionDefinition, FunctionResult, \n ServiceProviderConfiguration, StorageDocument, UploadFile \n} from \"./service-provider-model.js\";\nimport { callFunction, initFunctions } from \"./firebase/functions-client.js\";\nimport { getFirebaseCollectionListener, initFirestore } from \"./firebase/firestore-client.js\";\nimport { callFunctionMock, initMockResponse } from \"./mock/function-client.js\";\nimport { ServiceCallController } from \"../service-call-controller2.js\";\nimport { downloadFileFirestorage, getFirestorageFileList, initFirestorage, uploadFirestorageFile } from \"./firebase/firestorage-client.js\";\nimport { downloadFileMock, getMockFileList, initStorageMock, uploadStorageFileMock } from \"./mock/storage-client.js\";\nimport { initFirebaseMessaging } from \"./firebase/messagingFirebaseClient.js\";\n\nlet provider: ServiceProviderConfiguration | undefined;\nlet controller: ServiceCallController;\n\nconst throwUndefinedProviderError = () => {\n throw new Error(\"Undefined service provider, please check configuration. 'firebase' or 'mock' allowed here.\");\n}\n\n/* #####################\n * Init Implementation\n * ##################### */\n\nexport const setServiceProvider = (providerParam?: ServiceProviderConfiguration) => {\n provider = providerParam;\n}\n\nexport const initController = (controllerParam: ServiceCallController) => {\n controller = controllerParam\n}\n\nconst initFirebaseApplicationServices = (\n firebaseApp: FirebaseApp,\n config: AppConfiguration\n) => {\n \n // ToDo: Init only of needed\n initAuth(firebaseApp);\n initFirestore(firebaseApp);\n\n if (config.functionsConfig) {\n initFunctions(firebaseApp, config.functionsConfig);\n console.debug(\"Init provider functions\");\n }\n\n if (config.firebaseConfig?.storageBucket && config.storageConfig) {\n initFirestorage(\n firebaseApp, \n config.firebaseConfig?.storageBucket, \n config.storageConfig\n );\n console.debug(\"Init provider storage\");\n }\n\n if (config.messagingConfig) {\n initFirebaseMessaging(firebaseApp, config.messagingConfig);\n console.debug(\"Init provider messaging\");\n }\n\n console.debug(\"Firebase initialized\"); \n}\n\nexport const initAppImpl = (config: AppConfiguration) => {\n\n if (provider === \"firebase\" && config.firebaseConfig) {\n const app:FirebaseApp = initializeApp(config.firebaseConfig); \n // init application services (functions, store) \n initFirebaseApplicationServices(\n app, \n config\n );\n } else if (provider === \"mock\") {\n initMockResponse(config.mock);\n initStorageMock(\"default\", config.storageConfig);\n } else {\n throwUndefinedProviderError();\n }\n}\n\n/* #####################\n * Functions Implementation\n * ##################### */\nexport const callFunctionImpl = async (def: FunctionDefinition, functionInput: any): Promise<FunctionResult> => {\n \n const callController = (promise: Promise<any>) => {\n if (controller) {\n controller.callDataPromise = {func: def, promise};\n }\n }\n \n if (provider === \"firebase\") {\n const promise = callFunction(def, functionInput)\n callController(promise);\n return promise;\n } \n if (provider === \"mock\") {\n const promise = callFunctionMock(def, functionInput)\n callController(promise);\n return promise;\n }\n\n return throwUndefinedProviderError(); \n}\n\n\n\n/* #####################\n * Auth Implementation\n * ##################### */\n\n\nexport const authStateChangedImpl = (\n callback: Function\n) => {\n if (provider === \"firebase\") {\n authStateChanged(callback);\n } else if (provider === \"mock\") {\n authStateChangedMock(callback);\n } else {\n throwUndefinedProviderError();\n }\n}\n\nexport const isAuthenticatedImpl = () => {\n if (provider === \"firebase\") {\n return isAuthenticated();\n } \n if (provider === \"mock\") {\n return isAuthenticatedMock();\n } \n return throwUndefinedProviderError(); \n}\n\nexport const loginImpl = (user: string, sec: string) => {\n\n if (!user) { \n const returnError = new Error(\"empty user\");\n return Promise.reject(returnError);\n }\n if (!sec) {\n const returnError = new Error(\"empty password\");\n return Promise.reject(returnError);\n }\n\n if (provider === \"firebase\") {\n return login(user, sec);\n } \n if (provider === \"mock\") {\n return loginMock(user, sec);\n } \n return throwUndefinedProviderError(); \n}\n\nexport const logoutImpl = () => {\n if (provider === \"firebase\") {\n return logout();\n } \n if (provider === \"mock\") {\n return logoutMock();\n } \n return throwUndefinedProviderError(); \n};\n\n// Refactor: Return defined USer Object\nexport const getUser = () => {\n if (provider === \"firebase\") {\n return getAuthUser();\n } \n if (provider === \"mock\") {\n return getAuthUserMock();\n } \n return throwUndefinedProviderError(); \n}\n\n/* #####################\n * Storage Implementation\n * ##################### */\nexport const uploadFile = (file: UploadFile): Promise<unknown> => { \n if (provider === \"firebase\") {\n return uploadFirestorageFile(file); \n } \n if (provider === \"mock\") {\n return uploadStorageFileMock(file)\n }\n return throwUndefinedProviderError(); \n}\n\nexport const getStorageFileList = (\n storageName: string, \n keyRef: string, \n subFolder?: string, \n includeMetadata?:boolean\n): Promise<StorageDocument[]> => { \n if (provider === \"firebase\") {\n return getFirestorageFileList(storageName, keyRef, subFolder, includeMetadata);\n }\n if (provider === \"mock\") {\n return getMockFileList(storageName, keyRef, subFolder, includeMetadata);\n }\n return throwUndefinedProviderError(); \n}\n\nexport const downloadFile = (file: StorageDocument): Promise<unknown> => { \n if (provider === \"firebase\") {\n return downloadFileFirestorage(file);\n } \n if (provider === \"mock\") {\n return downloadFileMock(file)\n }\n return throwUndefinedProviderError(); \n}\n\n/* #########################################\n * Remote Database Implementation\n * ######################################### */\nexport const activateCollectionListener = (\n callback: Function, col: string, constraints?:CollectionContraint[]\n) => { \n if (provider === \"firebase\") {\n return getFirebaseCollectionListener(callback, col, constraints);\n } \n if (provider === \"mock\") {\n console.log(\"getCollectionListener not implemented for MOCK, do noting\");\n return \"\";\n }\n return throwUndefinedProviderError();\n};\n"]}
1
+ {"version":3,"file":"service-provider-impl.js","sourceRoot":"","sources":["../../../src/service-provider/service-provider-impl.ts"],"names":[],"mappings":"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","sourcesContent":["import { FirebaseApp, initializeApp } from \"firebase/app\";\n\nimport { authStateChanged, getAuthUser, initAuth, isAuthenticated, login, logout } from \"./firebase/auth.js\";\nimport { authStateChangedMock, getAuthUserMock, isAuthenticatedMock, loginMock, logoutMock } from \"./mock/auth.js\";\nimport { \n AppConfiguration, CollectionContraint, FunctionDefinition, FunctionResult, \n ServiceProviderConfiguration, StorageDocument, UploadFile \n} from \"./service-provider-model.js\";\nimport { callFunction, initFunctions } from \"./firebase/functions-client.js\";\nimport { getFirebaseCollectionListener, initFirestore } from \"./firebase/firestore-client.js\";\nimport { callFunctionMock, initMockResponse } from \"./mock/function-client.js\";\nimport { ServiceCallController } from \"../service-call-controller2.js\";\nimport { deleteFirestorageDocument, downloadFileFirestorage, getFirestorageFile, getFirestorageFileList, initFirestorage, uploadFirestorageFile } from \"./firebase/firestorage-client.js\";\nimport { downloadFileMock, getMockFileList, initStorageMock, uploadStorageFileMock } from \"./mock/storage-client.js\";\nimport { initFirebaseMessaging } from \"./firebase/messagingFirebaseClient.js\";\n\nlet provider: ServiceProviderConfiguration | undefined;\nlet controller: ServiceCallController;\n\nconst throwUndefinedProviderError = () => {\n throw new Error(\"Undefined service provider, please check configuration. 'firebase' or 'mock' allowed here.\");\n}\n\n/* #####################\n * Init Implementation\n * ##################### */\n\nexport const setServiceProvider = (providerParam?: ServiceProviderConfiguration) => {\n provider = providerParam;\n}\n\nexport const initController = (controllerParam: ServiceCallController) => {\n controller = controllerParam\n}\n\nconst initFirebaseApplicationServices = (\n firebaseApp: FirebaseApp,\n config: AppConfiguration\n) => {\n \n // ToDo: Init only of needed\n initAuth(firebaseApp);\n initFirestore(firebaseApp);\n\n if (config.functionsConfig) {\n initFunctions(firebaseApp, config.functionsConfig);\n console.debug(\"Init provider functions\");\n }\n\n if (config.firebaseConfig?.storageBucket && config.storageConfig) {\n initFirestorage(\n firebaseApp, \n config.firebaseConfig?.storageBucket, \n config.storageConfig\n );\n console.debug(\"Init provider storage\");\n }\n\n if (config.messagingConfig) {\n initFirebaseMessaging(firebaseApp, config.messagingConfig);\n console.debug(\"Init provider messaging\");\n }\n\n console.debug(\"Firebase initialized\"); \n}\n\nexport const initAppImpl = (config: AppConfiguration) => {\n\n if (provider === \"firebase\" && config.firebaseConfig) {\n const app:FirebaseApp = initializeApp(config.firebaseConfig); \n // init application services (functions, store) \n initFirebaseApplicationServices(\n app, \n config\n );\n } else if (provider === \"mock\") {\n initMockResponse(config.mock);\n initStorageMock(\"default\", config.storageConfig);\n } else {\n throwUndefinedProviderError();\n }\n}\n\n/* #####################\n * Functions Implementation\n * ##################### */\nexport const callFunctionImpl = async (def: FunctionDefinition, functionInput: any): Promise<FunctionResult> => {\n \n const callController = (promise: Promise<any>) => {\n if (controller) {\n controller.callDataPromise = {func: def, promise};\n }\n }\n \n if (provider === \"firebase\") {\n const promise = callFunction(def, functionInput)\n callController(promise);\n return promise;\n } \n if (provider === \"mock\") {\n const promise = callFunctionMock(def, functionInput)\n callController(promise);\n return promise;\n }\n\n return throwUndefinedProviderError(); \n}\n\n\n\n/* #####################\n * Auth Implementation\n * ##################### */\n\n\nexport const authStateChangedImpl = (\n callback: Function\n) => {\n if (provider === \"firebase\") {\n authStateChanged(callback);\n } else if (provider === \"mock\") {\n authStateChangedMock(callback);\n } else {\n throwUndefinedProviderError();\n }\n}\n\nexport const isAuthenticatedImpl = () => {\n if (provider === \"firebase\") {\n return isAuthenticated();\n } \n if (provider === \"mock\") {\n return isAuthenticatedMock();\n } \n return throwUndefinedProviderError(); \n}\n\nexport const loginImpl = (user: string, sec: string) => {\n\n if (!user) { \n const returnError = new Error(\"empty user\");\n return Promise.reject(returnError);\n }\n if (!sec) {\n const returnError = new Error(\"empty password\");\n return Promise.reject(returnError);\n }\n\n if (provider === \"firebase\") {\n return login(user, sec);\n } \n if (provider === \"mock\") {\n return loginMock(user, sec);\n } \n return throwUndefinedProviderError(); \n}\n\nexport const logoutImpl = () => {\n if (provider === \"firebase\") {\n return logout();\n } \n if (provider === \"mock\") {\n return logoutMock();\n } \n return throwUndefinedProviderError(); \n};\n\n// Refactor: Return defined USer Object\nexport const getUser = () => {\n if (provider === \"firebase\") {\n return getAuthUser();\n } \n if (provider === \"mock\") {\n return getAuthUserMock();\n } \n return throwUndefinedProviderError(); \n}\n\n/* #####################\n * Storage Implementation\n * ##################### */\nexport const uploadFile = (file: UploadFile): Promise<unknown> => { \n if (provider === \"firebase\") {\n return uploadFirestorageFile(file); \n } \n if (provider === \"mock\") {\n return uploadStorageFileMock(file)\n }\n return throwUndefinedProviderError(); \n}\n\nexport const getStorageFileList = (\n storageName: string, \n keyRef: string, \n subFolder?: string, \n includeMetadata?:boolean\n): Promise<StorageDocument[]> => { \n if (provider === \"firebase\") {\n return getFirestorageFileList(storageName, keyRef, subFolder, includeMetadata);\n }\n if (provider === \"mock\") {\n return getMockFileList(storageName, keyRef, subFolder, includeMetadata);\n }\n return throwUndefinedProviderError(); \n}\n\nexport const getStorageFile = ( \n storageName: string, \n refKey:string,\n storageURI: string,\n includeMetaData: boolean,\n): Promise<unknown> => { \n if (provider === \"firebase\") {\n return getFirestorageFile(\n storageName, refKey, storageURI, includeMetaData \n );\n }\n return throwUndefinedProviderError(); \n}\n\nexport const downloadFile = (file: StorageDocument): Promise<unknown> => { \n if (provider === \"firebase\") {\n return downloadFileFirestorage(file);\n } \n if (provider === \"mock\") {\n return downloadFileMock(file)\n }\n return throwUndefinedProviderError(); \n}\n\nexport const deleteFile = (file: StorageDocument): Promise<unknown> => { \n if (provider === \"firebase\") {\n return deleteFirestorageDocument(file);\n }\n return throwUndefinedProviderError(); \n}\n\n/* #########################################\n * Remote Database Implementation\n * ######################################### */\nexport const activateCollectionListener = (\n callback: Function, col: string, constraints?:CollectionContraint[]\n) => { \n if (provider === \"firebase\") {\n return getFirebaseCollectionListener(callback, col, constraints);\n } \n if (provider === \"mock\") {\n console.log(\"getCollectionListener not implemented for MOCK, do noting\");\n return \"\";\n }\n return throwUndefinedProviderError();\n};\n"]}
@@ -108,6 +108,7 @@ export interface UploadFile {
108
108
  storageName: string;
109
109
  referenceKey: string;
110
110
  subFolderName?: string;
111
+ readonly?: boolean;
111
112
  }
112
113
  export interface StorageMetadata {
113
114
  }
@@ -123,6 +124,7 @@ export interface StorageDocument {
123
124
  creation?: Date;
124
125
  creator?: string;
125
126
  size?: number;
127
+ readonly?: boolean;
126
128
  metaData?: StorageMetadata;
127
129
  }
128
130
  export interface CollectionContraint {
@@ -1 +1 @@
1
- {"version":3,"file":"service-provider-model.js","sourceRoot":"","sources":["../../../src/service-provider/service-provider-model.ts"],"names":[],"mappings":"","sourcesContent":["import { FirebaseOptions } from \"firebase/app\";\nimport { TemplateResult } from \"lit\";\n\n\n/**\n * Implemeted service provider\n */\nexport type ServiceProviderFirebase = \"firebase\";\nexport type ServiceProviderMock = \"mock\";\nexport type ServiceProviderConfiguration = ServiceProviderFirebase | ServiceProviderMock;\n\n\nexport interface FunctionResult {\n resultData: unknown,\n statusCode: number,\n}\n\n/**\n * Function model.\n */\n\nexport interface FunctionDefinition {\n name: string,\n successCodes: Array<Number>, \n // Fade window during function call (true) or show only background infos (false).\n fadeWindow: boolean,\n successTxt: string | TemplateResult,\n pendingTxt: string | TemplateResult,\n param?: any,\n redirect?: string,\n logoutOnFail?: boolean,\n}\n\nexport interface FunctionParam {\n func: FunctionDefinition,\n inputData: any,\n}\n\nexport interface FunctionsConfig {\n region: string, // 'europe-west3'\n functions: Array<FunctionDefinition>,\n postLoginFunc?: FunctionDefinition,\n}\n\n\n/**\n * App data models.\n */\n\nexport interface MenuElement {\n key: string,\n name: string,\n sec?: string,\n route?: string,\n action?: Function,\n topItem?: boolean,\n ref?: any,\n icon?: string,\n}\n\nexport interface NavigationPage {\n name: string,\n mainClass?: string,\n pattern: Array<string>, \n auth: boolean,\n menu?: Array<MenuElement>,\n topMenu?: Array<MenuElement>,\n withTeaser?: boolean,\n withFooter?: boolean\n hideMenu?: boolean\n hideTopMenu?: boolean\n topMenuItems?: Array<MenuElement>,\n}\n\nexport interface NavigationConfig {\n pages: Array<NavigationPage>,\n includeLogin: boolean\n}\n\nexport interface LinkObj {\n name: string,\n key: string,\n link?: string,\n action?: Function\n}\n\nexport interface Footer {\n version: string,\n links: Array<LinkObj>\n}\n\n\nexport interface StoreConfig {\n appName: string,\n reducer: any,\n effects: Array<any>\n}\n\nexport interface FileStorage {\n name: string,\n references: string[] \n}\n\nexport interface FileStorageConfig {\n storage: FileStorage[],\n}\n\nexport interface MessagingConfig {\n apidKey: string; \n}\n\nexport interface AppConfiguration { \n serviceProvider?: ServiceProviderConfiguration,\n mock?: {\n mockResponse?: Map<string, Function>,\n mockWaitTime?: number,\n }\n navigationConfigParam: NavigationConfig;\n storeConfigParam?: StoreConfig;\n firebaseConfig?: FirebaseOptions;\n storageConfig?: FileStorageConfig;\n functionsConfig?: FunctionsConfig;\n messagingConfig?: MessagingConfig;\n}\n\nexport interface UploadFile { \n fileName: string, \n base64DataURL:string,\n descriptionName:string,\n description:string,\n storageName: string\n referenceKey: string\n subFolderName?: string,\n}\n\nexport interface StorageMetadata {\n\n}\n\nexport interface StorageDocument {\n storageName: string, \n refKey: string, \n fileName: string, \n filePath: string,\n subFolderName?: string,\n documentType?: string, \n description?:string, \n descriptionName?: string,\n creation?:Date,\n creator?:string,\n size?: number,\n metaData?: StorageMetadata\n}\n\nexport interface CollectionContraint {\n type: \"where\",\n field: string,\n operator: \"<\" | \">\" | \">=\" | \"<=\" | \"==\" | \"!=\" | \"array-contains\" | \"array-contains-any\" | \"in\" | \"not-in\",\n value: any,\n}"]}
1
+ {"version":3,"file":"service-provider-model.js","sourceRoot":"","sources":["../../../src/service-provider/service-provider-model.ts"],"names":[],"mappings":"","sourcesContent":["import { FirebaseOptions } from \"firebase/app\";\nimport { TemplateResult } from \"lit\";\n\n\n/**\n * Implemeted service provider\n */\nexport type ServiceProviderFirebase = \"firebase\";\nexport type ServiceProviderMock = \"mock\";\nexport type ServiceProviderConfiguration = ServiceProviderFirebase | ServiceProviderMock;\n\n\nexport interface FunctionResult {\n resultData: unknown,\n statusCode: number,\n}\n\n/**\n * Function model.\n */\n\nexport interface FunctionDefinition {\n name: string,\n successCodes: Array<Number>, \n // Fade window during function call (true) or show only background infos (false).\n fadeWindow: boolean,\n successTxt: string | TemplateResult,\n pendingTxt: string | TemplateResult,\n param?: any,\n redirect?: string,\n logoutOnFail?: boolean,\n}\n\nexport interface FunctionParam {\n func: FunctionDefinition,\n inputData: any,\n}\n\nexport interface FunctionsConfig {\n region: string, // 'europe-west3'\n functions: Array<FunctionDefinition>,\n postLoginFunc?: FunctionDefinition,\n}\n\n\n/**\n * App data models.\n */\n\nexport interface MenuElement {\n key: string,\n name: string,\n sec?: string,\n route?: string,\n action?: Function,\n topItem?: boolean,\n ref?: any,\n icon?: string,\n}\n\nexport interface NavigationPage {\n name: string,\n mainClass?: string,\n pattern: Array<string>, \n auth: boolean,\n menu?: Array<MenuElement>,\n topMenu?: Array<MenuElement>,\n withTeaser?: boolean,\n withFooter?: boolean\n hideMenu?: boolean\n hideTopMenu?: boolean\n topMenuItems?: Array<MenuElement>,\n}\n\nexport interface NavigationConfig {\n pages: Array<NavigationPage>,\n includeLogin: boolean\n}\n\nexport interface LinkObj {\n name: string,\n key: string,\n link?: string,\n action?: Function\n}\n\nexport interface Footer {\n version: string,\n links: Array<LinkObj>\n}\n\n\nexport interface StoreConfig {\n appName: string,\n reducer: any,\n effects: Array<any>\n}\n\nexport interface FileStorage {\n name: string,\n references: string[] \n}\n\nexport interface FileStorageConfig {\n storage: FileStorage[],\n}\n\nexport interface MessagingConfig {\n apidKey: string; \n}\n\nexport interface AppConfiguration { \n serviceProvider?: ServiceProviderConfiguration,\n mock?: {\n mockResponse?: Map<string, Function>,\n mockWaitTime?: number,\n }\n navigationConfigParam: NavigationConfig;\n storeConfigParam?: StoreConfig;\n firebaseConfig?: FirebaseOptions;\n storageConfig?: FileStorageConfig;\n functionsConfig?: FunctionsConfig;\n messagingConfig?: MessagingConfig;\n}\n\nexport interface UploadFile { \n fileName: string, \n base64DataURL:string,\n descriptionName:string,\n description:string,\n storageName: string\n referenceKey: string\n subFolderName?: string,\n readonly?: boolean,\n}\n\nexport interface StorageMetadata {\n\n}\n\nexport interface StorageDocument {\n storageName: string, \n refKey: string, \n fileName: string, \n filePath: string,\n subFolderName?: string,\n documentType?: string, \n description?:string, \n descriptionName?: string,\n creation?:Date,\n creator?:string,\n size?: number,\n readonly?: boolean,\n metaData?: StorageMetadata\n}\n\nexport interface CollectionContraint {\n type: \"where\",\n field: string,\n operator: \"<\" | \">\" | \">=\" | \"<=\" | \"==\" | \"!=\" | \"array-contains\" | \"array-contains-any\" | \"in\" | \"not-in\",\n value: any,\n}"]}