@hyperscale0/udl 3.2.0 → 4.0.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.
@@ -0,0 +1,306 @@
1
+ import * as z from "zod";
2
+ import { udlExternalIdSchema, udlObjectIdSchema, udlPartyNameSchema, } from "./schema.js";
3
+ export const requestAttributionSchema = z.union([
4
+ z.strictObject({
5
+ kind: z.literal("human"),
6
+ principalId: z.string().min(1),
7
+ humanId: z.string().min(1),
8
+ source: z.enum(["staff_session", "customer_session"]),
9
+ }),
10
+ z.strictObject({
11
+ kind: z.literal("machine"),
12
+ principalId: z.string().min(1),
13
+ source: z.enum(["api_key", "system"]),
14
+ }),
15
+ z.strictObject({
16
+ kind: z.literal("machine"),
17
+ principalId: z.string().min(1),
18
+ humanId: z.string().min(1),
19
+ source: z.literal("api_key_delegate"),
20
+ }),
21
+ ]);
22
+ export const objectApprovalRequirementSchema = z.strictObject({
23
+ target: z.string().min(1),
24
+ action: udlPartyNameSchema,
25
+ party: udlPartyNameSchema,
26
+ role: udlPartyNameSchema,
27
+ decision: z.enum(["approved", "declined"]),
28
+ protectedRequest: z.string().min(1),
29
+ differentFromInitiator: z.boolean(),
30
+ });
31
+ const amount = z.string().regex(/^(0|[1-9][0-9]{0,17})$/);
32
+ const text = z.string().min(1).max(2048);
33
+ /** Values, rather than declarations. The same validator feeds forms and admission. */
34
+ export function udlFieldValueSchema(field) {
35
+ let schema;
36
+ switch (field.type) {
37
+ case "money":
38
+ schema = amount
39
+ .refine((value) => /^(0|[1-9][0-9]{0,17})$/.test(value) &&
40
+ (field.minimum === undefined ||
41
+ BigInt(value) >= BigInt(field.minimum)) &&
42
+ (field.maximum === undefined ||
43
+ BigInt(value) <= BigInt(field.maximum)), "Money is outside its declared bounds")
44
+ .meta({
45
+ ...(field.minimum !== undefined
46
+ ? { "x-udl-minimum": field.minimum }
47
+ : {}),
48
+ ...(field.maximum !== undefined
49
+ ? { "x-udl-maximum": field.maximum }
50
+ : {}),
51
+ });
52
+ break;
53
+ case "account":
54
+ schema = text;
55
+ break;
56
+ case "ref":
57
+ schema = field.targetKind === "object" ? udlObjectIdSchema : text;
58
+ break;
59
+ case "date":
60
+ schema = z.iso.datetime({ offset: true });
61
+ break;
62
+ case "duration":
63
+ schema = z.number().int().safe().positive();
64
+ break;
65
+ case "text": {
66
+ let value = z
67
+ .string()
68
+ .min(field.minLength ?? 1)
69
+ .max(field.maxLength ?? 2048);
70
+ if (field.pattern)
71
+ value = value.regex(new RegExp(field.pattern));
72
+ schema = value;
73
+ break;
74
+ }
75
+ case "integer": {
76
+ let value = z.number().int().safe();
77
+ if (field.minimum !== undefined)
78
+ value = value.min(field.minimum);
79
+ if (field.maximum !== undefined)
80
+ value = value.max(field.maximum);
81
+ schema = value;
82
+ break;
83
+ }
84
+ case "percent":
85
+ schema = z.number().int().min(0).max(10000);
86
+ break;
87
+ case "boolean":
88
+ schema = z.boolean();
89
+ break;
90
+ case "enum":
91
+ schema = z.enum(field.values);
92
+ break;
93
+ case "list": {
94
+ const item = field.item === "money"
95
+ ? amount
96
+ : field.item === "date"
97
+ ? z.iso.datetime({ offset: true })
98
+ : field.item === "integer"
99
+ ? z.number().int().safe()
100
+ : field.item === "ref" && field.targetKind === "object"
101
+ ? udlObjectIdSchema
102
+ : text;
103
+ schema = z.array(item).max(field.maxItems);
104
+ break;
105
+ }
106
+ }
107
+ if ("value" in field && field.value !== undefined)
108
+ schema = z.literal(field.value);
109
+ if (field.description)
110
+ schema = schema.describe(field.description);
111
+ return schema;
112
+ }
113
+ /** Creation accepts the full metadata union, with every value optional. */
114
+ export function objectCreateSchema(kind) {
115
+ return z.strictObject({
116
+ externalId: udlExternalIdSchema.optional(),
117
+ fields: z
118
+ .strictObject(Object.fromEntries(kind.fields.map((field) => [
119
+ field.name,
120
+ udlFieldValueSchema(field).optional(),
121
+ ])))
122
+ .optional(),
123
+ });
124
+ }
125
+ /** Canonical UDL supplies meaning; core adds authority, lifecycle and readiness. */
126
+ export function projectObjectDiscovery(document, build) {
127
+ return {
128
+ ...build,
129
+ retainedKinds: [],
130
+ kinds: document.objects.map((kind) => ({
131
+ creation: true,
132
+ kind: kind.id,
133
+ title: kind.title,
134
+ fields: kind.fields,
135
+ authoredFields: kind.authoredFields,
136
+ columns: kind.columns,
137
+ createSchema: z.toJSONSchema(objectCreateSchema(kind), { io: "input" }),
138
+ actions: document.instruments
139
+ .filter((instrument) => instrument.subject === kind.id)
140
+ .flatMap((instrument) => {
141
+ const createHidden = !!instrument.actions.create &&
142
+ !instrument.actions.create.publicAction;
143
+ const attachmentRefListFields = instrument.fields.filter((field) => field.type === "list" &&
144
+ field.item === "ref" &&
145
+ field.targetKind !== "object");
146
+ return instrument.actionOrder.flatMap((name) => {
147
+ const action = instrument.actions[name];
148
+ if (!action.publicAction)
149
+ return [];
150
+ const transition = instrument.lifecycle.transitions[name];
151
+ const canStartFromInitial = Boolean(transition?.from.includes(instrument.lifecycle.initial));
152
+ const isCreationAction = name === "create" || (createHidden && canStartFromInitial);
153
+ const rawCreateReqs = isCreationAction
154
+ ? [
155
+ ...(instrument.actions.create?.subject?.requirements ?? []),
156
+ ...attachmentRefListFields.map((field) => ({ field })),
157
+ ]
158
+ : [];
159
+ const actionReqs = action.subject?.requirements ?? [];
160
+ const actionReqNames = new Set(actionReqs.map((r) => r.objectField ?? r.field.name));
161
+ const mergedReqs = [...actionReqs];
162
+ for (const req of rawCreateReqs) {
163
+ const reqName = req.objectField ?? req.field.name;
164
+ if (!mergedReqs.some((r) => (r.objectField ?? r.field.name) === reqName)) {
165
+ mergedReqs.push(req);
166
+ }
167
+ }
168
+ const unbound = [
169
+ ...(action.subject?.adapters ?? []),
170
+ ...(isCreationAction
171
+ ? (instrument.actions.create?.subject?.adapters ?? [])
172
+ : []),
173
+ ].find((adapter) => adapter.snapshot === null);
174
+ const seenCreation = new Set();
175
+ const creationRequirements = [];
176
+ for (const requirement of rawCreateReqs) {
177
+ const name = requirement.objectField ?? requirement.field.name;
178
+ if (!seenCreation.has(name)) {
179
+ seenCreation.add(name);
180
+ creationRequirements.push({
181
+ ...requirement.field,
182
+ name,
183
+ });
184
+ }
185
+ }
186
+ const creationOnlyNames = creationRequirements
187
+ .map((field) => field.name)
188
+ .filter((name) => !actionReqNames.has(name));
189
+ return [
190
+ {
191
+ ...build,
192
+ target: {
193
+ kind: "attachment",
194
+ attachment: kind.attachments.find((attachment) => attachment.instrument === instrument.id).name,
195
+ },
196
+ name: action.publicAction,
197
+ title: action.summary,
198
+ instrument: instrument.id,
199
+ action: name,
200
+ approvalRequirements: action.requires.flatMap((rule) => {
201
+ if (rule.kind !== "approval")
202
+ return [];
203
+ const party = document.parties[rule.party];
204
+ if (party?.kind !== "staff" || !party.role)
205
+ throw new Error(`Approval party ${rule.party} has no staff authority`);
206
+ return [
207
+ {
208
+ target: rule.target ?? "self",
209
+ action: rule.action ?? name,
210
+ party: rule.party,
211
+ role: party.role,
212
+ decision: rule.decision,
213
+ protectedRequest: rule.protectedRequest ?? "self",
214
+ differentFromInitiator: rule.differentFromInitiator === true,
215
+ },
216
+ ];
217
+ }),
218
+ requirements: mergedReqs.map((requirement) => ({
219
+ ...requirement.field,
220
+ name: requirement.objectField ?? requirement.field.name,
221
+ })),
222
+ ...(creationRequirements.length > 0
223
+ ? { creationRequirements }
224
+ : {}),
225
+ ...(creationRequirements.length > 0
226
+ ? { creationOnlyNames }
227
+ : {}),
228
+ fieldsSchema: z.toJSONSchema(z.strictObject(Object.fromEntries(mergedReqs.map((requirement) => [
229
+ requirement.objectField ?? requirement.field.name,
230
+ udlFieldValueSchema(requirement.field).optional(),
231
+ ]))), { io: "input" }),
232
+ inputSchema: z.toJSONSchema(z.strictObject(Object.fromEntries(action.input.map((field) => [
233
+ field.name,
234
+ field.optional
235
+ ? udlFieldValueSchema(field).optional()
236
+ : udlFieldValueSchema(field),
237
+ ]))), { io: "input" }),
238
+ availability: unbound
239
+ ? {
240
+ status: "unavailable",
241
+ code: "subject_adapter_unbound",
242
+ message: `Adapter declaration ${unbound.binding} is unavailable`,
243
+ }
244
+ : { status: "available" },
245
+ },
246
+ ];
247
+ });
248
+ }),
249
+ })),
250
+ };
251
+ }
252
+ /** Object-specific values determine missing fields; global discovery cannot. */
253
+ export function objectActionState(action, fields, options) {
254
+ const attached = typeof options === "boolean" ? options : (options?.attached ?? false);
255
+ const creationFilter = new Set(action.creationOnlyNames ?? []);
256
+ return {
257
+ ...action,
258
+ requiredNow: action.requirements
259
+ .filter((field) => {
260
+ const value = fields[field.name];
261
+ const optional = field.optional || (attached && creationFilter.has(field.name));
262
+ return (!(optional && value === undefined) &&
263
+ !udlFieldValueSchema(field).safeParse(value).success);
264
+ })
265
+ .map((field) => field.name),
266
+ };
267
+ }
268
+ /** Check merged metadata before dispatch. Runtime guards add their active child requirements. */
269
+ export function validateObjectActionSubject(action, storedFields, submittedFields, options) {
270
+ const origin = `${action.instrument}.${action.action}.subject`;
271
+ const issues = [];
272
+ if (action.availability.status === "unavailable" &&
273
+ action.availability.code === "subject_adapter_unbound") {
274
+ issues.push({
275
+ code: "subject_adapter_unbound",
276
+ action: action.name,
277
+ origin,
278
+ message: action.availability.message,
279
+ });
280
+ }
281
+ const admitted = new Set(action.requirements.map((field) => field.name));
282
+ for (const field of Object.keys(submittedFields)) {
283
+ if (!admitted.has(field))
284
+ issues.push({
285
+ code: "subject_field_unknown",
286
+ action: action.name,
287
+ field,
288
+ origin,
289
+ message: `${field} is not admitted by ${action.name}`,
290
+ });
291
+ }
292
+ for (const field of objectActionState(action, {
293
+ ...storedFields,
294
+ ...submittedFields,
295
+ }, options).requiredNow) {
296
+ issues.push({
297
+ code: "subject_requirement_missing",
298
+ action: action.name,
299
+ field,
300
+ origin: `${origin}.${field}`,
301
+ message: `${action.name} requires a valid ${field}`,
302
+ });
303
+ }
304
+ return issues;
305
+ }
306
+ //# sourceMappingURL=object-contract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"object-contract.js","sourceRoot":"","sources":["../src/object-contract.ts"],"names":[],"mappings":"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"}