@flowerforce/flowerbase-client 0.1.1-beta.2 → 0.1.1-beta.4

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 (45) hide show
  1. package/dist/app.d.ts +55 -10
  2. package/dist/app.d.ts.map +1 -1
  3. package/dist/app.js +322 -47
  4. package/dist/credentials.d.ts +1 -0
  5. package/dist/credentials.d.ts.map +1 -1
  6. package/dist/credentials.js +6 -0
  7. package/dist/functions.d.ts +4 -1
  8. package/dist/functions.d.ts.map +1 -1
  9. package/dist/functions.js +18 -1
  10. package/dist/http.d.ts +24 -4
  11. package/dist/http.d.ts.map +1 -1
  12. package/dist/http.js +121 -25
  13. package/dist/index.d.ts +1 -0
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +3 -1
  16. package/dist/mongo.d.ts +1 -1
  17. package/dist/mongo.d.ts.map +1 -1
  18. package/dist/mongo.js +45 -4
  19. package/dist/session.d.ts +6 -0
  20. package/dist/session.d.ts.map +1 -1
  21. package/dist/session.js +52 -0
  22. package/dist/session.native.d.ts.map +1 -1
  23. package/dist/session.native.js +5 -10
  24. package/dist/types.d.ts +28 -4
  25. package/dist/types.d.ts.map +1 -1
  26. package/dist/user.d.ts +24 -4
  27. package/dist/user.d.ts.map +1 -1
  28. package/dist/user.js +103 -8
  29. package/package.json +12 -1
  30. package/src/__tests__/auth.test.ts +49 -0
  31. package/src/__tests__/compat.test.ts +10 -0
  32. package/src/__tests__/functions.test.ts +236 -0
  33. package/src/__tests__/mongo.test.ts +35 -0
  34. package/src/__tests__/session.test.ts +494 -0
  35. package/src/__tests__/watch.test.ts +74 -0
  36. package/src/app.ts +390 -63
  37. package/src/credentials.ts +7 -0
  38. package/src/functions.ts +27 -3
  39. package/src/http.ts +156 -27
  40. package/src/index.ts +1 -0
  41. package/src/mongo.ts +48 -4
  42. package/src/session.native.ts +2 -11
  43. package/src/session.ts +55 -0
  44. package/src/types.ts +34 -4
  45. package/src/user.ts +123 -12
package/dist/http.d.ts CHANGED
@@ -1,7 +1,26 @@
1
- export declare class FlowerbaseHttpError extends Error {
2
- status: number;
3
- payload?: unknown;
4
- constructor(message: string, status: number, payload?: unknown);
1
+ export declare class MongoDBRealmError extends Error {
2
+ readonly method: string;
3
+ readonly url: string;
4
+ readonly statusCode: number;
5
+ readonly statusText: string;
6
+ readonly error: string | undefined;
7
+ readonly errorCode: string | undefined;
8
+ readonly link: string | undefined;
9
+ readonly payload?: unknown;
10
+ constructor(params: {
11
+ method: string;
12
+ url: string;
13
+ statusCode: number;
14
+ statusText: string;
15
+ error?: string;
16
+ errorCode?: string;
17
+ link?: string;
18
+ payload?: unknown;
19
+ });
20
+ }
21
+ export declare class FlowerbaseHttpError extends MongoDBRealmError {
22
+ readonly status: number;
23
+ constructor(params: ConstructorParameters<typeof MongoDBRealmError>[0]);
5
24
  }
6
25
  type RequestParams = {
7
26
  url: string;
@@ -11,5 +30,6 @@ type RequestParams = {
11
30
  timeout?: number;
12
31
  };
13
32
  export declare const requestJson: <T = unknown>({ url, method, body, bearerToken, timeout }: RequestParams) => Promise<T>;
33
+ export declare const requestStream: ({ url, method, body, bearerToken, timeout }: RequestParams) => Promise<AsyncIterable<Uint8Array>>;
14
34
  export {};
15
35
  //# sourceMappingURL=http.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAAA,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,OAAO,CAAA;gBAEL,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO;CAM/D;AAED,KAAK,aAAa,GAAG;IACnB,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAA;IACpD,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,CAAA;AAsBD,eAAO,MAAM,WAAW,6DAMrB,aAAa,KAAG,QAAQ,CAAC,CA6C3B,CAAA"}
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../src/http.ts"],"names":[],"mappings":"AAmDA,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAA;IAClC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAA;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAA;IACjC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;gBAEd,MAAM,EAAE;QAClB,MAAM,EAAE,MAAM,CAAA;QACd,GAAG,EAAE,MAAM,CAAA;QACX,UAAU,EAAE,MAAM,CAAA;QAClB,UAAU,EAAE,MAAM,CAAA;QAClB,KAAK,CAAC,EAAE,MAAM,CAAA;QACd,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,OAAO,CAAC,EAAE,OAAO,CAAA;KAClB;CAYF;AAED,qBAAa,mBAAoB,SAAQ,iBAAiB;IACxD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;gBAEX,MAAM,EAAE,qBAAqB,CAAC,OAAO,iBAAiB,CAAC,CAAC,CAAC,CAAC;CAKvE;AAED,KAAK,aAAa,GAAG;IACnB,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAA;IACpD,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,CAAA;AAsBD,eAAO,MAAM,WAAW,6DAMrB,aAAa,KAAG,QAAQ,CAAC,CAkC3B,CAAA;AAED,eAAO,MAAM,aAAa,gDAMvB,aAAa,KAAG,QAAQ,cAAc,UAAU,CAAC,CAkDnD,CAAA"}
package/dist/http.js CHANGED
@@ -1,12 +1,66 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.requestJson = exports.FlowerbaseHttpError = void 0;
4
- class FlowerbaseHttpError extends Error {
5
- constructor(message, status, payload) {
6
- super(message);
3
+ exports.requestStream = exports.requestJson = exports.FlowerbaseHttpError = exports.MongoDBRealmError = void 0;
4
+ const parsePayloadError = (payload) => {
5
+ if (!payload || typeof payload !== 'object')
6
+ return {};
7
+ const message = 'message' in payload && typeof payload.message === 'string' ? payload.message : undefined;
8
+ const error = 'error' in payload && typeof payload.error === 'string' ? payload.error : undefined;
9
+ const errorCode = 'error_code' in payload && typeof payload.error_code === 'string'
10
+ ? payload.error_code
11
+ : 'errorCode' in payload && typeof payload.errorCode === 'string'
12
+ ? payload.errorCode
13
+ : undefined;
14
+ const link = 'link' in payload && typeof payload.link === 'string' ? payload.link : undefined;
15
+ if (error) {
16
+ try {
17
+ const parsed = JSON.parse(error);
18
+ if (parsed && typeof parsed === 'object') {
19
+ const nestedMessage = 'message' in parsed && typeof parsed.message === 'string' ? parsed.message : undefined;
20
+ const nestedErrorCode = 'error_code' in parsed && typeof parsed.error_code === 'string'
21
+ ? parsed.error_code
22
+ : 'errorCode' in parsed && typeof parsed.errorCode === 'string'
23
+ ? parsed.errorCode
24
+ : undefined;
25
+ return {
26
+ message: nestedMessage ?? message ?? error,
27
+ error,
28
+ errorCode: nestedErrorCode ?? errorCode,
29
+ link
30
+ };
31
+ }
32
+ }
33
+ catch {
34
+ // Keep original error text if it isn't JSON.
35
+ }
36
+ }
37
+ return {
38
+ message: message ?? error,
39
+ error,
40
+ errorCode,
41
+ link
42
+ };
43
+ };
44
+ class MongoDBRealmError extends Error {
45
+ constructor(params) {
46
+ super(params.error || `${params.statusCode} ${params.statusText}`.trim());
47
+ this.name = 'MongoDBRealmError';
48
+ this.method = params.method;
49
+ this.url = params.url;
50
+ this.statusCode = params.statusCode;
51
+ this.statusText = params.statusText;
52
+ this.error = params.error;
53
+ this.errorCode = params.errorCode;
54
+ this.link = params.link;
55
+ this.payload = params.payload;
56
+ }
57
+ }
58
+ exports.MongoDBRealmError = MongoDBRealmError;
59
+ class FlowerbaseHttpError extends MongoDBRealmError {
60
+ constructor(params) {
61
+ super(params);
7
62
  this.name = 'FlowerbaseHttpError';
8
- this.status = status;
9
- this.payload = payload;
63
+ this.status = params.statusCode;
10
64
  }
11
65
  }
12
66
  exports.FlowerbaseHttpError = FlowerbaseHttpError;
@@ -43,32 +97,74 @@ const requestJson = async ({ url, method = 'GET', body, bearerToken, timeout })
43
97
  });
44
98
  const payload = await parseBody(response);
45
99
  if (!response.ok) {
46
- let parsedErrorMessage = null;
47
- if (payload && typeof payload === 'object' && 'error' in payload && typeof payload.error === 'string') {
100
+ const parsedError = parsePayloadError(payload);
101
+ throw new FlowerbaseHttpError({
102
+ method,
103
+ url,
104
+ statusCode: response.status,
105
+ statusText: response.statusText,
106
+ error: parsedError.message ?? `HTTP ${response.status}`,
107
+ errorCode: parsedError.errorCode,
108
+ link: parsedError.link,
109
+ payload
110
+ });
111
+ }
112
+ return payload;
113
+ }
114
+ finally {
115
+ clear();
116
+ }
117
+ };
118
+ exports.requestJson = requestJson;
119
+ const requestStream = async ({ url, method = 'GET', body, bearerToken, timeout }) => {
120
+ const { signal, clear } = timeoutSignal(timeout);
121
+ try {
122
+ const response = await fetch(url, {
123
+ method,
124
+ headers: {
125
+ ...(body !== undefined ? { 'Content-Type': 'application/json' } : {}),
126
+ ...(bearerToken ? { Authorization: `Bearer ${bearerToken}` } : {})
127
+ },
128
+ body: body !== undefined ? JSON.stringify(body) : undefined,
129
+ signal
130
+ });
131
+ if (!response.ok) {
132
+ const payload = await parseBody(response);
133
+ const parsedError = parsePayloadError(payload);
134
+ throw new FlowerbaseHttpError({
135
+ method,
136
+ url,
137
+ statusCode: response.status,
138
+ statusText: response.statusText,
139
+ error: parsedError.message ?? `HTTP ${response.status}`,
140
+ errorCode: parsedError.errorCode,
141
+ link: parsedError.link,
142
+ payload
143
+ });
144
+ }
145
+ if (!response.body) {
146
+ throw new Error('Response stream body is missing');
147
+ }
148
+ const reader = response.body.getReader();
149
+ return {
150
+ async *[Symbol.asyncIterator]() {
48
151
  try {
49
- const parsed = JSON.parse(payload.error);
50
- if (parsed && typeof parsed === 'object' && 'message' in parsed && typeof parsed.message === 'string') {
51
- parsedErrorMessage = parsed.message;
152
+ while (true) {
153
+ const { done, value } = await reader.read();
154
+ if (done)
155
+ break;
156
+ if (value)
157
+ yield value;
52
158
  }
53
159
  }
54
- catch {
55
- parsedErrorMessage = null;
160
+ finally {
161
+ reader.releaseLock();
56
162
  }
57
163
  }
58
- const message = parsedErrorMessage ||
59
- (payload && typeof payload === 'object' && 'message' in payload && typeof payload.message === 'string'
60
- ? payload.message
61
- : null) ||
62
- (payload && typeof payload === 'object' && 'error' in payload && typeof payload.error === 'string'
63
- ? payload.error
64
- : null) ||
65
- `HTTP ${response.status}`;
66
- throw new FlowerbaseHttpError(message, response.status, payload);
67
- }
68
- return payload;
164
+ };
69
165
  }
70
166
  finally {
71
167
  clear();
72
168
  }
73
169
  };
74
- exports.requestJson = requestJson;
170
+ exports.requestStream = requestStream;
package/dist/index.d.ts CHANGED
@@ -2,6 +2,7 @@ import { BSON, EJSON, ObjectId, ObjectID } from './bson';
2
2
  export { App } from './app';
3
3
  export { User } from './user';
4
4
  export { Credentials } from './credentials';
5
+ export { MongoDBRealmError } from './http';
5
6
  export { BSON, EJSON, ObjectId, ObjectID };
6
7
  export type { AppConfig, CredentialsLike, UserLike, MongoClientLike, CollectionLike, WatchAsyncIterator } from './types';
7
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAA;AAExD,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAA;AAC3B,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAA;AAC1C,YAAY,EACV,SAAS,EACT,eAAe,EACf,QAAQ,EACR,eAAe,EACf,cAAc,EACd,kBAAkB,EACnB,MAAM,SAAS,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAA;AAExD,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAA;AAC3B,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAA;AAC1C,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAA;AAC1C,YAAY,EACV,SAAS,EACT,eAAe,EACf,QAAQ,EACR,eAAe,EACf,cAAc,EACd,kBAAkB,EACnB,MAAM,SAAS,CAAA"}
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ObjectID = exports.ObjectId = exports.EJSON = exports.BSON = exports.Credentials = exports.User = exports.App = void 0;
3
+ exports.ObjectID = exports.ObjectId = exports.EJSON = exports.BSON = exports.MongoDBRealmError = exports.Credentials = exports.User = exports.App = void 0;
4
4
  const bson_1 = require("./bson");
5
5
  Object.defineProperty(exports, "BSON", { enumerable: true, get: function () { return bson_1.BSON; } });
6
6
  Object.defineProperty(exports, "EJSON", { enumerable: true, get: function () { return bson_1.EJSON; } });
@@ -12,3 +12,5 @@ var user_1 = require("./user");
12
12
  Object.defineProperty(exports, "User", { enumerable: true, get: function () { return user_1.User; } });
13
13
  var credentials_1 = require("./credentials");
14
14
  Object.defineProperty(exports, "Credentials", { enumerable: true, get: function () { return credentials_1.Credentials; } });
15
+ var http_1 = require("./http");
16
+ Object.defineProperty(exports, "MongoDBRealmError", { enumerable: true, get: function () { return http_1.MongoDBRealmError; } });
package/dist/mongo.d.ts CHANGED
@@ -1,4 +1,4 @@
1
1
  import type { App } from './app';
2
2
  import { MongoClientLike } from './types';
3
- export declare const createMongoClient: (app: App) => MongoClientLike;
3
+ export declare const createMongoClient: (app: App, serviceName: string, userId: string) => MongoClientLike;
4
4
  //# sourceMappingURL=mongo.d.ts.map
@@ -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;AAoBzD,eAAO,MAAM,iBAAiB,QAAS,GAAG,KAAG,eAwC3C,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,MAAM,SAAS,CAAA;AAoBzD,eAAO,MAAM,iBAAiB,QAAS,GAAG,eAAe,MAAM,UAAU,MAAM,KAAG,eAoFhF,CAAA"}
package/dist/mongo.js CHANGED
@@ -20,7 +20,7 @@ const mapResult = (value) => {
20
20
  }
21
21
  return deserialize(value);
22
22
  };
23
- const createMongoClient = (app) => ({
23
+ const createMongoClient = (app, serviceName, userId) => ({
24
24
  db: (database) => ({
25
25
  collection: (collection) => {
26
26
  const callService = async (name, args) => {
@@ -31,18 +31,59 @@ const createMongoClient = (app) => ({
31
31
  ...serialize(args[0] ?? {}),
32
32
  ...(args[1] !== undefined ? { options: serialize(args[1]) } : {})
33
33
  }
34
- ]);
34
+ ], serviceName, userId);
35
35
  return mapResult(result);
36
36
  };
37
+ const normalizeWatchInput = (input) => {
38
+ if (Array.isArray(input)) {
39
+ return { pipeline: input, options: {} };
40
+ }
41
+ if (input && typeof input === 'object' && ('ids' in input || 'filter' in input)) {
42
+ const typed = input;
43
+ if (typed.ids && typed.filter) {
44
+ throw new Error('watch options cannot include both "ids" and "filter"');
45
+ }
46
+ const { ids, filter, ...options } = typed;
47
+ if (ids) {
48
+ return {
49
+ pipeline: [{ $match: { 'documentKey._id': { $in: ids } } }],
50
+ options
51
+ };
52
+ }
53
+ if (filter) {
54
+ return {
55
+ pipeline: [{ $match: filter }],
56
+ options
57
+ };
58
+ }
59
+ return { pipeline: [], options };
60
+ }
61
+ if (input && typeof input === 'object' && ('pipeline' in input || 'options' in input)) {
62
+ const typed = input;
63
+ return {
64
+ pipeline: typed.pipeline ?? [],
65
+ options: typed.options ?? {}
66
+ };
67
+ }
68
+ return { pipeline: [], options: input ?? {} };
69
+ };
37
70
  return {
38
71
  find: (query = {}, options = {}) => callService('find', [{ query, options }]),
39
72
  findOne: (query = {}, options = {}) => callService('findOne', [{ query, options }]),
73
+ findOneAndUpdate: (filter, update, options = {}) => callService('findOneAndUpdate', [{ filter, update, options }]),
74
+ findOneAndReplace: (filter, replacement, options = {}) => callService('findOneAndReplace', [{ filter, replacement, options }]),
75
+ findOneAndDelete: (filter, options = {}) => callService('findOneAndDelete', [{ filter, options }]),
76
+ aggregate: (pipeline) => callService('aggregate', [{ pipeline }]),
77
+ count: (query = {}, options = {}) => callService('count', [{ query, options }]),
40
78
  insertOne: (document, options = {}) => callService('insertOne', [{ document, options }]),
79
+ insertMany: (documents, options = {}) => callService('insertMany', [{ documents, options }]),
41
80
  updateOne: (filter, update, options = {}) => callService('updateOne', [{ filter, update, options }]),
42
81
  updateMany: (filter, update, options = {}) => callService('updateMany', [{ filter, update, options }]),
43
82
  deleteOne: (filter, options = {}) => callService('deleteOne', [{ query: filter, options }]),
44
- watch: (pipeline = [], options = {}) => {
45
- const session = app.getSessionOrThrow();
83
+ deleteMany: (filter, options = {}) => callService('deleteMany', [{ query: filter, options }]),
84
+ watch: (input) => {
85
+ const { pipeline, options } = normalizeWatchInput(input);
86
+ const session = app.getSessionOrThrow(userId);
46
87
  return (0, watch_1.createWatchIterator)({
47
88
  appId: app.id,
48
89
  baseUrl: app.baseUrl,
package/dist/session.d.ts CHANGED
@@ -1,6 +1,8 @@
1
1
  import { SessionData } from './types';
2
2
  export declare class SessionManager {
3
3
  private readonly key;
4
+ private readonly usersKey;
5
+ private readonly sessionsKey;
4
6
  private readonly storage;
5
7
  private session;
6
8
  constructor(appId: string);
@@ -8,5 +10,9 @@ export declare class SessionManager {
8
10
  get(): SessionData | null;
9
11
  set(session: SessionData): void;
10
12
  clear(): void;
13
+ getUsersOrder(): string[];
14
+ setUsersOrder(order: string[]): void;
15
+ getSessionsByUser(): Record<string, SessionData>;
16
+ setSessionsByUser(sessionsByUser: Record<string, SessionData>): void;
11
17
  }
12
18
  //# sourceMappingURL=session.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAwBrC,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;IAC5B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;IACvC,OAAO,CAAC,OAAO,CAA2B;gBAE9B,KAAK,EAAE,MAAM;IAKzB,IAAI,IAAI,WAAW,GAAG,IAAI;IAW1B,GAAG;IAIH,GAAG,CAAC,OAAO,EAAE,WAAW;IAKxB,KAAK;CAIN"}
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAwBrC,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,CAAe;IACvC,OAAO,CAAC,OAAO,CAA2B;gBAE9B,KAAK,EAAE,MAAM;IAOzB,IAAI,IAAI,WAAW,GAAG,IAAI;IAW1B,GAAG;IAIH,GAAG,CAAC,OAAO,EAAE,WAAW;IAKxB,KAAK;IAKL,aAAa;IAYb,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE;IAQ7B,iBAAiB;IAuBjB,iBAAiB,CAAC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC;CAO9D"}
package/dist/session.js CHANGED
@@ -25,6 +25,8 @@ class SessionManager {
25
25
  this.storage = getStorage();
26
26
  this.session = null;
27
27
  this.key = `flowerbase:${appId}:session`;
28
+ this.usersKey = `flowerbase:${appId}:users`;
29
+ this.sessionsKey = `flowerbase:${appId}:sessions`;
28
30
  this.session = this.load();
29
31
  }
30
32
  load() {
@@ -49,5 +51,55 @@ class SessionManager {
49
51
  this.session = null;
50
52
  this.storage.removeItem(this.key);
51
53
  }
54
+ getUsersOrder() {
55
+ const raw = this.storage.getItem(this.usersKey);
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
+ }
67
+ }
68
+ setUsersOrder(order) {
69
+ if (order.length === 0) {
70
+ this.storage.removeItem(this.usersKey);
71
+ return;
72
+ }
73
+ this.storage.setItem(this.usersKey, JSON.stringify(order));
74
+ }
75
+ getSessionsByUser() {
76
+ const raw = this.storage.getItem(this.sessionsKey);
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
+ }
96
+ }
97
+ setSessionsByUser(sessionsByUser) {
98
+ if (Object.keys(sessionsByUser).length === 0) {
99
+ this.storage.removeItem(this.sessionsKey);
100
+ return;
101
+ }
102
+ this.storage.setItem(this.sessionsKey, JSON.stringify(sessionsByUser));
103
+ }
52
104
  }
53
105
  exports.SessionManager = SessionManager;
@@ -1 +1 @@
1
- {"version":3,"file":"session.native.d.ts","sourceRoot":"","sources":["../src/session.native.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AA+BrC,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;IAC5B,OAAO,CAAC,OAAO,CAA2B;IAC1C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAoB;IACjD,OAAO,CAAC,gBAAgB,CAA6B;gBAEzC,KAAK,EAAE,MAAM;IAMzB,OAAO,CAAC,uBAAuB;IAwB/B,IAAI,IAAI,WAAW,GAAG,IAAI;IAI1B,GAAG;IAIH,GAAG,CAAC,OAAO,EAAE,WAAW;IAYxB,KAAK;CAUN"}
1
+ {"version":3,"file":"session.native.d.ts","sourceRoot":"","sources":["../src/session.native.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAsBrC,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;IAC5B,OAAO,CAAC,OAAO,CAA2B;IAC1C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAoB;IACjD,OAAO,CAAC,gBAAgB,CAA6B;gBAEzC,KAAK,EAAE,MAAM;IAMzB,OAAO,CAAC,uBAAuB;IAwB/B,IAAI,IAAI,WAAW,GAAG,IAAI;IAI1B,GAAG;IAIH,GAAG,CAAC,OAAO,EAAE,WAAW;IAYxB,KAAK;CAUN"}
@@ -1,17 +1,12 @@
1
1
  "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
2
5
  Object.defineProperty(exports, "__esModule", { value: true });
3
6
  exports.SessionManager = void 0;
7
+ const async_storage_1 = __importDefault(require("@react-native-async-storage/async-storage"));
4
8
  const memoryStore = new Map();
5
- const getAsyncStorage = () => {
6
- try {
7
- const req = (0, eval)('require');
8
- const asyncStorageModule = req('@react-native-async-storage/async-storage');
9
- return asyncStorageModule?.default ?? null;
10
- }
11
- catch {
12
- return null;
13
- }
14
- };
9
+ const getAsyncStorage = () => async_storage_1.default;
15
10
  const parseSession = (raw) => {
16
11
  if (!raw)
17
12
  return null;
package/dist/types.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  export type AppConfig = {
2
2
  id: string;
3
- baseUrl: string;
3
+ baseUrl?: string;
4
4
  timeout?: number;
5
5
  };
6
6
  export type CredentialsLike = {
@@ -12,6 +12,9 @@ export type CredentialsLike = {
12
12
  } | {
13
13
  provider: 'custom-function';
14
14
  payload: Record<string, unknown>;
15
+ } | {
16
+ provider: 'custom-token';
17
+ token: string;
15
18
  };
16
19
  export type SessionData = {
17
20
  accessToken: string;
@@ -46,11 +49,18 @@ export type WatchAsyncIterator<TChange = unknown> = AsyncIterableIterator<TChang
46
49
  export interface CollectionLike {
47
50
  find: (query?: Record<string, unknown>, options?: Record<string, unknown>) => Promise<unknown>;
48
51
  findOne: (query?: Record<string, unknown>, options?: Record<string, unknown>) => Promise<unknown>;
52
+ findOneAndUpdate: (filter: Record<string, unknown>, update: Record<string, unknown>, options?: Record<string, unknown>) => Promise<unknown>;
53
+ findOneAndReplace: (filter: Record<string, unknown>, replacement: Record<string, unknown>, options?: Record<string, unknown>) => Promise<unknown>;
54
+ findOneAndDelete: (filter: Record<string, unknown>, options?: Record<string, unknown>) => Promise<unknown>;
55
+ aggregate: (pipeline: Record<string, unknown>[]) => Promise<unknown>;
56
+ count: (filter?: Record<string, unknown>, options?: Record<string, unknown>) => Promise<unknown>;
49
57
  insertOne: (document: Record<string, unknown>, options?: Record<string, unknown>) => Promise<unknown>;
58
+ insertMany: (documents: Record<string, unknown>[], options?: Record<string, unknown>) => Promise<unknown>;
50
59
  updateOne: (filter: Record<string, unknown>, update: Record<string, unknown>, options?: Record<string, unknown>) => Promise<unknown>;
51
60
  updateMany: (filter: Record<string, unknown>, update: Record<string, unknown>, options?: Record<string, unknown>) => Promise<unknown>;
52
61
  deleteOne: (filter: Record<string, unknown>, options?: Record<string, unknown>) => Promise<unknown>;
53
- watch: (pipeline?: unknown[], options?: Record<string, unknown>) => WatchAsyncIterator<unknown>;
62
+ deleteMany: (filter: Record<string, unknown>, options?: Record<string, unknown>) => Promise<unknown>;
63
+ watch: (options?: unknown) => WatchAsyncIterator<unknown>;
54
64
  }
55
65
  export interface MongoDbLike {
56
66
  collection: (name: string) => CollectionLike;
@@ -60,14 +70,28 @@ export interface MongoClientLike {
60
70
  }
61
71
  export interface UserLike {
62
72
  id: string;
73
+ state: 'active' | 'logged-out' | 'removed';
74
+ isLoggedIn: boolean;
75
+ accessToken: string | null;
76
+ refreshToken: string | null;
77
+ providerType: string | null;
78
+ identities: unknown[];
79
+ customData: Record<string, unknown>;
63
80
  profile?: {
64
81
  email?: string;
65
82
  [key: string]: unknown;
66
83
  };
67
- functions: Record<string, (...args: unknown[]) => Promise<unknown>>;
84
+ functions: Record<string, (...args: unknown[]) => Promise<unknown>> & {
85
+ callFunction: (name: string, ...args: unknown[]) => Promise<unknown>;
86
+ callFunctionStreaming: (name: string, ...args: unknown[]) => Promise<AsyncIterable<Uint8Array>>;
87
+ };
68
88
  logOut: () => Promise<void>;
89
+ callFunction: (name: string, ...args: unknown[]) => Promise<unknown>;
69
90
  refreshAccessToken: () => Promise<string>;
70
- refreshCustomData: () => Promise<ProfileData>;
91
+ refreshCustomData: () => Promise<Record<string, unknown>>;
71
92
  mongoClient: (serviceName: string) => MongoClientLike;
93
+ addListener: (callback: () => void) => void;
94
+ removeListener: (callback: () => void) => void;
95
+ removeAllListeners: () => void;
72
96
  }
73
97
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
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,17 +1,37 @@
1
1
  import type { App } from './app';
2
- import { MongoClientLike, ProfileData, UserLike } from './types';
2
+ import { MongoClientLike, UserLike } from './types';
3
3
  export declare class User implements UserLike {
4
- id: string;
4
+ readonly id: string;
5
+ customData: Record<string, unknown>;
5
6
  profile?: {
6
7
  email?: string;
7
8
  [key: string]: unknown;
8
9
  };
9
10
  private readonly app;
10
- functions: Record<string, (...args: unknown[]) => Promise<unknown>>;
11
+ private _providerType;
12
+ private readonly listeners;
13
+ functions: Record<string, (...args: unknown[]) => Promise<unknown>> & {
14
+ callFunction: (name: string, ...args: unknown[]) => Promise<unknown>;
15
+ callFunctionStreaming: (name: string, ...args: unknown[]) => Promise<AsyncIterable<Uint8Array>>;
16
+ };
11
17
  constructor(app: App, id: string);
18
+ get state(): "active" | "logged-out" | "removed";
19
+ get isLoggedIn(): boolean;
20
+ get providerType(): string | null;
21
+ get identities(): unknown[];
22
+ private resolveCustomDataFromToken;
23
+ get accessToken(): string | null;
24
+ get refreshToken(): string | null;
25
+ setProviderType(providerType: string): void;
26
+ private decodeAccessTokenPayload;
12
27
  logOut(): Promise<void>;
28
+ callFunction(name: string, ...args: unknown[]): Promise<any>;
13
29
  refreshAccessToken(): Promise<string>;
14
- refreshCustomData(): Promise<ProfileData>;
30
+ refreshCustomData(): Promise<Record<string, unknown>>;
15
31
  mongoClient(serviceName: string): MongoClientLike;
32
+ addListener(callback: () => void): void;
33
+ removeListener(callback: () => void): void;
34
+ removeAllListeners(): void;
35
+ notifyListeners(): void;
16
36
  }
17
37
  //# sourceMappingURL=user.d.ts.map
@@ -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,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAEhE,qBAAa,IAAK,YAAW,QAAQ;IACnC,EAAE,EAAE,MAAM,CAAA;IACV,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;IAEzB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC,CAAA;gBAEvD,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM;IAM1B,MAAM;IAIN,kBAAkB;IAIlB,iBAAiB,IAAI,OAAO,CAAC,WAAW,CAAC;IAM/C,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,eAAe;CAMlD"}
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;AAEnD,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,MAAM,GAAG,eAAe;IAIjD,WAAW,CAAC,QAAQ,EAAE,MAAM,IAAI;IAIhC,cAAc,CAAC,QAAQ,EAAE,MAAM,IAAI;IAInC,kBAAkB;IAIlB,eAAe;CAShB"}