@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.
Files changed (56) hide show
  1. package/.env.tmp +25 -0
  2. package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/api/fetcher.d.ts +12 -0
  3. package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/api/fetcher.js +49 -0
  4. package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/api/fetcher.js.map +1 -0
  5. package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/api/requests.d.ts +155 -0
  6. package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/api/requests.js +3 -0
  7. package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/api/requests.js.map +1 -0
  8. package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/api/responses.d.ts +130 -0
  9. package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/api/responses.js +2 -0
  10. package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/api/responses.js.map +1 -0
  11. package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/api/shop.d.ts +33 -0
  12. package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/api/shop.js +261 -0
  13. package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/api/shop.js.map +1 -0
  14. package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/api/utils.d.ts +1 -0
  15. package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/api/utils.js +9 -0
  16. package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/api/utils.js.map +1 -0
  17. package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/firebase/firebase-error.d.ts +2 -0
  18. package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/firebase/firebase-error.js +10 -0
  19. package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/firebase/firebase-error.js.map +1 -0
  20. package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/firebase/firebase-user.d.ts +26 -0
  21. package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/firebase/firebase-user.js +122 -0
  22. package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/firebase/firebase-user.js.map +1 -0
  23. package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/firebase/firebase.d.ts +15 -0
  24. package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/firebase/firebase.js +40 -0
  25. package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/firebase/firebase.js.map +1 -0
  26. package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/helpers/async.d.ts +2 -0
  27. package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/helpers/async.js +3 -0
  28. package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/helpers/async.js.map +1 -0
  29. package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/helpers/config.d.ts +22 -0
  30. package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/helpers/config.js +70 -0
  31. package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/helpers/config.js.map +1 -0
  32. package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/helpers/date.d.ts +6 -0
  33. package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/helpers/date.js +5 -0
  34. package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/helpers/date.js.map +1 -0
  35. package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/helpers/errors.d.ts +32 -0
  36. package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/helpers/errors.js +47 -0
  37. package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/helpers/errors.js.map +1 -0
  38. package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/index.d.ts +8 -0
  39. package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/index.js +6 -0
  40. package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/index.js.map +1 -0
  41. package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/types/index.d.ts +89 -0
  42. package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/types/index.js +8 -0
  43. package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/types/index.js.map +1 -0
  44. package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/types/measurement.d.ts +292 -0
  45. package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/types/measurement.js +377 -0
  46. package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/esm/types/measurement.js.map +1 -0
  47. package/.rollup.cache/home/runner/work/shop-sdk/shop-sdk/dist/tsconfig.tsbuildinfo +1 -0
  48. package/LICENSE +373 -0
  49. package/README.md +67 -73
  50. package/dist/esm/firebase/firebase.d.ts +2 -2
  51. package/dist/esm/index.js +23044 -23183
  52. package/dist/esm/index.js.map +1 -1
  53. package/dist/esm/index.min.js +366 -265
  54. package/dist/esm/index.min.js.map +1 -1
  55. package/dist/tsconfig.tsbuildinfo +1 -0
  56. 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,9 @@
1
+ export const testImage = (url) => {
2
+ const img = new Image();
3
+ img.src = url;
4
+ return new Promise((resolve) => {
5
+ img.onerror = () => resolve(false);
6
+ img.onload = () => resolve(true);
7
+ });
8
+ };
9
+ //# sourceMappingURL=utils.js.map
@@ -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,2 @@
1
+ import { FirebaseError } from 'firebase/app';
2
+ export declare const getFirebaseError: (e: FirebaseError) => never;
@@ -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
@@ -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
@@ -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,2 @@
1
+ export declare const asyncTry: <T>(promise: Promise<T>) => Promise<[Error, T] | [Error]>;
2
+ export declare const asyncWait: (ms: number) => Promise<unknown>;
@@ -0,0 +1,3 @@
1
+ export const asyncTry = (promise) => promise.then((data) => [null, data]).catch((error) => [error]);
2
+ export const asyncWait = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
3
+ //# sourceMappingURL=async.js.map
@@ -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