@peers-app/peers-sdk 0.16.5 → 0.17.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 (49) hide show
  1. package/dist/contracts/__tests__/builder.test.d.ts +1 -0
  2. package/dist/contracts/__tests__/builder.test.js +426 -0
  3. package/dist/contracts/__tests__/extract.test.d.ts +1 -0
  4. package/dist/contracts/__tests__/extract.test.js +145 -0
  5. package/dist/contracts/__tests__/integration.test.d.ts +1 -0
  6. package/dist/contracts/__tests__/integration.test.js +348 -0
  7. package/dist/contracts/__tests__/registry.test.d.ts +1 -0
  8. package/dist/contracts/__tests__/registry.test.js +324 -0
  9. package/dist/contracts/__tests__/validate.test.d.ts +1 -0
  10. package/dist/contracts/__tests__/validate.test.js +699 -0
  11. package/dist/contracts/builder.d.ts +102 -0
  12. package/dist/contracts/builder.js +216 -0
  13. package/dist/contracts/contract-providers.table.d.ts +40 -0
  14. package/dist/contracts/contract-providers.table.js +41 -0
  15. package/dist/contracts/contracts.table.d.ts +44 -0
  16. package/dist/contracts/contracts.table.js +44 -0
  17. package/dist/contracts/extract.d.ts +46 -0
  18. package/dist/contracts/extract.js +51 -0
  19. package/dist/contracts/index.d.ts +9 -0
  20. package/dist/contracts/index.js +31 -0
  21. package/dist/contracts/persistent-registry.d.ts +32 -0
  22. package/dist/contracts/persistent-registry.js +138 -0
  23. package/dist/contracts/registry.d.ts +58 -0
  24. package/dist/contracts/registry.js +155 -0
  25. package/dist/contracts/types.d.ts +108 -0
  26. package/dist/contracts/types.js +10 -0
  27. package/dist/contracts/validate.d.ts +24 -0
  28. package/dist/contracts/validate.js +274 -0
  29. package/dist/data/assistants.d.ts +5 -0
  30. package/dist/data/assistants.js +1 -0
  31. package/dist/data/package-versions.d.ts +2 -2
  32. package/dist/data/persistent-vars.d.ts +3 -0
  33. package/dist/data/persistent-vars.js +3 -0
  34. package/dist/data/tools.d.ts +5 -2
  35. package/dist/data/tools.js +1 -1
  36. package/dist/data/workflows.d.ts +1 -0
  37. package/dist/index.d.ts +1 -0
  38. package/dist/index.js +1 -0
  39. package/dist/package-loader/contract-package-loader.d.ts +23 -0
  40. package/dist/package-loader/contract-package-loader.js +65 -0
  41. package/dist/package-loader/index.d.ts +1 -0
  42. package/dist/package-loader/index.js +1 -0
  43. package/dist/package-loader/package-loader.d.ts +11 -0
  44. package/dist/package-loader/package-loader.js +59 -8
  45. package/dist/rpc-types.d.ts +7 -0
  46. package/dist/rpc-types.js +4 -0
  47. package/dist/types/workflow.d.ts +3 -0
  48. package/dist/types/workflow.js +1 -0
  49. package/package.json +1 -1
@@ -7,15 +7,22 @@ const package_versions_1 = require("../data/package-versions");
7
7
  const packages_1 = require("../data/packages");
8
8
  const tools_1 = require("../data/tools");
9
9
  const tools_2 = require("../tools");
10
+ const contract_package_loader_1 = require("./contract-package-loader");
10
11
  class PackageLoader {
11
12
  dataContext;
12
13
  static PeersSDK;
13
14
  static Zod;
14
15
  packageInstances = {};
16
+ /** Packages that were installed via the contract-based path (tools/assistants/tables already saved with packageId). */
17
+ contractInstalledPackages = new Set();
15
18
  require = undefined;
16
19
  constructor(dataContext) {
17
20
  this.dataContext = dataContext;
18
21
  }
22
+ /** Returns true if a package was installed via the contract-based definePackage() path. */
23
+ isContractInstalled(packageId) {
24
+ return this.contractInstalledPackages.has(packageId);
25
+ }
19
26
  async loadAllPackages(opts) {
20
27
  const packages = await (0, packages_1.Packages)(this.dataContext).list();
21
28
  await Promise.all(packages.filter((pkg) => !pkg.disabled).map((pkg) => this.loadPackage(pkg, opts)));
@@ -91,6 +98,36 @@ class PackageLoader {
91
98
  return;
92
99
  }
93
100
  }
101
+ /**
102
+ * Post-correction: if the package definition carries version/versionTag,
103
+ * update the active IPackageVersion record to match. This fixes cases where
104
+ * the PV record was created with stale or placeholder values (e.g. "0.0.1")
105
+ * before the bundle was evaluated.
106
+ */
107
+ correctPackageVersion(pkg, def) {
108
+ if (!pkg.activePackageVersionId)
109
+ return;
110
+ if (!def.version && !def.versionTag)
111
+ return;
112
+ const pvTable = (0, package_versions_1.PackageVersions)(this.dataContext);
113
+ pvTable.get(pkg.activePackageVersionId).then((pv) => {
114
+ if (!pv)
115
+ return;
116
+ let needsUpdate = false;
117
+ const updated = { ...pv };
118
+ if (def.version && pv.version !== def.version) {
119
+ updated.version = def.version;
120
+ needsUpdate = true;
121
+ }
122
+ if (def.versionTag && pv.versionTag !== def.versionTag) {
123
+ updated.versionTag = def.versionTag;
124
+ needsUpdate = true;
125
+ }
126
+ if (needsUpdate) {
127
+ pvTable.save(updated);
128
+ }
129
+ });
130
+ }
94
131
  _evaluateBundle(pkg, bundleCode) {
95
132
  // Node.js built-in modules that do not exist in React Native (and would cause
96
133
  // a fatal native error if passed through to RN's require). We block them here
@@ -156,18 +193,32 @@ class PackageLoader {
156
193
  const bundleFunction = new Function("module", "exports", "require", bundleCode);
157
194
  bundleFunction(module, moduleExports, customRequire);
158
195
  const bundleExports = module.exports;
196
+ // Check for contract-based package definition (new path)
197
+ const packageDefinition = (0, contract_package_loader_1.extractPackageDefinition)(bundleExports);
198
+ if (packageDefinition) {
199
+ if (packageDefinition.packageId !== pkg.packageId) {
200
+ console.warn(`[PackageLoader] packageId mismatch: definition has "${packageDefinition.packageId}" but DB record has "${pkg.packageId}"`);
201
+ }
202
+ (0, contract_package_loader_1.installContractPackage)(this.dataContext, packageDefinition);
203
+ this.contractInstalledPackages.add(packageDefinition.packageId);
204
+ this.correctPackageVersion(pkg, packageDefinition);
205
+ }
206
+ // Legacy path: extract IPeersPackage for backward compat
159
207
  const packageInstance = bundleExports?.exports || bundleExports?.package || bundleExports?.default || bundleExports;
160
208
  this.packageInstances[pkg.packageId] = packageInstance;
161
209
  if (packageInstance && typeof packageInstance === "object") {
162
- packageInstance.toolInstances?.forEach((toolInstance) => {
163
- (0, tools_2.registerTool)(toolInstance);
164
- (0, tools_1.Tools)(this.dataContext).save(toolInstance.tool);
165
- });
166
- packageInstance.tableDefinitions?.forEach((tableDefinition) => {
167
- this.dataContext.tableContainer.registerTableDefinition(tableDefinition, {
168
- overwrite: true,
210
+ // Skip legacy tool/table registration if the contract path already handled it
211
+ if (!packageDefinition) {
212
+ packageInstance.toolInstances?.forEach((toolInstance) => {
213
+ (0, tools_2.registerTool)(toolInstance);
214
+ (0, tools_1.Tools)(this.dataContext).save(toolInstance.tool);
215
+ });
216
+ packageInstance.tableDefinitions?.forEach((tableDefinition) => {
217
+ this.dataContext.tableContainer.registerTableDefinition(tableDefinition, {
218
+ overwrite: true,
219
+ });
169
220
  });
170
- });
221
+ }
171
222
  return packageInstance;
172
223
  }
173
224
  return;
@@ -61,6 +61,13 @@ export declare const rpcServerCalls: {
61
61
  /** Clear change tracking and rebuild from current rows for the default data context (same as Data Explorer). */
62
62
  resetChangeTracking: () => Promise<void>;
63
63
  deleteLocalDatabase: () => Promise<void>;
64
+ /** Returns info about the pre-migration data directory, or `null` if already cleaned up. */
65
+ getOldDataDirInfo: () => Promise<{
66
+ path: string;
67
+ sizeMB: number;
68
+ } | null>;
69
+ /** Deletes the pre-migration data directory after the user confirms. */
70
+ cleanupOldDataDir: () => Promise<void>;
64
71
  importGroupShare: (groupShareJson: string) => Promise<string>;
65
72
  registerWithPeersServices: () => Promise<string>;
66
73
  appQuit: () => Promise<void>;
package/dist/rpc-types.js CHANGED
@@ -34,6 +34,10 @@ exports.rpcServerCalls = {
34
34
  /** Clear change tracking and rebuild from current rows for the default data context (same as Data Explorer). */
35
35
  resetChangeTracking: rpcStub("resetChangeTracking"),
36
36
  deleteLocalDatabase: rpcStub("deleteLocalDatabase"),
37
+ /** Returns info about the pre-migration data directory, or `null` if already cleaned up. */
38
+ getOldDataDirInfo: rpcStub("getOldDataDirInfo"),
39
+ /** Deletes the pre-migration data directory after the user confirms. */
40
+ cleanupOldDataDir: rpcStub("cleanupOldDataDir"),
37
41
  importGroupShare: rpcStub("importGroupShare"),
38
42
  registerWithPeersServices: rpcStub("registerWithPeersServices"),
39
43
  // App lifecycle commands (for CLI control)
@@ -40,6 +40,7 @@ export declare const workflowSchema: z.ZodObject<{
40
40
  createdBy: z.ZodEffects<z.ZodString, string, string>;
41
41
  createdAt: z.ZodDefault<z.ZodDate>;
42
42
  updatedAt: z.ZodDefault<z.ZodDate>;
43
+ packageId: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
43
44
  }, "strip", z.ZodTypeAny, {
44
45
  name: string;
45
46
  description: string;
@@ -54,12 +55,14 @@ export declare const workflowSchema: z.ZodObject<{
54
55
  subWorkflowId?: string | undefined;
55
56
  }[];
56
57
  updatedAt: Date;
58
+ packageId?: string | undefined;
57
59
  }, {
58
60
  name: string;
59
61
  description: string;
60
62
  createdBy: string;
61
63
  workflowId: string;
62
64
  defaultAssistantId: string;
65
+ packageId?: string | undefined;
63
66
  createdAt?: Date | undefined;
64
67
  instructions?: {
65
68
  markdown?: string | undefined;
@@ -35,4 +35,5 @@ exports.workflowSchema = zod_1.z.object({
35
35
  .date()
36
36
  .default(() => new Date())
37
37
  .describe("The date the workflow was last updated"),
38
+ packageId: zod_types_1.zodPeerId.optional().describe("The package that installed this workflow, if any"),
38
39
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@peers-app/peers-sdk",
3
- "version": "0.16.5",
3
+ "version": "0.17.0",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/peers-app/peers-sdk.git"