@peers-app/peers-sdk 0.7.2 → 0.7.5

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 (58) hide show
  1. package/dist/context/data-context.d.ts +1 -1
  2. package/dist/context/data-context.js +2 -3
  3. package/dist/context/user-context-singleton.js +13 -31
  4. package/dist/context/user-context.d.ts +2 -5
  5. package/dist/context/user-context.js +20 -15
  6. package/dist/data/assistants.d.ts +1 -1
  7. package/dist/data/change-tracking.d.ts +16 -16
  8. package/dist/data/channels.d.ts +1 -1
  9. package/dist/data/data-locks.d.ts +2 -2
  10. package/dist/data/data-locks.test.js +3 -0
  11. package/dist/data/devices.d.ts +4 -4
  12. package/dist/data/embeddings.d.ts +1 -1
  13. package/dist/data/group-members.d.ts +7 -4
  14. package/dist/data/group-members.js +98 -32
  15. package/dist/data/groups.d.ts +7 -3
  16. package/dist/data/groups.js +91 -30
  17. package/dist/data/index.d.ts +1 -0
  18. package/dist/data/index.js +1 -0
  19. package/dist/data/knowledge/knowledge-frames.d.ts +1 -1
  20. package/dist/data/knowledge/knowledge-links.d.ts +1 -1
  21. package/dist/data/knowledge/knowledge-values.d.ts +1 -1
  22. package/dist/data/knowledge/peer-types.d.ts +1 -1
  23. package/dist/data/knowledge/predicates.d.ts +1 -1
  24. package/dist/data/messages.d.ts +4 -4
  25. package/dist/data/orm/client-proxy.data-source.js +8 -18
  26. package/dist/data/orm/decorators.d.ts +1 -1
  27. package/dist/data/orm/decorators.js +7 -6
  28. package/dist/data/packages.d.ts +2 -1
  29. package/dist/data/packages.js +90 -40
  30. package/dist/data/peer-events/peer-event-handlers.d.ts +1 -1
  31. package/dist/data/peer-events/peer-event-types.d.ts +1 -1
  32. package/dist/data/persistent-vars.js +124 -119
  33. package/dist/data/tool-tests.d.ts +1 -1
  34. package/dist/data/tools.d.ts +1 -1
  35. package/dist/data/user-permissions.test.js +7 -10
  36. package/dist/data/user-trust-levels.d.ts +42 -0
  37. package/dist/data/user-trust-levels.js +60 -0
  38. package/dist/data/users.d.ts +7 -7
  39. package/dist/data/users.js +86 -27
  40. package/dist/data/workflow-logs.d.ts +1 -1
  41. package/dist/data/workflow-runs.js +1 -1
  42. package/dist/data/workflows.d.ts +1 -1
  43. package/dist/device/connection.js +2 -2
  44. package/dist/device/get-trust-level.js +10 -6
  45. package/dist/index.d.ts +1 -0
  46. package/dist/index.js +1 -0
  47. package/dist/logging/console-logger.d.ts +10 -0
  48. package/dist/logging/console-logger.js +206 -0
  49. package/dist/logging/console-logs.table.d.ts +48 -0
  50. package/dist/logging/console-logs.table.js +140 -0
  51. package/dist/logging/index.d.ts +2 -0
  52. package/dist/logging/index.js +18 -0
  53. package/dist/rpc-types.d.ts +0 -11
  54. package/dist/rpc-types.js +0 -8
  55. package/dist/types/peer-device.d.ts +10 -0
  56. package/dist/users.query.d.ts +3 -1
  57. package/dist/users.query.js +39 -11
  58. package/package.json +1 -1
@@ -0,0 +1,140 @@
1
+ "use strict";
2
+ var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
3
+ var useValue = arguments.length > 2;
4
+ for (var i = 0; i < initializers.length; i++) {
5
+ value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
6
+ }
7
+ return useValue ? value : void 0;
8
+ };
9
+ var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
10
+ function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
11
+ var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
12
+ var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
13
+ var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
14
+ var _, done = false;
15
+ for (var i = decorators.length - 1; i >= 0; i--) {
16
+ var context = {};
17
+ for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
18
+ for (var p in contextIn.access) context.access[p] = contextIn.access[p];
19
+ context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
20
+ var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
21
+ if (kind === "accessor") {
22
+ if (result === void 0) continue;
23
+ if (result === null || typeof result !== "object") throw new TypeError("Object expected");
24
+ if (_ = accept(result.get)) descriptor.get = _;
25
+ if (_ = accept(result.set)) descriptor.set = _;
26
+ if (_ = accept(result.init)) initializers.unshift(_);
27
+ }
28
+ else if (_ = accept(result)) {
29
+ if (kind === "field") initializers.unshift(_);
30
+ else descriptor[key] = _;
31
+ }
32
+ }
33
+ if (target) Object.defineProperty(target, contextIn.name, descriptor);
34
+ done = true;
35
+ };
36
+ Object.defineProperty(exports, "__esModule", { value: true });
37
+ exports.ConsoleLogsTable = exports.consoleLogSchema = void 0;
38
+ exports.ConsoleLogs = ConsoleLogs;
39
+ const zod_1 = require("zod");
40
+ const zod_types_1 = require("../types/zod-types");
41
+ const types_1 = require("../data/orm/types");
42
+ const user_context_singleton_1 = require("../context/user-context-singleton");
43
+ const table_definitions_system_1 = require("../data/orm/table-definitions.system");
44
+ const utils_1 = require("../utils");
45
+ const orm_1 = require("../data/orm");
46
+ exports.consoleLogSchema = zod_1.z.object({
47
+ logId: zod_types_1.zodPeerId,
48
+ timestamp: zod_1.z.number().default(() => (0, utils_1.getTimestamp)()).describe('The timestamp the log was created created'),
49
+ level: zod_1.z.enum(['debug', 'info', 'log', 'warn', 'error']).describe('The log level'),
50
+ process: zod_1.z.string().describe('The process that generated the log (e.g., main, renderer, worker)'),
51
+ processInstanceId: zod_1.z.string().describe('Unique ID for this process instance to filter own logs'),
52
+ source: zod_1.z.string().optional().describe('The source file or module that generated the log'),
53
+ message: zod_1.z.string().describe('The log message'),
54
+ context: zod_types_1.zodAnyObject.optional().describe('Additional structured context data'),
55
+ stackTrace: zod_1.z.string().optional().describe('Stack trace for errors'),
56
+ });
57
+ const metaData = {
58
+ name: 'ConsoleLogs',
59
+ description: 'System-wide console log entries with cross-process visibility.',
60
+ primaryKeyName: 'logId',
61
+ fields: (0, types_1.schemaToFields)(exports.consoleLogSchema),
62
+ localOnly: true, // Don't sync logs between devices
63
+ indexes: [
64
+ { fields: ['timestamp'] },
65
+ { fields: ['level'] },
66
+ { fields: ['process'] },
67
+ { fields: ['processInstanceId'] },
68
+ ],
69
+ };
70
+ let ConsoleLogsTable = (() => {
71
+ let _classSuper = orm_1.Table;
72
+ let _instanceExtraInitializers = [];
73
+ let _initializeLogCleanup_decorators;
74
+ let _deleteOldLogs_decorators;
75
+ return class ConsoleLogsTable extends _classSuper {
76
+ static {
77
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
78
+ _initializeLogCleanup_decorators = [(0, orm_1.ProxyClientTableMethodCalls)()];
79
+ _deleteOldLogs_decorators = [(0, orm_1.ProxyClientTableMethodCalls)()];
80
+ __esDecorate(this, null, _initializeLogCleanup_decorators, { kind: "method", name: "initializeLogCleanup", static: false, private: false, access: { has: obj => "initializeLogCleanup" in obj, get: obj => obj.initializeLogCleanup }, metadata: _metadata }, null, _instanceExtraInitializers);
81
+ __esDecorate(this, null, _deleteOldLogs_decorators, { kind: "method", name: "deleteOldLogs", static: false, private: false, access: { has: obj => "deleteOldLogs" in obj, get: obj => obj.deleteOldLogs }, metadata: _metadata }, null, _instanceExtraInitializers);
82
+ if (_metadata) Object.defineProperty(this, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
83
+ }
84
+ LOG_TTL = (__runInitializers(this, _instanceExtraInitializers), 7 * 24 * 60 * 60 * 1000); // 7 days
85
+ LOG_CLEANUP_INTERVAL = 24 * 60 * 60 * 1000; // 1 day
86
+ constructor(metaData, deps) {
87
+ super(metaData, deps);
88
+ if (typeof process !== 'undefined' && process.env.NODE_ENV !== 'test') {
89
+ this.initializeLogCleanup();
90
+ }
91
+ }
92
+ logCleanupInitialized = false;
93
+ async initializeLogCleanup() {
94
+ if (this.logCleanupInitialized) {
95
+ return;
96
+ }
97
+ this.logCleanupInitialized = true;
98
+ // always cleanup old logs on startup - randomly spread out of the first 60 seconds to not slam the db
99
+ setTimeout(() => this.deleteOldLogs(), 60_000 * Math.random());
100
+ // regularly clean up logs
101
+ // TODO - consider doing this as a workflow
102
+ setInterval(() => this.deleteOldLogs(), this.LOG_CLEANUP_INTERVAL);
103
+ }
104
+ async deleteOldLogs(cutoffTimestamp = Date.now() - 7 * 24 * 60 * 60 * 1000) {
105
+ const count = await this.count({ timestamp: { $lt: cutoffTimestamp } });
106
+ if (count === 0) {
107
+ console.log(`No old logs to clean up older than ${new Date(cutoffTimestamp).toISOString()}`);
108
+ return;
109
+ }
110
+ let ds = this.dataSource;
111
+ while (!(ds instanceof orm_1.SQLDataSource) && ds.dataSource) {
112
+ ds = ds.dataSource;
113
+ }
114
+ if (ds instanceof orm_1.SQLDataSource) {
115
+ const db = ds.db;
116
+ await db.exec(`delete from ConsoleLogs where timestamp < $timestamp`, { timestamp: cutoffTimestamp });
117
+ console.log(`bulk deleted ${count} logs`);
118
+ }
119
+ else {
120
+ const cursor = this.cursor({ timestamp: { $lt: cutoffTimestamp } }, { sortBy: ['-timestamp'] });
121
+ let count2 = 0;
122
+ for await (const log of cursor) {
123
+ this.delete(log.logId);
124
+ }
125
+ console.log(`cursor deleted ${count2} logs`);
126
+ }
127
+ console.log(`cleaned up console logs`, { expectedCount: count });
128
+ }
129
+ };
130
+ })();
131
+ exports.ConsoleLogsTable = ConsoleLogsTable;
132
+ (0, table_definitions_system_1.registerSystemTableDefinition)(metaData, exports.consoleLogSchema, ConsoleLogsTable);
133
+ /**
134
+ * We always use the user's personal data context so all logs are written to the same place. This requires
135
+ * that the table be accessed in an asynchronous way
136
+ */
137
+ async function ConsoleLogs() {
138
+ const userContext = await (0, user_context_singleton_1.getUserContext)();
139
+ return (0, user_context_singleton_1.getTableContainer)(userContext.userDataContext).getTable(metaData, exports.consoleLogSchema, ConsoleLogsTable);
140
+ }
@@ -0,0 +1,2 @@
1
+ export * from "./console-logger";
2
+ export * from "./console-logs.table";
@@ -0,0 +1,18 @@
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
+ __exportStar(require("./console-logger"), exports);
18
+ __exportStar(require("./console-logs.table"), exports);
@@ -1,4 +1,3 @@
1
- import type { DataFilter, IDataQueryParams, ISaveOptions } from "./data/orm";
2
1
  export interface IEventData<T = any> {
3
2
  name: string;
4
3
  data: T;
@@ -17,16 +16,6 @@ export declare const rpcServerCalls: {
17
16
  setUserIdAndSecretKey: ((userId: string, secretKey: string) => Promise<void>);
18
17
  getUserId: () => Promise<string | undefined>;
19
18
  encryptData: ((value: string, groupId?: string) => Promise<string>);
20
- tableGet: (dataContextId: string, tableName: string, id: string, opts?: {
21
- useCache?: boolean;
22
- cacheTtlMs?: number;
23
- }) => Promise<any>;
24
- tableList: ((dataContextId: string, tableName: string, filter?: DataFilter<any>, opts?: IDataQueryParams<any>) => Promise<any[]>);
25
- tableCount: ((dataContextId: string, tableName: string, filter?: DataFilter<any>) => Promise<number>);
26
- tableSave: ((dataContextId: string, tableName: string, record: any, opts?: ISaveOptions) => Promise<any>);
27
- tableInsert: ((dataContextId: string, tableName: string, record: any) => Promise<any>);
28
- tableUpdate: ((dataContextId: string, tableName: string, record: any) => Promise<any>);
29
- tableDelete: ((dataContextId: string, tableName: string, recordOrId: any) => Promise<any>);
30
19
  tableMethodCall: ((dataContextId: string, tableName: string, methodName: string, ...args: any[]) => Promise<any>);
31
20
  getFileContents: ((fileId: string, encoding?: BufferEncoding) => Promise<string>);
32
21
  resetAllDeviceSyncInfo: (() => Promise<void>);
package/dist/rpc-types.js CHANGED
@@ -16,14 +16,6 @@ exports.rpcServerCalls = {
16
16
  setUserIdAndSecretKey: rpcStub('setUserIdAndSecretKey'),
17
17
  getUserId: rpcStub('getUserId'),
18
18
  encryptData: rpcStub('encryptData'),
19
- // TODO collapse these all down to just tableMethodCall
20
- tableGet: rpcStub('tableGet'),
21
- tableList: rpcStub('tableList'),
22
- tableCount: rpcStub('tableCount'),
23
- tableSave: rpcStub('tableSave'),
24
- tableInsert: rpcStub('tableInsert'),
25
- tableUpdate: rpcStub('tableUpdate'),
26
- tableDelete: rpcStub('tableDelete'),
27
19
  tableMethodCall: rpcStub('tableMethodCall'),
28
20
  // TODO lock this down so not all code can get any file contents
29
21
  getFileContents: rpcStub('getFileContents'),
@@ -7,6 +7,16 @@ export interface IPeerDevice {
7
7
  listChanges(filter?: DataFilter<IChange>, opts?: IDataQueryParams<IChange>): Promise<IChange[]>;
8
8
  getNetworkInfo(): Promise<INetworkInfo>;
9
9
  notifyOfChanges(deviceId: string, timestampLastApplied: number): Promise<void>;
10
+ sendDeviceMessage(message: IDeviceMessage): Promise<any>;
11
+ }
12
+ export interface IDeviceMessage {
13
+ deviceMessageId: string;
14
+ fromDeviceId: string;
15
+ toDeviceId: string;
16
+ dataContextId: string;
17
+ ttl: number;
18
+ payload: any;
19
+ signature: string;
10
20
  }
11
21
  export interface INetworkInfo {
12
22
  deviceId: string;
@@ -1,13 +1,15 @@
1
- import { DataContext, DataFilter, ICursorIterable, IUser } from "./index";
1
+ import { DataContext, DataFilter, ICursorIterable, IUser, TrustLevel } from "./index";
2
2
  export interface IUsersQueryOpts {
3
3
  currentDataContext?: DataContext;
4
4
  includeCurrentDataContext?: boolean;
5
5
  includeUserDataContext?: boolean;
6
6
  includeOtherDataContexts?: boolean;
7
+ includeTrustLevel?: boolean;
7
8
  }
8
9
  export type IUserSource = 'currentDataContext' | 'userDataContext' | 'otherDataContexts';
9
10
  export interface IUserWithSource extends IUser {
10
11
  source: IUserSource;
12
+ trustLevel?: TrustLevel;
11
13
  }
12
14
  export declare function usersCursor(filter: DataFilter<IUser>, opts?: IUsersQueryOpts): Promise<ICursorIterable<IUserWithSource>>;
13
15
  export declare function getUserById(userId: string, opts?: IUsersQueryOpts): Promise<IUserWithSource | undefined>;
@@ -4,7 +4,7 @@ exports.usersCursor = usersCursor;
4
4
  exports.getUserById = getUserById;
5
5
  const index_1 = require("./index");
6
6
  async function usersCursor(filter, opts = {}) {
7
- const { currentDataContext, includeCurrentDataContext = true, includeUserDataContext = true, includeOtherDataContexts = true } = opts;
7
+ const { currentDataContext, includeCurrentDataContext = true, includeUserDataContext = true, includeOtherDataContexts = true, includeTrustLevel = true, } = opts;
8
8
  const userContext = await (0, index_1.getUserContext)();
9
9
  const contextToUse = currentDataContext || userContext.defaultDataContext();
10
10
  let finalCursor = null;
@@ -13,10 +13,12 @@ async function usersCursor(filter, opts = {}) {
13
13
  const primaryTable = (0, index_1.Users)(contextToUse);
14
14
  const primarySource = (contextToUse === userContext.userDataContext) ? 'userDataContext' : 'currentDataContext';
15
15
  const primaryCursor = index_1.Cursor.fromDataSource(primaryTable, filter)
16
- .map(user => {
16
+ .map(async (user) => {
17
+ const trustLevel = includeTrustLevel ? await (0, index_1.getUserTrustLevel)(contextToUse, user.userId) : undefined;
17
18
  const userWithSource = {
18
19
  ...user,
19
20
  source: primarySource,
21
+ trustLevel,
20
22
  };
21
23
  return userWithSource;
22
24
  });
@@ -26,10 +28,12 @@ async function usersCursor(filter, opts = {}) {
26
28
  if (includeUserDataContext && contextToUse !== userContext.userDataContext) {
27
29
  const userDataContextTable = (0, index_1.Users)(userContext.userDataContext);
28
30
  const userDataContextCursor = index_1.Cursor.fromDataSource(userDataContextTable, filter)
29
- .map(user => {
31
+ .map(async (user) => {
32
+ const trustLevel = includeTrustLevel ? await (0, index_1.getUserTrustLevel)(userContext.userDataContext, user.userId) : undefined;
30
33
  const userWithSource = {
31
34
  ...user,
32
- source: 'userDataContext'
35
+ source: 'userDataContext',
36
+ trustLevel,
33
37
  };
34
38
  return userWithSource;
35
39
  });
@@ -44,12 +48,26 @@ async function usersCursor(filter, opts = {}) {
44
48
  }
45
49
  }
46
50
  if (otherDataContexts.length > 0) {
51
+ // For trust levels from multiple contexts, we'll use the first context we find the user in
52
+ // This is a simplification - in reality, each group might have different trust levels
47
53
  const otherDataContextTables = otherDataContexts.map(dataContext => (0, index_1.Users)(dataContext));
48
54
  const otherDataContextsCursor = index_1.Cursor.fromDataSources(otherDataContextTables, filter)
49
- .map(user => {
55
+ .map(async (user) => {
56
+ // Try to get trust level from the first group context that has this user
57
+ let trustLevel = undefined;
58
+ if (includeTrustLevel) {
59
+ for (const dataContext of otherDataContexts) {
60
+ const contextUser = await (0, index_1.Users)(dataContext).get(user.userId).catch(() => null);
61
+ if (contextUser) {
62
+ trustLevel = await (0, index_1.getUserTrustLevel)(dataContext, user.userId);
63
+ break;
64
+ }
65
+ }
66
+ }
50
67
  const userWithSource = {
51
68
  ...user,
52
- source: 'otherDataContexts'
69
+ source: 'otherDataContexts',
70
+ trustLevel,
53
71
  };
54
72
  return userWithSource;
55
73
  });
@@ -59,7 +77,11 @@ async function usersCursor(filter, opts = {}) {
59
77
  // If no cursor was created, return empty cursor
60
78
  if (!finalCursor) {
61
79
  return index_1.Cursor.fromDataSource((0, index_1.Users)(contextToUse), { userId: { $eq: '__non_existent__' } })
62
- .map(user => ({ ...user, source: 'userDataContext' }));
80
+ .map(async (user) => ({
81
+ ...user,
82
+ source: 'userDataContext',
83
+ trustLevel: includeTrustLevel ? await (0, index_1.getUserTrustLevel)(userContext.userDataContext, user.userId) : undefined
84
+ }));
63
85
  }
64
86
  // Deduplication by userId
65
87
  // TODO: Push deduplication logic down into the queries for better performance
@@ -73,7 +95,7 @@ async function usersCursor(filter, opts = {}) {
73
95
  });
74
96
  }
75
97
  async function getUserById(userId, opts = {}) {
76
- const { currentDataContext, includeCurrentDataContext = true, includeUserDataContext = true, includeOtherDataContexts = true } = opts;
98
+ const { currentDataContext, includeCurrentDataContext = true, includeUserDataContext = true, includeOtherDataContexts = true, includeTrustLevel = true } = opts;
77
99
  const userContext = await (0, index_1.getUserContext)();
78
100
  const contextToUse = currentDataContext || userContext.defaultDataContext();
79
101
  // Try current data context first
@@ -83,9 +105,11 @@ async function getUserById(userId, opts = {}) {
83
105
  const user = await primaryTable.get(userId);
84
106
  if (user) {
85
107
  const source = (contextToUse === userContext.userDataContext) ? 'userDataContext' : 'currentDataContext';
108
+ const trustLevel = includeTrustLevel ? await (0, index_1.getUserTrustLevel)(contextToUse, user.userId) : undefined;
86
109
  return {
87
110
  ...user,
88
- source
111
+ source,
112
+ trustLevel,
89
113
  };
90
114
  }
91
115
  }
@@ -99,9 +123,11 @@ async function getUserById(userId, opts = {}) {
99
123
  const userDataContextTable = (0, index_1.Users)(userContext.userDataContext);
100
124
  const user = await userDataContextTable.get(userId);
101
125
  if (user) {
126
+ const trustLevel = includeTrustLevel ? await (0, index_1.getUserTrustLevel)(userContext.userDataContext, user.userId) : undefined;
102
127
  return {
103
128
  ...user,
104
- source: 'userDataContext'
129
+ source: 'userDataContext',
130
+ trustLevel,
105
131
  };
106
132
  }
107
133
  }
@@ -117,9 +143,11 @@ async function getUserById(userId, opts = {}) {
117
143
  const table = (0, index_1.Users)(dataContext);
118
144
  const user = await table.get(userId);
119
145
  if (user) {
146
+ const trustLevel = includeTrustLevel ? await (0, index_1.getUserTrustLevel)(dataContext, user.userId) : undefined;
120
147
  return {
121
148
  ...user,
122
- source: 'otherDataContexts'
149
+ source: 'otherDataContexts',
150
+ trustLevel,
123
151
  };
124
152
  }
125
153
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@peers-app/peers-sdk",
3
- "version": "0.7.2",
3
+ "version": "0.7.5",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/peers-app/peers-sdk.git"