@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.
Files changed (104) hide show
  1. package/CHANGELOG.md +60 -0
  2. package/QUICKSTART.md +224 -0
  3. package/README.md +72 -0
  4. package/api/FidjApiAppsCreateRequest.d.ts +20 -0
  5. package/api/FidjApiAppsCreateRequest.js +3 -0
  6. package/api/FidjApiAppsCreateResponse.d.ts +8 -0
  7. package/api/FidjApiAppsCreateResponse.js +3 -0
  8. package/api/FidjApiAppsDetailsResponse.d.ts +18 -0
  9. package/api/FidjApiAppsDetailsResponse.js +3 -0
  10. package/api/FidjApiAppsMeDetailsResponse.d.ts +6 -0
  11. package/api/FidjApiAppsMeDetailsResponse.js +3 -0
  12. package/api/FidjApiAppsOAuthStatusResponse.d.ts +5 -0
  13. package/api/FidjApiAppsOAuthStatusResponse.js +3 -0
  14. package/api/FidjApiAppsPublicResponse.d.ts +7 -0
  15. package/api/FidjApiAppsPublicResponse.js +3 -0
  16. package/api/FidjApiAppsUpdateRequest.d.ts +2 -0
  17. package/api/FidjApiAppsUpdateRequest.js +3 -0
  18. package/api/FidjApiAppsUsersResponse.d.ts +7 -0
  19. package/api/FidjApiAppsUsersResponse.js +3 -0
  20. package/api/FidjApiConsentsHistoryResponse.d.ts +10 -0
  21. package/api/FidjApiConsentsHistoryResponse.js +3 -0
  22. package/api/FidjApiConsentsResponse.d.ts +9 -0
  23. package/api/FidjApiConsentsResponse.js +3 -0
  24. package/api/FidjApiConsentsUpdateRequest.d.ts +8 -0
  25. package/api/FidjApiConsentsUpdateRequest.js +3 -0
  26. package/api/FidjApiContractsCreateRequest.d.ts +5 -0
  27. package/api/FidjApiContractsCreateRequest.js +3 -0
  28. package/api/FidjApiContractsListResponse.d.ts +10 -0
  29. package/api/FidjApiContractsListResponse.js +3 -0
  30. package/api/FidjApiContractsUpdateRequest.d.ts +3 -0
  31. package/api/FidjApiContractsUpdateRequest.js +3 -0
  32. package/api/FidjApiErrorResponse.d.ts +3 -0
  33. package/api/FidjApiErrorResponse.js +3 -0
  34. package/api/FidjApiOAuthTokenRequest.d.ts +8 -0
  35. package/api/FidjApiOAuthTokenRequest.js +3 -0
  36. package/api/FidjApiOAuthTokenResponse.d.ts +6 -0
  37. package/api/FidjApiOAuthTokenResponse.js +3 -0
  38. package/api/FidjApiStatusResponse.d.ts +8 -0
  39. package/api/FidjApiStatusResponse.js +3 -0
  40. package/api/FidjApiTokensCreateRequest.d.ts +8 -0
  41. package/api/FidjApiTokensCreateRequest.js +3 -0
  42. package/api/FidjApiTokensCreateResponse.d.ts +7 -0
  43. package/api/FidjApiTokensCreateResponse.js +3 -0
  44. package/api/FidjApiUsersCreateRequest.d.ts +7 -0
  45. package/api/FidjApiUsersCreateRequest.js +3 -0
  46. package/api/FidjApiUsersCreateResponse.d.ts +13 -0
  47. package/api/FidjApiUsersCreateResponse.js +3 -0
  48. package/api/FidjApiUsersForgotRequest.d.ts +3 -0
  49. package/api/FidjApiUsersForgotRequest.js +3 -0
  50. package/api/FidjApiUsersMeDetailsResponse.d.ts +13 -0
  51. package/api/FidjApiUsersMeDetailsResponse.js +3 -0
  52. package/api/FidjApiUsersMeResponse.d.ts +6 -0
  53. package/api/FidjApiUsersMeResponse.js +3 -0
  54. package/api/FidjApiUsersMeUpdateRequest.d.ts +4 -0
  55. package/api/FidjApiUsersMeUpdateRequest.js +3 -0
  56. package/api/index.d.ts +26 -0
  57. package/api/index.js +50 -0
  58. package/bpInfo.d.ts +3 -0
  59. package/bpInfo.js +5 -0
  60. package/connection/Ajax.d.ts +65 -0
  61. package/connection/Ajax.js +230 -0
  62. package/connection/Client.d.ts +38 -0
  63. package/connection/Client.js +278 -0
  64. package/connection/ClientToken.d.ts +6 -0
  65. package/connection/ClientToken.js +12 -0
  66. package/connection/ClientTokens.d.ts +8 -0
  67. package/connection/ClientTokens.js +13 -0
  68. package/connection/ClientUser.d.ts +6 -0
  69. package/connection/ClientUser.js +12 -0
  70. package/connection/Connection.d.ts +65 -0
  71. package/connection/Connection.js +613 -0
  72. package/connection/Interfaces.d.ts +3 -0
  73. package/connection/Interfaces.js +3 -0
  74. package/connection/OwnerUser.d.ts +9 -0
  75. package/connection/OwnerUser.js +60 -0
  76. package/connection/index.d.ts +8 -0
  77. package/connection/index.js +25 -0
  78. package/index.d.ts +5 -0
  79. package/index.js +23 -0
  80. package/package.json +71 -0
  81. package/sdk/FidjError.d.ts +8 -0
  82. package/sdk/FidjError.js +18 -0
  83. package/sdk/FidjNodeService.d.ts +77 -0
  84. package/sdk/FidjNodeService.js +682 -0
  85. package/sdk/IService.d.ts +38 -0
  86. package/sdk/IService.js +3 -0
  87. package/sdk/Interfaces.d.ts +67 -0
  88. package/sdk/Interfaces.js +11 -0
  89. package/sdk/LoggerService.d.ts +9 -0
  90. package/sdk/LoggerService.js +37 -0
  91. package/sdk/index.d.ts +6 -0
  92. package/sdk/index.js +25 -0
  93. package/session/Session.d.ts +28 -0
  94. package/session/Session.js +398 -0
  95. package/session/index.d.ts +1 -0
  96. package/session/index.js +18 -0
  97. package/tools/Base64.d.ts +7 -0
  98. package/tools/Base64.js +50 -0
  99. package/tools/Storage.d.ts +32 -0
  100. package/tools/Storage.js +132 -0
  101. package/tools/Xor.d.ts +7 -0
  102. package/tools/Xor.js +36 -0
  103. package/tools/index.d.ts +3 -0
  104. 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
+ }
@@ -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
@@ -0,0 +1,6 @@
1
+ export * from './FidjError';
2
+ export * from './Interfaces';
3
+ export * from './IService';
4
+ export * from './FidjNodeService';
5
+ export * from './LoggerService';
6
+ export { LocalStorage } from '../tools/Storage';
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2Vzc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zZXNzaW9uL1Nlc3Npb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLGlDQUFpQztBQUNqQyxvQkFBb0I7Ozs7Ozs7Ozs7OztBQUVwQixpREFBaUQ7QUFDakQsZ0NBQW9FO0FBRXBFLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQztBQWF2QixNQUFhLE9BQU87SUFTaEI7UUFDSSxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQztRQUNmLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBSyxDQUFDLElBQVM7UUFDbEIsSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDO1FBQ25CLE1BQU0sQ0FBQyxHQUFHLE9BQU8sSUFBSSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxLQUFLLFdBQVcsRUFBRSxDQUFDO1lBQ3BCLEtBQUssR0FBRyxNQUFNLENBQUM7UUFDbkIsQ0FBQzthQUFNLElBQUksS0FBSyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ3hCLEtBQUssR0FBRyxNQUFNLENBQUM7UUFDbkIsQ0FBQzthQUFNLElBQUksQ0FBQyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ3hCLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7UUFDM0MsQ0FBQzthQUFNLElBQUksQ0FBQyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ3hCLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7UUFDM0MsQ0FBQzthQUFNLElBQUksQ0FBQyxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3pCLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUMsSUFBSSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7UUFDekMsQ0FBQzthQUFNLElBQUksQ0FBQyxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQ3hCLEtBQUssR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUMsSUFBSSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7UUFDekMsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBSyxDQUFDLElBQVM7UUFDbEIsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDM0IsZUFBZTtRQUNuQixDQUFDO2FBQU0sSUFBSSxRQUFRLElBQUksSUFBSSxFQUFFLENBQUM7WUFDMUIsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDekIsQ0FBQzthQUFNLElBQUksUUFBUSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQzFCLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ25DLENBQUM7YUFBTSxJQUFJLE1BQU0sSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUN4QixNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNqQyxDQUFDO2FBQU0sSUFBSSxNQUFNLElBQUksSUFBSSxFQUFFLENBQUM7WUFDeEIsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUM7WUFDbkIsSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLEVBQUUsQ0FBQztnQkFDN0IsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDaEMsQ0FBQztRQUNMLENBQUM7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBRUQsTUFBTSxDQUFDLFdBQVcsQ0FBQyxJQUFTO1FBQ3hCLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQztRQUNsQixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDUixPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO1FBQ0QsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLElBQUksTUFBTSxJQUFJLElBQUksRUFBRSxDQUFDO1lBQzdDLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ3ZCLENBQUM7UUFDRCxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzdCLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2hDLENBQUM7UUFDRCxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsSUFBSSxNQUFNLElBQUksTUFBTSxFQUFFLENBQUM7WUFDakQsTUFBTSxHQUFJLE1BQWMsQ0FBQyxJQUFJLENBQUM7UUFDbEMsQ0FBQztRQUNELElBQUksT0FBTyxNQUFNLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDN0IsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNsQixDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQUVNLE9BQU87UUFDVixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFTSxNQUFNLENBQUMsR0FBVyxFQUFFLEtBQWU7UUFDdEMsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDcEIsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNwQyxDQUFDO1FBRUQsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUM7UUFDdkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsQ0FBQyx3QkFBd0I7UUFDaEQsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUM7UUFDZixHQUFHLEdBQUcsR0FBRyxJQUFJLFNBQVMsQ0FBQztRQUV2QixJQUFJLE9BQU8sTUFBTSxLQUFLLFdBQVcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQzlDLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDcEMsQ0FBQztRQUVELE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDbkMsSUFBSSxJQUFJLEdBQVEsRUFBQyxRQUFRLEVBQUUsU0FBUyxFQUFDLENBQUM7WUFDdEMsSUFBSSxDQUFDO2dCQUNELElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7b0JBQ3BCLElBQUksR0FBRyxFQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFDLENBQUM7b0JBQ3hELCtEQUErRDtvQkFDL0QsMkNBQTJDO29CQUMzQyxrRUFBa0U7Z0JBQ3RFLENBQUM7Z0JBQ0QsV0FBVztnQkFDWCxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksU0FBUyxDQUFDLFVBQVUsR0FBRyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyw0QkFBNEI7Z0JBQzdFLElBQUk7Z0JBRUosSUFBSSxDQUFDLEVBQUU7cUJBQ0YsSUFBSSxFQUFFO3FCQUNOLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO29CQUNYLHdDQUF3QztvQkFDeEMsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO29CQUN4QixJQUFJO29CQUVKLG1DQUFtQztvQkFDbkMsMkJBQTJCO29CQUMzQixFQUFFO29CQUNGLDRDQUE0QztvQkFDNUMsOEJBQThCO29CQUM5QixvQkFBb0I7b0JBQ3BCLDJCQUEyQjtvQkFDM0IscUJBQXFCO29CQUNyQixTQUFTO29CQUNULHdCQUF3QjtvQkFDeEIscURBQXFEO29CQUNyRCxVQUFVO2dCQUNkLENBQUMsQ0FBQztxQkFDRCxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtvQkFDWCxNQUFNLENBQUMsSUFBSSxlQUFTLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BDLENBQUMsQ0FBQyxDQUFDO1lBQ1gsQ0FBQztZQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7Z0JBQ1gsTUFBTSxDQUFDLElBQUksZUFBUyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3BDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFWSxPQUFPOztZQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUNYLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDO2dCQUN2QixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztnQkFDdkIsT0FBTztZQUNYLENBQUM7WUFFRCxJQUFJLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUM5QixPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxlQUFTLENBQUMsR0FBRyxFQUFFLGlCQUFpQixDQUFDLENBQUMsQ0FBQztZQUNqRSxDQUFDO1lBRUQsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtnQkFDbkMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLEVBQUU7b0JBQzFCLElBQUksR0FBRyxFQUFFLENBQUM7d0JBQ04sTUFBTSxDQUFDLElBQUksZUFBUyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO29CQUNwQyxDQUFDO3lCQUFNLENBQUM7d0JBQ0osSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUM7d0JBQ3ZCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO3dCQUN2QixJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQzt3QkFDZixPQUFPLEVBQUUsQ0FBQztvQkFDZCxDQUFDO2dCQUNMLENBQUMsQ0FBQyxDQUFDO1lBQ1AsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDO0tBQUE7SUFFTSxTQUFTLENBQUMsR0FBNkI7UUFDMUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7SUFDbkIsQ0FBQztJQUVNLElBQUksQ0FBQyxNQUFjO1FBQ3RCLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDWCxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxlQUFTLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDekQsQ0FBQztRQUNELElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNoQyxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxlQUFTLENBQUMsR0FBRyxFQUFFLGtCQUFrQixDQUFDLENBQUMsQ0FBQztRQUNsRSxDQUFDO1FBRUQsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNuQyxJQUFJLENBQUM7Z0JBQ0QsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO29CQUNiLE9BQU87Z0JBQ1gsQ0FBQztnQkFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQ3ZELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7b0JBQ2pDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO29CQUM5Qyw4REFBOEQ7Z0JBQ2xFLENBQUM7Z0JBRUQsSUFBSSxDQUFDLEVBQUUsQ0FBQyxTQUFTO3FCQUNaLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO3FCQUNqQixFQUFFLENBQUMsVUFBVSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUU7b0JBQ3JCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTO3lCQUN6QixFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRTt3QkFDVCxNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTs0QkFDWixPQUFPLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsVUFBVSxLQUFLLE1BQU0sQ0FBQzt3QkFDMUQsQ0FBQztxQkFDSixDQUFDO3lCQUNELEVBQUUsQ0FBQyxVQUFVLEVBQUUsR0FBRyxFQUFFO3dCQUNqQixjQUFjO3dCQUNkLE9BQU8sRUFBRSxDQUFDO29CQUNkLENBQUMsQ0FBQzt5QkFDRCxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUMsRUFBQyxDQUFDLENBQUM7eUJBQ2pFLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLEVBQUMsTUFBTSxFQUFFLEdBQUcsRUFBQyxFQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUMxRSxDQUFDLENBQUM7cUJBQ0QsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsRUFBQyxLQUFLLEVBQUUsR0FBRyxFQUFDLEVBQUMsQ0FBQyxDQUFDO3FCQUNoRSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsRUFBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFDLEtBQUssRUFBRSxHQUFHLEVBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQztZQUN6RSxDQUFDO1lBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztnQkFDWCxNQUFNLENBQUMsSUFBSSxlQUFTLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDcEMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVNLEdBQUcsQ0FDTixJQUFTLEVBQ1QsR0FBVyxFQUNYLEdBQVcsRUFDWCxHQUFXLEVBQ1gsR0FBVyxFQUNYLE1BQStCO1FBRS9CLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDWCxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxlQUFTLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDekQsQ0FBQztRQUVELElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUN4QyxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxlQUFTLENBQUMsR0FBRyxFQUFFLG9CQUFvQixDQUFDLENBQUMsQ0FBQztRQUNwRSxDQUFDO1FBRUQsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDeEQsTUFBTSxPQUFPLEdBQVE7WUFDakIsR0FBRyxFQUFFLEdBQUc7WUFDUixVQUFVLEVBQUUsR0FBRztZQUNmLFNBQVMsRUFBRSxHQUFHO1lBQ2QsY0FBYyxFQUFFLEdBQUc7U0FDdEIsQ0FBQztRQUNGLElBQUksY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3RCLE9BQU8sQ0FBQyxJQUFJLEdBQUcsRUFBRSxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUM7UUFDNUMsQ0FBQztRQUNELE9BQU8sY0FBYyxDQUFDLEdBQUcsQ0FBQztRQUMxQixPQUFPLGNBQWMsQ0FBQyxJQUFJLENBQUM7UUFDM0IsT0FBTyxjQUFjLENBQUMsVUFBVSxDQUFDO1FBQ2pDLE9BQU8sY0FBYyxDQUFDLFNBQVMsQ0FBQztRQUNoQyxPQUFPLGNBQWMsQ0FBQyxjQUFjLENBQUM7UUFDckMsT0FBTyxjQUFjLENBQUMsUUFBUSxDQUFDO1FBRS9CLElBQUksY0FBYyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDO1FBQ2xFLElBQUksTUFBTSxFQUFFLENBQUM7WUFDVCxjQUFjLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDM0QsT0FBTyxDQUFDLFFBQVEsR0FBRyxjQUFjLENBQUM7UUFDdEMsQ0FBQzthQUFNLENBQUM7WUFDSixPQUFPLENBQUMsUUFBUSxHQUFHLGNBQWMsQ0FBQztRQUN0QyxDQUFDO1FBRUQsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNuQyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUU7Z0JBQ25DLElBQUksUUFBUSxJQUFJLFFBQVEsQ0FBQyxFQUFFLElBQUksUUFBUSxDQUFDLEVBQUUsSUFBSSxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQ3pELElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztvQkFFckIsdUJBQXVCO29CQUN2QixJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO3dCQUMxQixJQUFZLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUM7d0JBQ2pDLElBQVksQ0FBQyxHQUFHLEdBQUcsUUFBUSxDQUFDLEVBQUUsQ0FBQzt3QkFDaEMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUNsQixDQUFDO3lCQUFNLENBQUM7d0JBQ0osT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztvQkFDekIsQ0FBQztnQkFDTCxDQUFDO3FCQUFNLENBQUM7b0JBQ0osTUFBTSxDQUFDLElBQUksZUFBUyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUNwQyxDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTSxNQUFNLENBQUMsT0FBZTtRQUN6QixJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ1gsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksZUFBUyxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ3pELENBQUM7UUFFRCxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ25DLElBQUksQ0FBQyxFQUFFO2lCQUNGLEdBQUcsQ0FBQyxPQUFPLENBQUM7aUJBQ1osSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ1YsR0FBRyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7Z0JBQ3BCLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDNUIsQ0FBQyxDQUFDO2lCQUNELElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO2dCQUNiLE9BQU8sRUFBRSxDQUFDO1lBQ2QsQ0FBQyxDQUFDO2lCQUNELEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUNYLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUNoQixDQUFDLENBQUMsQ0FBQztRQUNYLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVNLEdBQUcsQ0FBQyxPQUFlLEVBQUUsTUFBK0I7UUFDdkQsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQztZQUNYLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLGVBQVMsQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUN6RCxDQUFDO1FBRUQsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNuQyxJQUFJLENBQUMsRUFBRTtpQkFDRixHQUFHLENBQUMsT0FBTyxDQUFDO2lCQUNaLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUNWLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztvQkFDOUMsSUFBSSxJQUFJLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQztvQkFDeEIsSUFBSSxNQUFNLElBQUksSUFBSSxFQUFFLENBQUM7d0JBQ2pCLElBQUksR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDM0MsQ0FBQzt5QkFBTSxJQUFJLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQzt3QkFDdEIsSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO29CQUNwQyxDQUFDO29CQUNELE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQy9DLElBQUksWUFBWSxFQUFFLENBQUM7d0JBQ2YsWUFBWSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDO3dCQUMzQixZQUFZLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7d0JBQzdCLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUN0RCxDQUFDO3lCQUFNLENBQUM7d0JBQ0osdUJBQXVCO3dCQUN2QixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQzt3QkFDckIsTUFBTSxDQUFDLElBQUksZUFBUyxDQUFDLEdBQUcsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO29CQUMvQyxDQUFDO2dCQUNMLENBQUM7cUJBQU0sQ0FBQztvQkFDSixNQUFNLENBQUMsSUFBSSxlQUFTLENBQUMsR0FBRyxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hELENBQUM7WUFDTCxDQUFDLENBQUM7aUJBQ0QsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxlQUFTLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN6RCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTSxNQUFNLENBQUMsTUFBK0I7UUFDekMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBRSxJQUFJLENBQUMsRUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3hDLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLGVBQVMsQ0FBQyxHQUFHLEVBQUUsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO1FBQ2pFLENBQUM7UUFFRCxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ2xDLElBQUksQ0FBQyxFQUFVO2lCQUNYLE9BQU8sQ0FBQyxFQUFDLFlBQVksRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBQyxDQUFDO2lCQUMvQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDWCxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUM7Z0JBQ2YsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtvQkFDdEIsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO3dCQUN2RSxJQUFJLElBQUksR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQzt3QkFDNUIsSUFBSSxNQUFNLElBQUksSUFBSSxFQUFFLENBQUM7NEJBQ2pCLElBQUksR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFDM0MsQ0FBQzs2QkFBTSxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7NEJBQzFCLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7d0JBQ3hDLENBQUM7d0JBQ0QsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFDL0MsSUFBSSxZQUFZLEVBQUUsQ0FBQzs0QkFDZixZQUFZLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDOzRCQUMvQixZQUFZLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDOzRCQUNqQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ3ZELENBQUM7NkJBQU0sQ0FBQzs0QkFDSixPQUFPLENBQUMsS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUM7NEJBQzNDLHFCQUFxQjs0QkFDckIsa0NBQWtDOzRCQUNsQyxvQ0FBb0M7NEJBQ3BDLGdDQUFnQzs0QkFDaEMsMEJBQTBCOzRCQUMxQixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7d0JBQzdCLENBQUM7b0JBQ0wsQ0FBQzt5QkFBTSxDQUFDO3dCQUNKLE9BQU8sQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7b0JBQ2xDLENBQUM7Z0JBQ0wsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2pCLENBQUMsQ0FBQztpQkFDRCxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLGVBQVMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pELENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVNLE9BQU87UUFDVixJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFFLElBQUksQ0FBQyxFQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDeEMsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksZUFBUyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ3ZELENBQUM7UUFFRCxPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ2xDLElBQUksQ0FBQyxFQUFVO2lCQUNYLE9BQU8sQ0FBQztZQUNMLHNCQUFzQjtZQUN0Qix5RUFBeUU7WUFDekUsa0VBQWtFO1lBQ2xFLElBQUk7YUFDUCxDQUFDO2lCQUNELElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO2dCQUNmLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDWixNQUFNLENBQUMsSUFBSSxlQUFTLENBQUMsR0FBRyxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUM7Z0JBQzlDLENBQUM7cUJBQU0sQ0FBQztvQkFDSixJQUFJLENBQUMsYUFBYSxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUM7b0JBQ3pDLElBQUksUUFBUSxDQUFDLFVBQVUsSUFBSSxRQUFRLENBQUMsVUFBVSxHQUFHLENBQUMsRUFBRSxDQUFDO3dCQUNqRCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ25CLENBQUM7eUJBQU0sQ0FBQzt3QkFDSixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7b0JBQ2xCLENBQUM7Z0JBQ0wsQ0FBQztZQUNMLENBQUMsQ0FBQztpQkFDRCxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLGVBQVMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3pELENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVNLElBQUk7UUFDUCxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ1gsT0FBTyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksZUFBUyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ3ZELENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDMUIsQ0FBQztDQUNKO0FBalpELDBCQWlaQyJ9
@@ -0,0 +1 @@
1
+ export * from './Session';