@peers-app/peers-sdk 0.14.0 → 0.15.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 (210) hide show
  1. package/dist/context/data-context.d.ts +4 -4
  2. package/dist/context/data-context.js +1 -1
  3. package/dist/context/index.d.ts +3 -3
  4. package/dist/context/index.js +4 -0
  5. package/dist/context/user-context-singleton.js +13 -14
  6. package/dist/context/user-context.d.ts +4 -4
  7. package/dist/context/user-context.js +48 -31
  8. package/dist/data/assistants.d.ts +1 -1
  9. package/dist/data/assistants.js +35 -24
  10. package/dist/data/change-tracking.d.ts +8 -8
  11. package/dist/data/change-tracking.js +45 -39
  12. package/dist/data/channels.js +5 -5
  13. package/dist/data/data-locks.d.ts +2 -2
  14. package/dist/data/data-locks.js +21 -23
  15. package/dist/data/data-locks.test.js +73 -75
  16. package/dist/data/device-sync-info.d.ts +1 -1
  17. package/dist/data/device-sync-info.js +4 -4
  18. package/dist/data/devices.d.ts +1 -1
  19. package/dist/data/devices.js +9 -12
  20. package/dist/data/embeddings.js +14 -11
  21. package/dist/data/files/file-read-stream.d.ts +2 -2
  22. package/dist/data/files/file-read-stream.js +23 -14
  23. package/dist/data/files/file-write-stream.d.ts +2 -2
  24. package/dist/data/files/file-write-stream.js +8 -8
  25. package/dist/data/files/file.types.d.ts +2 -2
  26. package/dist/data/files/file.types.js +17 -11
  27. package/dist/data/files/files.d.ts +6 -6
  28. package/dist/data/files/files.js +17 -19
  29. package/dist/data/files/files.test.js +213 -214
  30. package/dist/data/files/index.d.ts +4 -4
  31. package/dist/data/files/index.js +4 -4
  32. package/dist/data/group-member-roles.js +2 -2
  33. package/dist/data/group-members.d.ts +5 -5
  34. package/dist/data/group-members.js +27 -18
  35. package/dist/data/group-members.test.js +73 -73
  36. package/dist/data/group-permissions.d.ts +3 -3
  37. package/dist/data/group-permissions.js +13 -11
  38. package/dist/data/group-share.d.ts +2 -2
  39. package/dist/data/group-share.js +29 -24
  40. package/dist/data/groups.d.ts +4 -4
  41. package/dist/data/groups.js +27 -19
  42. package/dist/data/groups.test.js +44 -44
  43. package/dist/data/index.d.ts +6 -6
  44. package/dist/data/index.js +6 -6
  45. package/dist/data/knowledge/peer-types.js +9 -9
  46. package/dist/data/messages.d.ts +5 -5
  47. package/dist/data/messages.js +43 -30
  48. package/dist/data/orm/client-proxy.data-source.d.ts +4 -4
  49. package/dist/data/orm/client-proxy.data-source.js +10 -12
  50. package/dist/data/orm/cursor.d.ts +1 -1
  51. package/dist/data/orm/cursor.js +2 -2
  52. package/dist/data/orm/cursor.test.js +92 -93
  53. package/dist/data/orm/data-query.d.ts +3 -3
  54. package/dist/data/orm/data-query.js +24 -18
  55. package/dist/data/orm/data-query.mongo.d.ts +1 -1
  56. package/dist/data/orm/data-query.mongo.js +49 -51
  57. package/dist/data/orm/data-query.mongo.test.js +173 -204
  58. package/dist/data/orm/data-query.sqlite.d.ts +1 -1
  59. package/dist/data/orm/data-query.sqlite.js +84 -73
  60. package/dist/data/orm/data-query.sqlite.test.js +164 -176
  61. package/dist/data/orm/data-query.test.js +216 -224
  62. package/dist/data/orm/decorators.js +3 -3
  63. package/dist/data/orm/dependency-injection.test.js +53 -56
  64. package/dist/data/orm/doc.d.ts +4 -4
  65. package/dist/data/orm/doc.js +17 -21
  66. package/dist/data/orm/event-registry.d.ts +1 -1
  67. package/dist/data/orm/event-registry.test.js +16 -16
  68. package/dist/data/orm/factory.d.ts +2 -2
  69. package/dist/data/orm/factory.js +33 -33
  70. package/dist/data/orm/index.d.ts +10 -10
  71. package/dist/data/orm/index.js +10 -10
  72. package/dist/data/orm/multi-cursors.d.ts +1 -1
  73. package/dist/data/orm/multi-cursors.js +6 -6
  74. package/dist/data/orm/multi-cursors.test.js +152 -144
  75. package/dist/data/orm/sql.data-source.d.ts +7 -7
  76. package/dist/data/orm/sql.data-source.js +88 -93
  77. package/dist/data/orm/sql.data-source.test.js +109 -101
  78. package/dist/data/orm/subscribable.data-source.d.ts +4 -4
  79. package/dist/data/orm/subscribable.data-source.js +5 -5
  80. package/dist/data/orm/table-container-events.test.js +34 -26
  81. package/dist/data/orm/table-container.d.ts +6 -6
  82. package/dist/data/orm/table-container.js +33 -21
  83. package/dist/data/orm/table-container.test.js +64 -53
  84. package/dist/data/orm/table-definitions.system.d.ts +3 -3
  85. package/dist/data/orm/table-definitions.system.js +3 -3
  86. package/dist/data/orm/table-definitions.type.d.ts +5 -5
  87. package/dist/data/orm/table-dependencies.d.ts +2 -2
  88. package/dist/data/orm/table.d.ts +5 -5
  89. package/dist/data/orm/table.event-source.test.js +105 -115
  90. package/dist/data/orm/table.js +35 -34
  91. package/dist/data/orm/types.d.ts +3 -3
  92. package/dist/data/orm/types.js +26 -25
  93. package/dist/data/orm/types.test.js +166 -92
  94. package/dist/data/package-permissions.d.ts +1 -1
  95. package/dist/data/package-permissions.js +2 -2
  96. package/dist/data/package-version-permissions.d.ts +1 -1
  97. package/dist/data/package-version-permissions.js +2 -2
  98. package/dist/data/package-versions.d.ts +9 -9
  99. package/dist/data/package-versions.js +47 -33
  100. package/dist/data/packages.d.ts +2 -2
  101. package/dist/data/packages.js +36 -18
  102. package/dist/data/packages.utils.d.ts +2 -2
  103. package/dist/data/packages.utils.js +4 -4
  104. package/dist/data/persistent-vars.d.ts +15 -15
  105. package/dist/data/persistent-vars.js +165 -154
  106. package/dist/data/table-definitions-table.d.ts +5 -5
  107. package/dist/data/table-definitions-table.js +13 -12
  108. package/dist/data/tool-tests.js +6 -6
  109. package/dist/data/tools.js +29 -19
  110. package/dist/data/user-permissions.d.ts +1 -1
  111. package/dist/data/user-permissions.js +5 -5
  112. package/dist/data/user-permissions.test.js +90 -88
  113. package/dist/data/user-trust-levels.js +10 -10
  114. package/dist/data/users.d.ts +4 -4
  115. package/dist/data/users.js +16 -15
  116. package/dist/data/voice-messages.d.ts +2 -2
  117. package/dist/data/voice-messages.js +13 -13
  118. package/dist/data/welcome-modal.pvar.js +3 -1
  119. package/dist/data/workflow-logs.js +26 -18
  120. package/dist/data/workflow-runs.d.ts +6 -6
  121. package/dist/data/workflow-runs.js +70 -44
  122. package/dist/data/workflows.d.ts +2 -2
  123. package/dist/data/workflows.js +7 -9
  124. package/dist/device/binary-peer-connection-v2.d.ts +7 -7
  125. package/dist/device/binary-peer-connection-v2.js +32 -28
  126. package/dist/device/binary-peer-connection-v2.test.js +80 -67
  127. package/dist/device/binary-peer-connection.d.ts +7 -7
  128. package/dist/device/binary-peer-connection.js +29 -28
  129. package/dist/device/binary-peer-connection.test.js +35 -31
  130. package/dist/device/connection.d.ts +5 -5
  131. package/dist/device/connection.js +59 -48
  132. package/dist/device/connection.test.js +74 -68
  133. package/dist/device/device-election.d.ts +2 -2
  134. package/dist/device/device-election.js +25 -20
  135. package/dist/device/device-election.test.js +35 -36
  136. package/dist/device/device.d.ts +2 -2
  137. package/dist/device/device.js +10 -4
  138. package/dist/device/device.test.js +16 -17
  139. package/dist/device/get-trust-level-fn.d.ts +2 -2
  140. package/dist/device/get-trust-level-fn.js +22 -11
  141. package/dist/device/get-trust-level-fn.test.js +58 -58
  142. package/dist/device/socket-io-binary-peer.d.ts +1 -1
  143. package/dist/device/socket-io-binary-peer.js +16 -13
  144. package/dist/device/socket.type.d.ts +2 -2
  145. package/dist/device/streamed-socket.d.ts +2 -2
  146. package/dist/device/streamed-socket.js +8 -8
  147. package/dist/device/streamed-socket.test.js +40 -40
  148. package/dist/device/tx-encoding.test.js +77 -77
  149. package/dist/events.d.ts +1 -1
  150. package/dist/events.js +5 -2
  151. package/dist/group-invite/group-invite.js +110 -19
  152. package/dist/group-invite/group-invite.pvars.d.ts +2 -2
  153. package/dist/group-invite/group-invite.pvars.js +21 -13
  154. package/dist/group-invite/group-invite.types.d.ts +1 -1
  155. package/dist/group-invite/index.d.ts +3 -3
  156. package/dist/group-invite/index.js +1 -1
  157. package/dist/index.d.ts +25 -24
  158. package/dist/index.js +30 -25
  159. package/dist/keys.d.ts +3 -3
  160. package/dist/keys.js +31 -30
  161. package/dist/keys.test.js +69 -61
  162. package/dist/logging/console-logger.d.ts +1 -1
  163. package/dist/logging/console-logger.js +35 -40
  164. package/dist/logging/console-logger.test.js +115 -115
  165. package/dist/logging/console-logs.table.d.ts +3 -3
  166. package/dist/logging/console-logs.table.js +28 -23
  167. package/dist/mentions.js +16 -12
  168. package/dist/observable.d.ts +2 -2
  169. package/dist/observable.js +15 -9
  170. package/dist/observable.test.js +47 -47
  171. package/dist/package-loader/get-require.js +3 -4
  172. package/dist/package-loader/package-loader.d.ts +2 -2
  173. package/dist/package-loader/package-loader.js +52 -34
  174. package/dist/peers-ui/peers-ui.d.ts +2 -2
  175. package/dist/peers-ui/peers-ui.js +2 -4
  176. package/dist/peers-ui/peers-ui.types.d.ts +3 -3
  177. package/dist/peers-ui/peers-ui.types.js +0 -1
  178. package/dist/rpc-types.d.ts +61 -59
  179. package/dist/rpc-types.js +61 -55
  180. package/dist/serial-json.d.ts +1 -1
  181. package/dist/serial-json.js +50 -43
  182. package/dist/serial-json.test.js +22 -22
  183. package/dist/system-ids.js +8 -8
  184. package/dist/tools/index.d.ts +1 -1
  185. package/dist/tools/tools-factory.d.ts +1 -1
  186. package/dist/tools/tools-factory.js +2 -2
  187. package/dist/types/assistant-runner-args.d.ts +3 -3
  188. package/dist/types/peer-device.d.ts +1 -1
  189. package/dist/types/peers-package.d.ts +3 -3
  190. package/dist/types/workflow-logger.d.ts +1 -1
  191. package/dist/types/workflow-run-context.d.ts +4 -4
  192. package/dist/types/workflow.d.ts +4 -4
  193. package/dist/types/workflow.js +27 -14
  194. package/dist/types/zod-types.d.ts +2 -1
  195. package/dist/types/zod-types.js +9 -3
  196. package/dist/user-connect/connection-code.d.ts +1 -1
  197. package/dist/user-connect/connection-code.js +7 -7
  198. package/dist/user-connect/connection-code.test.js +106 -106
  199. package/dist/user-connect/index.d.ts +3 -3
  200. package/dist/user-connect/index.js +1 -1
  201. package/dist/user-connect/user-connect.pvars.js +13 -11
  202. package/dist/user-connect/user-connect.types.d.ts +3 -3
  203. package/dist/users.query.d.ts +2 -2
  204. package/dist/users.query.js +40 -30
  205. package/dist/utils.d.ts +2 -2
  206. package/dist/utils.js +34 -32
  207. package/dist/utils.test.js +12 -8
  208. package/dist/workflow-log-formatter.d.ts +1 -1
  209. package/dist/workflow-log-formatter.js +17 -18
  210. package/package.json +14 -8
@@ -8,39 +8,42 @@
8
8
  */
9
9
  Object.defineProperty(exports, "__esModule", { value: true });
10
10
  exports.ChangeTrackingTable = exports.changeRecordSchema = void 0;
11
+ const zod_1 = require("zod");
11
12
  const events_1 = require("../events");
12
13
  const serial_json_1 = require("../serial-json");
14
+ const zod_types_1 = require("../types/zod-types");
13
15
  const utils_1 = require("../utils");
14
16
  const orm_1 = require("./orm");
15
- const zod_1 = require("zod");
16
- const zod_types_1 = require("../types/zod-types");
17
17
  exports.changeRecordSchema = zod_1.z.object({
18
18
  changeId: zod_types_1.zodPeerId,
19
19
  transactionId: zod_1.z.string().optional(), // not used for now
20
20
  tableName: zod_1.z.string(),
21
21
  recordId: zod_1.z.string(),
22
- op: zod_1.z.enum(['set', 'delete', 'patch-text']),
22
+ op: zod_1.z.enum(["set", "delete", "patch-text"]),
23
23
  path: zod_1.z.string().describe('JSON Patch path (e.g., "/title", "/age")'),
24
- value: zod_1.z.any().nullish().describe('JSON value - can be any type (object, string, number, boolean, array, null, or undefined)'),
24
+ value: zod_1.z
25
+ .any()
26
+ .nullish()
27
+ .describe("JSON value - can be any type (object, string, number, boolean, array, null, or undefined)"),
25
28
  createdAt: zod_1.z.number(),
26
29
  appliedAt: zod_1.z.number(),
27
30
  supersededAt: zod_1.z.number().optional(),
28
31
  });
29
32
  const changeTrackingV2TableMetaData = {
30
- name: 'ChangeTrackingV2',
31
- primaryKeyName: 'changeId',
32
- description: 'Change tracking table V2 with superseding support',
33
+ name: "ChangeTrackingV2",
34
+ primaryKeyName: "changeId",
35
+ description: "Change tracking table V2 with superseding support",
33
36
  fields: (0, orm_1.schemaToFields)(exports.changeRecordSchema),
34
37
  indexes: [
35
38
  // Single-column indexes for common sorting/filtering
36
- { fields: ['createdAt'] },
37
- { fields: ['appliedAt'] },
39
+ { fields: ["createdAt"] },
40
+ { fields: ["appliedAt"] },
38
41
  // Compound indexes optimized for actual query patterns
39
- { fields: ['tableName', 'recordId', 'createdAt'] }, // active changes by table + record
40
- { fields: ['tableName', 'recordId', 'supersededAt'] }, // active changes lookup without full sort
41
- { fields: ['recordId', 'path'] }, // path-based superseding and deleted record checks
42
- { fields: ['supersededAt', 'appliedAt', 'createdAt'] }, // main sync query (supersededAt filter + appliedAt range + createdAt sort)
43
- { fields: ['tableName', 'supersededAt'] }, // cleanup superseded changes by table
42
+ { fields: ["tableName", "recordId", "createdAt"] }, // active changes by table + record
43
+ { fields: ["tableName", "recordId", "supersededAt"] }, // active changes lookup without full sort
44
+ { fields: ["recordId", "path"] }, // path-based superseding and deleted record checks
45
+ { fields: ["supersededAt", "appliedAt", "createdAt"] }, // main sync query (supersededAt filter + appliedAt range + createdAt sort)
46
+ { fields: ["tableName", "supersededAt"] }, // cleanup superseded changes by table
44
47
  ],
45
48
  localOnly: true,
46
49
  };
@@ -50,8 +53,7 @@ class ChangeTrackingTable extends orm_1.SQLDataSource {
50
53
  constructor({ db }) {
51
54
  super(db, changeTrackingV2TableMetaData, exports.changeRecordSchema);
52
55
  const tableName = changeTrackingV2TableMetaData.name;
53
- this.dataChangedEmitter = new events_1.Emitter(tableName + '_DataChanged_' + (0, utils_1.newid)());
54
- // @ts-ignore
56
+ this.dataChangedEmitter = new events_1.Emitter(`${tableName}_DataChanged_${(0, utils_1.newid)()}`);
55
57
  this.dataChanged = this.dataChangedEmitter.event;
56
58
  }
57
59
  /**
@@ -80,7 +82,7 @@ class ChangeTrackingTable extends orm_1.SQLDataSource {
80
82
  MAX(createdAt) as last_timestamp
81
83
  FROM "${this.tableName}"
82
84
  WHERE
83
- recordId IN (${recordIds.map(() => '?').join(',')})
85
+ recordId IN (${recordIds.map(() => "?").join(",")})
84
86
  AND path = '/'
85
87
  GROUP BY recordId
86
88
  )
@@ -89,7 +91,7 @@ class ChangeTrackingTable extends orm_1.SQLDataSource {
89
91
  FROM RootPathChanges
90
92
  WHERE op = 'delete'
91
93
  `, recordIds);
92
- return deletedRecordsResult.map(d => d.recordId);
94
+ return deletedRecordsResult.map((d) => d.recordId);
93
95
  }
94
96
  /**
95
97
  * Find recordIds that have no change records at all.
@@ -107,7 +109,7 @@ class ChangeTrackingTable extends orm_1.SQLDataSource {
107
109
  const missingRecordsResult = await this.db.all(`
108
110
  WITH InputRecordIds(recordId) AS (
109
111
  VALUES
110
- ${recordIds.map(() => '(?)').join(',\n ')}
112
+ ${recordIds.map(() => "(?)").join(",\n ")}
111
113
  )
112
114
  SELECT
113
115
  i.recordId
@@ -116,14 +118,14 @@ class ChangeTrackingTable extends orm_1.SQLDataSource {
116
118
  ON i.recordId = existing.recordId
117
119
  WHERE existing.recordId IS NULL
118
120
  `, recordIds);
119
- return missingRecordsResult.map(d => d.recordId);
121
+ return missingRecordsResult.map((d) => d.recordId);
120
122
  }
121
123
  /**
122
- * Find changeIds that we do not have
123
- *
124
- * @param changeIds - Array of changeIds to check
125
- * @returns Array of changeIds with no change records
126
- */
124
+ * Find changeIds that we do not have
125
+ *
126
+ * @param changeIds - Array of changeIds to check
127
+ * @returns Array of changeIds with no change records
128
+ */
127
129
  async filterToMissingChangeIds(changeIds) {
128
130
  if (changeIds.length === 0)
129
131
  return [];
@@ -131,7 +133,7 @@ class ChangeTrackingTable extends orm_1.SQLDataSource {
131
133
  const missingChangeIds = await this.db.all(`
132
134
  WITH InputChangeIds(changeId) AS (
133
135
  VALUES
134
- ${changeIds.map(() => '(?)').join(',\n ')}
136
+ ${changeIds.map(() => "(?)").join(",\n ")}
135
137
  )
136
138
  SELECT
137
139
  i.changeId
@@ -140,7 +142,7 @@ class ChangeTrackingTable extends orm_1.SQLDataSource {
140
142
  ON i.changeId = existing.changeId
141
143
  WHERE existing.changeId IS NULL
142
144
  `, changeIds);
143
- return missingChangeIds.map(d => d.changeId);
145
+ return missingChangeIds.map((d) => d.changeId);
144
146
  }
145
147
  async markAllPriorChangesSuperseded(tableName, recordId, supersededAt) {
146
148
  await this.db.exec(`
@@ -164,14 +166,16 @@ class ChangeTrackingTable extends orm_1.SQLDataSource {
164
166
  return;
165
167
  await this.initTable();
166
168
  // Build a CASE statement for bulk update
167
- const changeIds = updates.map(u => u.changeId);
168
- const caseStatement = updates.map(u => `WHEN '${u.changeId}' THEN ${u.supersededAt}`).join('\n ');
169
+ const changeIds = updates.map((u) => u.changeId);
170
+ const caseStatement = updates
171
+ .map((u) => `WHEN '${u.changeId}' THEN ${u.supersededAt}`)
172
+ .join("\n ");
169
173
  await this.db.exec(`
170
174
  UPDATE "${this.tableName}"
171
175
  SET supersededAt = CASE changeId
172
176
  ${caseStatement}
173
177
  END
174
- WHERE changeId IN (${changeIds.map(() => '?').join(',')})
178
+ WHERE changeId IN (${changeIds.map(() => "?").join(",")})
175
179
  `, changeIds);
176
180
  }
177
181
  /**
@@ -247,7 +251,7 @@ class ChangeTrackingTable extends orm_1.SQLDataSource {
247
251
  return results;
248
252
  }
249
253
  return this.db.runInTransaction(() => {
250
- return records.map(record => this.insertSync(record));
254
+ return records.map((record) => this.insertSync(record));
251
255
  });
252
256
  }
253
257
  /**
@@ -258,14 +262,16 @@ class ChangeTrackingTable extends orm_1.SQLDataSource {
258
262
  if (updates.length === 0)
259
263
  return;
260
264
  // Build a CASE statement for bulk update
261
- const changeIds = updates.map(u => u.changeId);
262
- const caseStatement = updates.map(u => `WHEN '${u.changeId}' THEN ${u.supersededAt}`).join('\n ');
263
- this.db.execSync(`
265
+ const changeIds = updates.map((u) => u.changeId);
266
+ const caseStatement = updates
267
+ .map((u) => `WHEN '${u.changeId}' THEN ${u.supersededAt}`)
268
+ .join("\n ");
269
+ this.db.execSync?.(`
264
270
  UPDATE "${this.tableName}"
265
271
  SET supersededAt = CASE changeId
266
272
  ${caseStatement}
267
273
  END
268
- WHERE changeId IN (${changeIds.map(() => '?').join(',')})
274
+ WHERE changeId IN (${changeIds.map(() => "?").join(",")})
269
275
  `, changeIds);
270
276
  }
271
277
  /**
@@ -275,9 +281,9 @@ class ChangeTrackingTable extends orm_1.SQLDataSource {
275
281
  deleteChangesSync(changeIds) {
276
282
  if (changeIds.length === 0)
277
283
  return;
278
- this.db.execSync(`
284
+ this.db.execSync?.(`
279
285
  DELETE FROM "${this.tableName}"
280
- WHERE changeId IN (${changeIds.map(c => "?").join()})
286
+ WHERE changeId IN (${changeIds.map((_c) => "?").join()})
281
287
  `, changeIds);
282
288
  }
283
289
  /**
@@ -285,7 +291,7 @@ class ChangeTrackingTable extends orm_1.SQLDataSource {
285
291
  * Table must be initialized before calling this method.
286
292
  */
287
293
  deleteSupersededChangesOlderThanSync(tableName, beforeTimestamp) {
288
- this.db.execSync(`
294
+ this.db.execSync?.(`
289
295
  DELETE FROM "${this.tableName}"
290
296
  WHERE tableName = ?
291
297
  AND supersededAt IS NOT NULL
@@ -342,7 +348,7 @@ class ChangeTrackingTable extends orm_1.SQLDataSource {
342
348
  await this.initTable();
343
349
  await this.db.exec(`
344
350
  DELETE FROM "${this.tableName}"
345
- WHERE changeId IN (${changeIds.map(c => "?").join()})
351
+ WHERE changeId IN (${changeIds.map((_c) => "?").join()})
346
352
  `, changeIds);
347
353
  }
348
354
  /**
@@ -3,10 +3,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.channelSchema = void 0;
4
4
  exports.Channels = Channels;
5
5
  const zod_1 = require("zod");
6
- const types_1 = require("./orm/types");
7
6
  const user_context_singleton_1 = require("../context/user-context-singleton");
8
- const table_definitions_system_1 = require("./orm/table-definitions.system");
9
7
  const zod_types_1 = require("../types/zod-types");
8
+ const table_definitions_system_1 = require("./orm/table-definitions.system");
9
+ const types_1 = require("./orm/types");
10
10
  exports.channelSchema = zod_1.z.object({
11
11
  channelId: zod_types_1.zodPeerId,
12
12
  name: zod_1.z.string(),
@@ -15,9 +15,9 @@ exports.channelSchema = zod_1.z.object({
15
15
  owningGroupId: zod_types_1.zodPeerId,
16
16
  });
17
17
  const metaData = {
18
- name: 'Channels',
19
- description: 'Different channels of communication for peers and assistants',
20
- primaryKeyName: 'channelId',
18
+ name: "Channels",
19
+ description: "Different channels of communication for peers and assistants",
20
+ primaryKeyName: "channelId",
21
21
  fields: (0, types_1.schemaToFields)(exports.channelSchema),
22
22
  };
23
23
  (0, table_definitions_system_1.registerSystemTableDefinition)(metaData, exports.channelSchema);
@@ -1,6 +1,6 @@
1
1
  import { z } from "zod";
2
- import { IPeerDevice } from "../types/peer-device";
3
- import { ITableMetaData, Table, ITableDependencies } from "./orm";
2
+ import type { IPeerDevice } from "../types/peer-device";
3
+ import { type ITableDependencies, type ITableMetaData, Table } from "./orm";
4
4
  export declare const dataLockSchema: z.ZodObject<{
5
5
  dataLockId: z.ZodEffects<z.ZodString, string, string>;
6
6
  recordId: z.ZodString;
@@ -4,10 +4,10 @@ exports.DataLocksTable = exports.dataLockSchema = void 0;
4
4
  exports.DataLocks = DataLocks;
5
5
  const lodash_1 = require("lodash");
6
6
  const zod_1 = require("zod");
7
+ const context_1 = require("../context");
7
8
  const zod_types_1 = require("../types/zod-types");
8
9
  const utils_1 = require("../utils");
9
10
  const orm_1 = require("./orm");
10
- const context_1 = require("../context");
11
11
  const table_definitions_system_1 = require("./orm/table-definitions.system");
12
12
  /*
13
13
  This works by waiting for a majority of peers to acknowledge the lock.
@@ -33,13 +33,11 @@ exports.dataLockSchema = zod_1.z.object({
33
33
  acknowledged: zod_1.z.number().optional(), // timestamp of acknowledgment
34
34
  });
35
35
  const dataLocksTableMetaData = {
36
- name: 'DataLocks',
37
- primaryKeyName: 'dataLockId',
38
- description: 'Data locks table to track exclusive write access to records in other tables.',
36
+ name: "DataLocks",
37
+ primaryKeyName: "dataLockId",
38
+ description: "Data locks table to track exclusive write access to records in other tables.",
39
39
  fields: (0, orm_1.schemaToFields)(exports.dataLockSchema),
40
- indexes: [
41
- { fields: ['recordId'] },
42
- ],
40
+ indexes: [{ fields: ["recordId"] }],
43
41
  };
44
42
  class DataLocksTable extends orm_1.Table {
45
43
  DEFAULT_LOCK_TIME_MS = 300_000; // 5 minutes
@@ -51,7 +49,7 @@ class DataLocksTable extends orm_1.Table {
51
49
  // signal to other peers when we become aware of a new data lock
52
50
  this.dataChanged.subscribe(async (evt) => {
53
51
  const dataLock = evt.dataObject;
54
- if (evt.op === 'insert') {
52
+ if (evt.op === "insert") {
55
53
  dataLock.acknowledged = (0, utils_1.getTimestamp)();
56
54
  this.dataSource.update(dataLock);
57
55
  }
@@ -62,7 +60,7 @@ class DataLocksTable extends orm_1.Table {
62
60
  recordId,
63
61
  lockedUntil: { $gt: Date.now() }, // Only consider locks that are still valid
64
62
  });
65
- return (0, lodash_1.sortBy)(locks, 'dataLockId')[0];
63
+ return (0, lodash_1.sortBy)(locks, "dataLockId")[0];
66
64
  }
67
65
  async releaseLock(dataLock) {
68
66
  // Remove the lock from the database
@@ -77,7 +75,7 @@ class DataLocksTable extends orm_1.Table {
77
75
  return await this.insert(newLock);
78
76
  }
79
77
  async acquireLock(recordIdOrLock, timeoutMs = this.DEFAULT_TIMEOUT_MS, lockTimeMs = this.DEFAULT_LOCK_TIME_MS) {
80
- const lock = typeof recordIdOrLock === 'string'
78
+ const lock = typeof recordIdOrLock === "string"
81
79
  ? await this.createLock(recordIdOrLock, lockTimeMs)
82
80
  : recordIdOrLock;
83
81
  const recordId = lock.recordId;
@@ -104,7 +102,7 @@ class DataLocksTable extends orm_1.Table {
104
102
  }
105
103
  dataLock.lockedUntil = Date.now() + lockTimeMs;
106
104
  const renewedLock = await this.update(dataLock);
107
- let currentLock = await this.getCurrentLock(dataLock.recordId);
105
+ const currentLock = await this.getCurrentLock(dataLock.recordId);
108
106
  if (!currentLock || currentLock.dataLockId !== dataLock.dataLockId) {
109
107
  // currently we don't allow renewing a lock if it is not the current lock - this could change in the future if needed
110
108
  console.warn(`Lock renewal failed for ${dataLock.dataLockId} on ${dataLock.recordId}`);
@@ -115,23 +113,23 @@ class DataLocksTable extends orm_1.Table {
115
113
  async countLockAcknowledgements(lock) {
116
114
  if (!this.peerDevice)
117
115
  throw new Error(`Peer device not set for DataLocksTable`);
118
- const changes = await this.peerDevice.listChanges({
116
+ const changes = (await this.peerDevice.listChanges({
119
117
  tableName: dataLocksTableMetaData.name,
120
118
  recordId: lock.dataLockId,
121
- op: 'set', // V2 uses 'set' for updates
122
- });
119
+ op: "set", // V2 uses 'set' for updates
120
+ }));
123
121
  // In V2, look for changes at path "/acknowledged" or full record changes at path "/"
124
122
  const acknowledgedUpdates = changes
125
- .map(change => {
126
- if (change.path === '/acknowledged') {
123
+ .map((change) => {
124
+ if (change.path === "/acknowledged") {
127
125
  return change.value;
128
126
  }
129
- else if (change.path === '/' && change.value && typeof change.value === 'object') {
127
+ else if (change.path === "/" && change.value && typeof change.value === "object") {
130
128
  return change.value.acknowledged;
131
129
  }
132
130
  return undefined;
133
131
  })
134
- .filter(a => a !== undefined);
132
+ .filter((a) => a !== undefined);
135
133
  // NOTE this could potentially miscount if two peers acknowledge the lock with the same timestamp (very unlikely)
136
134
  return (0, lodash_1.uniq)(acknowledgedUpdates).length;
137
135
  }
@@ -140,16 +138,16 @@ class DataLocksTable extends orm_1.Table {
140
138
  throw new Error(`Peer device not set for DataLocksTable`);
141
139
  const connectionCount = (await this.peerDevice.getNetworkInfo()).connections.length;
142
140
  const ackCnt = await this.countLockAcknowledgements(lock);
143
- const acksNeeded = Math.ceil((connectionCount * 0.7) + 1); // 70% of the connections and +1 for the local device
141
+ const acksNeeded = Math.ceil(connectionCount * 0.7 + 1); // 70% of the connections and +1 for the local device
144
142
  if (ackCnt >= acksNeeded) {
145
- return 'confirmed';
143
+ return "confirmed";
146
144
  }
147
- return 'pending';
145
+ return "pending";
148
146
  }
149
147
  async waitForLockConfirmedAndCurrent(lock, timeoutMs = this.DEFAULT_TIMEOUT_MS) {
150
148
  const startTime = Date.now();
151
149
  let resolveLock;
152
- const confirmPromise = new Promise(async (resolve) => {
150
+ const confirmPromise = new Promise((resolve) => {
153
151
  resolveLock = resolve;
154
152
  });
155
153
  const subscription = this.dataChanged.subscribe(async (evt) => {
@@ -159,7 +157,7 @@ class DataLocksTable extends orm_1.Table {
159
157
  });
160
158
  const checkLockStatus = async () => {
161
159
  const status = await this.lockStatus(lock);
162
- if (status === 'confirmed') {
160
+ if (status === "confirmed") {
163
161
  const currentLock = await this.getCurrentLock(lock.recordId);
164
162
  if (currentLock?.dataLockId === lock.dataLockId) {
165
163
  subscription.unsubscribe();