@flowerforce/flowerbase-client 0.3.0 → 0.3.1-beta.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/dist/app.d.ts +4 -2
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +58 -32
- package/dist/mongo.d.ts +2 -2
- package/dist/mongo.d.ts.map +1 -1
- package/dist/session.d.ts +9 -2
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +66 -62
- package/dist/storage.d.ts +11 -0
- package/dist/storage.d.ts.map +1 -0
- package/dist/storage.js +44 -0
- package/dist/storage.native.d.ts +11 -0
- package/dist/storage.native.d.ts.map +1 -0
- package/dist/storage.native.js +42 -0
- package/dist/types.d.ts +23 -2
- package/dist/types.d.ts.map +1 -1
- package/dist/user.d.ts +2 -2
- package/dist/user.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/__tests__/functions.test.ts +1 -1
- package/src/__tests__/mongo.test.ts +4 -4
- package/src/app.ts +139 -68
- package/src/mongo.ts +2 -2
- package/src/session.ts +63 -54
- package/src/storage.native.ts +49 -0
- package/src/storage.ts +57 -0
- package/src/types.ts +31 -5
- package/src/user.ts +2 -2
- package/dist/session.native.d.ts +0 -14
- package/dist/session.native.d.ts.map +0 -1
- package/dist/session.native.js +0 -76
- package/src/session.native.ts +0 -89
package/dist/app.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { AppConfig, CredentialsLike, ProfileData, SessionData } from './types';
|
|
2
1
|
import { Credentials } from './credentials';
|
|
2
|
+
import { AppConfig, CredentialsLike, MongoDbServiceArguments, MongoDbServiceName, ProfileData, SessionData } from './types';
|
|
3
3
|
import { User } from './user';
|
|
4
4
|
export declare class App {
|
|
5
5
|
private static readonly appCache;
|
|
@@ -48,6 +48,8 @@ export declare class App {
|
|
|
48
48
|
get allUsers(): Readonly<Record<string, User>>;
|
|
49
49
|
private persistSessionsByUser;
|
|
50
50
|
private persistUsersOrder;
|
|
51
|
+
private restorePersistedUsers;
|
|
52
|
+
private restoreCurrentSession;
|
|
51
53
|
private touchUser;
|
|
52
54
|
private removeUserFromOrder;
|
|
53
55
|
private setSessionForUser;
|
|
@@ -74,7 +76,7 @@ export declare class App {
|
|
|
74
76
|
private requestWithAccessToken;
|
|
75
77
|
callFunction(name: string, args: unknown[], userId?: string): Promise<any>;
|
|
76
78
|
callFunctionStreaming(name: string, args: unknown[], userId?: string): Promise<AsyncIterable<Uint8Array>>;
|
|
77
|
-
callService(name: string, args:
|
|
79
|
+
callService(name: string, args: MongoDbServiceArguments, service?: MongoDbServiceName, userId?: string): Promise<unknown>;
|
|
78
80
|
getProfile(userId?: string): Promise<ProfileData>;
|
|
79
81
|
refreshAccessToken(userId?: string): Promise<string>;
|
|
80
82
|
logoutUser(userId?: string): Promise<void>;
|
package/dist/app.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"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"}
|
package/dist/app.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.App = void 0;
|
|
4
|
+
const credentials_1 = require("./credentials");
|
|
4
5
|
const functions_1 = require("./functions");
|
|
5
6
|
const http_1 = require("./http");
|
|
6
7
|
const session_1 = require("./session");
|
|
7
|
-
const credentials_1 = require("./credentials");
|
|
8
8
|
const user_1 = require("./user");
|
|
9
9
|
const API_PREFIX = '/api/client/v2.0';
|
|
10
10
|
class App {
|
|
@@ -19,29 +19,8 @@ class App {
|
|
|
19
19
|
this.baseUrl = (config.baseUrl ?? '').replace(/\/$/, '');
|
|
20
20
|
this.timeout = config.timeout ?? 10000;
|
|
21
21
|
this.sessionManager = new session_1.SessionManager(this.id);
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
this.sessionsByUserId.set(userId, session);
|
|
25
|
-
}
|
|
26
|
-
this.usersOrder = this.sessionManager.getUsersOrder();
|
|
27
|
-
for (const userId of this.sessionsByUserId.keys()) {
|
|
28
|
-
if (!this.usersOrder.includes(userId)) {
|
|
29
|
-
this.usersOrder.push(userId);
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
for (const userId of this.usersOrder) {
|
|
33
|
-
this.getOrCreateUser(userId);
|
|
34
|
-
}
|
|
35
|
-
const currentSession = this.sessionManager.get();
|
|
36
|
-
if (currentSession?.userId) {
|
|
37
|
-
this.sessionsByUserId.set(currentSession.userId, currentSession);
|
|
38
|
-
this.getOrCreateUser(currentSession.userId);
|
|
39
|
-
this.touchUser(currentSession.userId);
|
|
40
|
-
this.persistSessionsByUser();
|
|
41
|
-
}
|
|
42
|
-
else {
|
|
43
|
-
this.setCurrentSessionFromOrder();
|
|
44
|
-
}
|
|
22
|
+
this.restorePersistedUsers();
|
|
23
|
+
this.restoreCurrentSession();
|
|
45
24
|
this.sessionBootstrapPromise = this.bootstrapSessionOnLoad();
|
|
46
25
|
this.emailPasswordAuth = {
|
|
47
26
|
registerUser: ({ email, password }) => this.postProvider('/local-userpass/register', { email, password }),
|
|
@@ -100,7 +79,10 @@ class App {
|
|
|
100
79
|
loggedOutUsers.push(userId);
|
|
101
80
|
}
|
|
102
81
|
}
|
|
103
|
-
const users = Object.fromEntries([...activeUsers, ...loggedOutUsers].map((userId) => [
|
|
82
|
+
const users = Object.fromEntries([...activeUsers, ...loggedOutUsers].map((userId) => [
|
|
83
|
+
userId,
|
|
84
|
+
this.usersById.get(userId)
|
|
85
|
+
]));
|
|
104
86
|
return users;
|
|
105
87
|
}
|
|
106
88
|
persistSessionsByUser() {
|
|
@@ -109,6 +91,39 @@ class App {
|
|
|
109
91
|
persistUsersOrder() {
|
|
110
92
|
this.sessionManager.setUsersOrder(this.usersOrder);
|
|
111
93
|
}
|
|
94
|
+
restorePersistedUsers() {
|
|
95
|
+
const persistedSessionsByUser = this.sessionManager.getSessionsByUser();
|
|
96
|
+
for (const [userId, session] of Object.entries(persistedSessionsByUser)) {
|
|
97
|
+
this.sessionsByUserId.set(userId, session);
|
|
98
|
+
}
|
|
99
|
+
const persistedOrder = this.sessionManager.getUsersOrder();
|
|
100
|
+
const nextUsersOrder = [];
|
|
101
|
+
for (const userId of persistedOrder) {
|
|
102
|
+
if (!nextUsersOrder.includes(userId)) {
|
|
103
|
+
nextUsersOrder.push(userId);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
for (const userId of this.sessionsByUserId.keys()) {
|
|
107
|
+
if (!nextUsersOrder.includes(userId)) {
|
|
108
|
+
nextUsersOrder.push(userId);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
this.usersOrder = nextUsersOrder;
|
|
112
|
+
for (const userId of this.usersOrder) {
|
|
113
|
+
this.getOrCreateUser(userId);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
restoreCurrentSession() {
|
|
117
|
+
const currentSession = this.sessionManager.get();
|
|
118
|
+
if (currentSession?.userId) {
|
|
119
|
+
this.sessionsByUserId.set(currentSession.userId, currentSession);
|
|
120
|
+
this.getOrCreateUser(currentSession.userId);
|
|
121
|
+
this.touchUser(currentSession.userId);
|
|
122
|
+
this.persistSessionsByUser();
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
this.setCurrentSessionFromOrder();
|
|
126
|
+
}
|
|
112
127
|
touchUser(userId) {
|
|
113
128
|
this.usersOrder = [userId, ...this.usersOrder.filter((id) => id !== userId)];
|
|
114
129
|
this.persistUsersOrder();
|
|
@@ -167,8 +182,11 @@ class App {
|
|
|
167
182
|
});
|
|
168
183
|
}
|
|
169
184
|
async bootstrapSessionOnLoad() {
|
|
185
|
+
await this.sessionManager.whenReady();
|
|
186
|
+
this.restorePersistedUsers();
|
|
187
|
+
this.restoreCurrentSession();
|
|
170
188
|
const session = this.sessionManager.get();
|
|
171
|
-
if (!session ||
|
|
189
|
+
if (!session || !this.sessionManager.hasPersistentStorage()) {
|
|
172
190
|
return;
|
|
173
191
|
}
|
|
174
192
|
try {
|
|
@@ -229,7 +247,9 @@ class App {
|
|
|
229
247
|
return this.setLoggedInUser(result, 'custom-function');
|
|
230
248
|
}
|
|
231
249
|
if (credentials.provider === 'custom-token') {
|
|
232
|
-
const result = await this.postProvider('/custom-token/login', {
|
|
250
|
+
const result = await this.postProvider('/custom-token/login', {
|
|
251
|
+
token: credentials.token
|
|
252
|
+
});
|
|
233
253
|
return this.setLoggedInUser(result, 'custom-token');
|
|
234
254
|
}
|
|
235
255
|
const unsupportedProvider = credentials;
|
|
@@ -273,7 +293,9 @@ class App {
|
|
|
273
293
|
}
|
|
274
294
|
getSessionOrThrow(userId) {
|
|
275
295
|
const targetUserId = userId ?? this.currentUser?.id;
|
|
276
|
-
const session = targetUserId
|
|
296
|
+
const session = targetUserId
|
|
297
|
+
? this.sessionsByUserId.get(targetUserId)
|
|
298
|
+
: this.sessionManager.get();
|
|
277
299
|
if (!session) {
|
|
278
300
|
throw new Error('User is not authenticated');
|
|
279
301
|
}
|
|
@@ -320,7 +342,7 @@ class App {
|
|
|
320
342
|
arguments: args
|
|
321
343
|
};
|
|
322
344
|
const result = await this.requestWithAccessToken((accessToken) => (0, http_1.requestJson)({
|
|
323
|
-
url: this.functionsUrl(
|
|
345
|
+
url: this.functionsUrl(`/call?func=${name}`),
|
|
324
346
|
method: 'POST',
|
|
325
347
|
body: payload,
|
|
326
348
|
bearerToken: accessToken,
|
|
@@ -354,7 +376,9 @@ class App {
|
|
|
354
376
|
});
|
|
355
377
|
}
|
|
356
378
|
catch (error) {
|
|
357
|
-
if (!didRefresh &&
|
|
379
|
+
if (!didRefresh &&
|
|
380
|
+
error instanceof http_1.FlowerbaseHttpError &&
|
|
381
|
+
error.status === 401) {
|
|
358
382
|
await refreshSession();
|
|
359
383
|
didRefresh = true;
|
|
360
384
|
continue;
|
|
@@ -368,7 +392,9 @@ class App {
|
|
|
368
392
|
return;
|
|
369
393
|
}
|
|
370
394
|
catch (error) {
|
|
371
|
-
if (!didRefresh &&
|
|
395
|
+
if (!didRefresh &&
|
|
396
|
+
error instanceof http_1.FlowerbaseHttpError &&
|
|
397
|
+
error.status === 401) {
|
|
372
398
|
await refreshSession();
|
|
373
399
|
didRefresh = true;
|
|
374
400
|
continue;
|
|
@@ -387,7 +413,7 @@ class App {
|
|
|
387
413
|
arguments: args
|
|
388
414
|
};
|
|
389
415
|
return this.requestWithAccessToken((accessToken) => (0, http_1.requestJson)({
|
|
390
|
-
url: this.functionsUrl(
|
|
416
|
+
url: this.functionsUrl(`/call?col=${args[0].collection}-${name}`),
|
|
391
417
|
method: 'POST',
|
|
392
418
|
body: payload,
|
|
393
419
|
bearerToken: accessToken,
|
package/dist/mongo.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { App } from './app';
|
|
2
|
-
import { MongoClientLike } from './types';
|
|
3
|
-
export declare const createMongoClient: (app: App, serviceName:
|
|
2
|
+
import { MongoClientLike, MongoDbServiceName } from './types';
|
|
3
|
+
export declare const createMongoClient: (app: App, serviceName: MongoDbServiceName, userId: string) => MongoClientLike;
|
|
4
4
|
//# sourceMappingURL=mongo.d.ts.map
|
package/dist/mongo.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mongo.d.ts","sourceRoot":"","sources":["../src/mongo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAA;AAEhC,OAAO,EAAkB,eAAe,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"mongo.d.ts","sourceRoot":"","sources":["../src/mongo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAA;AAEhC,OAAO,EAAkB,eAAe,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AAoB7E,eAAO,MAAM,iBAAiB,QAAS,GAAG,eAAe,kBAAkB,UAAU,MAAM,KAAG,eAyF5F,CAAA"}
|
package/dist/session.d.ts
CHANGED
|
@@ -4,15 +4,22 @@ export declare class SessionManager {
|
|
|
4
4
|
private readonly usersKey;
|
|
5
5
|
private readonly sessionsKey;
|
|
6
6
|
private readonly storage;
|
|
7
|
+
private readonly hydrationPromise;
|
|
7
8
|
private session;
|
|
9
|
+
private usersOrder;
|
|
10
|
+
private sessionsByUser;
|
|
8
11
|
constructor(appId: string);
|
|
9
|
-
|
|
12
|
+
private hydrate;
|
|
13
|
+
whenReady(): Promise<void>;
|
|
14
|
+
hasPersistentStorage(): boolean;
|
|
10
15
|
get(): SessionData | null;
|
|
11
16
|
set(session: SessionData): void;
|
|
12
17
|
clear(): void;
|
|
13
18
|
getUsersOrder(): string[];
|
|
14
19
|
setUsersOrder(order: string[]): void;
|
|
15
|
-
getSessionsByUser():
|
|
20
|
+
getSessionsByUser(): {
|
|
21
|
+
[x: string]: SessionData;
|
|
22
|
+
};
|
|
16
23
|
setSessionsByUser(sessionsByUser: Record<string, SessionData>): void;
|
|
17
24
|
}
|
|
18
25
|
//# sourceMappingURL=session.d.ts.map
|
package/dist/session.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AA+CrC,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;IAC5B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAQ;IACjC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAQ;IACpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkB;IAC1C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAe;IAChD,OAAO,CAAC,OAAO,CAA2B;IAC1C,OAAO,CAAC,UAAU,CAAe;IACjC,OAAO,CAAC,cAAc,CAAkC;gBAE5C,KAAK,EAAE,MAAM;YAUX,OAAO;IAOrB,SAAS;IAIT,oBAAoB;IAIpB,GAAG;IAIH,GAAG,CAAC,OAAO,EAAE,WAAW;IAKxB,KAAK;IAKL,aAAa;IAIb,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE;IAS7B,iBAAiB;;;IAIjB,iBAAiB,CAAC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC;CAQ9D"}
|
package/dist/session.js
CHANGED
|
@@ -1,44 +1,76 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.SessionManager = void 0;
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
if (
|
|
7
|
-
return
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
4
|
+
const storage_1 = require("./storage");
|
|
5
|
+
const parseSession = (raw) => {
|
|
6
|
+
if (!raw)
|
|
7
|
+
return null;
|
|
8
|
+
try {
|
|
9
|
+
return JSON.parse(raw);
|
|
10
|
+
}
|
|
11
|
+
catch {
|
|
12
|
+
return null;
|
|
13
|
+
}
|
|
14
|
+
};
|
|
15
|
+
const parseUsersOrder = (raw) => {
|
|
16
|
+
if (!raw)
|
|
17
|
+
return [];
|
|
18
|
+
try {
|
|
19
|
+
const parsed = JSON.parse(raw);
|
|
20
|
+
if (!Array.isArray(parsed))
|
|
21
|
+
return [];
|
|
22
|
+
return parsed.filter((item) => typeof item === 'string');
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return [];
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
const parseSessionsByUser = (raw) => {
|
|
29
|
+
if (!raw)
|
|
30
|
+
return {};
|
|
31
|
+
try {
|
|
32
|
+
const parsed = JSON.parse(raw);
|
|
33
|
+
const normalized = {};
|
|
34
|
+
for (const [userId, session] of Object.entries(parsed)) {
|
|
35
|
+
if (session &&
|
|
36
|
+
typeof session === 'object' &&
|
|
37
|
+
typeof session.accessToken === 'string' &&
|
|
38
|
+
typeof session.refreshToken === 'string' &&
|
|
39
|
+
typeof session.userId === 'string') {
|
|
40
|
+
normalized[userId] = session;
|
|
41
|
+
}
|
|
20
42
|
}
|
|
21
|
-
|
|
43
|
+
return normalized;
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
return {};
|
|
47
|
+
}
|
|
22
48
|
};
|
|
23
49
|
class SessionManager {
|
|
24
50
|
constructor(appId) {
|
|
25
|
-
this.storage =
|
|
51
|
+
this.storage = (0, storage_1.createStorage)();
|
|
26
52
|
this.session = null;
|
|
53
|
+
this.usersOrder = [];
|
|
54
|
+
this.sessionsByUser = {};
|
|
27
55
|
this.key = `flowerbase:${appId}:session`;
|
|
28
56
|
this.usersKey = `flowerbase:${appId}:users`;
|
|
29
57
|
this.sessionsKey = `flowerbase:${appId}:sessions`;
|
|
30
|
-
this.session = this.
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
58
|
+
this.session = parseSession(this.storage.getItem(this.key));
|
|
59
|
+
this.usersOrder = parseUsersOrder(this.storage.getItem(this.usersKey));
|
|
60
|
+
this.sessionsByUser = parseSessionsByUser(this.storage.getItem(this.sessionsKey));
|
|
61
|
+
this.hydrationPromise = this.hydrate();
|
|
62
|
+
}
|
|
63
|
+
async hydrate() {
|
|
64
|
+
const hydrated = await this.storage.hydrate([this.key, this.usersKey, this.sessionsKey]);
|
|
65
|
+
this.session = parseSession(hydrated[this.key] ?? null);
|
|
66
|
+
this.usersOrder = parseUsersOrder(hydrated[this.usersKey] ?? null);
|
|
67
|
+
this.sessionsByUser = parseSessionsByUser(hydrated[this.sessionsKey] ?? null);
|
|
68
|
+
}
|
|
69
|
+
whenReady() {
|
|
70
|
+
return this.hydrationPromise;
|
|
71
|
+
}
|
|
72
|
+
hasPersistentStorage() {
|
|
73
|
+
return this.storage.isPersistent;
|
|
42
74
|
}
|
|
43
75
|
get() {
|
|
44
76
|
return this.session;
|
|
@@ -52,20 +84,10 @@ class SessionManager {
|
|
|
52
84
|
this.storage.removeItem(this.key);
|
|
53
85
|
}
|
|
54
86
|
getUsersOrder() {
|
|
55
|
-
|
|
56
|
-
if (!raw)
|
|
57
|
-
return [];
|
|
58
|
-
try {
|
|
59
|
-
const parsed = JSON.parse(raw);
|
|
60
|
-
if (!Array.isArray(parsed))
|
|
61
|
-
return [];
|
|
62
|
-
return parsed.filter((item) => typeof item === 'string');
|
|
63
|
-
}
|
|
64
|
-
catch {
|
|
65
|
-
return [];
|
|
66
|
-
}
|
|
87
|
+
return [...this.usersOrder];
|
|
67
88
|
}
|
|
68
89
|
setUsersOrder(order) {
|
|
90
|
+
this.usersOrder = [...order];
|
|
69
91
|
if (order.length === 0) {
|
|
70
92
|
this.storage.removeItem(this.usersKey);
|
|
71
93
|
return;
|
|
@@ -73,28 +95,10 @@ class SessionManager {
|
|
|
73
95
|
this.storage.setItem(this.usersKey, JSON.stringify(order));
|
|
74
96
|
}
|
|
75
97
|
getSessionsByUser() {
|
|
76
|
-
|
|
77
|
-
if (!raw)
|
|
78
|
-
return {};
|
|
79
|
-
try {
|
|
80
|
-
const parsed = JSON.parse(raw);
|
|
81
|
-
const normalized = {};
|
|
82
|
-
for (const [userId, session] of Object.entries(parsed)) {
|
|
83
|
-
if (session &&
|
|
84
|
-
typeof session === 'object' &&
|
|
85
|
-
typeof session.accessToken === 'string' &&
|
|
86
|
-
typeof session.refreshToken === 'string' &&
|
|
87
|
-
typeof session.userId === 'string') {
|
|
88
|
-
normalized[userId] = session;
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
return normalized;
|
|
92
|
-
}
|
|
93
|
-
catch {
|
|
94
|
-
return {};
|
|
95
|
-
}
|
|
98
|
+
return { ...this.sessionsByUser };
|
|
96
99
|
}
|
|
97
100
|
setSessionsByUser(sessionsByUser) {
|
|
101
|
+
this.sessionsByUser = { ...sessionsByUser };
|
|
98
102
|
if (Object.keys(sessionsByUser).length === 0) {
|
|
99
103
|
this.storage.removeItem(this.sessionsKey);
|
|
100
104
|
return;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
type StorageSnapshot = Record<string, string | null>;
|
|
2
|
+
export type PersistedStorage = {
|
|
3
|
+
isPersistent: boolean;
|
|
4
|
+
getItem: (key: string) => string | null;
|
|
5
|
+
setItem: (key: string, value: string) => void;
|
|
6
|
+
removeItem: (key: string) => void;
|
|
7
|
+
hydrate: (keys: string[]) => Promise<StorageSnapshot>;
|
|
8
|
+
};
|
|
9
|
+
export declare const createStorage: () => PersistedStorage;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=storage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAAA,KAAK,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAA;AAEpD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,YAAY,EAAE,OAAO,CAAA;IACrB,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAA;IACvC,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAC7C,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;IACjC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,eAAe,CAAC,CAAA;CACtD,CAAA;AA8BD,eAAO,MAAM,aAAa,QAAO,gBAkBhC,CAAA"}
|
package/dist/storage.js
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createStorage = void 0;
|
|
4
|
+
const memoryStore = new Map();
|
|
5
|
+
const getStorage = () => {
|
|
6
|
+
const browserStorage = globalThis.localStorage;
|
|
7
|
+
if (browserStorage &&
|
|
8
|
+
typeof browserStorage.getItem === 'function' &&
|
|
9
|
+
typeof browserStorage.setItem === 'function' &&
|
|
10
|
+
typeof browserStorage.removeItem === 'function') {
|
|
11
|
+
return {
|
|
12
|
+
getItem: (key) => browserStorage.getItem(key),
|
|
13
|
+
setItem: (key, value) => browserStorage.setItem(key, value),
|
|
14
|
+
removeItem: (key) => browserStorage.removeItem(key)
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
return {
|
|
18
|
+
getItem: (key) => memoryStore.get(key) ?? null,
|
|
19
|
+
setItem: (key, value) => {
|
|
20
|
+
memoryStore.set(key, value);
|
|
21
|
+
},
|
|
22
|
+
removeItem: (key) => {
|
|
23
|
+
memoryStore.delete(key);
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
};
|
|
27
|
+
const createStorage = () => {
|
|
28
|
+
const browserStorage = globalThis.localStorage;
|
|
29
|
+
const isPersistent = !!browserStorage &&
|
|
30
|
+
typeof browserStorage.getItem === 'function' &&
|
|
31
|
+
typeof browserStorage.setItem === 'function' &&
|
|
32
|
+
typeof browserStorage.removeItem === 'function';
|
|
33
|
+
const storage = getStorage();
|
|
34
|
+
return {
|
|
35
|
+
isPersistent,
|
|
36
|
+
getItem: storage.getItem,
|
|
37
|
+
setItem: storage.setItem,
|
|
38
|
+
removeItem: storage.removeItem,
|
|
39
|
+
async hydrate(keys) {
|
|
40
|
+
return Object.fromEntries(keys.map((key) => [key, storage.getItem(key)]));
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
};
|
|
44
|
+
exports.createStorage = createStorage;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
type StorageSnapshot = Record<string, string | null>;
|
|
2
|
+
export type PersistedStorage = {
|
|
3
|
+
isPersistent: boolean;
|
|
4
|
+
getItem: (key: string) => string | null;
|
|
5
|
+
setItem: (key: string, value: string) => void;
|
|
6
|
+
removeItem: (key: string) => void;
|
|
7
|
+
hydrate: (keys: string[]) => Promise<StorageSnapshot>;
|
|
8
|
+
};
|
|
9
|
+
export declare const createStorage: () => PersistedStorage;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=storage.native.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.native.d.ts","sourceRoot":"","sources":["../src/storage.native.ts"],"names":[],"mappings":"AAEA,KAAK,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAA;AAEpD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,YAAY,EAAE,OAAO,CAAA;IACrB,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAA;IACvC,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAC7C,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAA;IACjC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,eAAe,CAAC,CAAA;CACtD,CAAA;AAOD,eAAO,MAAM,aAAa,QAAO,gBA+B/B,CAAA"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.createStorage = void 0;
|
|
7
|
+
const async_storage_1 = __importDefault(require("@react-native-async-storage/async-storage"));
|
|
8
|
+
const memoryStore = new Map();
|
|
9
|
+
const getSnapshot = (keys) => Object.fromEntries(keys.map((key) => [key, memoryStore.get(key) ?? null]));
|
|
10
|
+
const createStorage = () => ({
|
|
11
|
+
isPersistent: true,
|
|
12
|
+
getItem: (key) => memoryStore.get(key) ?? null,
|
|
13
|
+
setItem: (key, value) => {
|
|
14
|
+
memoryStore.set(key, value);
|
|
15
|
+
void async_storage_1.default.setItem(key, value).catch(() => {
|
|
16
|
+
// Ignore write failures and keep the in-memory cache alive.
|
|
17
|
+
});
|
|
18
|
+
},
|
|
19
|
+
removeItem: (key) => {
|
|
20
|
+
memoryStore.delete(key);
|
|
21
|
+
void async_storage_1.default.removeItem(key).catch(() => {
|
|
22
|
+
// Ignore delete failures and keep the in-memory cache alive.
|
|
23
|
+
});
|
|
24
|
+
},
|
|
25
|
+
async hydrate(keys) {
|
|
26
|
+
try {
|
|
27
|
+
const entries = await async_storage_1.default.multiGet(keys);
|
|
28
|
+
for (const [key, value] of entries) {
|
|
29
|
+
if (value === null) {
|
|
30
|
+
memoryStore.delete(key);
|
|
31
|
+
continue;
|
|
32
|
+
}
|
|
33
|
+
memoryStore.set(key, value);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
// Ignore storage read failures and keep the in-memory cache alive.
|
|
38
|
+
}
|
|
39
|
+
return getSnapshot(keys);
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
exports.createStorage = createStorage;
|
package/dist/types.d.ts
CHANGED
|
@@ -28,10 +28,31 @@ export type ProfileData = {
|
|
|
28
28
|
custom_data?: Record<string, unknown>;
|
|
29
29
|
data?: Record<string, unknown>;
|
|
30
30
|
};
|
|
31
|
+
export type MongoDbDocument = Record<string, unknown>;
|
|
32
|
+
export type MongoDbServiceName = 'mongodb-atlas';
|
|
33
|
+
export type MongoDbServiceArgument = {
|
|
34
|
+
database: string;
|
|
35
|
+
collection: string;
|
|
36
|
+
query?: MongoDbDocument;
|
|
37
|
+
filter?: MongoDbDocument;
|
|
38
|
+
update?: MongoDbDocument | MongoDbDocument[];
|
|
39
|
+
projection?: MongoDbDocument;
|
|
40
|
+
options?: MongoDbDocument;
|
|
41
|
+
returnNewDocument?: boolean;
|
|
42
|
+
document?: MongoDbDocument;
|
|
43
|
+
documents?: MongoDbDocument[];
|
|
44
|
+
pipeline?: MongoDbDocument[];
|
|
45
|
+
replacement?: MongoDbDocument;
|
|
46
|
+
};
|
|
47
|
+
export type MongoDbServiceArguments = [MongoDbServiceArgument];
|
|
31
48
|
export type FunctionCallPayload = {
|
|
32
49
|
name: string;
|
|
33
50
|
arguments: unknown[];
|
|
34
|
-
service?:
|
|
51
|
+
service?: undefined;
|
|
52
|
+
} | {
|
|
53
|
+
name: string;
|
|
54
|
+
arguments: MongoDbServiceArguments;
|
|
55
|
+
service: MongoDbServiceName;
|
|
35
56
|
};
|
|
36
57
|
export type WatchConfig = {
|
|
37
58
|
appId: string;
|
|
@@ -89,7 +110,7 @@ export interface UserLike {
|
|
|
89
110
|
callFunction: (name: string, ...args: unknown[]) => Promise<unknown>;
|
|
90
111
|
refreshAccessToken: () => Promise<string>;
|
|
91
112
|
refreshCustomData: () => Promise<Record<string, unknown>>;
|
|
92
|
-
mongoClient: (serviceName:
|
|
113
|
+
mongoClient: (serviceName: MongoDbServiceName) => MongoClientLike;
|
|
93
114
|
addListener: (callback: () => void) => void;
|
|
94
115
|
removeListener: (callback: () => void) => void;
|
|
95
116
|
removeAllListeners: () => void;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG;IACtB,EAAE,EAAE,MAAM,CAAA;IACV,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,MAAM,MAAM,eAAe,GACvB;IAAE,QAAQ,EAAE,gBAAgB,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAC/D;IAAE,QAAQ,EAAE,WAAW,CAAA;CAAE,GACzB;IAAE,QAAQ,EAAE,iBAAiB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GACjE;IAAE,QAAQ,EAAE,cAAc,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAA;AAE/C,MAAM,MAAM,WAAW,GAAG;IACxB,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,MAAM,EAAE,MAAM,CAAA;CACf,CAAA;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,UAAU,CAAC,EAAE,OAAO,EAAE,CAAA;IACtB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACrC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC/B,CAAA;AAED,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/user.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { App } from './app';
|
|
2
|
-
import { MongoClientLike, UserLike } from './types';
|
|
2
|
+
import { MongoClientLike, MongoDbServiceName, UserLike } from './types';
|
|
3
3
|
export declare class User implements UserLike {
|
|
4
4
|
readonly id: string;
|
|
5
5
|
customData: Record<string, unknown>;
|
|
@@ -28,7 +28,7 @@ export declare class User implements UserLike {
|
|
|
28
28
|
callFunction(name: string, ...args: unknown[]): Promise<any>;
|
|
29
29
|
refreshAccessToken(): Promise<string>;
|
|
30
30
|
refreshCustomData(): Promise<Record<string, unknown>>;
|
|
31
|
-
mongoClient(serviceName:
|
|
31
|
+
mongoClient(serviceName: MongoDbServiceName): MongoClientLike;
|
|
32
32
|
addListener(callback: () => void): void;
|
|
33
33
|
removeListener(callback: () => void): void;
|
|
34
34
|
removeAllListeners(): void;
|
package/dist/user.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user.d.ts","sourceRoot":"","sources":["../src/user.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAA;AAGhC,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"user.d.ts","sourceRoot":"","sources":["../src/user.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,OAAO,CAAA;AAGhC,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAEvE,qBAAa,IAAK,YAAW,QAAQ;IACnC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAK;IACxC,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAA,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAA;IACnD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAK;IACzB,OAAO,CAAC,aAAa,CAAsB;IAC3C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAwB;IAElD,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,GAAG;QACpE,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;QACpE,qBAAqB,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAA;KAChG,CAAA;gBAEW,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM;IAUhC,IAAI,KAAK,wCAKR;IAED,IAAI,UAAU,YAEb;IAED,IAAI,YAAY,kBAEf;IAED,IAAI,UAAU,cAEb;IAED,OAAO,CAAC,0BAA0B;IAclC,IAAI,WAAW,kBAId;IAED,IAAI,YAAY,kBAIf;IAED,eAAe,CAAC,YAAY,EAAE,MAAM;IAIpC,OAAO,CAAC,wBAAwB;IAuB1B,MAAM;IAIN,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE;IAI7C,kBAAkB;IAMlB,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAU3D,WAAW,CAAC,WAAW,EAAE,kBAAkB,GAAG,eAAe;IAI7D,WAAW,CAAC,QAAQ,EAAE,MAAM,IAAI;IAIhC,cAAc,CAAC,QAAQ,EAAE,MAAM,IAAI;IAInC,kBAAkB;IAIlB,eAAe;CAShB"}
|
package/package.json
CHANGED
|
@@ -46,7 +46,7 @@ describe('flowerbase-client functions', () => {
|
|
|
46
46
|
|
|
47
47
|
expect(global.fetch).toHaveBeenNthCalledWith(
|
|
48
48
|
3,
|
|
49
|
-
'http://localhost:3000/api/client/v2.0/app/my-app/functions/call',
|
|
49
|
+
'http://localhost:3000/api/client/v2.0/app/my-app/functions/call?func=sum',
|
|
50
50
|
expect.objectContaining({
|
|
51
51
|
method: 'POST',
|
|
52
52
|
headers: expect.objectContaining({ Authorization: 'Bearer access' })
|