@etainabl/nodejs-sdk 1.0.0 → 1.0.2

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.
@@ -4,7 +4,17 @@ const log = logger('etainablApi');
4
4
  const factory = {
5
5
  get: (etainablApi, endpoint, postEndpoint) => async (id, options = {}) => {
6
6
  log.info(`API Request: GET ${process.env.ETAINABL_API_URL}/${endpoint}/${id}${postEndpoint ? `/${postEndpoint}` : ''}`);
7
- const response = await etainablApi.get(`${endpoint}/${id}${postEndpoint ? `/${postEndpoint}` : ''}`, options);
7
+ let response;
8
+ try {
9
+ response = await etainablApi.get(`${endpoint}/${id}${postEndpoint ? `/${postEndpoint}` : ''}`, options);
10
+ }
11
+ catch (e) {
12
+ if (e.response?.data)
13
+ throw new Error(`API error response: ${JSON.stringify(e.response.data)}`);
14
+ }
15
+ if (!response) {
16
+ throw new Error(`No response from API (GET ${endpoint}/:id${postEndpoint ? `/${postEndpoint}` : ''})`);
17
+ }
8
18
  if (response.status !== 200) {
9
19
  throw new Error(`${response.status} ${response.statusText} response from API (GET ${endpoint}/:id${postEndpoint ? `/${postEndpoint}` : ''})`);
10
20
  }
@@ -13,9 +23,19 @@ const factory = {
13
23
  }
14
24
  return response.data;
15
25
  },
16
- list: (etainablApi, endpoint) => async (options = {}) => {
26
+ list: (etainablApi, endpoint, postEndpoint) => async (options = {}) => {
17
27
  log.info(`API Request: GET ${process.env.ETAINABL_API_URL}/${endpoint}`);
18
- const response = await etainablApi.get(`${endpoint}`, options);
28
+ let response;
29
+ try {
30
+ response = await etainablApi.get(`${endpoint}`, options);
31
+ }
32
+ catch (e) {
33
+ if (e.response?.data)
34
+ throw new Error(`API error response: ${JSON.stringify(e.response.data)}`);
35
+ }
36
+ if (!response) {
37
+ throw new Error(`No response from API (GET ${endpoint}/:id${postEndpoint ? `/${postEndpoint}` : ''})`);
38
+ }
19
39
  if (response.status !== 200) {
20
40
  throw new Error(`${response.status} ${response.statusText} response from API (GET ${endpoint})`);
21
41
  }
@@ -24,9 +44,19 @@ const factory = {
24
44
  }
25
45
  return response.data;
26
46
  },
27
- update: (etainablApi, endpoint) => async (id, data, options = {}) => {
47
+ update: (etainablApi, endpoint, postEndpoint) => async (id, data, options = {}) => {
28
48
  log.info(`API Request: PATCH ${process.env.ETAINABL_API_URL}/${endpoint}/${id}`);
29
- const response = await etainablApi.patch(`${endpoint}/${id}`, data, options);
49
+ let response;
50
+ try {
51
+ response = await etainablApi.patch(`${endpoint}/${id}`, data, options);
52
+ }
53
+ catch (e) {
54
+ if (e.response?.data)
55
+ throw new Error(`API error response: ${JSON.stringify(e.response.data)}`);
56
+ }
57
+ if (!response) {
58
+ throw new Error(`No response from API (GET ${endpoint}/:id${postEndpoint ? `/${postEndpoint}` : ''})`);
59
+ }
30
60
  if (response.status !== 200) {
31
61
  throw new Error(`${response.status} ${response.statusText} response from API (PATCH ${endpoint})`);
32
62
  }
@@ -35,9 +65,19 @@ const factory = {
35
65
  }
36
66
  return response.data;
37
67
  },
38
- create: (etainablApi, endpoint) => async (data, options = {}) => {
68
+ create: (etainablApi, endpoint, postEndpoint) => async (data, options = {}) => {
39
69
  log.info(`API Request: POST ${process.env.ETAINABL_API_URL}/${endpoint}`);
40
- const response = await etainablApi.post(`${endpoint}`, data, options);
70
+ let response;
71
+ try {
72
+ response = await etainablApi.post(`${endpoint}`, data, options);
73
+ }
74
+ catch (e) {
75
+ if (e.response?.data)
76
+ throw new Error(`API error response: ${JSON.stringify(e.response.data)}`);
77
+ }
78
+ if (!response) {
79
+ throw new Error(`No response from API (GET ${endpoint}/:id${postEndpoint ? `/${postEndpoint}` : ''})`);
80
+ }
41
81
  if (response.status !== 200) {
42
82
  throw new Error(`${response.status} ${response.statusText} response from API (POST ${endpoint})`);
43
83
  }
@@ -46,9 +86,19 @@ const factory = {
46
86
  }
47
87
  return response.data;
48
88
  },
49
- remove: (etainablApi, endpoint) => async (id, options = {}) => {
89
+ remove: (etainablApi, endpoint, postEndpoint) => async (id, options = {}) => {
50
90
  log.info(`API Request: DELETE ${process.env.ETAINABL_API_URL}/${endpoint}/${id}`);
51
- const response = await etainablApi.delete(`${endpoint}/${id}`, options);
91
+ let response;
92
+ try {
93
+ response = await etainablApi.delete(`${endpoint}/${id}`, options);
94
+ }
95
+ catch (e) {
96
+ if (e.response?.data)
97
+ throw new Error(`API error response: ${JSON.stringify(e.response.data)}`);
98
+ }
99
+ if (!response) {
100
+ throw new Error(`No response from API (GET ${endpoint}/:id${postEndpoint ? `/${postEndpoint}` : ''})`);
101
+ }
52
102
  if (response.status !== 200) {
53
103
  throw new Error(`${response.status} ${response.statusText} response from API (DELETE ${endpoint})`);
54
104
  }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consumption.js","sourceRoot":"","sources":["../src/consumption.ts"],"names":[],"mappings":"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"}
package/dist/db.d.ts ADDED
@@ -0,0 +1,6 @@
1
+ import { Db } from 'mongodb';
2
+ declare function connectToDatabase(): Promise<Db>;
3
+ declare const _default: {
4
+ connectToDatabase: typeof connectToDatabase;
5
+ };
6
+ export default _default;
package/dist/db.js ADDED
@@ -0,0 +1,34 @@
1
+ import { MongoClient } from 'mongodb';
2
+ import logger from './logger.js';
3
+ const log = logger('dbHelpers');
4
+ let cachedDb;
5
+ async function connectToDatabase() {
6
+ if (!process.env.ETAINABL_DB_URL)
7
+ throw new Error("ETAINABL_DB_URL is not set");
8
+ if (!process.env.AWS_ACCESS_KEY_ID)
9
+ throw new Error("AWS_ACCESS_KEY_ID is not set");
10
+ if (!process.env.AWS_SECRET_ACCESS_KEY)
11
+ throw new Error("AWS_SECRET_ACCESS_KEY is not set");
12
+ if (cachedDb) {
13
+ log.debug('Using cached MongoDB connection.');
14
+ return Promise.resolve(cachedDb);
15
+ }
16
+ log.debug('Connecting to MongoDB server...');
17
+ const uri = `mongodb+srv://${process.env.ETAINABL_DB_URL}`;
18
+ const client = new MongoClient(uri, {
19
+ auth: {
20
+ username: process.env.AWS_ACCESS_KEY_ID,
21
+ password: process.env.AWS_SECRET_ACCESS_KEY
22
+ },
23
+ authSource: '$external',
24
+ authMechanism: 'MONGODB-AWS'
25
+ });
26
+ await client.connect();
27
+ log.debug('Connected successfully to MongoDB server!');
28
+ cachedDb = client.db('etainabl');
29
+ return cachedDb;
30
+ }
31
+ export default {
32
+ connectToDatabase
33
+ };
34
+ //# sourceMappingURL=db.js.map
package/dist/db.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.js","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAM,MAAM,SAAS,CAAC;AAC1C,OAAO,MAAM,MAAM,aAAa,CAAC;AAEjC,MAAM,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;AAEhC,IAAI,QAAY,CAAC;AAEjB,KAAK,UAAU,iBAAiB;IAC9B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe;QAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAChF,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB;QAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IACpF,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,qBAAqB;QAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IAE5F,IAAI,QAAQ,EAAE;QACZ,GAAG,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;QAC9C,OAAO,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;KAClC;IAED,GAAG,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;IAE7C,MAAM,GAAG,GAAG,iBAAiB,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC;IAE3D,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,GAAG,EAAE;QAClC,IAAI,EAAE;YACJ,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB;YACvC,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,qBAAqB;SAC5C;QACD,UAAU,EAAE,WAAW;QACvB,aAAa,EAAE,aAAa;KAC7B,CAAC,CAAC;IAEH,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;IAEvB,GAAG,CAAC,KAAK,CAAC,2CAA2C,CAAC,CAAC;IAEvD,QAAQ,GAAG,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;IAEjC,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,eAAe;IACb,iBAAiB;CAClB,CAAC"}
@@ -0,0 +1,10 @@
1
+ export interface AuthorizerContext {
2
+ companyId: string;
3
+ isAdmin: boolean;
4
+ isKiosk: boolean;
5
+ isPublicApiRequest: boolean;
6
+ isService: boolean;
7
+ scope: string;
8
+ sub: string;
9
+ token: string;
10
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=etainabl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"etainabl.js","sourceRoot":"","sources":["../src/etainabl.ts"],"names":[],"mappings":""}
@@ -1,4 +1,5 @@
1
1
  import api from './api.js';
2
2
  import consumption from './consumption.js';
3
3
  import logger from './logger.js';
4
- export { api, logger, consumption };
4
+ import db from './db.js';
5
+ export { api, logger, consumption, db };
@@ -1,5 +1,6 @@
1
1
  import api from './api.js';
2
2
  import consumption from './consumption.js';
3
3
  import logger from './logger.js';
4
- export { api, logger, consumption };
4
+ import db from './db.js';
5
+ export { api, logger, consumption, db };
5
6
  //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,UAAU,CAAC;AAC3B,OAAO,WAAW,MAAM,kBAAkB,CAAC;AAC3C,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,MAAM,SAAS,CAAC;AAEzB,OAAO,EACL,GAAG,EACH,MAAM,EACN,WAAW,EACX,EAAE,EACH,CAAA"}
@@ -0,0 +1 @@
1
+ export declare function interpolate(meterReadings: any[], targetDate: any, method?: string): any;
@@ -0,0 +1,73 @@
1
+ import moment from 'moment';
2
+ export function interpolate(meterReadings, targetDate, method = 'linear') {
3
+ if (method === 'cubic') {
4
+ return cubicInterpolation(meterReadings, targetDate);
5
+ }
6
+ if (method === 'linear') {
7
+ return linearInterpolation(meterReadings, targetDate);
8
+ }
9
+ throw new Error(`Interpolation method ${method} not supported`);
10
+ }
11
+ function linearInterpolation(meterReadings, targetDate) {
12
+ // Ensure the meter readings are sorted by date
13
+ meterReadings.sort((a, b) => moment(a.submittedAt).unix() - moment(b.submittedAt).unix());
14
+ const targetTimestamp = moment(targetDate).startOf('minute').unix();
15
+ // Find the two nearest meter readings for the target date
16
+ let lowerIndex = -1;
17
+ let upperIndex = -1;
18
+ for (let i = 0; i < meterReadings.length; i++) {
19
+ const reading = meterReadings[i];
20
+ if (moment(reading.submittedAt).startOf('minute').unix() <= targetTimestamp) {
21
+ lowerIndex = i;
22
+ }
23
+ else {
24
+ upperIndex = i;
25
+ break;
26
+ }
27
+ }
28
+ // If no readings are available for interpolation, return null
29
+ if (lowerIndex === -1 || upperIndex === -1) {
30
+ return null;
31
+ }
32
+ const lowerReading = meterReadings[lowerIndex];
33
+ const upperReading = meterReadings[upperIndex];
34
+ // Linear interpolation formula
35
+ const consumption = lowerReading.value
36
+ + ((targetTimestamp - moment(lowerReading.submittedAt).startOf('minute').unix())
37
+ / (moment(upperReading.submittedAt).startOf('minute').unix() - moment(lowerReading.submittedAt).startOf('minute').unix()))
38
+ * (upperReading.value - lowerReading.value);
39
+ return consumption;
40
+ }
41
+ ;
42
+ function cubicInterpolateCalc(x0, y0, x1, y1, x2, y2, x3, y3, x) {
43
+ const t = (x - x1) / (x2 - x1);
44
+ const t2 = t * t;
45
+ const t3 = t2 * t;
46
+ const a0 = y3 - y2 - y0 + y1;
47
+ const a1 = y0 - y1 - a0;
48
+ const a2 = y2 - y0;
49
+ const a3 = y1;
50
+ return a0 * t3 + a1 * t2 + a2 * t + a3;
51
+ }
52
+ function cubicInterpolation(meterReadings, targetDate) {
53
+ // Ensure the meter readings are sorted by date
54
+ meterReadings.sort((a, b) => moment(a.submittedAt).unix() - moment(b.submittedAt).unix());
55
+ const targetTimestamp = new Date(targetDate).getTime();
56
+ // Find the four nearest meter readings for the target date
57
+ let startIndex = -1;
58
+ for (let i = 0; i < meterReadings.length; i++) {
59
+ const reading = meterReadings[i];
60
+ if (moment(reading.submittedAt).startOf('minute').unix() > targetTimestamp) {
61
+ startIndex = i - 2;
62
+ break;
63
+ }
64
+ }
65
+ // If no readings are available for interpolation, return null
66
+ if (startIndex < 0 || startIndex + 3 >= meterReadings.length) {
67
+ return null;
68
+ }
69
+ const readings = meterReadings.slice(startIndex, startIndex + 4);
70
+ const interpolatedConsumption = cubicInterpolateCalc(moment(readings[0].submittedAt).startOf('minute').unix(), readings[0].value, moment(readings[1].submittedAt).startOf('minute').unix(), readings[1].value, moment(readings[2].submittedAt).startOf('minute').unix(), readings[2].value, moment(readings[3].submittedAt).startOf('minute').unix(), readings[3].value, targetTimestamp);
71
+ return interpolatedConsumption;
72
+ }
73
+ //# sourceMappingURL=readingsInterpolate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"readingsInterpolate.js","sourceRoot":"","sources":["../../src/lib/readingsInterpolate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,eAAe,CAAC,SAAiB,EAAE,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC;IACzD,KAAK,EAAE,OAAO;IACd,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,CAC5B,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,EAC1B,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CACtB;IACD,WAAW,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,MAAM,EAAE,SAAS,EAAE;IACjF,UAAU,EAAE;QACV,IAAI,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE;KACjC;CACF,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,12 +1,14 @@
1
1
  {
2
2
  "name": "@etainabl/nodejs-sdk",
3
- "version": "1.0.0",
4
- "main": "index.js",
3
+ "version": "1.0.2",
4
+ "main": "dist/index.js",
5
5
  "author": "Jonathan Lambert <jonathan@etainabl.com>",
6
6
  "type": "module",
7
+ "types": "dist/etainabl.d.ts",
7
8
  "dependencies": {
8
9
  "axios": "^1.4.0",
9
10
  "moment": "^2.29.4",
11
+ "mongodb": "^6.3.0",
10
12
  "winston": "^3.10.0"
11
13
  },
12
14
  "devDependencies": {
package/src/api.ts CHANGED
@@ -38,7 +38,7 @@ const factory = {
38
38
 
39
39
  return response.data;
40
40
  },
41
- list: (etainablApi: AxiosInstance, endpoint: any) => async (options: AxiosRequestConfig = {}): Promise<ETNPagedResponse> => {
41
+ list: (etainablApi: AxiosInstance, endpoint: any, postEndpoint?: any) => async (options: AxiosRequestConfig = {}): Promise<ETNPagedResponse> => {
42
42
  log.info(`API Request: GET ${process.env.ETAINABL_API_URL}/${endpoint}`);
43
43
 
44
44
  let response;
@@ -63,7 +63,7 @@ const factory = {
63
63
 
64
64
  return response.data;
65
65
  },
66
- update: (etainablApi: AxiosInstance, endpoint: any) => async (id: string, data: any, options: AxiosRequestConfig = {}) => {
66
+ update: (etainablApi: AxiosInstance, endpoint: any, postEndpoint?: any) => async (id: string, data: any, options: AxiosRequestConfig = {}) => {
67
67
  log.info(`API Request: PATCH ${process.env.ETAINABL_API_URL}/${endpoint}/${id}`);
68
68
 
69
69
  let response;
@@ -88,7 +88,7 @@ const factory = {
88
88
 
89
89
  return response.data;
90
90
  },
91
- create: (etainablApi: AxiosInstance, endpoint: any) => async (data: any, options: AxiosRequestConfig = {}) => {
91
+ create: (etainablApi: AxiosInstance, endpoint: any, postEndpoint?: any) => async (data: any, options: AxiosRequestConfig = {}) => {
92
92
  log.info(`API Request: POST ${process.env.ETAINABL_API_URL}/${endpoint}`);
93
93
 
94
94
  let response;
@@ -113,7 +113,7 @@ const factory = {
113
113
 
114
114
  return response.data;
115
115
  },
116
- remove: (etainablApi: AxiosInstance, endpoint: any) => async (id: string, options: AxiosRequestConfig = {}) => {
116
+ remove: (etainablApi: AxiosInstance, endpoint: any, postEndpoint?: any) => async (id: string, options: AxiosRequestConfig = {}) => {
117
117
  log.info(`API Request: DELETE ${process.env.ETAINABL_API_URL}/${endpoint}/${id}`);
118
118
 
119
119
  let response;
package/src/db.ts CHANGED
@@ -1,18 +1,22 @@
1
1
  import { MongoClient, Db } from 'mongodb';
2
- import { logger } from './logger';
2
+ import logger from './logger.js';
3
3
 
4
4
  const log = logger('dbHelpers');
5
5
 
6
6
  let cachedDb: Db;
7
7
 
8
- export async function connectToDatabase() {
9
- log.debug('Connecting to MongoDB server...');
8
+ async function connectToDatabase() {
9
+ if (!process.env.ETAINABL_DB_URL) throw new Error("ETAINABL_DB_URL is not set");
10
+ if (!process.env.AWS_ACCESS_KEY_ID) throw new Error("AWS_ACCESS_KEY_ID is not set");
11
+ if (!process.env.AWS_SECRET_ACCESS_KEY) throw new Error("AWS_SECRET_ACCESS_KEY is not set");
10
12
 
11
13
  if (cachedDb) {
12
14
  log.debug('Using cached MongoDB connection.');
13
15
  return Promise.resolve(cachedDb);
14
16
  }
15
17
 
18
+ log.debug('Connecting to MongoDB server...');
19
+
16
20
  const uri = `mongodb+srv://${process.env.ETAINABL_DB_URL}`;
17
21
 
18
22
  const client = new MongoClient(uri, {
@@ -32,3 +36,7 @@ export async function connectToDatabase() {
32
36
 
33
37
  return cachedDb;
34
38
  }
39
+
40
+ export default {
41
+ connectToDatabase
42
+ };
@@ -0,0 +1,10 @@
1
+ export interface AuthorizerContext {
2
+ companyId: string,
3
+ isAdmin: boolean,
4
+ isKiosk: boolean,
5
+ isPublicApiRequest: boolean,
6
+ isService: boolean,
7
+ scope: string,
8
+ sub: string,
9
+ token: string
10
+ }
package/src/index.ts CHANGED
@@ -1,9 +1,11 @@
1
1
  import api from './api.js';
2
2
  import consumption from './consumption.js';
3
3
  import logger from './logger.js';
4
+ import db from './db.js';
4
5
 
5
6
  export {
6
7
  api,
7
8
  logger,
8
- consumption
9
+ consumption,
10
+ db
9
11
  }
package/tsconfig.json CHANGED
@@ -3,12 +3,12 @@
3
3
  "compilerOptions": {
4
4
  "target": "es2022",
5
5
  "strict": true,
6
- "outDir": "./",
6
+ "outDir": "./dist",
7
7
  "rootDir": "./src",
8
8
  "preserveConstEnums": true,
9
9
  "sourceMap": true,
10
- "module":"ESNext",
11
- "moduleResolution":"NodeNext",
10
+ "module": "NodeNext",
11
+ "moduleResolution": "NodeNext",
12
12
  "esModuleInterop": true,
13
13
  "skipLibCheck": true,
14
14
  "forceConsistentCasingInFileNames": true,
package/api.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["src/api.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"consumption.js","sourceRoot":"","sources":["src/consumption.ts"],"names":[],"mappings":"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"}
package/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["src/index.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,UAAU,CAAC;AAC3B,OAAO,WAAW,MAAM,kBAAkB,CAAC;AAC3C,OAAO,MAAM,MAAM,aAAa,CAAC;AAEjC,OAAO,EACL,GAAG,EACH,MAAM,EACN,WAAW,EACZ,CAAA"}
package/logger.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["src/logger.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,eAAe,CAAC,SAAiB,EAAE,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC;IACzD,KAAK,EAAE,OAAO;IACd,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,CAC5B,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,EAC1B,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CACtB;IACD,WAAW,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,MAAM,EAAE,SAAS,EAAE;IACjF,UAAU,EAAE;QACV,IAAI,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE;KACjC;CACF,CAAC,CAAC"}
File without changes
File without changes
File without changes
File without changes
File without changes