@thefittingroom/sdk 2.0.0-alpha-3 → 2.0.1
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/.env.tmp +25 -0
- package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/api/fetcher.d.ts +12 -0
- package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/api/fetcher.js +49 -0
- package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/api/fetcher.js.map +1 -0
- package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/api/requests.d.ts +155 -0
- package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/api/requests.js +3 -0
- package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/api/requests.js.map +1 -0
- package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/api/responses.d.ts +130 -0
- package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/api/responses.js +2 -0
- package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/api/responses.js.map +1 -0
- package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/api/shop.d.ts +33 -0
- package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/api/shop.js +261 -0
- package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/api/shop.js.map +1 -0
- package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/api/utils.d.ts +1 -0
- package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/api/utils.js +9 -0
- package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/api/utils.js.map +1 -0
- package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/firebase/firebase-error.d.ts +2 -0
- package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/firebase/firebase-error.js +10 -0
- package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/firebase/firebase-error.js.map +1 -0
- package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/firebase/firebase-user.d.ts +26 -0
- package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/firebase/firebase-user.js +122 -0
- package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/firebase/firebase-user.js.map +1 -0
- package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/firebase/firebase.d.ts +15 -0
- package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/firebase/firebase.js +40 -0
- package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/firebase/firebase.js.map +1 -0
- package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/helpers/async.d.ts +2 -0
- package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/helpers/async.js +3 -0
- package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/helpers/async.js.map +1 -0
- package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/helpers/config.d.ts +22 -0
- package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/helpers/config.js +70 -0
- package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/helpers/config.js.map +1 -0
- package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/helpers/date.d.ts +6 -0
- package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/helpers/date.js +5 -0
- package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/helpers/date.js.map +1 -0
- package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/helpers/errors.d.ts +32 -0
- package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/helpers/errors.js +47 -0
- package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/helpers/errors.js.map +1 -0
- package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/index.d.ts +8 -0
- package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/index.js +6 -0
- package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/index.js.map +1 -0
- package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/types/index.d.ts +89 -0
- package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/types/index.js +8 -0
- package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/types/index.js.map +1 -0
- package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/types/measurement.d.ts +292 -0
- package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/types/measurement.js +377 -0
- package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/types/measurement.js.map +1 -0
- package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/tsconfig.tsbuildinfo +1 -0
- package/LICENSE +373 -0
- package/README.md +67 -73
- package/dist/esm/firebase/firebase.d.ts +2 -2
- package/dist/esm/index.js +23044 -23183
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/index.min.js +366 -265
- package/dist/esm/index.min.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +16 -24
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
import { where } from 'firebase/firestore';
|
|
2
|
+
import { Firebase } from '../firebase/firebase';
|
|
3
|
+
import { getFirebaseError } from '../firebase/firebase-error';
|
|
4
|
+
import { asyncTry } from '../helpers/async';
|
|
5
|
+
import { Config } from '../helpers/config';
|
|
6
|
+
import * as Errors from '../helpers/errors';
|
|
7
|
+
import { Fetcher } from './fetcher';
|
|
8
|
+
import { testImage } from './utils';
|
|
9
|
+
export class TfrShop {
|
|
10
|
+
constructor(brandId, firebase) {
|
|
11
|
+
this.brandId = brandId;
|
|
12
|
+
this.firebase = firebase;
|
|
13
|
+
this.measurementLocations = new Map();
|
|
14
|
+
}
|
|
15
|
+
get user() {
|
|
16
|
+
return this.firebase.user;
|
|
17
|
+
}
|
|
18
|
+
get isLoggedIn() {
|
|
19
|
+
return !this.firebase || Boolean(this.user.id);
|
|
20
|
+
}
|
|
21
|
+
async onInit() {
|
|
22
|
+
await this.getMeasurementLocations();
|
|
23
|
+
return this.firebase.onInit(this.brandId);
|
|
24
|
+
}
|
|
25
|
+
async getRecommendedSizes(styleId) {
|
|
26
|
+
var _a, _b;
|
|
27
|
+
if (!this.isLoggedIn)
|
|
28
|
+
throw new Errors.UserNotLoggedInError();
|
|
29
|
+
try {
|
|
30
|
+
const res = await Fetcher.Get(this.user, `/styles/${styleId}/recommendation`);
|
|
31
|
+
const data = (await res.json());
|
|
32
|
+
if (!((_a = data === null || data === void 0 ? void 0 : data.fits) === null || _a === void 0 ? void 0 : _a.length) || !((_b = data === null || data === void 0 ? void 0 : data.recommended_size) === null || _b === void 0 ? void 0 : _b.id))
|
|
33
|
+
return null;
|
|
34
|
+
return data;
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
if ((error === null || error === void 0 ? void 0 : error.error) === Errors.AvatarNotCreated)
|
|
38
|
+
throw new Errors.AvatarNotCreatedError();
|
|
39
|
+
throw error;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
async submitTelephoneNumber(tel) {
|
|
43
|
+
const sanitizedTel = tel.replace(/[^\+0-9]/g, '');
|
|
44
|
+
const res = await Fetcher.Post(this.user, '/ios-app-link', { phone_number: sanitizedTel }, false);
|
|
45
|
+
console.log(res);
|
|
46
|
+
}
|
|
47
|
+
async getColorwaySizeAssetFromSku(colorwaySizeAssetSku) {
|
|
48
|
+
const assets = await this.getColorwaySizeAssets(null, [colorwaySizeAssetSku]);
|
|
49
|
+
if (!(assets === null || assets === void 0 ? void 0 : assets.size))
|
|
50
|
+
throw new Errors.NoColorwaySizeAssetsFoundError();
|
|
51
|
+
return Array.from(assets.values())[0];
|
|
52
|
+
}
|
|
53
|
+
async getColorwaySizeAssetFromBrandStyleId(brandStyleId) {
|
|
54
|
+
const assets = await this.getColorwaySizeAssets(brandStyleId);
|
|
55
|
+
if (!(assets === null || assets === void 0 ? void 0 : assets.size))
|
|
56
|
+
throw new Errors.NoColorwaySizeAssetsFoundError();
|
|
57
|
+
return Array.from(assets.values())[0];
|
|
58
|
+
}
|
|
59
|
+
async getMeasurementLocationsFromSku(sku, filledLocations = []) {
|
|
60
|
+
console.log({ sku });
|
|
61
|
+
const asset = await this.getColorwaySizeAssetFromSku(sku);
|
|
62
|
+
if (!asset)
|
|
63
|
+
throw new Error('No colorway size asset found for sku');
|
|
64
|
+
const styleCategory = await this.getStyle(asset.style_id);
|
|
65
|
+
if (!styleCategory)
|
|
66
|
+
throw new Error('Style category not found for style id');
|
|
67
|
+
const taxonomy = await this.getGetTaxonomy(styleCategory.style_garment_category_id);
|
|
68
|
+
if (!taxonomy)
|
|
69
|
+
throw new Error('Taxonomy not found for style garment category id');
|
|
70
|
+
const filteredLocations = !filledLocations.length
|
|
71
|
+
? taxonomy.measurement_locations.female
|
|
72
|
+
: taxonomy.measurement_locations.female.filter((location) => filledLocations.includes(location));
|
|
73
|
+
const locationsWithSortOrder = filteredLocations.map((location) => {
|
|
74
|
+
return this.measurementLocations.has(location)
|
|
75
|
+
? this.measurementLocations.get(location)
|
|
76
|
+
: { name: location, sort_order: Infinity };
|
|
77
|
+
});
|
|
78
|
+
return locationsWithSortOrder
|
|
79
|
+
.sort((a, b) => (a.sort_order < b.sort_order ? -1 : 0))
|
|
80
|
+
.map((location) => location.name);
|
|
81
|
+
}
|
|
82
|
+
async getMeasurementLocationsFromBrandStyleId(brandStyleId, filledLocations = []) {
|
|
83
|
+
const asset = await this.getColorwaySizeAssetFromBrandStyleId(brandStyleId);
|
|
84
|
+
if (!asset)
|
|
85
|
+
throw new Error('No colorway size asset found for brand style id');
|
|
86
|
+
const styleCategory = await this.getStyle(asset.style_id);
|
|
87
|
+
if (!styleCategory)
|
|
88
|
+
throw new Error('Style category not found for style id');
|
|
89
|
+
const taxonomy = await this.getGetTaxonomy(styleCategory.style_garment_category_id);
|
|
90
|
+
if (!taxonomy)
|
|
91
|
+
throw new Error('Taxonomy not found for style garment category id');
|
|
92
|
+
const filteredLocations = !filledLocations.length
|
|
93
|
+
? taxonomy.measurement_locations.female
|
|
94
|
+
: taxonomy.measurement_locations.female.filter((location) => filledLocations.includes(location));
|
|
95
|
+
const locationsWithSortOrder = filteredLocations.map((location) => {
|
|
96
|
+
return this.measurementLocations.has(location)
|
|
97
|
+
? this.measurementLocations.get(location)
|
|
98
|
+
: { name: location, sort_order: Infinity };
|
|
99
|
+
});
|
|
100
|
+
return locationsWithSortOrder
|
|
101
|
+
.sort((a, b) => (a.sort_order < b.sort_order ? -1 : 0))
|
|
102
|
+
.map((location) => location.name);
|
|
103
|
+
}
|
|
104
|
+
async getStyleByBrandStyleId(brandStyleId) {
|
|
105
|
+
var _a, _b;
|
|
106
|
+
try {
|
|
107
|
+
const constraints = [where('brand_id', '==', this.brandId)];
|
|
108
|
+
constraints.push(where('brand_style_id', '==', brandStyleId));
|
|
109
|
+
const querySnapshot = await this.firebase.getDocs('styles', constraints);
|
|
110
|
+
return (_b = (_a = querySnapshot.docs) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.data();
|
|
111
|
+
}
|
|
112
|
+
catch (error) {
|
|
113
|
+
return getFirebaseError(error);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
async getColorwaySizeAssets(styleId, skus) {
|
|
117
|
+
const constraints = [where('brand_id', '==', this.brandId)];
|
|
118
|
+
if (styleId)
|
|
119
|
+
constraints.push(where('style_id', '==', styleId));
|
|
120
|
+
if ((skus === null || skus === void 0 ? void 0 : skus.length) > 0)
|
|
121
|
+
constraints.push(where('sku', 'in', skus));
|
|
122
|
+
try {
|
|
123
|
+
const querySnapshot = await this.firebase.getDocs('colorway_size_assets', constraints);
|
|
124
|
+
const colorwaySizeAssets = new Map();
|
|
125
|
+
querySnapshot.forEach((doc) => {
|
|
126
|
+
const colorwaySizeAsset = doc.data();
|
|
127
|
+
colorwaySizeAssets.set(colorwaySizeAsset.id, colorwaySizeAsset);
|
|
128
|
+
});
|
|
129
|
+
return colorwaySizeAssets;
|
|
130
|
+
}
|
|
131
|
+
catch (error) {
|
|
132
|
+
return getFirebaseError(error);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
async getStyle(styleId) {
|
|
136
|
+
try {
|
|
137
|
+
const doc = await this.firebase.getDoc('styles', String(styleId));
|
|
138
|
+
return doc;
|
|
139
|
+
}
|
|
140
|
+
catch (error) {
|
|
141
|
+
return getFirebaseError(error);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
getMeasurementLocationName(location) {
|
|
145
|
+
return this.measurementLocations.has(location) ? this.measurementLocations.get(location).name : location;
|
|
146
|
+
}
|
|
147
|
+
getMeasurementLocationSortOrder(location) {
|
|
148
|
+
return this.measurementLocations.has(location) ? this.measurementLocations.get(location).sort_order : Infinity;
|
|
149
|
+
}
|
|
150
|
+
async tryOn(styleId, sizeId) {
|
|
151
|
+
if (!this.isLoggedIn)
|
|
152
|
+
throw new Errors.UserNotLoggedInError();
|
|
153
|
+
const colorwaySizeAssetSku = await this.getColorwaySizeAssetSkuFromStyleIdAndSizeId(styleId, sizeId);
|
|
154
|
+
try {
|
|
155
|
+
const frames = await this.getColorwaySizeAssetFrames(colorwaySizeAssetSku);
|
|
156
|
+
return frames;
|
|
157
|
+
}
|
|
158
|
+
catch (error) {
|
|
159
|
+
if (!(error instanceof Errors.NoFramesFoundError))
|
|
160
|
+
throw error;
|
|
161
|
+
return this.requestThenGetColorwaySizeAssetFrames(colorwaySizeAssetSku);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
async getColorwaySizeAssetSkuFromStyleIdAndSizeId(styleId, sizeId) {
|
|
165
|
+
var _a, _b, _c;
|
|
166
|
+
try {
|
|
167
|
+
const constraints = [where('brand_id', '==', this.brandId)];
|
|
168
|
+
constraints.push(where('style_id', '==', styleId));
|
|
169
|
+
constraints.push(where('size_id', '==', sizeId));
|
|
170
|
+
const querySnapshot = await this.firebase.getDocs('colorway_size_assets', constraints);
|
|
171
|
+
return (_c = (_b = (_a = querySnapshot.docs) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.data()) === null || _c === void 0 ? void 0 : _c.sku;
|
|
172
|
+
}
|
|
173
|
+
catch (error) {
|
|
174
|
+
return getFirebaseError(error);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
async getGetTaxonomy(styleId) {
|
|
178
|
+
try {
|
|
179
|
+
const doc = await this.firebase.getDoc('style_garment_categories', String(styleId));
|
|
180
|
+
return doc;
|
|
181
|
+
}
|
|
182
|
+
catch (error) {
|
|
183
|
+
return getFirebaseError(error);
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
async getMeasurementLocations() {
|
|
187
|
+
const locations = await this.fetchMeasurementLocations();
|
|
188
|
+
locations.forEach((location) => {
|
|
189
|
+
this.measurementLocations.set(location.name, { name: location.garment_label, sort_order: location.sort_order });
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
async fetchMeasurementLocations() {
|
|
193
|
+
try {
|
|
194
|
+
const docs = await this.firebase.getDocs('measurement_locations', []);
|
|
195
|
+
return docs.docs.map((doc) => doc.data());
|
|
196
|
+
}
|
|
197
|
+
catch (error) {
|
|
198
|
+
return getFirebaseError(error);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
async requestThenGetColorwaySizeAssetFrames(colorwaySizeAssetSku) {
|
|
202
|
+
const [error, colorwaySizeAsset] = await asyncTry(this.getColorwaySizeAssetFromSku(colorwaySizeAssetSku));
|
|
203
|
+
if (error)
|
|
204
|
+
throw error;
|
|
205
|
+
try {
|
|
206
|
+
try {
|
|
207
|
+
this.requestColorwaySizeAssetFrames(colorwaySizeAsset.id);
|
|
208
|
+
}
|
|
209
|
+
catch (_a) { }
|
|
210
|
+
return this.awaitColorwaySizeAssetFrames(colorwaySizeAssetSku);
|
|
211
|
+
}
|
|
212
|
+
catch (error) {
|
|
213
|
+
if ((error === null || error === void 0 ? void 0 : error.error) === Errors.AvatarNotCreated)
|
|
214
|
+
throw new Errors.AvatarNotCreatedError();
|
|
215
|
+
throw new Errors.NoStylesFoundError();
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
async awaitColorwaySizeAssetFrames(colorwaySizeAssetSKU) {
|
|
219
|
+
var _a, _b, _c, _d;
|
|
220
|
+
if (!this.isLoggedIn)
|
|
221
|
+
throw new Errors.UserNotLoggedInError();
|
|
222
|
+
const callback = async (data) => {
|
|
223
|
+
var _a, _b, _c, _d;
|
|
224
|
+
const frames = (_d = (_c = (_b = (_a = data.docs[0].data()) === null || _a === void 0 ? void 0 : _a.vto) === null || _b === void 0 ? void 0 : _b[this.brandId]) === null || _c === void 0 ? void 0 : _c[colorwaySizeAssetSKU]) === null || _d === void 0 ? void 0 : _d.frames;
|
|
225
|
+
if (!(frames === null || frames === void 0 ? void 0 : frames.length))
|
|
226
|
+
return false;
|
|
227
|
+
return testImage(frames[0]);
|
|
228
|
+
};
|
|
229
|
+
const userProfile = (await this.user.watchUserProfileForFrames(callback));
|
|
230
|
+
if (!((_d = (_c = (_b = (_a = userProfile === null || userProfile === void 0 ? void 0 : userProfile.vto) === null || _a === void 0 ? void 0 : _a[this.brandId]) === null || _b === void 0 ? void 0 : _b[colorwaySizeAssetSKU]) === null || _c === void 0 ? void 0 : _c.frames) === null || _d === void 0 ? void 0 : _d.length))
|
|
231
|
+
throw new Errors.NoFramesFoundError();
|
|
232
|
+
return userProfile.vto[this.brandId][colorwaySizeAssetSKU].frames;
|
|
233
|
+
}
|
|
234
|
+
async requestColorwaySizeAssetFrames(colorwaySizeAssetId) {
|
|
235
|
+
if (!this.isLoggedIn)
|
|
236
|
+
throw new Errors.UserNotLoggedInError();
|
|
237
|
+
if (!this.user.brandUserId)
|
|
238
|
+
throw new Errors.BrandUserIdNotSetError();
|
|
239
|
+
await Fetcher.Post(this.user, `/colorway-size-assets/${colorwaySizeAssetId}/frames`, {
|
|
240
|
+
brand_user_id: String(this.user.brandUserId),
|
|
241
|
+
});
|
|
242
|
+
}
|
|
243
|
+
async getColorwaySizeAssetFrames(colorwaySizeAssetSKU) {
|
|
244
|
+
var _a, _b, _c;
|
|
245
|
+
const userProfile = await this.user.getUserProfile();
|
|
246
|
+
const frames = ((_c = (_b = (_a = userProfile === null || userProfile === void 0 ? void 0 : userProfile.vto) === null || _a === void 0 ? void 0 : _a[this.brandId]) === null || _b === void 0 ? void 0 : _b[colorwaySizeAssetSKU]) === null || _c === void 0 ? void 0 : _c.frames) || [];
|
|
247
|
+
if (!frames.length)
|
|
248
|
+
throw new Errors.NoFramesFoundError();
|
|
249
|
+
const testedImage = await testImage(frames[0]);
|
|
250
|
+
if (!testedImage)
|
|
251
|
+
throw new Errors.NoFramesFoundError();
|
|
252
|
+
return frames;
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
export const initShop = (brandId, env = 'dev') => {
|
|
256
|
+
if (env === 'dev' || env === 'development')
|
|
257
|
+
console.warn('TfrShop is in development mode');
|
|
258
|
+
Config.getInstance().setEnv(env);
|
|
259
|
+
return new TfrShop(brandId, new Firebase());
|
|
260
|
+
};
|
|
261
|
+
//# sourceMappingURL=shop.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shop.js","sourceRoot":"","sources":["../../../src/api/shop.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const testImage: (url: string) => Promise<boolean>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/api/utils.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,GAAW,EAAoB,EAAE;IACzD,MAAM,GAAG,GAAG,IAAI,KAAK,EAAE,CAAA;IACvB,GAAG,CAAC,GAAG,GAAG,GAAG,CAAA;IAEb,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,GAAG,CAAC,OAAO,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QAClC,GAAG,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;IAClC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAA"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { AuthErrorCodes } from 'firebase/auth';
|
|
2
|
+
export const getFirebaseError = (e) => {
|
|
3
|
+
switch (e.code) {
|
|
4
|
+
case AuthErrorCodes.USER_DISABLED:
|
|
5
|
+
throw new Error('account has been disabled');
|
|
6
|
+
default:
|
|
7
|
+
throw new Error(e.message);
|
|
8
|
+
}
|
|
9
|
+
};
|
|
10
|
+
//# sourceMappingURL=firebase-error.js.map
|
package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/firebase/firebase-error.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"firebase-error.js","sourceRoot":"","sources":["../../../src/firebase/firebase-error.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAE9C,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,CAAgB,EAAE,EAAE;IACnD,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;QACf,KAAK,cAAc,CAAC,aAAa;YAC/B,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAA;QAC9C;YACE,MAAM,IAAI,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA;IAC9B,CAAC;AACH,CAAC,CAAA"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import * as firebase from 'firebase/app';
|
|
2
|
+
import * as firebaseAuth from 'firebase/auth';
|
|
3
|
+
import { DocumentData, Firestore, QuerySnapshot } from 'firebase/firestore';
|
|
4
|
+
import { FirestoreUser } from '../types';
|
|
5
|
+
export type BrandUserId = string | number;
|
|
6
|
+
export declare class FirebaseUser {
|
|
7
|
+
private readonly firestore;
|
|
8
|
+
brandUserId: BrandUserId;
|
|
9
|
+
private user;
|
|
10
|
+
private readonly auth;
|
|
11
|
+
constructor(firestore: Firestore, app: firebase.FirebaseApp);
|
|
12
|
+
get id(): string;
|
|
13
|
+
onInit(brandId: number): Promise<boolean>;
|
|
14
|
+
setUser(user: firebaseAuth.User): void;
|
|
15
|
+
logUserLogin(brandId: number, user: firebaseAuth.User): Promise<void>;
|
|
16
|
+
setBrandUserId(brandUserId: BrandUserId): void;
|
|
17
|
+
getToken(): Promise<string>;
|
|
18
|
+
get userId(): string;
|
|
19
|
+
getUserProfile(): Promise<DocumentData>;
|
|
20
|
+
watchUserProfileForChanges(callback: (data: FirestoreUser) => void): () => void;
|
|
21
|
+
watchUserProfileForFrames(predicate: (data: QuerySnapshot<DocumentData>) => Promise<boolean>): Promise<DocumentData>;
|
|
22
|
+
login(username: string, password: string): Promise<void>;
|
|
23
|
+
logout(): Promise<void>;
|
|
24
|
+
sendPasswordResetEmail(email: string): Promise<void>;
|
|
25
|
+
confirmPasswordReset(code: string, newPassword: string): Promise<void>;
|
|
26
|
+
}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import dayjs from 'dayjs/esm';
|
|
2
|
+
import * as firebaseAuth from 'firebase/auth';
|
|
3
|
+
import { collection, doc, documentId, getDoc, onSnapshot, query, setDoc, where, } from 'firebase/firestore';
|
|
4
|
+
import { fromFirebaseDate } from '../helpers/date';
|
|
5
|
+
import * as Errors from '../helpers/errors';
|
|
6
|
+
export class FirebaseUser {
|
|
7
|
+
constructor(firestore, app) {
|
|
8
|
+
this.firestore = firestore;
|
|
9
|
+
this.brandUserId = null;
|
|
10
|
+
this.auth = firebaseAuth.getAuth(app);
|
|
11
|
+
this.auth.setPersistence(firebaseAuth.browserLocalPersistence);
|
|
12
|
+
}
|
|
13
|
+
get id() {
|
|
14
|
+
var _a;
|
|
15
|
+
return (_a = this.user) === null || _a === void 0 ? void 0 : _a.uid;
|
|
16
|
+
}
|
|
17
|
+
async onInit(brandId) {
|
|
18
|
+
this.auth.onAuthStateChanged((user) => {
|
|
19
|
+
this.setUser(user);
|
|
20
|
+
if (!user)
|
|
21
|
+
return;
|
|
22
|
+
this.logUserLogin(brandId, user);
|
|
23
|
+
this.setBrandUserId(user.uid);
|
|
24
|
+
});
|
|
25
|
+
await this.auth.authStateReady();
|
|
26
|
+
const user = this.auth.currentUser;
|
|
27
|
+
this.setUser(user);
|
|
28
|
+
this.setBrandUserId(user === null || user === void 0 ? void 0 : user.uid);
|
|
29
|
+
return Boolean(user);
|
|
30
|
+
}
|
|
31
|
+
setUser(user) {
|
|
32
|
+
this.user = user;
|
|
33
|
+
}
|
|
34
|
+
async logUserLogin(brandId, user) {
|
|
35
|
+
var _a, _b, _c, _d, _e;
|
|
36
|
+
try {
|
|
37
|
+
const userLoggingDoc = doc(this.firestore, 'user_logging', user.uid);
|
|
38
|
+
const savedDoc = await getDoc(userLoggingDoc);
|
|
39
|
+
const lastLogin = new Date();
|
|
40
|
+
const savedData = savedDoc.exists ? savedDoc.data() : null;
|
|
41
|
+
const lastBrandLogin = (_b = (_a = savedData === null || savedData === void 0 ? void 0 : savedData.brands) === null || _a === void 0 ? void 0 : _a[brandId]) === null || _b === void 0 ? void 0 : _b.last_login;
|
|
42
|
+
if (lastBrandLogin && dayjs(lastLogin).diff(fromFirebaseDate(lastBrandLogin), 'seconds') <= 10080)
|
|
43
|
+
return;
|
|
44
|
+
const logins = (_e = (_d = (_c = savedData === null || savedData === void 0 ? void 0 : savedData.brands) === null || _c === void 0 ? void 0 : _c[brandId]) === null || _d === void 0 ? void 0 : _d.logins) !== null && _e !== void 0 ? _e : [];
|
|
45
|
+
logins.push(lastLogin);
|
|
46
|
+
const userLoggingData = {
|
|
47
|
+
brands: {
|
|
48
|
+
[brandId]: {
|
|
49
|
+
brand_id: brandId,
|
|
50
|
+
last_login: lastLogin,
|
|
51
|
+
logins,
|
|
52
|
+
},
|
|
53
|
+
},
|
|
54
|
+
last_brand_id: brandId,
|
|
55
|
+
created_at: !savedDoc.exists() ? lastLogin : savedDoc.data().created_at,
|
|
56
|
+
updated_at: lastLogin,
|
|
57
|
+
};
|
|
58
|
+
await setDoc(userLoggingDoc, userLoggingData, { merge: true });
|
|
59
|
+
}
|
|
60
|
+
catch (e) {
|
|
61
|
+
console.error('LOGGING ERROR:', e);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
setBrandUserId(brandUserId) {
|
|
65
|
+
this.brandUserId = brandUserId;
|
|
66
|
+
}
|
|
67
|
+
async getToken() {
|
|
68
|
+
var _a;
|
|
69
|
+
if (!((_a = this.user) === null || _a === void 0 ? void 0 : _a.uid))
|
|
70
|
+
throw new Errors.UserNotLoggedInError();
|
|
71
|
+
const token = await this.user.getIdToken();
|
|
72
|
+
return token;
|
|
73
|
+
}
|
|
74
|
+
get userId() {
|
|
75
|
+
var _a;
|
|
76
|
+
if (!((_a = this.user) === null || _a === void 0 ? void 0 : _a.uid))
|
|
77
|
+
throw new Errors.UserNotLoggedInError();
|
|
78
|
+
return this.user.uid;
|
|
79
|
+
}
|
|
80
|
+
async getUserProfile() {
|
|
81
|
+
var _a;
|
|
82
|
+
if (!((_a = this.user) === null || _a === void 0 ? void 0 : _a.uid))
|
|
83
|
+
throw new Errors.UserNotLoggedInError();
|
|
84
|
+
const userProfile = await getDoc(doc(this.firestore, 'users', this.id));
|
|
85
|
+
return userProfile.data();
|
|
86
|
+
}
|
|
87
|
+
watchUserProfileForChanges(callback) {
|
|
88
|
+
let unsub;
|
|
89
|
+
const q = query(collection(this.firestore, 'users'), where(documentId(), '==', this.id));
|
|
90
|
+
unsub = onSnapshot(q, (snapshot) => callback(snapshot.docs[0].data()));
|
|
91
|
+
return () => unsub();
|
|
92
|
+
}
|
|
93
|
+
watchUserProfileForFrames(predicate) {
|
|
94
|
+
let unsub;
|
|
95
|
+
const q = query(collection(this.firestore, 'users'), where(documentId(), '==', this.id));
|
|
96
|
+
return new Promise((resolve) => {
|
|
97
|
+
unsub = onSnapshot(q, async (snapshot) => {
|
|
98
|
+
if (!(await predicate(snapshot)))
|
|
99
|
+
return;
|
|
100
|
+
unsub();
|
|
101
|
+
resolve(snapshot.docs[0].data());
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
async login(username, password) {
|
|
106
|
+
if (this.auth.currentUser)
|
|
107
|
+
await this.auth.signOut();
|
|
108
|
+
const user = await firebaseAuth.signInWithEmailAndPassword(this.auth, username, password);
|
|
109
|
+
this.setUser(user.user);
|
|
110
|
+
}
|
|
111
|
+
async logout() {
|
|
112
|
+
await this.auth.signOut();
|
|
113
|
+
this.setUser(null);
|
|
114
|
+
}
|
|
115
|
+
async sendPasswordResetEmail(email) {
|
|
116
|
+
await firebaseAuth.sendPasswordResetEmail(this.auth, email);
|
|
117
|
+
}
|
|
118
|
+
async confirmPasswordReset(code, newPassword) {
|
|
119
|
+
await firebaseAuth.confirmPasswordReset(this.auth, code, newPassword);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=firebase-user.js.map
|
package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/firebase/firebase-user.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"firebase-user.js","sourceRoot":"","sources":["../../../src/firebase/firebase-user.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { DocumentData, Firestore, QueryFieldFilterConstraint, QuerySnapshot } from 'firebase/firestore';
|
|
2
|
+
import { FirebaseUser } from './firebase-user';
|
|
3
|
+
export declare class Firebase {
|
|
4
|
+
user: FirebaseUser;
|
|
5
|
+
readonly firestore: Firestore;
|
|
6
|
+
constructor();
|
|
7
|
+
onInit(brandId: number): Promise<boolean>;
|
|
8
|
+
query(collectionName: string, constraint: QueryFieldFilterConstraint, unsubscribeWhenData?: boolean): {
|
|
9
|
+
promise: Promise<QuerySnapshot<DocumentData, DocumentData>>;
|
|
10
|
+
unsubscribe: () => void;
|
|
11
|
+
};
|
|
12
|
+
getDocs(collectionName: string, constraints: QueryFieldFilterConstraint[]): Promise<QuerySnapshot<DocumentData, DocumentData>>;
|
|
13
|
+
getDoc(collectionName: string, id: string): Promise<DocumentData>;
|
|
14
|
+
private promisefyOnSnapshot;
|
|
15
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import * as firebase from 'firebase/app';
|
|
2
|
+
import { collection, doc, getDoc, getDocs, getFirestore, onSnapshot, query, } from 'firebase/firestore';
|
|
3
|
+
import { Config } from '../helpers/config';
|
|
4
|
+
import { FirebaseUser } from './firebase-user';
|
|
5
|
+
export class Firebase {
|
|
6
|
+
constructor() {
|
|
7
|
+
this.promisefyOnSnapshot = (q, unsubscribeWhenData) => {
|
|
8
|
+
let unsub;
|
|
9
|
+
const promise = new Promise((resolve) => {
|
|
10
|
+
unsub = onSnapshot(q, (snapshot) => {
|
|
11
|
+
resolve(snapshot);
|
|
12
|
+
if (unsubscribeWhenData)
|
|
13
|
+
unsub();
|
|
14
|
+
});
|
|
15
|
+
});
|
|
16
|
+
return { promise, unsubscribe: () => unsub() };
|
|
17
|
+
};
|
|
18
|
+
const firebaseKeys = Config.getInstance().firebase;
|
|
19
|
+
const firebaseApp = firebase.initializeApp(firebaseKeys);
|
|
20
|
+
this.firestore = getFirestore(firebaseApp);
|
|
21
|
+
this.user = new FirebaseUser(this.firestore, firebaseApp);
|
|
22
|
+
}
|
|
23
|
+
onInit(brandId) {
|
|
24
|
+
return this.user.onInit(brandId);
|
|
25
|
+
}
|
|
26
|
+
query(collectionName, constraint, unsubscribeWhenData = true) {
|
|
27
|
+
const q = query(collection(this.firestore, collectionName), constraint);
|
|
28
|
+
return this.promisefyOnSnapshot(q, unsubscribeWhenData);
|
|
29
|
+
}
|
|
30
|
+
getDocs(collectionName, constraints) {
|
|
31
|
+
const q = query(collection(this.firestore, collectionName), ...constraints);
|
|
32
|
+
return getDocs(q);
|
|
33
|
+
}
|
|
34
|
+
async getDoc(collectionName, id) {
|
|
35
|
+
const docRef = doc(this.firestore, collectionName, id);
|
|
36
|
+
const docSnap = await getDoc(docRef);
|
|
37
|
+
return docSnap.exists() ? docSnap.data() : null;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=firebase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"firebase.js","sourceRoot":"","sources":["../../../src/firebase/firebase.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,cAAc,CAAA;AACxC,OAAO,EAOL,UAAU,EACV,GAAG,EACH,MAAM,EACN,OAAO,EACP,YAAY,EACZ,UAAU,EACV,KAAK,GACN,MAAM,oBAAoB,CAAA;AAE3B,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAE9C,MAAM,OAAO,QAAQ;IAKnB;QA+BQ,wBAAmB,GAAG,CAAC,CAAsB,EAAE,mBAA4B,EAAE,EAAE;YACrF,IAAI,KAAkB,CAAA;YAEtB,MAAM,OAAO,GAAG,IAAI,OAAO,CAA8B,CAAC,OAAO,EAAE,EAAE;gBACnE,KAAK,GAAG,UAAU,CAAC,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE;oBACjC,OAAO,CAAC,QAAQ,CAAC,CAAA;oBACjB,IAAI,mBAAmB;wBAAE,KAAK,EAAE,CAAA;gBAClC,CAAC,CAAC,CAAA;YACJ,CAAC,CAAC,CAAA;YAEF,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,EAAE,CAAA;QAChD,CAAC,CAAA;QAzCC,MAAM,YAAY,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAA;QAClD,MAAM,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,YAAY,CAAC,CAAA;QAExD,IAAI,CAAC,SAAS,GAAG,YAAY,CAAC,WAAW,CAAC,CAAA;QAC1C,IAAI,CAAC,IAAI,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAA;IAC3D,CAAC;IAEM,MAAM,CAAC,OAAe;QAC3B,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;IAClC,CAAC;IAEM,KAAK,CAAC,cAAsB,EAAE,UAAsC,EAAE,sBAA+B,IAAI;QAC9G,MAAM,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,EAAE,UAAU,CAAC,CAAA;QAEvE,OAAO,IAAI,CAAC,mBAAmB,CAAC,CAAC,EAAE,mBAAmB,CAAC,CAAA;IACzD,CAAC;IAEM,OAAO,CAAC,cAAsB,EAAE,WAAyC;QAC9E,MAAM,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,EAAE,GAAG,WAAW,CAAC,CAAA;QAE3E,OAAO,OAAO,CAAC,CAAC,CAAC,CAAA;IACnB,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,cAAsB,EAAE,EAAU;QACpD,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,EAAE,EAAE,CAAC,CAAA;QACtD,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAA;QAEpC,OAAO,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;IACjD,CAAC;CAcF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"async.js","sourceRoot":"","sources":["../../../src/helpers/async.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAI,OAAmB,EAAE,EAAE,CACjD,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,CAAe,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAY,CAAC,CAAA;AAEzF,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,EAAU,EAAE,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export declare class Config {
|
|
2
|
+
private static instance;
|
|
3
|
+
private env;
|
|
4
|
+
private constructor();
|
|
5
|
+
static getInstance(): Config;
|
|
6
|
+
setEnv(env: string): void;
|
|
7
|
+
get firebase(): {
|
|
8
|
+
apiKey: string;
|
|
9
|
+
authDomain: string;
|
|
10
|
+
projectId: string;
|
|
11
|
+
storageBucket: string;
|
|
12
|
+
messagingSenderId: string;
|
|
13
|
+
appId: string;
|
|
14
|
+
};
|
|
15
|
+
get api(): {
|
|
16
|
+
url: string;
|
|
17
|
+
};
|
|
18
|
+
get config(): {
|
|
19
|
+
avatarTimeout: number;
|
|
20
|
+
vtoTimeout: number;
|
|
21
|
+
};
|
|
22
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
export class Config {
|
|
2
|
+
constructor() { }
|
|
3
|
+
static getInstance() {
|
|
4
|
+
if (!Config.instance)
|
|
5
|
+
Config.instance = new Config();
|
|
6
|
+
return Config.instance;
|
|
7
|
+
}
|
|
8
|
+
setEnv(env) {
|
|
9
|
+
switch (env) {
|
|
10
|
+
case 'production':
|
|
11
|
+
case 'prod':
|
|
12
|
+
this.env = 'prod';
|
|
13
|
+
break;
|
|
14
|
+
case 'development':
|
|
15
|
+
case 'dev':
|
|
16
|
+
default:
|
|
17
|
+
this.env = 'dev';
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
get firebase() {
|
|
21
|
+
if (this.env === 'prod')
|
|
22
|
+
return prodKeys.firebase;
|
|
23
|
+
return devKeys.firebase;
|
|
24
|
+
}
|
|
25
|
+
get api() {
|
|
26
|
+
if (this.env === 'prod')
|
|
27
|
+
return prodKeys.api;
|
|
28
|
+
return devKeys.api;
|
|
29
|
+
}
|
|
30
|
+
get config() {
|
|
31
|
+
if (this.env === 'prod')
|
|
32
|
+
return prodKeys.config;
|
|
33
|
+
return devKeys.config;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
const devKeys = {
|
|
37
|
+
firebase: {
|
|
38
|
+
apiKey: process.env.DEV_FIREBASE_API_KEY,
|
|
39
|
+
authDomain: process.env.DEV_FIREBASE_AUTH_DOMAIN,
|
|
40
|
+
projectId: process.env.DEV_FIREBASE_PROJECT_ID,
|
|
41
|
+
storageBucket: process.env.DEV_FIREBASE_STORAGE_BUCKET,
|
|
42
|
+
messagingSenderId: process.env.DEV_FIREBASE_MESSAGING_SENDER_ID,
|
|
43
|
+
appId: process.env.DEV_FIREBASE_APP_ID,
|
|
44
|
+
},
|
|
45
|
+
api: {
|
|
46
|
+
url: process.env.DEV_API_ENDPOINT,
|
|
47
|
+
},
|
|
48
|
+
config: {
|
|
49
|
+
avatarTimeout: Number(process.env.DEV_AVATAR_TIMEOUT_MS),
|
|
50
|
+
vtoTimeout: Number(process.env.DEV_VTO_TIMEOUT_MS),
|
|
51
|
+
},
|
|
52
|
+
};
|
|
53
|
+
const prodKeys = {
|
|
54
|
+
firebase: {
|
|
55
|
+
apiKey: process.env.PROD_FIREBASE_API_KEY,
|
|
56
|
+
authDomain: process.env.PROD_FIREBASE_AUTH_DOMAIN,
|
|
57
|
+
projectId: process.env.PROD_FIREBASE_PROJECT_ID,
|
|
58
|
+
storageBucket: process.env.PROD_FIREBASE_STORAGE_BUCKET,
|
|
59
|
+
messagingSenderId: process.env.PROD_FIREBASE_MESSAGING_SENDER_ID,
|
|
60
|
+
appId: process.env.PROD_FIREBASE_APP_ID,
|
|
61
|
+
},
|
|
62
|
+
api: {
|
|
63
|
+
url: process.env.PROD_API_ENDPOINT,
|
|
64
|
+
},
|
|
65
|
+
config: {
|
|
66
|
+
avatarTimeout: Number(process.env.PROD_AVATAR_TIMEOUT_MS),
|
|
67
|
+
vtoTimeout: Number(process.env.PROD_VTO_TIMEOUT_MS),
|
|
68
|
+
},
|
|
69
|
+
};
|
|
70
|
+
//# sourceMappingURL=config.js.map
|