@peers-app/peers-sdk 0.26.5 → 0.27.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 (194) hide show
  1. package/README.md +3 -1
  2. package/bin/peers-package.js +13 -0
  3. package/define/package.json +4 -0
  4. package/dist/contracts/__tests__/action-dispatch.test.js +56 -76
  5. package/dist/contracts/__tests__/also-implements.test.d.ts +1 -0
  6. package/dist/contracts/__tests__/also-implements.test.js +110 -0
  7. package/dist/contracts/__tests__/builder.test.js +45 -0
  8. package/dist/contracts/__tests__/contract-resolvers.test.js +134 -4
  9. package/dist/contracts/__tests__/frozen-contracts.test.d.ts +1 -0
  10. package/dist/contracts/__tests__/frozen-contracts.test.js +191 -0
  11. package/dist/contracts/__tests__/generic-tool-dispatch.test.js +13 -56
  12. package/dist/contracts/__tests__/host-contract-client.test.d.ts +1 -0
  13. package/dist/contracts/__tests__/host-contract-client.test.js +793 -0
  14. package/dist/contracts/__tests__/host-contract-transport.test.js +15 -0
  15. package/dist/contracts/__tests__/registry.test.js +68 -0
  16. package/dist/contracts/__tests__/target-dispatch.d.ts +11 -0
  17. package/dist/contracts/__tests__/target-dispatch.js +24 -0
  18. package/dist/contracts/__tests__/tool-catalog-service.test.js +37 -1
  19. package/dist/contracts/__tests__/tool-catalog.test.js +12 -3
  20. package/dist/contracts/__tests__/validate.test.js +177 -7
  21. package/dist/contracts/__tests__/workflow-context.test.js +0 -11
  22. package/dist/contracts/builder.d.ts +16 -2
  23. package/dist/contracts/builder.js +44 -3
  24. package/dist/contracts/contract-definition-schema.d.ts +251 -0
  25. package/dist/contracts/contract-definition-schema.js +48 -0
  26. package/dist/contracts/contract-provider-router.d.ts +2 -0
  27. package/dist/contracts/contract-provider-router.js +5 -2
  28. package/dist/contracts/contract-proxy.d.ts +52 -18
  29. package/dist/contracts/contract-proxy.js +144 -203
  30. package/dist/contracts/contract-resolvers.d.ts +6 -4
  31. package/dist/contracts/contract-resolvers.js +32 -9
  32. package/dist/contracts/frozen-contracts.d.ts +59 -0
  33. package/dist/contracts/frozen-contracts.js +86 -0
  34. package/dist/contracts/host-contract-client.d.ts +134 -0
  35. package/dist/contracts/host-contract-client.js +396 -0
  36. package/dist/contracts/host-contract-transport.d.ts +2 -0
  37. package/dist/contracts/host-contract-transport.js +8 -0
  38. package/dist/contracts/index.d.ts +6 -4
  39. package/dist/contracts/index.js +11 -5
  40. package/dist/contracts/registry.d.ts +31 -1
  41. package/dist/contracts/registry.js +100 -6
  42. package/dist/contracts/system/contract-catalog-contract.d.ts +61 -6
  43. package/dist/contracts/system/contract-catalog-contract.js +17 -5
  44. package/dist/contracts/tool-catalog-service.js +26 -6
  45. package/dist/contracts/tool-catalog.d.ts +1 -1
  46. package/dist/contracts/tool-catalog.js +4 -1
  47. package/dist/contracts/types.d.ts +32 -2
  48. package/dist/contracts/validate.d.ts +16 -1
  49. package/dist/contracts/validate.js +139 -25
  50. package/dist/data/change-tracking.d.ts +17 -5
  51. package/dist/data/change-tracking.js +22 -6
  52. package/dist/data/change-tracking.test.d.ts +1 -0
  53. package/dist/data/change-tracking.test.js +62 -0
  54. package/dist/data/group-members.d.ts +6 -1
  55. package/dist/data/group-members.js +12 -4
  56. package/dist/data/groups.d.ts +6 -1
  57. package/dist/data/groups.js +12 -4
  58. package/dist/data/orm/sql.data-source.d.ts +9 -0
  59. package/dist/data/orm/sql.data-source.js +47 -2
  60. package/dist/data/orm/sql.data-source.test.js +142 -0
  61. package/dist/data/orm/table-container.js +9 -9
  62. package/dist/data/orm/table-container.test.js +44 -0
  63. package/dist/data/orm/types.d.ts +41 -1
  64. package/dist/data/orm/types.js +159 -28
  65. package/dist/data/orm/types.test.js +129 -0
  66. package/dist/data/package-versions.d.ts +5 -1
  67. package/dist/data/package-versions.js +11 -4
  68. package/dist/data/packages.d.ts +7 -1
  69. package/dist/data/packages.js +13 -4
  70. package/dist/data/peer-types.d.ts +8 -62
  71. package/dist/data/persistent-vars.d.ts +4 -1
  72. package/dist/data/persistent-vars.js +7 -2
  73. package/dist/data/table-signing.test.d.ts +1 -0
  74. package/dist/data/table-signing.test.js +118 -0
  75. package/dist/data/tools.d.ts +29 -221
  76. package/dist/data/users.d.ts +1 -2
  77. package/dist/data/users.js +8 -5
  78. package/dist/define/also-implements.test.d.ts +1 -0
  79. package/dist/define/also-implements.test.js +123 -0
  80. package/dist/define/context.d.ts +77 -0
  81. package/dist/define/context.js +2 -0
  82. package/dist/define/contract-ref.d.ts +177 -0
  83. package/dist/define/contract-ref.js +67 -0
  84. package/dist/define/declare-contract.d.ts +167 -0
  85. package/dist/define/declare-contract.js +220 -0
  86. package/dist/define/declare-contract.test.d.ts +1 -0
  87. package/dist/define/declare-contract.test.js +573 -0
  88. package/dist/define/define-package.d.ts +203 -0
  89. package/dist/define/define-package.js +289 -0
  90. package/dist/define/define.test.d.ts +1 -0
  91. package/dist/define/define.test.js +1010 -0
  92. package/dist/define/empty-fields.d.ts +15 -0
  93. package/dist/define/empty-fields.js +134 -0
  94. package/dist/define/empty-fields.test.d.ts +1 -0
  95. package/dist/define/empty-fields.test.js +55 -0
  96. package/dist/define/events-observables.test.d.ts +1 -0
  97. package/dist/define/events-observables.test.js +1013 -0
  98. package/dist/define/events.d.ts +81 -0
  99. package/dist/define/events.js +81 -0
  100. package/dist/define/generated-field.d.ts +20 -0
  101. package/dist/define/generated-field.js +25 -0
  102. package/dist/define/index.d.ts +28 -0
  103. package/dist/define/index.js +62 -0
  104. package/dist/define/lazy-members.d.ts +8 -0
  105. package/dist/define/lazy-members.js +38 -0
  106. package/dist/define/manifest.d.ts +63 -0
  107. package/dist/define/manifest.js +653 -0
  108. package/dist/define/observables.d.ts +146 -0
  109. package/dist/define/observables.js +187 -0
  110. package/dist/define/serve-members.d.ts +21 -0
  111. package/dist/define/serve-members.js +152 -0
  112. package/dist/define/serve-members.test.d.ts +1 -0
  113. package/dist/define/serve-members.test.js +630 -0
  114. package/dist/define/serve.d.ts +22 -0
  115. package/dist/define/serve.js +58 -0
  116. package/dist/define/system-contracts.d.ts +41 -0
  117. package/dist/define/system-contracts.js +21 -0
  118. package/dist/define/table-handle.d.ts +13 -0
  119. package/dist/define/table-handle.js +36 -0
  120. package/dist/define/table.d.ts +128 -0
  121. package/dist/define/table.js +122 -0
  122. package/dist/define/tool.d.ts +129 -0
  123. package/dist/define/tool.js +91 -0
  124. package/dist/define/vars.d.ts +82 -0
  125. package/dist/define/vars.js +256 -0
  126. package/dist/define/vars.test.d.ts +1 -0
  127. package/dist/define/vars.test.js +39 -0
  128. package/dist/define/wire-value.d.ts +12 -0
  129. package/dist/define/wire-value.js +76 -0
  130. package/dist/define/worker-state.d.ts +15 -0
  131. package/dist/define/worker-state.js +45 -0
  132. package/dist/device/tx-encoding.test.js +10 -0
  133. package/dist/index.d.ts +3 -0
  134. package/dist/index.js +5 -1
  135. package/dist/observable.d.ts +42 -2
  136. package/dist/observable.js +25 -7
  137. package/dist/package-build/build-package.d.ts +60 -0
  138. package/dist/package-build/build-package.js +312 -0
  139. package/dist/package-build/build-package.test.d.ts +1 -0
  140. package/dist/package-build/build-package.test.js +204 -0
  141. package/dist/package-build/cli.d.ts +7 -0
  142. package/dist/package-build/cli.js +218 -0
  143. package/dist/package-build/contract-add.d.ts +35 -0
  144. package/dist/package-build/contract-add.js +97 -0
  145. package/dist/package-build/contract-add.test.d.ts +1 -0
  146. package/dist/package-build/contract-add.test.js +467 -0
  147. package/dist/package-build/contract-source.d.ts +59 -0
  148. package/dist/package-build/contract-source.js +471 -0
  149. package/dist/package-build/freeze-contracts.d.ts +56 -0
  150. package/dist/package-build/freeze-contracts.js +198 -0
  151. package/dist/package-build/freeze-contracts.test.d.ts +1 -0
  152. package/dist/package-build/freeze-contracts.test.js +355 -0
  153. package/dist/package-installer/package-creator.d.ts +4 -0
  154. package/dist/package-installer/package-creator.js +57 -16
  155. package/dist/package-installer/package-creator.test.js +86 -0
  156. package/dist/package-loader/contract-members.d.ts +53 -0
  157. package/dist/package-loader/contract-members.js +31 -0
  158. package/dist/package-loader/contract-package-loader.js +5 -1
  159. package/dist/package-loader/contract-package-loader.test.js +11 -0
  160. package/dist/package-loader/host-authority-loading.test.js +9 -5
  161. package/dist/package-loader/index.d.ts +1 -0
  162. package/dist/package-loader/index.js +1 -0
  163. package/dist/package-loader/isolated-artifact.d.ts +80 -17
  164. package/dist/package-loader/isolated-artifact.js +257 -51
  165. package/dist/package-loader/isolated-artifact.test.js +294 -21
  166. package/dist/package-loader/isolated-runtime.d.ts +22 -7
  167. package/dist/package-loader/isolated-table-gateway.js +30 -11
  168. package/dist/package-loader/isolated-table-gateway.test.js +243 -0
  169. package/dist/package-loader/package-loader.d.ts +8 -1
  170. package/dist/package-loader/package-loader.js +39 -20
  171. package/dist/package-loader/package-loader.test.js +47 -0
  172. package/dist/peer-id.d.ts +25 -0
  173. package/dist/peer-id.js +99 -0
  174. package/dist/serial-json.compat.test.d.ts +1 -0
  175. package/dist/serial-json.compat.test.js +369 -0
  176. package/dist/serial-json.d.ts +41 -5
  177. package/dist/serial-json.js +216 -157
  178. package/dist/serial-json.oracle.d.ts +21 -0
  179. package/dist/serial-json.oracle.js +222 -0
  180. package/dist/serial-json.test.js +315 -0
  181. package/dist/testing/index.d.ts +4 -0
  182. package/dist/testing/index.js +8 -0
  183. package/dist/testing/mock-host-contract.d.ts +123 -0
  184. package/dist/testing/mock-host-contract.js +434 -0
  185. package/dist/testing/mock-host-contract.test.d.ts +1 -0
  186. package/dist/testing/mock-host-contract.test.js +782 -0
  187. package/dist/types/field-type.d.ts +35 -18
  188. package/dist/types/field-type.js +4 -1
  189. package/dist/types/zod-types.d.ts +9 -0
  190. package/dist/types/zod-types.js +8 -2
  191. package/dist/utils.d.ts +1 -25
  192. package/dist/utils.js +10 -90
  193. package/package.json +9 -2
  194. package/testing/package.json +4 -0
@@ -0,0 +1,251 @@
1
+ import { z } from "zod";
2
+ import { FieldType } from "../types/field-type";
3
+ /**
4
+ * Checks a contract definition's structure: id, version, name, and its tables, tools,
5
+ * observables, and events with their fields. A `devTag` isn't part of it.
6
+ */
7
+ export declare const contractDefinitionSchema: z.ZodObject<{
8
+ contractId: z.ZodString;
9
+ version: z.ZodNumber;
10
+ name: z.ZodString;
11
+ description: z.ZodString;
12
+ tables: z.ZodArray<z.ZodObject<{
13
+ name: z.ZodString;
14
+ description: z.ZodString;
15
+ primaryKeyName: z.ZodString;
16
+ fields: z.ZodArray<z.ZodObject<{
17
+ name: z.ZodString;
18
+ description: z.ZodOptional<z.ZodString>;
19
+ type: z.ZodNativeEnum<typeof FieldType>;
20
+ defaultValue: z.ZodOptional<z.ZodAny>;
21
+ optional: z.ZodOptional<z.ZodBoolean>;
22
+ isArray: z.ZodOptional<z.ZodBoolean>;
23
+ subType: z.ZodOptional<z.ZodString>;
24
+ fields: z.ZodOptional<z.ZodLazy<z.ZodArray<z.ZodType<import("../types/field-type").IField>>>>;
25
+ enumValues: z.ZodOptional<z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>>;
26
+ }, "strip", z.ZodTypeAny, import("../types/field-type").IField, import("../types/field-type").IField>, "many">;
27
+ }, "strip", z.ZodTypeAny, {
28
+ name: string;
29
+ description: string;
30
+ fields: import("../types/field-type").IField[];
31
+ primaryKeyName: string;
32
+ }, {
33
+ name: string;
34
+ description: string;
35
+ fields: import("../types/field-type").IField[];
36
+ primaryKeyName: string;
37
+ }>, "many">;
38
+ tools: z.ZodArray<z.ZodObject<{
39
+ name: z.ZodString;
40
+ usageDescription: z.ZodString;
41
+ inputFields: z.ZodArray<z.ZodObject<{
42
+ name: z.ZodString;
43
+ description: z.ZodOptional<z.ZodString>;
44
+ type: z.ZodNativeEnum<typeof FieldType>;
45
+ defaultValue: z.ZodOptional<z.ZodAny>;
46
+ optional: z.ZodOptional<z.ZodBoolean>;
47
+ isArray: z.ZodOptional<z.ZodBoolean>;
48
+ subType: z.ZodOptional<z.ZodString>;
49
+ fields: z.ZodOptional<z.ZodLazy<z.ZodArray<z.ZodType<import("../types/field-type").IField>>>>;
50
+ enumValues: z.ZodOptional<z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>>;
51
+ }, "strip", z.ZodTypeAny, import("../types/field-type").IField, import("../types/field-type").IField>, "many">;
52
+ outputFields: z.ZodArray<z.ZodObject<{
53
+ name: z.ZodString;
54
+ description: z.ZodOptional<z.ZodString>;
55
+ type: z.ZodNativeEnum<typeof FieldType>;
56
+ defaultValue: z.ZodOptional<z.ZodAny>;
57
+ optional: z.ZodOptional<z.ZodBoolean>;
58
+ isArray: z.ZodOptional<z.ZodBoolean>;
59
+ subType: z.ZodOptional<z.ZodString>;
60
+ fields: z.ZodOptional<z.ZodLazy<z.ZodArray<z.ZodType<import("../types/field-type").IField>>>>;
61
+ enumValues: z.ZodOptional<z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>>;
62
+ }, "strip", z.ZodTypeAny, import("../types/field-type").IField, import("../types/field-type").IField>, "many">;
63
+ remoteAccessLevel: z.ZodOptional<z.ZodNumber>;
64
+ requiresWorkflowRun: z.ZodOptional<z.ZodBoolean>;
65
+ }, "strip", z.ZodTypeAny, {
66
+ name: string;
67
+ usageDescription: string;
68
+ inputFields: import("../types/field-type").IField[];
69
+ outputFields: import("../types/field-type").IField[];
70
+ remoteAccessLevel?: number | undefined;
71
+ requiresWorkflowRun?: boolean | undefined;
72
+ }, {
73
+ name: string;
74
+ usageDescription: string;
75
+ inputFields: import("../types/field-type").IField[];
76
+ outputFields: import("../types/field-type").IField[];
77
+ remoteAccessLevel?: number | undefined;
78
+ requiresWorkflowRun?: boolean | undefined;
79
+ }>, "many">;
80
+ observables: z.ZodArray<z.ZodObject<{
81
+ name: z.ZodString;
82
+ description: z.ZodString;
83
+ valueType: z.ZodNativeEnum<typeof FieldType>;
84
+ value: z.ZodOptional<z.ZodObject<Omit<{
85
+ name: z.ZodString;
86
+ description: z.ZodOptional<z.ZodString>;
87
+ type: z.ZodNativeEnum<typeof FieldType>;
88
+ defaultValue: z.ZodOptional<z.ZodAny>;
89
+ optional: z.ZodOptional<z.ZodBoolean>;
90
+ isArray: z.ZodOptional<z.ZodBoolean>;
91
+ subType: z.ZodOptional<z.ZodString>;
92
+ fields: z.ZodOptional<z.ZodLazy<z.ZodArray<z.ZodType<import("../types/field-type").IField>>>>;
93
+ enumValues: z.ZodOptional<z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>>;
94
+ }, "name">, "strip", z.ZodTypeAny, {
95
+ type: FieldType;
96
+ optional?: boolean | undefined;
97
+ description?: string | undefined;
98
+ defaultValue?: any;
99
+ isArray?: boolean | undefined;
100
+ subType?: string | undefined;
101
+ fields?: import("../types/field-type").IField[] | undefined;
102
+ enumValues?: (string | number | boolean)[] | undefined;
103
+ }, {
104
+ type: FieldType;
105
+ optional?: boolean | undefined;
106
+ description?: string | undefined;
107
+ defaultValue?: any;
108
+ isArray?: boolean | undefined;
109
+ subType?: string | undefined;
110
+ fields?: import("../types/field-type").IField[] | undefined;
111
+ enumValues?: (string | number | boolean)[] | undefined;
112
+ }>>;
113
+ writable: z.ZodBoolean;
114
+ }, "strip", z.ZodTypeAny, {
115
+ name: string;
116
+ description: string;
117
+ valueType: FieldType;
118
+ writable: boolean;
119
+ value?: {
120
+ type: FieldType;
121
+ optional?: boolean | undefined;
122
+ description?: string | undefined;
123
+ defaultValue?: any;
124
+ isArray?: boolean | undefined;
125
+ subType?: string | undefined;
126
+ fields?: import("../types/field-type").IField[] | undefined;
127
+ enumValues?: (string | number | boolean)[] | undefined;
128
+ } | undefined;
129
+ }, {
130
+ name: string;
131
+ description: string;
132
+ valueType: FieldType;
133
+ writable: boolean;
134
+ value?: {
135
+ type: FieldType;
136
+ optional?: boolean | undefined;
137
+ description?: string | undefined;
138
+ defaultValue?: any;
139
+ isArray?: boolean | undefined;
140
+ subType?: string | undefined;
141
+ fields?: import("../types/field-type").IField[] | undefined;
142
+ enumValues?: (string | number | boolean)[] | undefined;
143
+ } | undefined;
144
+ }>, "many">;
145
+ events: z.ZodOptional<z.ZodArray<z.ZodObject<{
146
+ name: z.ZodString;
147
+ description: z.ZodString;
148
+ payloadFields: z.ZodArray<z.ZodObject<{
149
+ name: z.ZodString;
150
+ description: z.ZodOptional<z.ZodString>;
151
+ type: z.ZodNativeEnum<typeof FieldType>;
152
+ defaultValue: z.ZodOptional<z.ZodAny>;
153
+ optional: z.ZodOptional<z.ZodBoolean>;
154
+ isArray: z.ZodOptional<z.ZodBoolean>;
155
+ subType: z.ZodOptional<z.ZodString>;
156
+ fields: z.ZodOptional<z.ZodLazy<z.ZodArray<z.ZodType<import("../types/field-type").IField>>>>;
157
+ enumValues: z.ZodOptional<z.ZodArray<z.ZodUnion<[z.ZodString, z.ZodNumber, z.ZodBoolean]>>>;
158
+ }, "strip", z.ZodTypeAny, import("../types/field-type").IField, import("../types/field-type").IField>, "many">;
159
+ }, "strip", z.ZodTypeAny, {
160
+ name: string;
161
+ description: string;
162
+ payloadFields: import("../types/field-type").IField[];
163
+ }, {
164
+ name: string;
165
+ description: string;
166
+ payloadFields: import("../types/field-type").IField[];
167
+ }>, "many">>;
168
+ requiresUserContext: z.ZodOptional<z.ZodBoolean>;
169
+ }, "strip", z.ZodTypeAny, {
170
+ name: string;
171
+ description: string;
172
+ version: number;
173
+ contractId: string;
174
+ tables: {
175
+ name: string;
176
+ description: string;
177
+ fields: import("../types/field-type").IField[];
178
+ primaryKeyName: string;
179
+ }[];
180
+ tools: {
181
+ name: string;
182
+ usageDescription: string;
183
+ inputFields: import("../types/field-type").IField[];
184
+ outputFields: import("../types/field-type").IField[];
185
+ remoteAccessLevel?: number | undefined;
186
+ requiresWorkflowRun?: boolean | undefined;
187
+ }[];
188
+ observables: {
189
+ name: string;
190
+ description: string;
191
+ valueType: FieldType;
192
+ writable: boolean;
193
+ value?: {
194
+ type: FieldType;
195
+ optional?: boolean | undefined;
196
+ description?: string | undefined;
197
+ defaultValue?: any;
198
+ isArray?: boolean | undefined;
199
+ subType?: string | undefined;
200
+ fields?: import("../types/field-type").IField[] | undefined;
201
+ enumValues?: (string | number | boolean)[] | undefined;
202
+ } | undefined;
203
+ }[];
204
+ events?: {
205
+ name: string;
206
+ description: string;
207
+ payloadFields: import("../types/field-type").IField[];
208
+ }[] | undefined;
209
+ requiresUserContext?: boolean | undefined;
210
+ }, {
211
+ name: string;
212
+ description: string;
213
+ version: number;
214
+ contractId: string;
215
+ tables: {
216
+ name: string;
217
+ description: string;
218
+ fields: import("../types/field-type").IField[];
219
+ primaryKeyName: string;
220
+ }[];
221
+ tools: {
222
+ name: string;
223
+ usageDescription: string;
224
+ inputFields: import("../types/field-type").IField[];
225
+ outputFields: import("../types/field-type").IField[];
226
+ remoteAccessLevel?: number | undefined;
227
+ requiresWorkflowRun?: boolean | undefined;
228
+ }[];
229
+ observables: {
230
+ name: string;
231
+ description: string;
232
+ valueType: FieldType;
233
+ writable: boolean;
234
+ value?: {
235
+ type: FieldType;
236
+ optional?: boolean | undefined;
237
+ description?: string | undefined;
238
+ defaultValue?: any;
239
+ isArray?: boolean | undefined;
240
+ subType?: string | undefined;
241
+ fields?: import("../types/field-type").IField[] | undefined;
242
+ enumValues?: (string | number | boolean)[] | undefined;
243
+ } | undefined;
244
+ }[];
245
+ events?: {
246
+ name: string;
247
+ description: string;
248
+ payloadFields: import("../types/field-type").IField[];
249
+ }[] | undefined;
250
+ requiresUserContext?: boolean | undefined;
251
+ }>;
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.contractDefinitionSchema = void 0;
4
+ const zod_1 = require("zod");
5
+ const field_type_1 = require("../types/field-type");
6
+ // A contract definition in the registry's form (`IContractDefinition`), as data: what
7
+ // `frozen-contracts.json` stores and what an `alsoImplements` entry carries. It checks the
8
+ // structure without normalizing: callers keep the original object, so IR keys this SDK doesn't
9
+ // know yet survive.
10
+ /**
11
+ * Checks a contract definition's structure: id, version, name, and its tables, tools,
12
+ * observables, and events with their fields. A `devTag` isn't part of it.
13
+ */
14
+ exports.contractDefinitionSchema = zod_1.z.object({
15
+ contractId: zod_1.z.string().regex(/^[a-z0-9]{25}$/i),
16
+ version: zod_1.z.number().int().positive().safe(),
17
+ name: zod_1.z.string().min(1),
18
+ description: zod_1.z.string(),
19
+ tables: zod_1.z.array(zod_1.z.object({
20
+ name: zod_1.z.string().min(1),
21
+ description: zod_1.z.string(),
22
+ primaryKeyName: zod_1.z.string().min(1),
23
+ fields: zod_1.z.array(field_type_1.fieldSchema),
24
+ })),
25
+ tools: zod_1.z.array(zod_1.z.object({
26
+ name: zod_1.z.string().min(1),
27
+ usageDescription: zod_1.z.string(),
28
+ inputFields: zod_1.z.array(field_type_1.fieldSchema),
29
+ outputFields: zod_1.z.array(field_type_1.fieldSchema),
30
+ remoteAccessLevel: zod_1.z.number().optional(),
31
+ requiresWorkflowRun: zod_1.z.boolean().optional(),
32
+ })),
33
+ observables: zod_1.z.array(zod_1.z.object({
34
+ name: zod_1.z.string().min(1),
35
+ description: zod_1.z.string(),
36
+ valueType: zod_1.z.nativeEnum(field_type_1.FieldType),
37
+ value: field_type_1.fieldSchema.omit({ name: true }).optional(),
38
+ writable: zod_1.z.boolean(),
39
+ })),
40
+ events: zod_1.z
41
+ .array(zod_1.z.object({
42
+ name: zod_1.z.string().min(1),
43
+ description: zod_1.z.string(),
44
+ payloadFields: zod_1.z.array(field_type_1.fieldSchema),
45
+ }))
46
+ .optional(),
47
+ requiresUserContext: zod_1.z.boolean().optional(),
48
+ });
@@ -10,6 +10,8 @@ import { type IContractTransport } from "./contract-transport";
10
10
  export interface IAuthorizedContractRoute {
11
11
  /** Canonical data-context route selected by the trusted host. */
12
12
  dataContextId?: string;
13
+ /** Provider whose policy authorized this call; dispatch must keep this selection. */
14
+ providerPackageId?: string;
13
15
  /** Optional caller context to pass to the resolved endpoint. */
14
16
  context?: IContractCallContext;
15
17
  }
@@ -158,8 +158,11 @@ function createContractProviderRouter(transport, opts) {
158
158
  };
159
159
  // Provider selection happens on the executing device, so a remote route is
160
160
  // cached by target device rather than by a locally selected provider package.
161
- const providerPackageId = !targetDeviceId && opts.resolveProviderPackageId
162
- ? await opts.resolveProviderPackageId(endpointRequest)
161
+ const providerPackageId = !targetDeviceId
162
+ ? (authorization.providerPackageId ??
163
+ (opts.resolveProviderPackageId
164
+ ? await opts.resolveProviderPackageId(endpointRequest)
165
+ : undefined))
163
166
  : undefined;
164
167
  endpointRequest.providerPackageId = providerPackageId;
165
168
  const endpointKey = routeKey(call.contractId, call.version, providerPackageId, authorization.dataContextId, targetDeviceId);
@@ -103,6 +103,11 @@ export interface IContractNotification {
103
103
  /** Originating event name — informational, for debugging/logging only. */
104
104
  name?: string;
105
105
  }
106
+ /** A remote subscription with a setup acknowledgement, also used by reconnecting UI clients. */
107
+ export interface IContractSubscription extends ISubscriptionResult {
108
+ /** True after initial attachment, or false if setup fails or a UI wait ends before attachment. */
109
+ readonly ready: Promise<boolean>;
110
+ }
106
111
  /**
107
112
  * The consumer-side proxy for a single contract table. Any accessed name is forwarded
108
113
  * as a remote method call returning a promise, **except** `dataChanged`, which is a
@@ -120,7 +125,7 @@ export type IContractTableProxy = Record<string, (...args: any[]) => Promise<any
120
125
  * {@link ISubscriptionResult} whose `unsubscribe()` stops delivery.
121
126
  */
122
127
  dataChanged: {
123
- subscribe(handler: (event: any) => void): ISubscriptionResult;
128
+ subscribe(handler: (event: any) => void): IContractSubscription;
124
129
  };
125
130
  };
126
131
  /** Standard {@link Table} methods the contract provider allows over the wire. */
@@ -237,12 +242,10 @@ export interface IContractToolContext {
237
242
  * Absent for trusted local callers (the signed-in UI session and the CLI).
238
243
  */
239
244
  callerPackageId?: string;
240
- /** Trusted frame, retained across host-backed action dispatch; never from arguments. */
245
+ /** Trusted frame, retained across host-backed tool dispatch; never from arguments. */
241
246
  authority?: IIsolatedCallPrincipal;
242
247
  /** Select a target under this tool’s trusted frame; authority never belongs in arguments. */
243
248
  dispatchTool?: (target: IContractToolTarget, args: unknown) => Promise<any>;
244
- /** Checked alias dispatch supplied only by the host provider. */
245
- dispatchAction?: (name: string, args: unknown) => Promise<any>;
246
249
  /** Signed actor selected by the host. */
247
250
  actorUserId?: string;
248
251
  /** Incoming host frame for read-only infrastructure projections; preserves the turn ceiling. */
@@ -250,6 +253,51 @@ export interface IContractToolContext {
250
253
  /** Original turn context for read-only catalog projection, before infrastructure admission. */
251
254
  incomingCallContext?: IContractCallContext;
252
255
  }
256
+ /**
257
+ * Member builders over one transport and data context, shared by {@link createContractConsumer}
258
+ * (every member a definition lists, built up front) and `hostContract` (each member built on
259
+ * first use, so it needs no definition). {@link IContractConsumerMembers.dispose} ends every
260
+ * member's subscriptions and refuses new calls.
261
+ */
262
+ export interface IContractConsumerMembers {
263
+ /** A table: accessed methods forward as remote calls; `dataChanged` subscribes. */
264
+ table(name: string): IContractTableProxy;
265
+ /** A tool: each call runs it on the provider. */
266
+ tool(name: string): (...args: unknown[]) => Promise<any>;
267
+ /** Write one observable value; the provider checks writability and the value. */
268
+ setObservable(name: string, value: unknown): Promise<unknown>;
269
+ /** An event's subscribe surface. */
270
+ event(name: string): {
271
+ subscribe: (handler: (value: any) => void) => IContractSubscription;
272
+ };
273
+ /**
274
+ * A live mirror of an observable, subscribed now. `loaded` settles after the initial read;
275
+ * `refresh` reads the provider's value again. A local write calls `chainWrite` with a `send`
276
+ * that rejects when the provider refuses it, so the caller orders writes and handles failures.
277
+ * A write to a mirror made with `writable: false` throws before changing it.
278
+ */
279
+ observable(name: string, writable: boolean, chainWrite: (send: () => Promise<void>) => void): {
280
+ observable: Observable<any>;
281
+ loaded: Promise<void>;
282
+ refresh(): Promise<void>;
283
+ };
284
+ /** Detach every subscription and refuse new calls. Idempotent. */
285
+ dispose(): void;
286
+ }
287
+ /**
288
+ * Build the member builders for one contract over `transport`. See
289
+ * {@link IContractConsumerMembers}.
290
+ *
291
+ * @param contractId The contract's id.
292
+ * @param version The contract's version.
293
+ * @param transport Bidirectional channel to the provider.
294
+ * @param opts.dataContextId Optional data context to scope every call to.
295
+ * @param opts.providerPackageId Optional provider to address.
296
+ */
297
+ export declare function createContractConsumerMembers(contractId: string, version: number, transport: IContractTransport, opts?: {
298
+ dataContextId?: string;
299
+ providerPackageId?: string;
300
+ }): IContractConsumerMembers;
253
301
  /**
254
302
  * Build the **consumer** side of a contract proxy from a contract definition and a
255
303
  * transport. Member names come from the contract shape; table members are backed by a
@@ -327,12 +375,6 @@ export interface IContractResolution {
327
375
  version: number;
328
376
  tables?: Record<string, Table<any>>;
329
377
  tools?: Record<string, IContractToolImplementation>;
330
- /** Tool used for alias catalog admission; defaults to a tool requesting preservation. */
331
- actionDispatcher?: string;
332
- /** Private canonical tools; selectors never carry their own numeric permissions. */
333
- actionTools?: Record<string, IContractToolImplementation>;
334
- /** Package-owned selector-to-tool mapping, validated by the host. */
335
- actionAliases?: Record<string, string>;
336
378
  /**
337
379
  * Host-only capabilities appended as the final argument to provider tool functions.
338
380
  * Omit this for remote or otherwise untrusted provider routes.
@@ -413,14 +455,6 @@ export type ContractPermissionCheck = (call: IContractCall, context: IContractCa
413
455
  * for compatibility and isolated in-process providers that intentionally need the old gate.
414
456
  */
415
457
  export declare const sameUserContractPermissionCheck: ContractPermissionCheck;
416
- /** Validate private alias registrations before exposing any action wrapper. */
417
- export declare function validateContractActions(resolution: IContractResolution): void;
418
- /**
419
- * Project executable aliases using live tool metadata and trusted caller identity.
420
- *
421
- * Catalog filtering is advisory; execution rechecks every target.
422
- */
423
- export declare function authorizedContractActionNames(resolution: IContractResolution, context: IContractCallContext): Promise<string[]>;
424
458
  /** Dynamic local tool reference; provider pinning is required for package-owned actions. */
425
459
  export interface IContractToolTarget {
426
460
  contractId: string;