@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.
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.js +1 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/service-provider/firebase/firestorage-client.d.ts +8 -0
- package/dist/src/service-provider/firebase/firestorage-client.js +73 -2
- package/dist/src/service-provider/firebase/firestorage-client.js.map +1 -1
- package/dist/src/service-provider/service-provider-impl.d.ts +2 -0
- package/dist/src/service-provider/service-provider-impl.js +13 -1
- package/dist/src/service-provider/service-provider-impl.js.map +1 -1
- package/dist/src/service-provider/service-provider-model.d.ts +2 -0
- package/dist/src/service-provider/service-provider-model.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/index.ts +2 -0
- package/src/service-provider/firebase/firestorage-client.ts +85 -1
- package/src/service-provider/service-provider-impl.ts +22 -1
- package/src/service-provider/service-provider-model.ts +2 -0
package/dist/src/index.d.ts
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, 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';
|
package/dist/src/index.js.map
CHANGED
|
@@ -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":"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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, 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}"]}
|