@peers-app/peers-sdk 0.27.3 → 0.27.4

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 (258) hide show
  1. package/dist/contracts/contract-proxy.d.ts +7 -0
  2. package/dist/contracts/contract-proxy.js +19 -2
  3. package/dist/contracts/create-local-consumer.js +16 -1
  4. package/dist/contracts/index.d.ts +2 -0
  5. package/dist/contracts/index.js +2 -0
  6. package/dist/contracts/system/index.d.ts +2 -0
  7. package/dist/contracts/system/index.js +2 -0
  8. package/dist/contracts/system/invites-contract.js +2 -1
  9. package/dist/contracts/system/sync-check-contract.d.ts +97 -0
  10. package/dist/contracts/system/sync-check-contract.js +115 -0
  11. package/dist/contracts/tool-arguments.d.ts +15 -0
  12. package/dist/contracts/tool-arguments.js +41 -0
  13. package/dist/contracts/tool-catalog-service.js +2 -12
  14. package/dist/data/change-tracking.d.ts +40 -0
  15. package/dist/data/change-tracking.js +89 -0
  16. package/dist/data/orm/types.d.ts +24 -7
  17. package/dist/data/orm/types.js +97 -24
  18. package/dist/define/manifest.js +6 -34
  19. package/dist/package-loader/package-loader.js +27 -22
  20. package/dist/system-ids.d.ts +5 -0
  21. package/dist/system-ids.js +6 -1
  22. package/package.json +4 -2
  23. package/dist/context/user-context-identity.test.d.ts +0 -1
  24. package/dist/context/user-context-identity.test.js +0 -220
  25. package/dist/contracts/__tests__/action-dispatch.test.d.ts +0 -1
  26. package/dist/contracts/__tests__/action-dispatch.test.js +0 -319
  27. package/dist/contracts/__tests__/also-implements.test.d.ts +0 -1
  28. package/dist/contracts/__tests__/also-implements.test.js +0 -110
  29. package/dist/contracts/__tests__/builder.test.d.ts +0 -1
  30. package/dist/contracts/__tests__/builder.test.js +0 -669
  31. package/dist/contracts/__tests__/contract-events.test.d.ts +0 -1
  32. package/dist/contracts/__tests__/contract-events.test.js +0 -199
  33. package/dist/contracts/__tests__/contract-observables.test.d.ts +0 -1
  34. package/dist/contracts/__tests__/contract-observables.test.js +0 -290
  35. package/dist/contracts/__tests__/contract-provider-router.test.d.ts +0 -1
  36. package/dist/contracts/__tests__/contract-provider-router.test.js +0 -315
  37. package/dist/contracts/__tests__/contract-proxy.test.d.ts +0 -1
  38. package/dist/contracts/__tests__/contract-proxy.test.js +0 -657
  39. package/dist/contracts/__tests__/contract-resolvers.test.d.ts +0 -1
  40. package/dist/contracts/__tests__/contract-resolvers.test.js +0 -758
  41. package/dist/contracts/__tests__/contract-subscription-lifecycle.test.d.ts +0 -1
  42. package/dist/contracts/__tests__/contract-subscription-lifecycle.test.js +0 -353
  43. package/dist/contracts/__tests__/contract-table-events.test.d.ts +0 -1
  44. package/dist/contracts/__tests__/contract-table-events.test.js +0 -209
  45. package/dist/contracts/__tests__/contract-transport.test.d.ts +0 -1
  46. package/dist/contracts/__tests__/contract-transport.test.js +0 -163
  47. package/dist/contracts/__tests__/extract.test.d.ts +0 -1
  48. package/dist/contracts/__tests__/extract.test.js +0 -145
  49. package/dist/contracts/__tests__/frozen-contracts.test.d.ts +0 -1
  50. package/dist/contracts/__tests__/frozen-contracts.test.js +0 -191
  51. package/dist/contracts/__tests__/generic-tool-dispatch.test.d.ts +0 -1
  52. package/dist/contracts/__tests__/generic-tool-dispatch.test.js +0 -130
  53. package/dist/contracts/__tests__/host-contract-client.test.d.ts +0 -1
  54. package/dist/contracts/__tests__/host-contract-client.test.js +0 -793
  55. package/dist/contracts/__tests__/host-contract-consumer.test.d.ts +0 -1
  56. package/dist/contracts/__tests__/host-contract-consumer.test.js +0 -163
  57. package/dist/contracts/__tests__/host-contract-transport.test.d.ts +0 -1
  58. package/dist/contracts/__tests__/host-contract-transport.test.js +0 -66
  59. package/dist/contracts/__tests__/integration.test.d.ts +0 -1
  60. package/dist/contracts/__tests__/integration.test.js +0 -348
  61. package/dist/contracts/__tests__/legacy-removal.test.d.ts +0 -1
  62. package/dist/contracts/__tests__/legacy-removal.test.js +0 -128
  63. package/dist/contracts/__tests__/persistent-registry.test.d.ts +0 -1
  64. package/dist/contracts/__tests__/persistent-registry.test.js +0 -109
  65. package/dist/contracts/__tests__/playground.test.d.ts +0 -1
  66. package/dist/contracts/__tests__/playground.test.js +0 -216
  67. package/dist/contracts/__tests__/registry.test.d.ts +0 -1
  68. package/dist/contracts/__tests__/registry.test.js +0 -238
  69. package/dist/contracts/__tests__/remote-contract-transport.test.d.ts +0 -1
  70. package/dist/contracts/__tests__/remote-contract-transport.test.js +0 -119
  71. package/dist/contracts/__tests__/system-contracts.test.d.ts +0 -1
  72. package/dist/contracts/__tests__/system-contracts.test.js +0 -247
  73. package/dist/contracts/__tests__/target-dispatch.d.ts +0 -11
  74. package/dist/contracts/__tests__/target-dispatch.js +0 -24
  75. package/dist/contracts/__tests__/tool-catalog-inventory.test.d.ts +0 -1
  76. package/dist/contracts/__tests__/tool-catalog-inventory.test.js +0 -44
  77. package/dist/contracts/__tests__/tool-catalog-service.test.d.ts +0 -1
  78. package/dist/contracts/__tests__/tool-catalog-service.test.js +0 -482
  79. package/dist/contracts/__tests__/tool-catalog.test.d.ts +0 -1
  80. package/dist/contracts/__tests__/tool-catalog.test.js +0 -1199
  81. package/dist/contracts/__tests__/validate.test.d.ts +0 -1
  82. package/dist/contracts/__tests__/validate.test.js +0 -991
  83. package/dist/contracts/__tests__/workflow-context.test.d.ts +0 -1
  84. package/dist/contracts/__tests__/workflow-context.test.js +0 -50
  85. package/dist/data/access-level.test.d.ts +0 -1
  86. package/dist/data/access-level.test.js +0 -53
  87. package/dist/data/change-tracking.test.d.ts +0 -1
  88. package/dist/data/change-tracking.test.js +0 -62
  89. package/dist/data/files/files.test.d.ts +0 -1
  90. package/dist/data/files/files.test.js +0 -770
  91. package/dist/data/group-members.test.d.ts +0 -1
  92. package/dist/data/group-members.test.js +0 -336
  93. package/dist/data/group-share.test.d.ts +0 -1
  94. package/dist/data/group-share.test.js +0 -110
  95. package/dist/data/groups.test.d.ts +0 -1
  96. package/dist/data/groups.test.js +0 -153
  97. package/dist/data/orm/cursor.test.d.ts +0 -1
  98. package/dist/data/orm/cursor.test.js +0 -314
  99. package/dist/data/orm/data-query.mongo.test.d.ts +0 -1
  100. package/dist/data/orm/data-query.mongo.test.js +0 -367
  101. package/dist/data/orm/data-query.sqlite.test.d.ts +0 -1
  102. package/dist/data/orm/data-query.sqlite.test.js +0 -365
  103. package/dist/data/orm/data-query.test.d.ts +0 -1
  104. package/dist/data/orm/data-query.test.js +0 -545
  105. package/dist/data/orm/dependency-injection.test.d.ts +0 -1
  106. package/dist/data/orm/dependency-injection.test.js +0 -171
  107. package/dist/data/orm/event-registry.test.d.ts +0 -1
  108. package/dist/data/orm/event-registry.test.js +0 -44
  109. package/dist/data/orm/multi-cursors.test.d.ts +0 -1
  110. package/dist/data/orm/multi-cursors.test.js +0 -463
  111. package/dist/data/orm/sql.data-source.test.d.ts +0 -1
  112. package/dist/data/orm/sql.data-source.test.js +0 -731
  113. package/dist/data/orm/table-container-events.test.d.ts +0 -1
  114. package/dist/data/orm/table-container-events.test.js +0 -101
  115. package/dist/data/orm/table-container.test.d.ts +0 -1
  116. package/dist/data/orm/table-container.test.js +0 -273
  117. package/dist/data/orm/table.event-source.test.d.ts +0 -1
  118. package/dist/data/orm/table.event-source.test.js +0 -331
  119. package/dist/data/orm/types.test.d.ts +0 -1
  120. package/dist/data/orm/types.test.js +0 -409
  121. package/dist/data/package-table-identity.test.d.ts +0 -1
  122. package/dist/data/package-table-identity.test.js +0 -46
  123. package/dist/data/package-version-permissions.test.d.ts +0 -1
  124. package/dist/data/package-version-permissions.test.js +0 -107
  125. package/dist/data/package-version-resolver.test.d.ts +0 -4
  126. package/dist/data/package-version-resolver.test.js +0 -543
  127. package/dist/data/package-versions.test.d.ts +0 -1
  128. package/dist/data/package-versions.test.js +0 -227
  129. package/dist/data/persistent-vars.conflict.test.d.ts +0 -1
  130. package/dist/data/persistent-vars.conflict.test.js +0 -126
  131. package/dist/data/persistent-vars.migration.test.d.ts +0 -1
  132. package/dist/data/persistent-vars.migration.test.js +0 -133
  133. package/dist/data/persistent-vars.package-scope.test.d.ts +0 -1
  134. package/dist/data/persistent-vars.package-scope.test.js +0 -27
  135. package/dist/data/sync-recovery-queue.test.d.ts +0 -1
  136. package/dist/data/sync-recovery-queue.test.js +0 -215
  137. package/dist/data/table-signing.test.d.ts +0 -1
  138. package/dist/data/table-signing.test.js +0 -118
  139. package/dist/data/tool-access.test.d.ts +0 -1
  140. package/dist/data/tool-access.test.js +0 -166
  141. package/dist/data/user-permissions.test.d.ts +0 -1
  142. package/dist/data/user-permissions.test.js +0 -305
  143. package/dist/data/user-trust-levels.test.d.ts +0 -1
  144. package/dist/data/user-trust-levels.test.js +0 -37
  145. package/dist/define/also-implements.test.d.ts +0 -1
  146. package/dist/define/also-implements.test.js +0 -123
  147. package/dist/define/declare-contract.test.d.ts +0 -1
  148. package/dist/define/declare-contract.test.js +0 -573
  149. package/dist/define/define.test.d.ts +0 -1
  150. package/dist/define/define.test.js +0 -1010
  151. package/dist/define/empty-fields.test.d.ts +0 -1
  152. package/dist/define/empty-fields.test.js +0 -55
  153. package/dist/define/events-observables.test.d.ts +0 -1
  154. package/dist/define/events-observables.test.js +0 -1013
  155. package/dist/define/serve-members.test.d.ts +0 -1
  156. package/dist/define/serve-members.test.js +0 -630
  157. package/dist/define/vars.test.d.ts +0 -1
  158. package/dist/define/vars.test.js +0 -39
  159. package/dist/device/binary-peer-connection-v2.test.d.ts +0 -1
  160. package/dist/device/binary-peer-connection-v2.test.js +0 -730
  161. package/dist/device/binary-peer-connection.test.d.ts +0 -1
  162. package/dist/device/binary-peer-connection.test.js +0 -184
  163. package/dist/device/connection.test.d.ts +0 -1
  164. package/dist/device/connection.test.js +0 -613
  165. package/dist/device/device-election.test.d.ts +0 -1
  166. package/dist/device/device-election.test.js +0 -516
  167. package/dist/device/device.test.d.ts +0 -1
  168. package/dist/device/device.test.js +0 -243
  169. package/dist/device/frame-cipher.test.d.ts +0 -1
  170. package/dist/device/frame-cipher.test.js +0 -219
  171. package/dist/device/get-trust-level-fn.test.d.ts +0 -1
  172. package/dist/device/get-trust-level-fn.test.js +0 -685
  173. package/dist/device/streamed-socket.test.d.ts +0 -1
  174. package/dist/device/streamed-socket.test.js +0 -216
  175. package/dist/device/tx-encoding.test.d.ts +0 -1
  176. package/dist/device/tx-encoding.test.js +0 -295
  177. package/dist/device-pairing/cpace.test.d.ts +0 -1
  178. package/dist/device-pairing/cpace.test.js +0 -116
  179. package/dist/device-pairing/device-pairing.test.d.ts +0 -1
  180. package/dist/device-pairing/device-pairing.test.js +0 -211
  181. package/dist/hlc.test.d.ts +0 -1
  182. package/dist/hlc.test.js +0 -45
  183. package/dist/host-credentials.test.d.ts +0 -1
  184. package/dist/host-credentials.test.js +0 -88
  185. package/dist/identity/account-email.test.d.ts +0 -1
  186. package/dist/identity/account-email.test.js +0 -59
  187. package/dist/identity/anchor-document.test.d.ts +0 -1
  188. package/dist/identity/anchor-document.test.js +0 -16
  189. package/dist/identity/anchor-resolution.test.d.ts +0 -1
  190. package/dist/identity/anchor-resolution.test.js +0 -130
  191. package/dist/identity/key-change.test.d.ts +0 -1
  192. package/dist/identity/key-change.test.js +0 -811
  193. package/dist/invites/group-approval.test.d.ts +0 -1
  194. package/dist/invites/group-approval.test.js +0 -223
  195. package/dist/invites/invite-token.test.d.ts +0 -1
  196. package/dist/invites/invite-token.test.js +0 -123
  197. package/dist/keys.test.d.ts +0 -1
  198. package/dist/keys.test.js +0 -336
  199. package/dist/logging/console-logger.test.d.ts +0 -1
  200. package/dist/logging/console-logger.test.js +0 -300
  201. package/dist/logging/console-logs.table.test.d.ts +0 -1
  202. package/dist/logging/console-logs.table.test.js +0 -156
  203. package/dist/observable.test.d.ts +0 -1
  204. package/dist/observable.test.js +0 -309
  205. package/dist/package-build/build-package.test.d.ts +0 -1
  206. package/dist/package-build/build-package.test.js +0 -204
  207. package/dist/package-build/contract-add.test.d.ts +0 -1
  208. package/dist/package-build/contract-add.test.js +0 -467
  209. package/dist/package-build/freeze-contracts.test.d.ts +0 -1
  210. package/dist/package-build/freeze-contracts.test.js +0 -355
  211. package/dist/package-installer/package-author-signing.test.d.ts +0 -1
  212. package/dist/package-installer/package-author-signing.test.js +0 -200
  213. package/dist/package-installer/package-cloner.test.d.ts +0 -1
  214. package/dist/package-installer/package-cloner.test.js +0 -278
  215. package/dist/package-installer/package-creator.test.d.ts +0 -1
  216. package/dist/package-installer/package-creator.test.js +0 -908
  217. package/dist/package-installer/package-dev-tools.test.d.ts +0 -1
  218. package/dist/package-installer/package-dev-tools.test.js +0 -64
  219. package/dist/package-installer/package-installer.test.d.ts +0 -1
  220. package/dist/package-installer/package-installer.test.js +0 -882
  221. package/dist/package-installer/package-propagation.test.d.ts +0 -1
  222. package/dist/package-installer/package-propagation.test.js +0 -1269
  223. package/dist/package-installer/package-publisher.test.d.ts +0 -1
  224. package/dist/package-installer/package-publisher.test.js +0 -153
  225. package/dist/package-installer/package-remote-checker.test.d.ts +0 -1
  226. package/dist/package-installer/package-remote-checker.test.js +0 -334
  227. package/dist/package-installer/package-seed-installer.test.d.ts +0 -1
  228. package/dist/package-installer/package-seed-installer.test.js +0 -123
  229. package/dist/package-installer/package-tarball.test.d.ts +0 -1
  230. package/dist/package-installer/package-tarball.test.js +0 -75
  231. package/dist/package-installer/peers-core-installer.test.d.ts +0 -1
  232. package/dist/package-installer/peers-core-installer.test.js +0 -49
  233. package/dist/package-installer/peers-core-trust-anchor.test.d.ts +0 -1
  234. package/dist/package-installer/peers-core-trust-anchor.test.js +0 -155
  235. package/dist/package-loader/contract-package-loader.test.d.ts +0 -1
  236. package/dist/package-loader/contract-package-loader.test.js +0 -274
  237. package/dist/package-loader/host-authority-loading.test.d.ts +0 -1
  238. package/dist/package-loader/host-authority-loading.test.js +0 -104
  239. package/dist/package-loader/host-dispatch-policy.test.d.ts +0 -1
  240. package/dist/package-loader/host-dispatch-policy.test.js +0 -56
  241. package/dist/package-loader/isolated-artifact.test.d.ts +0 -1
  242. package/dist/package-loader/isolated-artifact.test.js +0 -688
  243. package/dist/package-loader/isolated-persistent-var-gateway.test.d.ts +0 -1
  244. package/dist/package-loader/isolated-persistent-var-gateway.test.js +0 -56
  245. package/dist/package-loader/isolated-table-gateway.test.d.ts +0 -1
  246. package/dist/package-loader/isolated-table-gateway.test.js +0 -633
  247. package/dist/package-loader/package-loader.test.d.ts +0 -1
  248. package/dist/package-loader/package-loader.test.js +0 -1764
  249. package/dist/package-loader/resolve-consumed-contracts.test.d.ts +0 -1
  250. package/dist/package-loader/resolve-consumed-contracts.test.js +0 -166
  251. package/dist/serial-json.compat.test.d.ts +0 -1
  252. package/dist/serial-json.compat.test.js +0 -369
  253. package/dist/serial-json.test.d.ts +0 -1
  254. package/dist/serial-json.test.js +0 -401
  255. package/dist/testing/mock-host-contract.test.d.ts +0 -1
  256. package/dist/testing/mock-host-contract.test.js +0 -782
  257. package/dist/utils.test.d.ts +0 -1
  258. package/dist/utils.test.js +0 -232
@@ -1,543 +0,0 @@
1
- "use strict";
2
- /**
3
- * Regression tests for device-local package version resolution.
4
- */
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const SQLiteDB = require("better-sqlite3");
7
- const user_context_1 = require("../context/user-context");
8
- const user_context_singleton_1 = require("../context/user-context-singleton");
9
- const utils_1 = require("../utils");
10
- const access_level_1 = require("./access-level");
11
- const assistants_1 = require("./assistants");
12
- const group_member_roles_1 = require("./group-member-roles");
13
- const groups_1 = require("./groups");
14
- const sql_data_source_1 = require("./orm/sql.data-source");
15
- const package_version_resolver_1 = require("./package-version-resolver");
16
- const package_versions_1 = require("./package-versions");
17
- const packages_1 = require("./packages");
18
- const persistent_vars_1 = require("./persistent-vars");
19
- const workflows_1 = require("./workflows");
20
- class DBHarness {
21
- _db = null;
22
- get db() {
23
- if (!this._db) {
24
- this._db = new SQLiteDB(":memory:");
25
- this._db.pragma("journal_mode = WAL");
26
- }
27
- return this._db;
28
- }
29
- async get(sql, params = []) {
30
- return this.db.prepare(sql).get(params);
31
- }
32
- async all(sql, params = []) {
33
- return this.db.prepare(sql).all(params);
34
- }
35
- async exec(sql, params = []) {
36
- const result = this.db.prepare(sql).run(params);
37
- return { changes: result.changes };
38
- }
39
- async close() {
40
- this._db?.close();
41
- this._db = null;
42
- }
43
- }
44
- const testUserId = (0, utils_1.newid)();
45
- const testGroupId = (0, utils_1.newid)();
46
- let userContext;
47
- let db;
48
- function groupDc() {
49
- const dc = userContext.getDataContext(testGroupId);
50
- dc.setAsDefault();
51
- return dc;
52
- }
53
- function freshGroupDc() {
54
- const dc = userContext.getDataContext((0, utils_1.newid)());
55
- dc.setAsDefault();
56
- return dc;
57
- }
58
- function makePV(packageId, overrides = {}) {
59
- return {
60
- packageVersionId: (0, utils_1.newid)(),
61
- packageId,
62
- version: "1.0.0",
63
- versionTag: "stable",
64
- packageVersionHash: "hash",
65
- packageBundleFileId: (0, utils_1.newid)(),
66
- packageBundleFileHash: "bundlehash",
67
- signature: "",
68
- createdBy: testUserId,
69
- createdAt: new Date().toISOString(),
70
- ...overrides,
71
- };
72
- }
73
- function makePkg(overrides = {}) {
74
- return {
75
- packageId: (0, utils_1.newid)(),
76
- name: "test-package",
77
- description: "test",
78
- createdBy: testUserId,
79
- publishPublicKey: "",
80
- signature: "",
81
- ...overrides,
82
- };
83
- }
84
- beforeAll(async () => {
85
- db = new DBHarness();
86
- const dataSourceFactory = (metaData, schema) => new sql_data_source_1.SQLDataSource(db, metaData, schema);
87
- userContext = new user_context_1.UserContext(testUserId, dataSourceFactory, true);
88
- await userContext.loadingPromise;
89
- userContext.deviceId((0, utils_1.newid)());
90
- (0, user_context_singleton_1.setUserContext)(userContext);
91
- packages_1.PackagesTable.isPassthrough = true;
92
- packages_1.PackagesTable.enablePackageSigning((pkg) => pkg);
93
- package_versions_1.PackageVersionsTable.isPassthrough = true;
94
- });
95
- afterAll(async () => {
96
- packages_1.PackagesTable.isPassthrough = false;
97
- package_versions_1.PackageVersionsTable.isPassthrough = false;
98
- userContext?.dispose();
99
- await db?.close();
100
- });
101
- afterEach(() => {
102
- jest.restoreAllMocks();
103
- });
104
- describe("resolveDevicePackageVersion — regression coverage", () => {
105
- it("does not auto-upgrade when IPackage.versionFollowRange is pinned (no device prefs)", async () => {
106
- const dc = groupDc();
107
- const packageId = (0, utils_1.newid)();
108
- const stableV1 = makePV(packageId, { version: "1.0.0", versionTag: "stable" });
109
- const stableV2 = makePV(packageId, { version: "2.0.0", versionTag: "stable" });
110
- await (0, package_versions_1.PackageVersions)(dc).save(stableV1);
111
- await (0, package_versions_1.PackageVersions)(dc).save(stableV2);
112
- const pkg = makePkg({
113
- packageId,
114
- activePackageVersionId: stableV1.packageVersionId,
115
- versionFollowRange: "pinned",
116
- });
117
- await (0, packages_1.Packages)(dc).save(pkg);
118
- const loadedPvIds = [];
119
- jest.spyOn(dc.packageLoader, "loadPackage").mockImplementation(async (_pkg, opts) => {
120
- if (opts?.packageVersionId)
121
- loadedPvIds.push(opts.packageVersionId);
122
- return { packageId };
123
- });
124
- const result = await (0, package_version_resolver_1.resolveDevicePackageVersion)(pkg, dc, { force: true });
125
- expect(result.upgraded).toBe(false);
126
- expect(loadedPvIds).toContain(stableV1.packageVersionId);
127
- expect(loadedPvIds).not.toContain(stableV2.packageVersionId);
128
- });
129
- it("pinned device keeps stable PV after activePackageVersionId is overwritten to dev (updatePackageBundle sequence)", async () => {
130
- const dc = groupDc();
131
- const packageId = (0, utils_1.newid)();
132
- const stablePv = makePV(packageId, { version: "1.0.0", versionTag: "stable" });
133
- const devPv = makePV(packageId, { version: "1.0.1", versionTag: "dev" });
134
- await (0, package_versions_1.PackageVersions)(dc).save(stablePv);
135
- await (0, package_versions_1.PackageVersions)(dc).save(devPv);
136
- const pkg = makePkg({
137
- packageId,
138
- activePackageVersionId: stablePv.packageVersionId,
139
- });
140
- await (0, packages_1.Packages)(dc).save(pkg);
141
- await (0, package_version_resolver_1.updatePackagePrefs)(packageId, { pinned: true, activePackageVersionId: stablePv.packageVersionId }, dc);
142
- // Mirrors updatePackageBundle: unconditionally merges dev active id before resolve
143
- await (0, package_version_resolver_1.updatePackagePrefs)(packageId, { activePackageVersionId: devPv.packageVersionId }, dc);
144
- const loadedPvIds = [];
145
- jest.spyOn(dc.packageLoader, "loadPackage").mockImplementation(async (_pkg, opts) => {
146
- if (opts?.packageVersionId)
147
- loadedPvIds.push(opts.packageVersionId);
148
- return { packageId };
149
- });
150
- await (0, package_version_resolver_1.resolveDevicePackageVersion)(pkg, dc, { force: true });
151
- expect(loadedPvIds[loadedPvIds.length - 1]).toBe(stablePv.packageVersionId);
152
- });
153
- it("honors legacy deviceVersionTag pvar when choosing beta auto-upgrade", async () => {
154
- const dc = groupDc();
155
- const packageId = (0, utils_1.newid)();
156
- const stablePv = makePV(packageId, { version: "1.0.0", versionTag: "stable" });
157
- const betaPv = makePV(packageId, { version: "2.0.0", versionTag: "beta" });
158
- await (0, package_versions_1.PackageVersions)(dc).save(stablePv);
159
- await (0, package_versions_1.PackageVersions)(dc).save(betaPv);
160
- const legacyVarName = `deviceVersionTag_${dc.dataContextId}`;
161
- await (0, persistent_vars_1.PersistentVars)(userContext.userDataContext).save({
162
- persistentVarId: (0, utils_1.deterministicPvarId)(legacyVarName),
163
- name: legacyVarName,
164
- scope: "groupDevice",
165
- value: { value: "beta" },
166
- });
167
- const pkg = makePkg({
168
- packageId,
169
- activePackageVersionId: stablePv.packageVersionId,
170
- versionFollowRange: "latest",
171
- });
172
- await (0, packages_1.Packages)(dc).save(pkg);
173
- const loadedPvIds = [];
174
- jest.spyOn(dc.packageLoader, "loadPackage").mockImplementation(async (_pkg, opts) => {
175
- if (opts?.packageVersionId)
176
- loadedPvIds.push(opts.packageVersionId);
177
- return { packageId };
178
- });
179
- const result = await (0, package_version_resolver_1.resolveDevicePackageVersion)(pkg, dc, { force: true });
180
- expect(result.upgraded).toBe(true);
181
- expect(loadedPvIds).toContain(betaPv.packageVersionId);
182
- });
183
- it("falls back locally when isolation is unavailable and automatically recovers later", async () => {
184
- const dc = freshGroupDc();
185
- const packageId = (0, utils_1.newid)();
186
- const legacyV1 = makePV(packageId, { version: "1.0.0", versionTag: "stable" });
187
- const legacyV1_5 = makePV(packageId, { version: "1.5.0", versionTag: "stable" });
188
- const isolatedV2 = makePV(packageId, { version: "2.0.0", versionTag: "stable" });
189
- await (0, package_versions_1.PackageVersions)(dc).save(legacyV1);
190
- await (0, package_versions_1.PackageVersions)(dc).save(legacyV1_5);
191
- await (0, package_versions_1.PackageVersions)(dc).save(isolatedV2);
192
- const pkg = makePkg({
193
- packageId,
194
- activePackageVersionId: isolatedV2.packageVersionId,
195
- versionFollowRange: "pinned",
196
- followVersionTags: "stable",
197
- });
198
- await (0, packages_1.Packages)(dc).save(pkg);
199
- let isolationAvailable = false;
200
- jest
201
- .spyOn(dc.packageLoader, "supportsIsolatedPackages")
202
- .mockImplementation(() => isolationAvailable);
203
- jest.spyOn(dc.packageLoader, "loadPackage").mockImplementation(async (_pkg, opts) => {
204
- if (opts?.packageVersionId === isolatedV2.packageVersionId && !isolationAvailable) {
205
- return undefined;
206
- }
207
- return { packageId };
208
- });
209
- const fallback = await (0, package_version_resolver_1.resolveDevicePackageVersion)(pkg, dc, { force: true });
210
- expect(fallback.loaded).toBe(true);
211
- expect(fallback.upgraded).toBe(false);
212
- expect(fallback.pv?.packageVersionId).toBe(legacyV1_5.packageVersionId);
213
- const prefs = (0, package_version_resolver_1.packagePrefsVar)(packageId, dc);
214
- await prefs.loadingPromise;
215
- expect(prefs()?.activePackageVersionId).toBe(legacyV1_5.packageVersionId);
216
- expect(prefs()?.compatibilityFallbackForPackageVersionId).toBe(isolatedV2.packageVersionId);
217
- isolationAvailable = true;
218
- const recovered = await (0, package_version_resolver_1.resolveDevicePackageVersion)(pkg, dc, { force: true });
219
- expect(recovered.loaded).toBe(true);
220
- expect(recovered.upgraded).toBe(true);
221
- expect(recovered.pv?.packageVersionId).toBe(isolatedV2.packageVersionId);
222
- expect(prefs()?.activePackageVersionId).toBeUndefined();
223
- expect(prefs()?.compatibilityFallbackForPackageVersionId).toBeUndefined();
224
- });
225
- });
226
- describe("resolveDevicePackageVersion — expected behavior (control)", () => {
227
- it("advances the group active version when an admin auto-upgrades without device overrides", async () => {
228
- const dc = freshGroupDc();
229
- const packageId = (0, utils_1.newid)();
230
- const stablePv = makePV(packageId, { version: "1.0.0", versionTag: "stable" });
231
- const stableV2 = makePV(packageId, { version: "2.0.0", versionTag: "stable" });
232
- await (0, package_versions_1.PackageVersions)(dc).save(stablePv);
233
- await (0, package_versions_1.PackageVersions)(dc).save(stableV2);
234
- const pkg = makePkg({
235
- packageId,
236
- activePackageVersionId: stablePv.packageVersionId,
237
- versionFollowRange: "latest",
238
- followVersionTags: "stable",
239
- });
240
- await (0, packages_1.Packages)(dc).save(pkg);
241
- jest.spyOn(dc.packageLoader, "loadPackage").mockResolvedValue({ packageId });
242
- const result = await (0, package_version_resolver_1.resolveDevicePackageVersion)(pkg, dc, { force: true });
243
- expect(result.upgraded).toBe(true);
244
- expect(result.pv?.packageVersionId).toBe(stableV2.packageVersionId);
245
- const savedPkg = await (0, packages_1.Packages)(dc).get(packageId);
246
- expect(savedPkg?.activePackageVersionId).toBe(stableV2.packageVersionId);
247
- const pvar = (0, package_version_resolver_1.packagePrefsVar)(packageId, dc);
248
- await pvar.loadingPromise;
249
- expect(pvar()?.activePackageVersionId).toBeUndefined();
250
- });
251
- it("keeps an auto-upgrade device-local when device follow overrides are enabled", async () => {
252
- const dc = freshGroupDc();
253
- const packageId = (0, utils_1.newid)();
254
- const stablePv = makePV(packageId, { version: "1.0.0", versionTag: "stable" });
255
- const stableV2 = makePV(packageId, { version: "2.0.0", versionTag: "stable" });
256
- await (0, package_versions_1.PackageVersions)(dc).save(stablePv);
257
- await (0, package_versions_1.PackageVersions)(dc).save(stableV2);
258
- const pkg = makePkg({
259
- packageId,
260
- activePackageVersionId: stablePv.packageVersionId,
261
- versionFollowRange: "latest",
262
- followVersionTags: "stable",
263
- });
264
- await (0, packages_1.Packages)(dc).save(pkg);
265
- await (0, package_version_resolver_1.updatePackagePrefs)(packageId, { followRange: "latest", followTags: "stable" }, dc);
266
- jest.spyOn(dc.packageLoader, "loadPackage").mockResolvedValue({ packageId });
267
- const result = await (0, package_version_resolver_1.resolveDevicePackageVersion)(pkg, dc, { force: true });
268
- expect(result.upgraded).toBe(true);
269
- expect(result.pv?.packageVersionId).toBe(stableV2.packageVersionId);
270
- const savedPkg = await (0, packages_1.Packages)(dc).get(packageId);
271
- expect(savedPkg?.activePackageVersionId).toBe(stablePv.packageVersionId);
272
- const pvar = (0, package_version_resolver_1.packagePrefsVar)(packageId, dc);
273
- await pvar.loadingPromise;
274
- expect(pvar()?.activePackageVersionId).toBe(stableV2.packageVersionId);
275
- });
276
- it("keeps an auto-upgrade device-local when the device user is not a group admin", async () => {
277
- const dc = freshGroupDc();
278
- const packageId = (0, utils_1.newid)();
279
- const stablePv = makePV(packageId, { version: "1.0.0", versionTag: "stable" });
280
- const stableV2 = makePV(packageId, { version: "2.0.0", versionTag: "stable" });
281
- await (0, package_versions_1.PackageVersions)(dc).save(stablePv);
282
- await (0, package_versions_1.PackageVersions)(dc).save(stableV2);
283
- await (0, groups_1.Groups)(userContext.userDataContext).save({
284
- groupId: dc.dataContextId,
285
- name: "Non-admin resolver test",
286
- description: "test",
287
- founderUserId: (0, utils_1.newid)(),
288
- publicRole: group_member_roles_1.GroupMemberRole.Writer,
289
- publicKey: "",
290
- publicBoxKey: "",
291
- signature: "",
292
- });
293
- const pkg = makePkg({
294
- packageId,
295
- activePackageVersionId: stablePv.packageVersionId,
296
- versionFollowRange: "latest",
297
- followVersionTags: "stable",
298
- });
299
- await (0, packages_1.Packages)(dc).save(pkg);
300
- jest.spyOn(dc.packageLoader, "loadPackage").mockResolvedValue({ packageId });
301
- const result = await (0, package_version_resolver_1.resolveDevicePackageVersion)(pkg, dc, { force: true });
302
- expect(result.upgraded).toBe(true);
303
- expect(result.pv?.packageVersionId).toBe(stableV2.packageVersionId);
304
- const savedPkg = await (0, packages_1.Packages)(dc).get(packageId);
305
- expect(savedPkg?.activePackageVersionId).toBe(stablePv.packageVersionId);
306
- const pvar = (0, package_version_resolver_1.packagePrefsVar)(packageId, dc);
307
- await pvar.loadingPromise;
308
- expect(pvar()?.activePackageVersionId).toBe(stableV2.packageVersionId);
309
- });
310
- it("keeps a local dev activation on this device without turning override on", async () => {
311
- const dc = freshGroupDc();
312
- const packageId = (0, utils_1.newid)();
313
- const stablePv = makePV(packageId, { version: "1.0.0", versionTag: "stable" });
314
- const devPv = makePV(packageId, { version: "1.2.0", versionTag: "dev" });
315
- const stableV2 = makePV(packageId, { version: "2.0.0", versionTag: "stable" });
316
- await (0, package_versions_1.PackageVersions)(dc).save(stablePv);
317
- await (0, package_versions_1.PackageVersions)(dc).save(devPv);
318
- await (0, package_versions_1.PackageVersions)(dc).save(stableV2);
319
- const pkg = makePkg({
320
- packageId,
321
- activePackageVersionId: stablePv.packageVersionId,
322
- versionFollowRange: "latest",
323
- followVersionTags: "stable",
324
- });
325
- await (0, packages_1.Packages)(dc).save(pkg);
326
- await (0, package_version_resolver_1.updatePackagePrefs)(packageId, { activePackageVersionId: devPv.packageVersionId }, dc);
327
- const pvar = (0, package_version_resolver_1.packagePrefsVar)(packageId, dc);
328
- await pvar.loadingPromise;
329
- expect((0, package_version_resolver_1.hasDeviceFollowOverride)(pvar())).toBe(false);
330
- const loadedPvIds = [];
331
- jest.spyOn(dc.packageLoader, "loadPackage").mockImplementation(async (_pkg, opts) => {
332
- if (opts?.packageVersionId)
333
- loadedPvIds.push(opts.packageVersionId);
334
- return { packageId };
335
- });
336
- const result = await (0, package_version_resolver_1.resolveDevicePackageVersion)(pkg, dc, { force: true });
337
- expect(result.upgraded).toBe(false);
338
- expect(result.pv?.packageVersionId).toBe(devPv.packageVersionId);
339
- expect(loadedPvIds).toEqual([devPv.packageVersionId]);
340
- const savedPkg = await (0, packages_1.Packages)(dc).get(packageId);
341
- expect(savedPkg?.activePackageVersionId).toBe(stablePv.packageVersionId);
342
- expect(pvar()?.activePackageVersionId).toBe(devPv.packageVersionId);
343
- });
344
- it("does not auto-activate dev when device has no prefs and group default is stable", async () => {
345
- const dc = groupDc();
346
- const packageId = (0, utils_1.newid)();
347
- const stablePv = makePV(packageId, { version: "1.0.0", versionTag: "stable" });
348
- const devPv = makePV(packageId, { version: "9.9.9", versionTag: "dev" });
349
- await (0, package_versions_1.PackageVersions)(dc).save(stablePv);
350
- await (0, package_versions_1.PackageVersions)(dc).save(devPv);
351
- const pkg = makePkg({
352
- packageId,
353
- activePackageVersionId: stablePv.packageVersionId,
354
- versionFollowRange: "latest",
355
- });
356
- await (0, packages_1.Packages)(dc).save(pkg);
357
- const pvar = (0, package_version_resolver_1.packagePrefsVar)(packageId, dc);
358
- await pvar.loadingPromise;
359
- expect(pvar()).toEqual({});
360
- const loadedPvIds = [];
361
- jest.spyOn(dc.packageLoader, "loadPackage").mockImplementation(async (_pkg, opts) => {
362
- if (opts?.packageVersionId)
363
- loadedPvIds.push(opts.packageVersionId);
364
- return { packageId };
365
- });
366
- const result = await (0, package_version_resolver_1.resolveDevicePackageVersion)(pkg, dc, { force: true });
367
- expect(result.upgraded).toBe(false);
368
- expect(loadedPvIds).toContain(stablePv.packageVersionId);
369
- expect(loadedPvIds).not.toContain(devPv.packageVersionId);
370
- });
371
- it.each([
372
- ["no prefs", false],
373
- ["a pin", true],
374
- ])("leaves a group-selected dev version unloaded on a device with %s", async (_label, pinned) => {
375
- const dc = freshGroupDc();
376
- const packageId = (0, utils_1.newid)();
377
- const devPv = makePV(packageId, { version: "0.1.0", versionTag: "dev" });
378
- await (0, package_versions_1.PackageVersions)(dc).save(devPv);
379
- const pkg = makePkg({ packageId, activePackageVersionId: devPv.packageVersionId });
380
- await (0, packages_1.Packages)(dc).save(pkg);
381
- if (pinned)
382
- await (0, package_version_resolver_1.updatePackagePrefs)(packageId, { pinned: true }, dc);
383
- const load = jest.spyOn(dc.packageLoader, "loadPackage");
384
- const unload = jest
385
- .spyOn(dc.packageLoader, "unloadPackage")
386
- .mockImplementation(async () => undefined);
387
- const result = await (0, package_version_resolver_1.resolveDevicePackageVersion)(pkg, dc, { force: true });
388
- expect(result).toMatchObject({ loaded: false, upgraded: false });
389
- expect(result.pv?.packageVersionId).toBe(devPv.packageVersionId);
390
- expect(load).not.toHaveBeenCalled();
391
- expect(unload).toHaveBeenCalledWith(packageId, {
392
- reason: "Only a dev version (v0.1.0) is selected; activate it on this device to run it",
393
- });
394
- });
395
- it("runs a group-selected dev version once this device activates it", async () => {
396
- const dc = freshGroupDc();
397
- const packageId = (0, utils_1.newid)();
398
- const devPv = makePV(packageId, { version: "0.1.0", versionTag: "dev" });
399
- await (0, package_versions_1.PackageVersions)(dc).save(devPv);
400
- const pkg = makePkg({ packageId, activePackageVersionId: devPv.packageVersionId });
401
- await (0, packages_1.Packages)(dc).save(pkg);
402
- await (0, package_version_resolver_1.updatePackagePrefs)(packageId, { activePackageVersionId: devPv.packageVersionId }, dc);
403
- const loadedPvIds = [];
404
- jest.spyOn(dc.packageLoader, "loadPackage").mockImplementation(async (_pkg, opts) => {
405
- if (opts?.packageVersionId)
406
- loadedPvIds.push(opts.packageVersionId);
407
- return { packageId };
408
- });
409
- const result = await (0, package_version_resolver_1.resolveDevicePackageVersion)(pkg, dc, { force: true });
410
- expect(result.loaded).toBe(true);
411
- expect(loadedPvIds).toEqual([devPv.packageVersionId]);
412
- });
413
- it("installs assistants and workflows into the data context on auto-upgrade", async () => {
414
- const dc = groupDc();
415
- const packageId = (0, utils_1.newid)();
416
- const stablePv = makePV(packageId, { version: "1.0.0", versionTag: "stable" });
417
- const stableV2 = makePV(packageId, { version: "2.0.0", versionTag: "stable" });
418
- await (0, package_versions_1.PackageVersions)(dc).save(stablePv);
419
- await (0, package_versions_1.PackageVersions)(dc).save(stableV2);
420
- const pkg = makePkg({
421
- packageId,
422
- activePackageVersionId: stablePv.packageVersionId,
423
- versionFollowRange: "latest",
424
- });
425
- await (0, packages_1.Packages)(dc).save(pkg);
426
- // Explicitly set followTags so the legacy-pvar migration from earlier tests
427
- // doesn't interfere (it would write "beta" followTags otherwise).
428
- await (0, package_version_resolver_1.updatePackagePrefs)(packageId, { followTags: "stable" }, dc);
429
- const testAssistantId = (0, utils_1.newid)();
430
- const testWorkflowId = (0, utils_1.newid)();
431
- const testAssistant = {
432
- assistantId: testAssistantId,
433
- name: "Upgrade Test Assistant",
434
- packageId,
435
- createdAt: new Date(),
436
- assistantRunnerToolId: "000peers0tool00000runner1",
437
- assistantRunnerConfig: {},
438
- toolsToInclude: "",
439
- toolInclusionStrategy: "Linked",
440
- };
441
- const testWorkflow = {
442
- workflowId: testWorkflowId,
443
- name: "Upgrade Test Workflow",
444
- description: "test",
445
- defaultAssistantId: testAssistantId,
446
- createdBy: testUserId,
447
- createdAt: new Date(),
448
- updatedAt: new Date(),
449
- instructions: [],
450
- packageId,
451
- };
452
- jest.spyOn(dc.packageLoader, "loadPackage").mockResolvedValue({
453
- packageId,
454
- assistants: [testAssistant],
455
- workflows: [testWorkflow],
456
- });
457
- const result = await (0, package_version_resolver_1.resolveDevicePackageVersion)(pkg, dc, { force: true });
458
- expect(result.upgraded).toBe(true);
459
- expect(result.pv?.packageVersionId).toBe(stableV2.packageVersionId);
460
- const savedAssistant = await (0, assistants_1.Assistants)(dc).get(testAssistantId);
461
- expect(savedAssistant).toBeDefined();
462
- expect(savedAssistant?.name).toBe("Upgrade Test Assistant");
463
- expect(savedAssistant?.accessLevel).toBe(access_level_1.DEFAULT_ACCESS_LEVEL);
464
- const savedWorkflow = await (0, workflows_1.Workflows)(dc).get(testWorkflowId);
465
- expect(savedWorkflow).toBeDefined();
466
- expect(savedWorkflow?.name).toBe("Upgrade Test Workflow");
467
- });
468
- });
469
- describe("getEffectivePackagePrefs", () => {
470
- it("uses group defaults when device prefs are absent", () => {
471
- const pkg = makePkg({
472
- activePackageVersionId: "pv-group",
473
- followVersionTags: "stable,beta",
474
- versionFollowRange: "minor",
475
- });
476
- expect((0, package_version_resolver_1.getEffectivePackagePrefs)(pkg, undefined)).toEqual({
477
- activePackageVersionId: "pv-group",
478
- isPinned: false,
479
- followRange: "minor",
480
- followTags: "stable,beta",
481
- });
482
- });
483
- it("honors group-level pinned when there are no device prefs", () => {
484
- const pkg = makePkg({
485
- activePackageVersionId: "pv-pin",
486
- versionFollowRange: "pinned",
487
- });
488
- const eff = (0, package_version_resolver_1.getEffectivePackagePrefs)(pkg, undefined);
489
- expect(eff.isPinned).toBe(true);
490
- expect(eff.activePackageVersionId).toBe("pv-pin");
491
- });
492
- it("prefers device active id over group default", () => {
493
- const pkg = makePkg({ activePackageVersionId: "pv-group" });
494
- expect((0, package_version_resolver_1.getEffectivePackagePrefs)(pkg, {
495
- activePackageVersionId: "pv-device",
496
- })).toMatchObject({
497
- activePackageVersionId: "pv-device",
498
- isPinned: false,
499
- });
500
- });
501
- it("device pinned overrides group not pinned", () => {
502
- const pkg = makePkg({
503
- activePackageVersionId: "pv1",
504
- versionFollowRange: "latest",
505
- });
506
- expect((0, package_version_resolver_1.getEffectivePackagePrefs)(pkg, { pinned: true }).isPinned).toBe(true);
507
- });
508
- it("empty device prefs falls back to group pinned (matches groupDeviceVar default)", () => {
509
- const pkg = makePkg({
510
- activePackageVersionId: "pv1",
511
- versionFollowRange: "pinned",
512
- });
513
- expect((0, package_version_resolver_1.getEffectivePackagePrefs)(pkg, {}).isPinned).toBe(true);
514
- });
515
- it("device explicitly unpinned overrides group pinned", () => {
516
- const pkg = makePkg({
517
- activePackageVersionId: "pv1",
518
- versionFollowRange: "pinned",
519
- });
520
- expect((0, package_version_resolver_1.getEffectivePackagePrefs)(pkg, { pinned: false }).isPinned).toBe(false);
521
- });
522
- it("device followRange overrides group default", () => {
523
- const pkg = makePkg({ versionFollowRange: "latest" });
524
- expect((0, package_version_resolver_1.getEffectivePackagePrefs)(pkg, { followRange: "patch" }).followRange).toBe("patch");
525
- });
526
- it("device followTags overrides group default", () => {
527
- const pkg = makePkg({ followVersionTags: "stable" });
528
- expect((0, package_version_resolver_1.getEffectivePackagePrefs)(pkg, { followTags: "*" }).followTags).toBe("*");
529
- });
530
- it("falls back to 'latest' followRange when group has no setting", () => {
531
- const pkg = makePkg({});
532
- expect((0, package_version_resolver_1.getEffectivePackagePrefs)(pkg, undefined).followRange).toBe("latest");
533
- });
534
- });
535
- describe("packagePrefsVar", () => {
536
- it("returns the same observable instance for repeated calls with the same args", () => {
537
- const dc = groupDc();
538
- const id = (0, utils_1.newid)();
539
- const a = (0, package_version_resolver_1.packagePrefsVar)(id, dc);
540
- const b = (0, package_version_resolver_1.packagePrefsVar)(id, dc);
541
- expect(a).toBe(b);
542
- });
543
- });
@@ -1 +0,0 @@
1
- export {};