@progressive-development/pd-spa-helper 0.3.34 → 0.3.36

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.
@@ -71,8 +71,8 @@ export declare abstract class PdSpaHelper extends PdSpaHelper_base {
71
71
  activateLoginHandler(): void;
72
72
  render(): TemplateResult<1>;
73
73
  private _getMainClass;
74
- _renderMenu(pageConfig: NavigationPage, hideTeaser: boolean): "" | TemplateResult<1>;
75
- _renderTopMenu(pageConfig: NavigationPage, hideTeaser: boolean): "" | TemplateResult<1>;
74
+ _renderMenu(pageConfig: NavigationPage, hideTeaser: boolean): TemplateResult<1> | "";
75
+ _renderTopMenu(pageConfig: NavigationPage, hideTeaser: boolean): TemplateResult<1> | "";
76
76
  _renderTeaser(): TemplateResult | string;
77
77
  _renderFooter(): TemplateResult<1>;
78
78
  protected abstract _getTeaserContent(): Array<TemplateResult>;
@@ -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, 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, 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,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 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"]}
@@ -10,3 +10,10 @@ export declare const initFirestorage: (app: FirebaseApp, defaultStorage?: string
10
10
  export declare const uploadFirestorageFile: (file: UploadFile) => Promise<UploadResult>;
11
11
  export declare const getFirestorageFileList: (storageName: string, refKey: string, subFolder?: string, includeMetaData?: boolean) => Promise<StorageDocument[]>;
12
12
  export declare const downloadFileFirestorage: (file: StorageDocument) => Promise<string>;
13
+ /**
14
+ * Löscht eine Datei in Firebase Storage basierend auf den Informationen im StorageDocument.
15
+ *
16
+ * @param deleteFile - Das StorageDocument-Objekt, das die zu löschende Datei beschreibt.
17
+ * @returns Ein Promise, das erfüllt wird, wenn die Datei gelöscht wurde, oder abgelehnt wird, wenn ein Fehler auftritt.
18
+ */
19
+ 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);
@@ -73,11 +74,12 @@ export const uploadFirestorageFile = (file) => {
73
74
  const fetchItemsAndFolders = async (usedRef, storageName, refKey, includeMetaData = false, includeFolder = false) => {
74
75
  try {
75
76
  const itemRefs = [];
77
+ const metaPromises = [];
76
78
  // Hole alle Items und Folder direkt unter `usedRef`
77
79
  const res = await listAll(usedRef);
78
80
  // Hilfsfunktion zur Verarbeitung der Metadaten
79
81
  const processMetadata = (item, metadata) => {
80
- var _a, _b, _c;
82
+ var _a, _b, _c, _d;
81
83
  return ({
82
84
  ...item,
83
85
  creation: new Date(metadata.timeCreated),
@@ -86,6 +88,7 @@ const fetchItemsAndFolders = async (usedRef, storageName, refKey, includeMetaDat
86
88
  descriptionName: (_b = metadata.customMetadata) === null || _b === void 0 ? void 0 : _b.name,
87
89
  description: (_c = metadata.customMetadata) === null || _c === void 0 ? void 0 : _c.comment,
88
90
  size: metadata.size,
91
+ readonly: ((_d = metadata.customMetadata) === null || _d === void 0 ? void 0 : _d.readonly) === "true",
89
92
  metaData: metadata
90
93
  });
91
94
  };
@@ -97,27 +100,33 @@ const fetchItemsAndFolders = async (usedRef, storageName, refKey, includeMetaDat
97
100
  storageName,
98
101
  refKey
99
102
  });
103
+ // Erzeuge die Metadaten-Promises direkt, wenn `includeMetaData` aktiv ist
104
+ if (includeMetaData) {
105
+ metaPromises.push(getMetadata(itemRef));
106
+ }
100
107
  });
101
108
  // 2. Verarbeite alle Ordner direkt unter usedRef, falls includeFolder gesetzt ist
102
- const folderPromises = includeFolder ? res.prefixes.map(async (folderRef) => {
103
- const folderRes = await listAll(folderRef);
104
- folderRes.items.forEach((subItemRef) => {
105
- itemRefs.push({
106
- fileName: subItemRef.name,
107
- filePath: subItemRef.fullPath,
108
- storageName,
109
- refKey,
110
- subFolderName: folderRef.name
109
+ if (includeFolder) {
110
+ await Promise.all(res.prefixes.map(async (folderRef) => {
111
+ const folderRes = await listAll(folderRef);
112
+ folderRes.items.forEach((subItemRef) => {
113
+ itemRefs.push({
114
+ fileName: subItemRef.name,
115
+ filePath: subItemRef.fullPath,
116
+ storageName,
117
+ refKey,
118
+ subFolderName: folderRef.name
119
+ });
120
+ // Erzeuge Metadaten-Promises für die Ordner-Inhalte, wenn `includeMetaData` aktiv ist
121
+ if (includeMetaData) {
122
+ metaPromises.push(getMetadata(subItemRef));
123
+ }
111
124
  });
112
- });
113
- }) : [];
114
- // 3. Warten bis alle Ordnerinhalte geladen sind
115
- await Promise.all(folderPromises);
116
- // 4. Falls includeMetaData gesetzt ist, lade alle Meta-Daten parallel
125
+ }));
126
+ }
127
+ // 3. Falls `includeMetaData`, warte auf alle Metadaten und ordne sie den `itemRefs` zu
117
128
  if (includeMetaData) {
118
- const metaPromises = itemRefs.map((item) => getMetadata({ fullPath: item.filePath }));
119
129
  const metaResults = await Promise.all(metaPromises);
120
- // Weisen die Metadaten den Items zu
121
130
  return itemRefs.map((item, index) => processMetadata(item, metaResults[index]));
122
131
  }
123
132
  return itemRefs; // Rückgabe ohne Metadaten, falls nicht angefordert
@@ -159,6 +168,33 @@ export const downloadFileFirestorage = (file) => {
159
168
  const usedRef = ref(storageConf.storage, file.filePath);
160
169
  return getDownloadURL(usedRef);
161
170
  };
171
+ /**
172
+ * Löscht eine Datei in Firebase Storage basierend auf den Informationen im StorageDocument.
173
+ *
174
+ * @param deleteFile - Das StorageDocument-Objekt, das die zu löschende Datei beschreibt.
175
+ * @returns Ein Promise, das erfüllt wird, wenn die Datei gelöscht wurde, oder abgelehnt wird, wenn ein Fehler auftritt.
176
+ */
177
+ export async function deleteFirestorageDocument(deleteFile) {
178
+ if (!deleteFile.filePath) {
179
+ throw new Error("File path is required to delete a document.");
180
+ }
181
+ // Hole die Storage-Konfiguration basierend auf dem storageName
182
+ const storageConf = storageMap.get(deleteFile.storageName);
183
+ if (!storageConf) {
184
+ throw new Error(`Invalid storage name: ${deleteFile.storageName}`);
185
+ }
186
+ // Erstelle eine Referenz zur Datei in Firebase Storage
187
+ const deleteRef = ref(storageConf.storage, deleteFile.filePath);
188
+ try {
189
+ // Lösche die Datei
190
+ await deleteObject(deleteRef);
191
+ console.log(`File ${deleteFile.fileName} successfully deleted.`);
192
+ }
193
+ catch (error) {
194
+ console.error("Error deleting file:", error);
195
+ throw error;
196
+ }
197
+ }
162
198
  /* Firestorage Error List: https://firebase.google.com/docs/storage/web/handle-errors */
163
199
  /*
164
200
  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 \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\n // 2. Verarbeite alle Ordner direkt unter usedRef, falls includeFolder gesetzt ist\n const folderPromises = includeFolder ? 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 }) : [];\n\n // 3. Warten bis alle Ordnerinhalte geladen sind\n await Promise.all(folderPromises);\n\n // 4. Falls includeMetaData gesetzt ist, lade alle Meta-Daten parallel\n if (includeMetaData) {\n const metaPromises = itemRefs.map((item) => getMetadata({ fullPath: item.filePath } as StorageReference));\n const metaResults = await Promise.all(metaPromises);\n \n // Weisen die Metadaten den Items zu\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":"AACA,OAAO,EAA6E,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAGhM,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAEtD,MAAM,eAAe,GAAG,iBAAiB,CAAC;AAE1C,MAAM,UAAU,GAMX,IAAI,GAAG,EAAE,CAAC;AAEf;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,GAAgB,EAChB,cAAuB,EACvB,aAAiC,EACjC,EAAE;IACF,IAAI;QAEF,sBAAsB;QACtB,IAAI,cAAc,EAAE;YAClB,UAAU,CAAC,GAAG,CAAC,eAAe,EAAE;gBAC9B,OAAO,EAAE,UAAU,CAAC,GAAG,CAAC;aACzB,CAAC,CAAC;SACJ;QAED,wBAAwB;QACxB,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE;YAE3C,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;YAClD,MAAM,cAAc,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC;YAEpC,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE;gBAC/B,OAAO;gBACP,UAAU,EAAE;oBACV;wBACE,GAAG,EAAE,MAAM;wBACX,UAAU,EAAE,cAAc;qBAC3B;oBACD,GAAG,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;wBAChD,GAAG,EAAE,eAAe;wBACpB,UAAU,EAAE,GAAG,CAAC,cAAc,EAAE,eAAe,CAAC;qBACjD,CAAC,CAAC;iBACJ;aACF,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;KAEJ;IAAC,OAAO,KAAK,EAAE;QACd,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;KACtB;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,IAAgB,EAAwB,EAAE;;IAE9E,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,IAAI,KAAK,CAAC,EAAE;QACxC,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;KAC7C;IAED,cAAc;IACd,MAAM,EAAC,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,QAAQ,EAAC,GAAG,IAAI,CAAC;IAClE,MAAM,WAAW,GAAG,UAAU,CAAC,GAAG,CAAC,WAAW,IAAI,eAAe,CAAC,CAAC;IACnE,IAAI,CAAC,WAAW,EAAG;QACjB,MAAM,IAAI,KAAK,CAAC,yBAAyB,WAAW,IAAI,eAAe,EAAE,CAAC,CAAC;KAC5E;IACD,IAAI,CAAC,WAAW,CAAC,UAAU,IAAI,WAAW,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;QAClE,MAAM,IAAI,KAAK,CAAC,yCAAyC,WAAW,IAAI,eAAe,EAAE,CAAC,CAAC;KAC5F;IAED,wBAAwB;IACxB,MAAM,aAAa,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,GAAG,KAAK,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IACjJ,IAAI,CAAC,aAAa,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE;QAC/C,MAAM,IAAI,KAAK,CAAC,+BAA+B,YAAY,EAAE,CAAC,CAAC;KAChE;IAED,mCAAmC;IACnC,MAAM,OAAO,GAAG,GAAG,CAAC,aAAa,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,aAAa,IAAI,QAAQ,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAEzG,oEAAoE;IAEpE,6BAA6B;IAC7B,MAAM,QAAQ,GAAG;QACf,cAAc,EAAE;YACd,SAAS,EAAE,MAAC,OAAO,EAAU,0CAAE,WAAW;YAC1C,SAAS,EAAE,IAAI,CAAC,WAAW;YAC3B,MAAM,EAAE,IAAI,CAAC,eAAe;YAC5B,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;SAC7C;KACF,CAAC;IAEF,OAAO,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;AACzE,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,KAAK,EAChC,OAAyB,EACzB,WAAmB,EACnB,MAAc,EACd,eAAe,GAAG,KAAK,EACvB,aAAa,GAAG,KAAK,EACO,EAAE;IAC9B,IAAI;QACF,MAAM,QAAQ,GAAsB,EAAE,CAAC;QACvC,MAAM,YAAY,GAA4B,EAAE,CAAC;QAEjD,oDAAoD;QACpD,MAAM,GAAG,GAAe,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;QAE/C,+CAA+C;QAC/C,MAAM,eAAe,GAAG,CAAC,IAAqB,EAAE,QAAsB,EAAmB,EAAE;;YAAC,OAAA,CAAC;gBAC3F,GAAG,IAAI;gBACP,QAAQ,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;gBACxC,YAAY,EAAE,QAAQ,CAAC,WAAW;gBAClC,OAAO,EAAE,MAAA,QAAQ,CAAC,cAAc,0CAAE,OAAO;gBACzC,eAAe,EAAE,MAAA,QAAQ,CAAC,cAAc,0CAAE,IAAI;gBAC9C,WAAW,EAAE,MAAA,QAAQ,CAAC,cAAc,0CAAE,OAAO;gBAC7C,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,QAAQ,EAAE,CAAA,MAAA,QAAQ,CAAC,cAAc,0CAAE,QAAQ,MAAK,MAAM;gBACtD,QAAQ,EAAE,QAAQ;aACnB,CAAC,CAAA;SAAA,CAAC;QAEH,gDAAgD;QAChD,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC5B,QAAQ,CAAC,IAAI,CAAC;gBACZ,QAAQ,EAAE,OAAO,CAAC,IAAI;gBACtB,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,WAAW;gBACX,MAAM;aACP,CAAC,CAAC;YAEH,0EAA0E;YAC1E,IAAI,eAAe,EAAE;gBACnB,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;aACzC;QACH,CAAC,CAAC,CAAC;QAEF,kFAAkF;QAClF,IAAI,aAAa,EAAE;YAClB,MAAM,OAAO,CAAC,GAAG,CACf,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE;gBACnC,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,CAAC;gBAC3C,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,EAAE;oBACrC,QAAQ,CAAC,IAAI,CAAC;wBACZ,QAAQ,EAAE,UAAU,CAAC,IAAI;wBACzB,QAAQ,EAAE,UAAU,CAAC,QAAQ;wBAC7B,WAAW;wBACX,MAAM;wBACN,aAAa,EAAE,SAAS,CAAC,IAAI;qBAC9B,CAAC,CAAC;oBAEH,sFAAsF;oBACtF,IAAI,eAAe,EAAE;wBACnB,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC;qBAC5C;gBACH,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CACH,CAAC;SACH;QAEA,uFAAuF;QACvF,IAAI,eAAe,EAAE;YACpB,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YACpD,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,eAAe,CAAC,IAAI,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SACjF;QAED,OAAO,QAAQ,CAAC,CAAE,mDAAmD;KACtE;IAAC,OAAO,KAAK,EAAE;QACd,OAAO,CAAC,KAAK,CAAC,uCAAuC,EAAE,KAAK,CAAC,CAAC;QAC9D,MAAM,KAAK,CAAC;KACb;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,WAAmB,EACnB,MAAc,EACd,SAAkB,EAClB,eAAyB,EACE,EAAE;IAE7B,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,IAAI,KAAK,CAAC,EAAE;QACxC,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;KAC7C;IAED,gBAAgB;IAChB,MAAM,WAAW,GAAG,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAChD,IAAI,CAAC,WAAW,EAAG;QACjB,MAAM,IAAI,KAAK,CAAC,yBAAyB,WAAW,EAAE,CAAC,CAAC;KACzD;IACD,IAAI,CAAC,WAAW,CAAC,UAAU,IAAI,WAAW,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;QAClE,MAAM,IAAI,KAAK,CAAC,yCAAyC,WAAW,IAAI,eAAe,EAAE,CAAC,CAAC;KAC5F;IAED,eAAe;IACf,MAAM,UAAU,GAAG,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACnF,IAAI,CAAC,UAAU,EAAE;QACf,MAAM,IAAI,KAAK,CAAC,uCAAuC,WAAW,IAAI,eAAe,aAAa,MAAM,EAAE,CAAC,CAAC;KAC7G;IAED,MAAM,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC;IAC1F,OAAO,oBAAoB,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,eAAe,EAAE,IAAI,CAAC,CAAC;AACnF,CAAC,CAAC;AAGF,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,IAAqB,EAAE,EAAE;IAE/D,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,IAAI,KAAK,CAAC,EAAE;QACxC,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;KAC7C;IAED,gBAAgB;IAChB,MAAM,WAAW,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACrD,IAAI,CAAC,WAAW,EAAG;QACjB,MAAM,IAAI,KAAK,CAAC,yBAAyB,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;KAC9D;IACD,MAAM,OAAO,GAAG,GAAG,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxD,OAAO,cAAc,CAAC,OAAO,CAAC,CAAC;AACjC,CAAC,CAAA;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAAC,UAA2B;IACzE,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE;QACxB,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;KAChE;IAED,+DAA+D;IAC/D,MAAM,WAAW,GAAG,UAAU,CAAC,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IAC3D,IAAI,CAAC,WAAW,EAAE;QAChB,MAAM,IAAI,KAAK,CAAC,yBAAyB,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;KACpE;IAED,uDAAuD;IACvD,MAAM,SAAS,GAAG,GAAG,CAAC,WAAW,CAAC,OAAO,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;IAEhE,IAAI;QACF,mBAAmB;QACnB,MAAM,YAAY,CAAC,SAAS,CAAC,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,QAAQ,UAAU,CAAC,QAAQ,wBAAwB,CAAC,CAAC;KAClE;IAAC,OAAO,KAAK,EAAE;QACd,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAC;QAC7C,MAAM,KAAK,CAAC;KACb;AACH,CAAC;AAGD,wFAAwF;AACxF;;;;;;;;;;;;;;;;;EAiBE","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\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*/"]}
@@ -12,4 +12,5 @@ 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
14
  export declare const downloadFile: (file: StorageDocument) => Promise<unknown>;
15
+ export declare const deleteFile: (file: StorageDocument) => Promise<unknown>;
15
16
  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, 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;
@@ -164,6 +164,12 @@ export const downloadFile = (file) => {
164
164
  }
165
165
  return throwUndefinedProviderError();
166
166
  };
167
+ export const deleteFile = (file) => {
168
+ if (provider === "firebase") {
169
+ return deleteFirestorageDocument(file);
170
+ }
171
+ return throwUndefinedProviderError();
172
+ };
167
173
  /* #########################################
168
174
  * Remote Database Implementation
169
175
  * ######################################### */
@@ -1 +1 @@
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 { 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, 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\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}"]}