@peers-app/peers-sdk 0.19.7 → 0.19.9
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.
|
@@ -126,7 +126,10 @@ async function installPvInGroupNoActivate(source, dest, pv) {
|
|
|
126
126
|
await copyFileTree(source, dest, file);
|
|
127
127
|
}
|
|
128
128
|
const propagatedPv = buildPropagatedPv(pv, files);
|
|
129
|
-
await (0, package_versions_1.PackageVersions)(dest).signAndSave(propagatedPv, {
|
|
129
|
+
await (0, package_versions_1.PackageVersions)(dest).signAndSave(propagatedPv, {
|
|
130
|
+
saveAsSnapshot: true,
|
|
131
|
+
restoreIfDeleted: true,
|
|
132
|
+
});
|
|
130
133
|
return true;
|
|
131
134
|
}
|
|
132
135
|
async function installPvInGroup(source, dest, pv, retryCnt = 0) {
|
|
@@ -164,7 +167,10 @@ async function installPvInGroup(source, dest, pv, retryCnt = 0) {
|
|
|
164
167
|
}
|
|
165
168
|
// Save sanitized PV
|
|
166
169
|
const propagatedPv = buildPropagatedPv(pv, files);
|
|
167
|
-
await (0, package_versions_1.PackageVersions)(dest).signAndSave(propagatedPv, {
|
|
170
|
+
await (0, package_versions_1.PackageVersions)(dest).signAndSave(propagatedPv, {
|
|
171
|
+
saveAsSnapshot: true,
|
|
172
|
+
restoreIfDeleted: true,
|
|
173
|
+
});
|
|
168
174
|
// Activation pass
|
|
169
175
|
const activation = await withActivationLock(dest, pv.packageId, () => activateBestEligibleVersion(dest, pkg));
|
|
170
176
|
return makeResult(dest, pv, activation.activated && activation.activePackageVersionId === pv.packageVersionId);
|
|
@@ -431,7 +431,7 @@ describe("discoverAndPropagateVersions", () => {
|
|
|
431
431
|
});
|
|
432
432
|
expect(mockPvSignAndSave).toHaveBeenCalledWith(expect.objectContaining({
|
|
433
433
|
packageVersionId: olderSignedPv.packageVersionId,
|
|
434
|
-
}), { saveAsSnapshot: true });
|
|
434
|
+
}), { saveAsSnapshot: true, restoreIfDeleted: true });
|
|
435
435
|
});
|
|
436
436
|
it("installs beta PVs in stable-only groups without activating them", async () => {
|
|
437
437
|
const groupA = "group-a";
|
|
@@ -884,7 +884,7 @@ describe("discoverAndPropagateVersions", () => {
|
|
|
884
884
|
await (0, package_propagation_1.discoverAndPropagateVersions)(userContext);
|
|
885
885
|
expect(mockPvSignAndSave).toHaveBeenCalledWith(expect.objectContaining({
|
|
886
886
|
packageVersionHash: (0, package_versions_1.computePackageVersionHash)(signedPv.version, signedPv.versionTag ?? "", signedPv.packageBundleFileHash, signedPv.routesBundleFileHash, signedPv.uiBundleFileHash),
|
|
887
|
-
}), { saveAsSnapshot: true });
|
|
887
|
+
}), { saveAsSnapshot: true, restoreIfDeleted: true });
|
|
888
888
|
expect(mockPvSignAndSave).not.toHaveBeenCalledWith(expect.objectContaining({ packageVersionHash: "untrusted-source-value" }), expect.anything());
|
|
889
889
|
});
|
|
890
890
|
it("auto-activates with versionFollowRange 'latest', does not activate with 'pinned'", async () => {
|
|
@@ -11,10 +11,10 @@ exports.checkAndInstallPackageRemoteVersion = checkAndInstallPackageRemoteVersio
|
|
|
11
11
|
exports.installRemotePackageVersion = installRemotePackageVersion;
|
|
12
12
|
exports.clearRemoteCheckCache = clearRemoteCheckCache;
|
|
13
13
|
const file_types_1 = require("../data/files/file.types");
|
|
14
|
+
const package_version_resolver_1 = require("../data/package-version-resolver");
|
|
14
15
|
const package_versions_1 = require("../data/package-versions");
|
|
15
16
|
const packages_1 = require("../data/packages");
|
|
16
17
|
const keys_1 = require("../keys");
|
|
17
|
-
const package_version_resolver_1 = require("../data/package-version-resolver");
|
|
18
18
|
const package_author_signing_1 = require("./package-author-signing");
|
|
19
19
|
const package_installer_1 = require("./package-installer");
|
|
20
20
|
const package_propagation_1 = require("./package-propagation");
|
|
@@ -171,7 +171,7 @@ async function installRemotePackageVersion(dataContext, result) {
|
|
|
171
171
|
createdAt: unpacked.payload.createdAt ?? new Date().toISOString(),
|
|
172
172
|
};
|
|
173
173
|
const pvTable = (0, package_versions_1.PackageVersions)(dataContext);
|
|
174
|
-
const savedPv = await pvTable.signAndSave(pv);
|
|
174
|
+
const savedPv = await pvTable.signAndSave(pv, { restoreIfDeleted: true });
|
|
175
175
|
// TOFU: if package has no publishPublicKey, establish it now
|
|
176
176
|
if (!pkg.publishPublicKey) {
|
|
177
177
|
pkg.publishPublicKey = unpacked.payload.publicKey;
|
package/dist/rpc-types.d.ts
CHANGED
|
@@ -40,6 +40,16 @@ export declare const rpcServerCalls: {
|
|
|
40
40
|
setUserIdAndSecretKey: (userId: string, secretKey: string) => Promise<void>;
|
|
41
41
|
getUserId: () => Promise<string | undefined>;
|
|
42
42
|
encryptData: (value: string, groupId?: string) => Promise<string>;
|
|
43
|
+
/**
|
|
44
|
+
* Decrypt (if secret) and copy a persistent variable's value to the system clipboard
|
|
45
|
+
* entirely on the server/main process. The plaintext is never returned to the caller,
|
|
46
|
+
* so secret values are never exposed to the UI. On desktop, secret values are
|
|
47
|
+
* automatically cleared from the clipboard after a short delay.
|
|
48
|
+
*/
|
|
49
|
+
copyPvarValueToClipboard: (persistentVarId: string, groupId?: string) => Promise<{
|
|
50
|
+
success: boolean;
|
|
51
|
+
error?: string;
|
|
52
|
+
}>;
|
|
43
53
|
logout: () => Promise<void>;
|
|
44
54
|
tableMethodCall: (dataContextId: string, tableName: string, methodName: string, ...args: any[]) => Promise<any>;
|
|
45
55
|
getFileContents: (fileId: string, encoding?: BufferEncoding) => Promise<string>;
|
package/dist/rpc-types.js
CHANGED
|
@@ -21,6 +21,13 @@ exports.rpcServerCalls = {
|
|
|
21
21
|
setUserIdAndSecretKey: rpcStub("setUserIdAndSecretKey"),
|
|
22
22
|
getUserId: rpcStub("getUserId"),
|
|
23
23
|
encryptData: rpcStub("encryptData"),
|
|
24
|
+
/**
|
|
25
|
+
* Decrypt (if secret) and copy a persistent variable's value to the system clipboard
|
|
26
|
+
* entirely on the server/main process. The plaintext is never returned to the caller,
|
|
27
|
+
* so secret values are never exposed to the UI. On desktop, secret values are
|
|
28
|
+
* automatically cleared from the clipboard after a short delay.
|
|
29
|
+
*/
|
|
30
|
+
copyPvarValueToClipboard: rpcStub("copyPvarValueToClipboard"),
|
|
24
31
|
logout: rpcStub("logout"),
|
|
25
32
|
tableMethodCall: rpcStub("tableMethodCall"),
|
|
26
33
|
// TODO lock this down so not all code can get any file contents
|