@ofidj/node 1.0.0
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/CHANGELOG.md +60 -0
- package/QUICKSTART.md +224 -0
- package/README.md +72 -0
- package/api/FidjApiAppsCreateRequest.d.ts +20 -0
- package/api/FidjApiAppsCreateRequest.js +3 -0
- package/api/FidjApiAppsCreateResponse.d.ts +8 -0
- package/api/FidjApiAppsCreateResponse.js +3 -0
- package/api/FidjApiAppsDetailsResponse.d.ts +18 -0
- package/api/FidjApiAppsDetailsResponse.js +3 -0
- package/api/FidjApiAppsMeDetailsResponse.d.ts +6 -0
- package/api/FidjApiAppsMeDetailsResponse.js +3 -0
- package/api/FidjApiAppsOAuthStatusResponse.d.ts +5 -0
- package/api/FidjApiAppsOAuthStatusResponse.js +3 -0
- package/api/FidjApiAppsPublicResponse.d.ts +7 -0
- package/api/FidjApiAppsPublicResponse.js +3 -0
- package/api/FidjApiAppsUpdateRequest.d.ts +2 -0
- package/api/FidjApiAppsUpdateRequest.js +3 -0
- package/api/FidjApiAppsUsersResponse.d.ts +7 -0
- package/api/FidjApiAppsUsersResponse.js +3 -0
- package/api/FidjApiConsentsHistoryResponse.d.ts +10 -0
- package/api/FidjApiConsentsHistoryResponse.js +3 -0
- package/api/FidjApiConsentsResponse.d.ts +9 -0
- package/api/FidjApiConsentsResponse.js +3 -0
- package/api/FidjApiConsentsUpdateRequest.d.ts +8 -0
- package/api/FidjApiConsentsUpdateRequest.js +3 -0
- package/api/FidjApiContractsCreateRequest.d.ts +5 -0
- package/api/FidjApiContractsCreateRequest.js +3 -0
- package/api/FidjApiContractsListResponse.d.ts +10 -0
- package/api/FidjApiContractsListResponse.js +3 -0
- package/api/FidjApiContractsUpdateRequest.d.ts +3 -0
- package/api/FidjApiContractsUpdateRequest.js +3 -0
- package/api/FidjApiErrorResponse.d.ts +3 -0
- package/api/FidjApiErrorResponse.js +3 -0
- package/api/FidjApiOAuthTokenRequest.d.ts +8 -0
- package/api/FidjApiOAuthTokenRequest.js +3 -0
- package/api/FidjApiOAuthTokenResponse.d.ts +6 -0
- package/api/FidjApiOAuthTokenResponse.js +3 -0
- package/api/FidjApiStatusResponse.d.ts +8 -0
- package/api/FidjApiStatusResponse.js +3 -0
- package/api/FidjApiTokensCreateRequest.d.ts +8 -0
- package/api/FidjApiTokensCreateRequest.js +3 -0
- package/api/FidjApiTokensCreateResponse.d.ts +7 -0
- package/api/FidjApiTokensCreateResponse.js +3 -0
- package/api/FidjApiUsersCreateRequest.d.ts +7 -0
- package/api/FidjApiUsersCreateRequest.js +3 -0
- package/api/FidjApiUsersCreateResponse.d.ts +13 -0
- package/api/FidjApiUsersCreateResponse.js +3 -0
- package/api/FidjApiUsersForgotRequest.d.ts +3 -0
- package/api/FidjApiUsersForgotRequest.js +3 -0
- package/api/FidjApiUsersMeDetailsResponse.d.ts +13 -0
- package/api/FidjApiUsersMeDetailsResponse.js +3 -0
- package/api/FidjApiUsersMeResponse.d.ts +6 -0
- package/api/FidjApiUsersMeResponse.js +3 -0
- package/api/FidjApiUsersMeUpdateRequest.d.ts +4 -0
- package/api/FidjApiUsersMeUpdateRequest.js +3 -0
- package/api/index.d.ts +26 -0
- package/api/index.js +50 -0
- package/bpInfo.d.ts +3 -0
- package/bpInfo.js +5 -0
- package/connection/Ajax.d.ts +65 -0
- package/connection/Ajax.js +230 -0
- package/connection/Client.d.ts +38 -0
- package/connection/Client.js +278 -0
- package/connection/ClientToken.d.ts +6 -0
- package/connection/ClientToken.js +12 -0
- package/connection/ClientTokens.d.ts +8 -0
- package/connection/ClientTokens.js +13 -0
- package/connection/ClientUser.d.ts +6 -0
- package/connection/ClientUser.js +12 -0
- package/connection/Connection.d.ts +65 -0
- package/connection/Connection.js +613 -0
- package/connection/Interfaces.d.ts +3 -0
- package/connection/Interfaces.js +3 -0
- package/connection/OwnerUser.d.ts +9 -0
- package/connection/OwnerUser.js +60 -0
- package/connection/index.d.ts +8 -0
- package/connection/index.js +25 -0
- package/index.d.ts +5 -0
- package/index.js +23 -0
- package/package.json +71 -0
- package/sdk/FidjError.d.ts +8 -0
- package/sdk/FidjError.js +18 -0
- package/sdk/FidjNodeService.d.ts +77 -0
- package/sdk/FidjNodeService.js +682 -0
- package/sdk/IService.d.ts +38 -0
- package/sdk/IService.js +3 -0
- package/sdk/Interfaces.d.ts +67 -0
- package/sdk/Interfaces.js +11 -0
- package/sdk/LoggerService.d.ts +9 -0
- package/sdk/LoggerService.js +37 -0
- package/sdk/index.d.ts +6 -0
- package/sdk/index.js +25 -0
- package/session/Session.d.ts +28 -0
- package/session/Session.js +398 -0
- package/session/index.d.ts +1 -0
- package/session/index.js +18 -0
- package/tools/Base64.d.ts +7 -0
- package/tools/Base64.js +50 -0
- package/tools/Storage.d.ts +32 -0
- package/tools/Storage.js +132 -0
- package/tools/Xor.d.ts +7 -0
- package/tools/Xor.js +36 -0
- package/tools/index.d.ts +3 -0
- package/tools/index.js +20 -0
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { EndpointCallInterface, ModuleServiceInitOptionsInterface, ModuleServiceLoginCallOptionsInterface, ModuleServiceLoginOptionsInterface } from './Interfaces';
|
|
2
|
+
import { ClientUser } from '../connection';
|
|
3
|
+
import { FidjApiConsentsResponse, FidjApiConsentsUpdateRequest, FidjApiConsentsHistoryResponse, FidjApiUsersMeResponse, FidjApiUsersMeDetailsResponse, FidjApiUsersMeUpdateRequest } from '../api';
|
|
4
|
+
export interface IService {
|
|
5
|
+
init(fidjId?: string, options?: ModuleServiceInitOptionsInterface): Promise<void>;
|
|
6
|
+
login(login: string, password: string, options?: ModuleServiceLoginCallOptionsInterface): Promise<ClientUser>;
|
|
7
|
+
loginInDemoMode(options?: ModuleServiceLoginOptionsInterface): Promise<ClientUser>;
|
|
8
|
+
initAndLogin(login: string, password: string, fidjId?: string, options?: ModuleServiceInitOptionsInterface, loginOptions?: ModuleServiceLoginCallOptionsInterface): Promise<ClientUser>;
|
|
9
|
+
initDemo(fidjId?: string, options?: ModuleServiceInitOptionsInterface): Promise<ClientUser>;
|
|
10
|
+
sendOnEndpoint<TData = any, TResponse = any>(input: EndpointCallInterface<TData>): Promise<{
|
|
11
|
+
status: number;
|
|
12
|
+
data?: TResponse;
|
|
13
|
+
}>;
|
|
14
|
+
getMe(): Promise<{
|
|
15
|
+
status: number;
|
|
16
|
+
data?: FidjApiUsersMeResponse;
|
|
17
|
+
}>;
|
|
18
|
+
getMeDetails(): Promise<{
|
|
19
|
+
status: number;
|
|
20
|
+
data?: FidjApiUsersMeDetailsResponse;
|
|
21
|
+
}>;
|
|
22
|
+
updateMe(data: FidjApiUsersMeUpdateRequest): Promise<{
|
|
23
|
+
status: number;
|
|
24
|
+
data?: FidjApiUsersMeResponse;
|
|
25
|
+
}>;
|
|
26
|
+
getConsents(): Promise<{
|
|
27
|
+
status: number;
|
|
28
|
+
data?: FidjApiConsentsResponse;
|
|
29
|
+
}>;
|
|
30
|
+
putConsents(data: FidjApiConsentsUpdateRequest): Promise<{
|
|
31
|
+
status: number;
|
|
32
|
+
data?: FidjApiConsentsResponse;
|
|
33
|
+
}>;
|
|
34
|
+
getConsentsHistory(): Promise<{
|
|
35
|
+
status: number;
|
|
36
|
+
data?: FidjApiConsentsHistoryResponse;
|
|
37
|
+
}>;
|
|
38
|
+
}
|
package/sdk/IService.js
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSVNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2RrL0lTZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIifQ==
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
export interface ErrorInterface {
|
|
2
|
+
code: number;
|
|
3
|
+
reason: string;
|
|
4
|
+
}
|
|
5
|
+
export interface EndpointInterface {
|
|
6
|
+
key: string;
|
|
7
|
+
url: string;
|
|
8
|
+
blocked: boolean;
|
|
9
|
+
}
|
|
10
|
+
export interface EndpointFilterInterface {
|
|
11
|
+
key?: string;
|
|
12
|
+
showBlocked?: boolean;
|
|
13
|
+
}
|
|
14
|
+
export interface EndpointCallInterface<TData = any> {
|
|
15
|
+
verb: string;
|
|
16
|
+
key?: string;
|
|
17
|
+
relativePath?: string;
|
|
18
|
+
data?: TData;
|
|
19
|
+
defaultKeyUrl?: string;
|
|
20
|
+
timeout?: number;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* prod : true by default
|
|
24
|
+
* useDB : false by default
|
|
25
|
+
* crypto : false by default
|
|
26
|
+
* logLevel : NONE by default
|
|
27
|
+
* apiEndpoint : overrides the auto-detected API URL (useful for local dev against fidj-api sandbox)
|
|
28
|
+
*/
|
|
29
|
+
export interface ModuleServiceInitOptionsInterface {
|
|
30
|
+
prod?: boolean;
|
|
31
|
+
useDB?: boolean;
|
|
32
|
+
crypto?: boolean;
|
|
33
|
+
logLevel?: LoggerLevelEnum;
|
|
34
|
+
apiEndpoint?: string;
|
|
35
|
+
}
|
|
36
|
+
export interface ModuleServiceLoginOptionsInterface {
|
|
37
|
+
accessToken?: string;
|
|
38
|
+
idToken?: string;
|
|
39
|
+
refreshToken?: string;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Options for the standard email+password login() call.
|
|
43
|
+
* autoSignup: when true (default), an unknown email auto-creates an account (Fidj's optimistic
|
|
44
|
+
* auth — Zero-Friction signup, epic FIDJ-5/FIDJ-12). Pass false to force strict login: fidj-api
|
|
45
|
+
* returns 401 if the email is unknown.
|
|
46
|
+
*/
|
|
47
|
+
export interface ModuleServiceLoginCallOptionsInterface {
|
|
48
|
+
autoSignup?: boolean;
|
|
49
|
+
}
|
|
50
|
+
export interface SdkInterface {
|
|
51
|
+
org: string;
|
|
52
|
+
version: string;
|
|
53
|
+
prod: boolean;
|
|
54
|
+
useDB: boolean;
|
|
55
|
+
}
|
|
56
|
+
export declare enum LoggerLevelEnum {
|
|
57
|
+
INFO = 1,
|
|
58
|
+
WARN = 2,
|
|
59
|
+
ERROR = 3,
|
|
60
|
+
NONE = 4
|
|
61
|
+
}
|
|
62
|
+
export interface LoggerInterface {
|
|
63
|
+
setLevel: (LoggerLevelEnum: any) => void;
|
|
64
|
+
log: (a?: any, b?: any, c?: any, d?: any, e?: any, f?: any) => any;
|
|
65
|
+
warn: (a?: any, b?: any, c?: any, d?: any, e?: any, f?: any) => any;
|
|
66
|
+
error: (a?: any, b?: any, c?: any, d?: any, e?: any, f?: any) => any;
|
|
67
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LoggerLevelEnum = void 0;
|
|
4
|
+
var LoggerLevelEnum;
|
|
5
|
+
(function (LoggerLevelEnum) {
|
|
6
|
+
LoggerLevelEnum[LoggerLevelEnum["INFO"] = 1] = "INFO";
|
|
7
|
+
LoggerLevelEnum[LoggerLevelEnum["WARN"] = 2] = "WARN";
|
|
8
|
+
LoggerLevelEnum[LoggerLevelEnum["ERROR"] = 3] = "ERROR";
|
|
9
|
+
LoggerLevelEnum[LoggerLevelEnum["NONE"] = 4] = "NONE";
|
|
10
|
+
})(LoggerLevelEnum || (exports.LoggerLevelEnum = LoggerLevelEnum = {}));
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW50ZXJmYWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZGsvSW50ZXJmYWNlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFrRUEsSUFBWSxlQUtYO0FBTEQsV0FBWSxlQUFlO0lBQ3ZCLHFEQUFRLENBQUE7SUFDUixxREFBUSxDQUFBO0lBQ1IsdURBQVMsQ0FBQTtJQUNULHFEQUFRLENBQUE7QUFDWixDQUFDLEVBTFcsZUFBZSwrQkFBZixlQUFlLFFBSzFCIn0=
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { LoggerInterface, LoggerLevelEnum } from './Interfaces';
|
|
2
|
+
export declare class LoggerService implements LoggerInterface {
|
|
3
|
+
private level?;
|
|
4
|
+
constructor(level?: LoggerLevelEnum);
|
|
5
|
+
log(message: string, args: [any]): void;
|
|
6
|
+
warn(message: string, args: [any]): void;
|
|
7
|
+
error(message: string, args: [any]): void;
|
|
8
|
+
setLevel(level: LoggerLevelEnum): void;
|
|
9
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.LoggerService = void 0;
|
|
4
|
+
const Interfaces_1 = require("./Interfaces");
|
|
5
|
+
class LoggerService {
|
|
6
|
+
constructor(level) {
|
|
7
|
+
this.level = level;
|
|
8
|
+
if (!level) {
|
|
9
|
+
this.level = Interfaces_1.LoggerLevelEnum.ERROR;
|
|
10
|
+
}
|
|
11
|
+
if (typeof console === 'undefined') {
|
|
12
|
+
this.level = Interfaces_1.LoggerLevelEnum.NONE;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
log(message, args) {
|
|
16
|
+
if (this.level === Interfaces_1.LoggerLevelEnum.INFO) {
|
|
17
|
+
console.log(message, args);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
warn(message, args) {
|
|
21
|
+
if (this.level === Interfaces_1.LoggerLevelEnum.INFO || this.level === Interfaces_1.LoggerLevelEnum.WARN) {
|
|
22
|
+
console.warn(message, args);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
error(message, args) {
|
|
26
|
+
if (this.level === Interfaces_1.LoggerLevelEnum.INFO ||
|
|
27
|
+
this.level === Interfaces_1.LoggerLevelEnum.WARN ||
|
|
28
|
+
this.level === Interfaces_1.LoggerLevelEnum.ERROR) {
|
|
29
|
+
console.error(message, args);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
setLevel(level) {
|
|
33
|
+
this.level = level;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
exports.LoggerService = LoggerService;
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTG9nZ2VyU2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZGsvTG9nZ2VyU2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBOEQ7QUFFOUQsTUFBYSxhQUFhO0lBQ3RCLFlBQW9CLEtBQXVCO1FBQXZCLFVBQUssR0FBTCxLQUFLLENBQWtCO1FBQ3ZDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUNULElBQUksQ0FBQyxLQUFLLEdBQUcsNEJBQWUsQ0FBQyxLQUFLLENBQUM7UUFDdkMsQ0FBQztRQUVELElBQUksT0FBTyxPQUFPLEtBQUssV0FBVyxFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDLEtBQUssR0FBRyw0QkFBZSxDQUFDLElBQUksQ0FBQztRQUN0QyxDQUFDO0lBQ0wsQ0FBQztJQUVELEdBQUcsQ0FBQyxPQUFlLEVBQUUsSUFBVztRQUM1QixJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssNEJBQWUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN0QyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMvQixDQUFDO0lBQ0wsQ0FBQztJQUVELElBQUksQ0FBQyxPQUFlLEVBQUUsSUFBVztRQUM3QixJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssNEJBQWUsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyw0QkFBZSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzdFLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2hDLENBQUM7SUFDTCxDQUFDO0lBRUQsS0FBSyxDQUFDLE9BQWUsRUFBRSxJQUFXO1FBQzlCLElBQ0ksSUFBSSxDQUFDLEtBQUssS0FBSyw0QkFBZSxDQUFDLElBQUk7WUFDbkMsSUFBSSxDQUFDLEtBQUssS0FBSyw0QkFBZSxDQUFDLElBQUk7WUFDbkMsSUFBSSxDQUFDLEtBQUssS0FBSyw0QkFBZSxDQUFDLEtBQUssRUFDdEMsQ0FBQztZQUNDLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2pDLENBQUM7SUFDTCxDQUFDO0lBRUQsUUFBUSxDQUFDLEtBQXNCO1FBQzNCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ3ZCLENBQUM7Q0FDSjtBQXBDRCxzQ0FvQ0MifQ==
|
package/sdk/index.d.ts
ADDED
package/sdk/index.js
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.LocalStorage = void 0;
|
|
18
|
+
__exportStar(require("./FidjError"), exports);
|
|
19
|
+
__exportStar(require("./Interfaces"), exports);
|
|
20
|
+
__exportStar(require("./IService"), exports);
|
|
21
|
+
__exportStar(require("./FidjNodeService"), exports);
|
|
22
|
+
__exportStar(require("./LoggerService"), exports);
|
|
23
|
+
var Storage_1 = require("../tools/Storage");
|
|
24
|
+
Object.defineProperty(exports, "LocalStorage", { enumerable: true, get: function () { return Storage_1.LocalStorage; } });
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc2RrL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsOENBQTRCO0FBQzVCLCtDQUE2QjtBQUM3Qiw2Q0FBMkI7QUFDM0Isb0RBQWtDO0FBQ2xDLGtEQUFnQztBQUNoQyw0Q0FBOEM7QUFBdEMsdUdBQUEsWUFBWSxPQUFBIn0=
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { EndpointInterface, ErrorInterface } from '../sdk';
|
|
2
|
+
export interface SessionCryptoInterface {
|
|
3
|
+
obj: object;
|
|
4
|
+
method: string;
|
|
5
|
+
}
|
|
6
|
+
export declare class Session {
|
|
7
|
+
dbRecordCount: number;
|
|
8
|
+
dbLastSync: number;
|
|
9
|
+
private db;
|
|
10
|
+
private remoteDb;
|
|
11
|
+
private remoteUri;
|
|
12
|
+
private dbs;
|
|
13
|
+
constructor();
|
|
14
|
+
static write(item: any): string;
|
|
15
|
+
static value(item: any): any;
|
|
16
|
+
static extractJson(item: any): any;
|
|
17
|
+
isReady(): boolean;
|
|
18
|
+
create(uid: string, force?: boolean): Promise<any | ErrorInterface>;
|
|
19
|
+
destroy(): Promise<void>;
|
|
20
|
+
setRemote(dbs: Array<EndpointInterface>): void;
|
|
21
|
+
sync(userId: string): Promise<void | ErrorInterface>;
|
|
22
|
+
put(data: any, _id: string, uid: string, oid: string, ave: string, crypto?: SessionCryptoInterface): Promise<any | ErrorInterface>;
|
|
23
|
+
remove(data_id: string): Promise<void | ErrorInterface>;
|
|
24
|
+
get(data_id: string, crypto?: SessionCryptoInterface): Promise<any | ErrorInterface>;
|
|
25
|
+
getAll(crypto?: SessionCryptoInterface): Promise<Array<any> | ErrorInterface>;
|
|
26
|
+
isEmpty(): Promise<boolean | ErrorInterface>;
|
|
27
|
+
info(): Promise<any>;
|
|
28
|
+
}
|
|
@@ -0,0 +1,398 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// import PouchDB from 'pouchdb';
|
|
3
|
+
// let PouchDB: any;
|
|
4
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
5
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
6
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
7
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
8
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
9
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
10
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
11
|
+
});
|
|
12
|
+
};
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.Session = void 0;
|
|
15
|
+
// import PouchDB from 'pouchdb/dist/pouchdb.js';
|
|
16
|
+
const sdk_1 = require("../sdk");
|
|
17
|
+
const FidjPouch = null;
|
|
18
|
+
class Session {
|
|
19
|
+
constructor() {
|
|
20
|
+
this.db = null;
|
|
21
|
+
this.dbRecordCount = 0;
|
|
22
|
+
this.dbLastSync = null;
|
|
23
|
+
this.remoteDb = null;
|
|
24
|
+
this.dbs = [];
|
|
25
|
+
}
|
|
26
|
+
static write(item) {
|
|
27
|
+
let value = 'null';
|
|
28
|
+
const t = typeof item;
|
|
29
|
+
if (t === 'undefined') {
|
|
30
|
+
value = 'null';
|
|
31
|
+
}
|
|
32
|
+
else if (value === null) {
|
|
33
|
+
value = 'null';
|
|
34
|
+
}
|
|
35
|
+
else if (t === 'string') {
|
|
36
|
+
value = JSON.stringify({ string: item });
|
|
37
|
+
}
|
|
38
|
+
else if (t === 'number') {
|
|
39
|
+
value = JSON.stringify({ number: item });
|
|
40
|
+
}
|
|
41
|
+
else if (t === 'boolean') {
|
|
42
|
+
value = JSON.stringify({ bool: item });
|
|
43
|
+
}
|
|
44
|
+
else if (t === 'object') {
|
|
45
|
+
value = JSON.stringify({ json: item });
|
|
46
|
+
}
|
|
47
|
+
return value;
|
|
48
|
+
}
|
|
49
|
+
static value(item) {
|
|
50
|
+
let result = item;
|
|
51
|
+
if (typeof item !== 'object') {
|
|
52
|
+
// return item;
|
|
53
|
+
}
|
|
54
|
+
else if ('string' in item) {
|
|
55
|
+
result = item.string;
|
|
56
|
+
}
|
|
57
|
+
else if ('number' in item) {
|
|
58
|
+
result = item.number.valueOf();
|
|
59
|
+
}
|
|
60
|
+
else if ('bool' in item) {
|
|
61
|
+
result = item.bool.valueOf();
|
|
62
|
+
}
|
|
63
|
+
else if ('json' in item) {
|
|
64
|
+
result = item.json;
|
|
65
|
+
if (typeof result !== 'object') {
|
|
66
|
+
result = JSON.parse(result);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return result;
|
|
70
|
+
}
|
|
71
|
+
static extractJson(item) {
|
|
72
|
+
let result = item;
|
|
73
|
+
if (!item) {
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
if (typeof item === 'object' && 'json' in item) {
|
|
77
|
+
result = item.json;
|
|
78
|
+
}
|
|
79
|
+
if (typeof result === 'string') {
|
|
80
|
+
result = JSON.parse(result);
|
|
81
|
+
}
|
|
82
|
+
if (typeof result === 'object' && 'json' in result) {
|
|
83
|
+
result = result.json;
|
|
84
|
+
}
|
|
85
|
+
if (typeof result !== 'object') {
|
|
86
|
+
result = null;
|
|
87
|
+
}
|
|
88
|
+
return result;
|
|
89
|
+
}
|
|
90
|
+
isReady() {
|
|
91
|
+
return !!this.db;
|
|
92
|
+
}
|
|
93
|
+
create(uid, force) {
|
|
94
|
+
if (!force && this.db) {
|
|
95
|
+
return Promise.resolve(this.db);
|
|
96
|
+
}
|
|
97
|
+
this.dbRecordCount = 0;
|
|
98
|
+
this.dbLastSync = null; // new Date().getTime();
|
|
99
|
+
this.db = null;
|
|
100
|
+
uid = uid || 'default';
|
|
101
|
+
if (typeof window === 'undefined' || !FidjPouch) {
|
|
102
|
+
return Promise.resolve(this.db);
|
|
103
|
+
}
|
|
104
|
+
return new Promise((resolve, reject) => {
|
|
105
|
+
let opts = { location: 'default' };
|
|
106
|
+
try {
|
|
107
|
+
if (window['cordova']) {
|
|
108
|
+
opts = { location: 'default', adapter: 'cordova-sqlite' };
|
|
109
|
+
// const plugin = require('pouchdb-adapter-cordova-sqlite');
|
|
110
|
+
// if (plugin) { Pouch.plugin(plugin); }
|
|
111
|
+
// this.db = new Pouch('fidj_db', {adapter: 'cordova-sqlite'});
|
|
112
|
+
}
|
|
113
|
+
// } else {
|
|
114
|
+
this.db = new FidjPouch('fidj_db_' + uid, opts); // , {adapter: 'websql'} ???
|
|
115
|
+
// }
|
|
116
|
+
this.db
|
|
117
|
+
.info()
|
|
118
|
+
.then((info) => {
|
|
119
|
+
// todo if (info.adapter !== 'websql') {
|
|
120
|
+
return resolve(this.db);
|
|
121
|
+
// }
|
|
122
|
+
// const newopts: any = opts || {};
|
|
123
|
+
// newopts.adapter = 'idb';
|
|
124
|
+
//
|
|
125
|
+
// const newdb = new Pouch('fidj_db', opts);
|
|
126
|
+
// this.db.replicate.to(newdb)
|
|
127
|
+
// .then(() => {
|
|
128
|
+
// this.db = newdb;
|
|
129
|
+
// resolve();
|
|
130
|
+
// })
|
|
131
|
+
// .catch((err) => {
|
|
132
|
+
// reject(new FidjError(400, err.toString()))
|
|
133
|
+
// });
|
|
134
|
+
})
|
|
135
|
+
.catch((err) => {
|
|
136
|
+
reject(new sdk_1.FidjError(400, err));
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
catch (err) {
|
|
140
|
+
reject(new sdk_1.FidjError(500, err));
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
destroy() {
|
|
145
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
146
|
+
if (!this.db) {
|
|
147
|
+
this.dbRecordCount = 0;
|
|
148
|
+
this.dbLastSync = null;
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
if (this.db && !this.db.destroy) {
|
|
152
|
+
return Promise.reject(new sdk_1.FidjError(408, 'Need a valid db'));
|
|
153
|
+
}
|
|
154
|
+
return new Promise((resolve, reject) => {
|
|
155
|
+
this.db.destroy((err, info) => {
|
|
156
|
+
if (err) {
|
|
157
|
+
reject(new sdk_1.FidjError(500, err));
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
this.dbRecordCount = 0;
|
|
161
|
+
this.dbLastSync = null;
|
|
162
|
+
this.db = null;
|
|
163
|
+
resolve();
|
|
164
|
+
}
|
|
165
|
+
});
|
|
166
|
+
});
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
setRemote(dbs) {
|
|
170
|
+
this.dbs = dbs;
|
|
171
|
+
}
|
|
172
|
+
sync(userId) {
|
|
173
|
+
if (!this.db) {
|
|
174
|
+
return Promise.reject(new sdk_1.FidjError(408, 'need db'));
|
|
175
|
+
}
|
|
176
|
+
if (!this.dbs || !this.dbs.length) {
|
|
177
|
+
return Promise.reject(new sdk_1.FidjError(408, 'need a remote db'));
|
|
178
|
+
}
|
|
179
|
+
return new Promise((resolve, reject) => {
|
|
180
|
+
try {
|
|
181
|
+
if (!FidjPouch) {
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
if (!this.remoteDb || this.remoteUri !== this.dbs[0].url) {
|
|
185
|
+
this.remoteUri = this.dbs[0].url;
|
|
186
|
+
this.remoteDb = new FidjPouch(this.remoteUri);
|
|
187
|
+
// todo , {headers: {'Authorization': 'Bearer ' + id_token}});
|
|
188
|
+
}
|
|
189
|
+
this.db.replicate
|
|
190
|
+
.to(this.remoteDb)
|
|
191
|
+
.on('complete', (info) => {
|
|
192
|
+
return this.remoteDb.replicate
|
|
193
|
+
.to(this.db, {
|
|
194
|
+
filter: (doc) => {
|
|
195
|
+
return !!userId && !!doc && doc.fidjUserId === userId;
|
|
196
|
+
},
|
|
197
|
+
})
|
|
198
|
+
.on('complete', () => {
|
|
199
|
+
// this.logger
|
|
200
|
+
resolve();
|
|
201
|
+
})
|
|
202
|
+
.on('denied', (err) => reject({ code: 403, reason: { second: err } }))
|
|
203
|
+
.on('error', (err) => reject({ code: 401, reason: { second: err } }));
|
|
204
|
+
})
|
|
205
|
+
.on('denied', (err) => reject({ code: 403, reason: { first: err } }))
|
|
206
|
+
.on('error', (err) => reject({ code: 401, reason: { first: err } }));
|
|
207
|
+
}
|
|
208
|
+
catch (err) {
|
|
209
|
+
reject(new sdk_1.FidjError(500, err));
|
|
210
|
+
}
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
put(data, _id, uid, oid, ave, crypto) {
|
|
214
|
+
if (!this.db) {
|
|
215
|
+
return Promise.reject(new sdk_1.FidjError(408, 'need db'));
|
|
216
|
+
}
|
|
217
|
+
if (!data || !_id || !uid || !oid || !ave) {
|
|
218
|
+
return Promise.reject(new sdk_1.FidjError(400, 'need formated data'));
|
|
219
|
+
}
|
|
220
|
+
const dataWithoutIds = JSON.parse(JSON.stringify(data));
|
|
221
|
+
const toStore = {
|
|
222
|
+
_id: _id,
|
|
223
|
+
fidjUserId: uid,
|
|
224
|
+
fidjOrgId: oid,
|
|
225
|
+
fidjAppVersion: ave,
|
|
226
|
+
};
|
|
227
|
+
if (dataWithoutIds._rev) {
|
|
228
|
+
toStore._rev = '' + dataWithoutIds._rev;
|
|
229
|
+
}
|
|
230
|
+
delete dataWithoutIds._id;
|
|
231
|
+
delete dataWithoutIds._rev;
|
|
232
|
+
delete dataWithoutIds.fidjUserId;
|
|
233
|
+
delete dataWithoutIds.fidjOrgId;
|
|
234
|
+
delete dataWithoutIds.fidjAppVersion;
|
|
235
|
+
delete dataWithoutIds.fidjData;
|
|
236
|
+
let resultAsString = Session.write(Session.value(dataWithoutIds));
|
|
237
|
+
if (crypto) {
|
|
238
|
+
resultAsString = crypto.obj[crypto.method](resultAsString);
|
|
239
|
+
toStore.fidjDacr = resultAsString;
|
|
240
|
+
}
|
|
241
|
+
else {
|
|
242
|
+
toStore.fidjData = resultAsString;
|
|
243
|
+
}
|
|
244
|
+
return new Promise((resolve, reject) => {
|
|
245
|
+
this.db.put(toStore, (err, response) => {
|
|
246
|
+
if (response && response.ok && response.id && response.rev) {
|
|
247
|
+
this.dbRecordCount++;
|
|
248
|
+
// propagate _rev & _id
|
|
249
|
+
if (typeof data === 'object') {
|
|
250
|
+
data._rev = response.rev;
|
|
251
|
+
data._id = response.id;
|
|
252
|
+
resolve(data);
|
|
253
|
+
}
|
|
254
|
+
else {
|
|
255
|
+
resolve(response.id);
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
else {
|
|
259
|
+
reject(new sdk_1.FidjError(500, err));
|
|
260
|
+
}
|
|
261
|
+
});
|
|
262
|
+
});
|
|
263
|
+
}
|
|
264
|
+
remove(data_id) {
|
|
265
|
+
if (!this.db) {
|
|
266
|
+
return Promise.reject(new sdk_1.FidjError(408, 'need db'));
|
|
267
|
+
}
|
|
268
|
+
return new Promise((resolve, reject) => {
|
|
269
|
+
this.db
|
|
270
|
+
.get(data_id)
|
|
271
|
+
.then((doc) => {
|
|
272
|
+
doc._deleted = true;
|
|
273
|
+
return this.db.put(doc);
|
|
274
|
+
})
|
|
275
|
+
.then((result) => {
|
|
276
|
+
resolve();
|
|
277
|
+
})
|
|
278
|
+
.catch((err) => {
|
|
279
|
+
reject(err);
|
|
280
|
+
});
|
|
281
|
+
});
|
|
282
|
+
}
|
|
283
|
+
get(data_id, crypto) {
|
|
284
|
+
if (!this.db) {
|
|
285
|
+
return Promise.reject(new sdk_1.FidjError(408, 'Need db'));
|
|
286
|
+
}
|
|
287
|
+
return new Promise((resolve, reject) => {
|
|
288
|
+
this.db
|
|
289
|
+
.get(data_id)
|
|
290
|
+
.then((row) => {
|
|
291
|
+
if (!!row && (!!row.fidjDacr || !!row.fidjData)) {
|
|
292
|
+
let data = row.fidjDacr;
|
|
293
|
+
if (crypto && data) {
|
|
294
|
+
data = crypto.obj[crypto.method](data);
|
|
295
|
+
}
|
|
296
|
+
else if (row.fidjData) {
|
|
297
|
+
data = JSON.parse(row.fidjData);
|
|
298
|
+
}
|
|
299
|
+
const resultAsJson = Session.extractJson(data);
|
|
300
|
+
if (resultAsJson) {
|
|
301
|
+
resultAsJson._id = row._id;
|
|
302
|
+
resultAsJson._rev = row._rev;
|
|
303
|
+
resolve(JSON.parse(JSON.stringify(resultAsJson)));
|
|
304
|
+
}
|
|
305
|
+
else {
|
|
306
|
+
// row._deleted = true;
|
|
307
|
+
this.remove(row._id);
|
|
308
|
+
reject(new sdk_1.FidjError(400, 'Bad encoding'));
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
else {
|
|
312
|
+
reject(new sdk_1.FidjError(400, 'No data found'));
|
|
313
|
+
}
|
|
314
|
+
})
|
|
315
|
+
.catch((err) => reject(new sdk_1.FidjError(500, err)));
|
|
316
|
+
});
|
|
317
|
+
}
|
|
318
|
+
getAll(crypto) {
|
|
319
|
+
if (!this.db || !this.db.allDocs) {
|
|
320
|
+
return Promise.reject(new sdk_1.FidjError(408, 'Need a valid db'));
|
|
321
|
+
}
|
|
322
|
+
return new Promise((resolve, reject) => {
|
|
323
|
+
this.db
|
|
324
|
+
.allDocs({ include_docs: true, descending: true })
|
|
325
|
+
.then((rows) => {
|
|
326
|
+
const all = [];
|
|
327
|
+
rows.rows.forEach((row) => {
|
|
328
|
+
if (!!row && !!row.doc._id && (!!row.doc.fidjDacr || !!row.doc.fidjData)) {
|
|
329
|
+
let data = row.doc.fidjDacr;
|
|
330
|
+
if (crypto && data) {
|
|
331
|
+
data = crypto.obj[crypto.method](data);
|
|
332
|
+
}
|
|
333
|
+
else if (row.doc.fidjData) {
|
|
334
|
+
data = JSON.parse(row.doc.fidjData);
|
|
335
|
+
}
|
|
336
|
+
const resultAsJson = Session.extractJson(data);
|
|
337
|
+
if (resultAsJson) {
|
|
338
|
+
resultAsJson._id = row.doc._id;
|
|
339
|
+
resultAsJson._rev = row.doc._rev;
|
|
340
|
+
all.push(JSON.parse(JSON.stringify(resultAsJson)));
|
|
341
|
+
}
|
|
342
|
+
else {
|
|
343
|
+
console.error('Bad encoding : delete row');
|
|
344
|
+
// resultAsJson = {};
|
|
345
|
+
// resultAsJson._id = row.doc._id;
|
|
346
|
+
// resultAsJson._rev = row.doc._rev;
|
|
347
|
+
// resultAsJson._deleted = true;
|
|
348
|
+
// all.push(resultAsJson);
|
|
349
|
+
this.remove(row.doc._id);
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
else {
|
|
353
|
+
console.error('Bad encoding');
|
|
354
|
+
}
|
|
355
|
+
});
|
|
356
|
+
resolve(all);
|
|
357
|
+
})
|
|
358
|
+
.catch((err) => reject(new sdk_1.FidjError(400, err)));
|
|
359
|
+
});
|
|
360
|
+
}
|
|
361
|
+
isEmpty() {
|
|
362
|
+
if (!this.db || !this.db.allDocs) {
|
|
363
|
+
return Promise.reject(new sdk_1.FidjError(408, 'No db'));
|
|
364
|
+
}
|
|
365
|
+
return new Promise((resolve, reject) => {
|
|
366
|
+
this.db
|
|
367
|
+
.allDocs({
|
|
368
|
+
// filter: (doc) => {
|
|
369
|
+
// if (!self.connection.user || !self.connection.user._id) return doc;
|
|
370
|
+
// if (doc.fidjUserId === self.connection.user._id) return doc;
|
|
371
|
+
// }
|
|
372
|
+
})
|
|
373
|
+
.then((response) => {
|
|
374
|
+
if (!response) {
|
|
375
|
+
reject(new sdk_1.FidjError(400, 'No response'));
|
|
376
|
+
}
|
|
377
|
+
else {
|
|
378
|
+
this.dbRecordCount = response.total_rows;
|
|
379
|
+
if (response.total_rows && response.total_rows > 0) {
|
|
380
|
+
resolve(false);
|
|
381
|
+
}
|
|
382
|
+
else {
|
|
383
|
+
resolve(true);
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
})
|
|
387
|
+
.catch((err) => reject(new sdk_1.FidjError(400, err)));
|
|
388
|
+
});
|
|
389
|
+
}
|
|
390
|
+
info() {
|
|
391
|
+
if (!this.db) {
|
|
392
|
+
return Promise.reject(new sdk_1.FidjError(408, 'No db'));
|
|
393
|
+
}
|
|
394
|
+
return this.db.info();
|
|
395
|
+
}
|
|
396
|
+
}
|
|
397
|
+
exports.Session = Session;
|
|
398
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2Vzc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXNzaW9uL1Nlc3Npb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLGlDQUFpQztBQUNqQyxvQkFBb0I7Ozs7Ozs7Ozs7OztBQUVwQixpREFBaUQ7QUFDakQsZ0NBQW9FO0FBRXBFLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQztBQWF2QixNQUFhLE9BQU87SUFTaEI7UUFDSSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztRQUNmLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBSyxDQUFDLElBQVM7UUFDbEIsSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDO1FBQ25CLE1BQU0sQ0FBQyxHQUFHLE9BQU8sSUFBSSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxLQUFLLFdBQVcsRUFBRSxDQUFDO1lBQ3BCLEtBQUssR0FBRyxNQUFNLENBQUM7UUFDbkIsQ0FBQzthQUFNLElBQUksS0FBSyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ3hCLEtBQUssR0FBRyxNQUFNLENBQUM7UUFDbkIsQ0FBQzthQUFNLElBQUksQ0FBQyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ3hCLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7UUFDM0MsQ0FBQzthQUFNLElBQUksQ0FBQyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ3hCLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7UUFDM0MsQ0FBQzthQUFN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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './Session';
|