openxiangda-contracts 2.9.0 → 2.11.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,13 @@
1
+ import type { NativeEventActionPlan } from '../native.js';
2
+ import type { EventSubscriptionPayload } from '../types.js';
3
+ export declare class NativeEventActionContractError extends Error {
4
+ readonly pointer: string;
5
+ readonly code = "NATIVE_EVENT_ACTION_INVALID";
6
+ constructor(pointer: string, message: string);
7
+ }
8
+ /** The shared compiler owns action authority and capture dependencies. */
9
+ export declare function compileNativeEventAction(subscription: Record<string, any>, resources: readonly Record<string, any>[], pointer?: string): {
10
+ execution: NativeEventActionPlan;
11
+ payload: EventSubscriptionPayload;
12
+ } | undefined;
13
+ //# sourceMappingURL=event-action.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-action.d.ts","sourceRoot":"","sources":["../../src/native-compiler/event-action.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAE5D,qBAAa,8BAA+B,SAAQ,KAAK;IAE3C,QAAQ,CAAC,OAAO,EAAE,MAAM;IADpC,QAAQ,CAAC,IAAI,iCAAiC;gBACzB,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CACtD;AAED,0EAA0E;AAC1E,wBAAgB,wBAAwB,CACtC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACjC,SAAS,EAAE,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,EACzC,OAAO,SAA0B,GAChC;IAAE,SAAS,EAAE,qBAAqB,CAAC;IAAC,OAAO,EAAE,wBAAwB,CAAA;CAAE,GAAG,SAAS,CAuFrF"}
@@ -0,0 +1,119 @@
1
+ import { sha256Digest } from '../canonical.js';
2
+ export class NativeEventActionContractError extends Error {
3
+ pointer;
4
+ code = 'NATIVE_EVENT_ACTION_INVALID';
5
+ constructor(pointer, message) {
6
+ super(message);
7
+ this.pointer = pointer;
8
+ }
9
+ }
10
+ /** The shared compiler owns action authority and capture dependencies. */
11
+ export function compileNativeEventAction(subscription, resources, pointer = '/events/subscriptions') {
12
+ if (subscription.execution === undefined)
13
+ return;
14
+ const fail = (path, message) => {
15
+ throw new NativeEventActionContractError(`${pointer}${path}`, message);
16
+ };
17
+ const object = (value, path, keys) => {
18
+ if (!value || typeof value !== 'object' || Array.isArray(value) ||
19
+ Object.keys(value).some(key => !keys.includes(key)))
20
+ fail(path, 'Invalid action object or unsupported property');
21
+ return value;
22
+ };
23
+ const execution = object(subscription.execution, '/execution', ['kind', 'version', 'operations']);
24
+ if (execution.kind !== 'native-data' || execution.version !== 1)
25
+ fail('/execution', 'Expected native-data version 1');
26
+ if (subscription.platformAccess)
27
+ fail('/platformAccess', 'Native actions do not use application runtime capabilities');
28
+ if (!Array.isArray(subscription.eventTypes) || !subscription.eventTypes.length || subscription.eventTypes.some((type) => !/^openxiangda\.data\.record\.(created|updated|deleted)\.v2$/.test(type)))
29
+ fail('/eventTypes', 'Native data actions require declared data events');
30
+ const sourceCodes = subscription.filter?.resourceCodes;
31
+ if (!Array.isArray(sourceCodes) || !sourceCodes.length || sourceCodes.length > 20)
32
+ fail('/filter/resourceCodes', 'Native actions require explicit source resources');
33
+ const byCode = new Map(resources.map(resource => [resource.code, resource]));
34
+ const sources = sourceCodes.map((code) => {
35
+ const resource = byCode.get(code);
36
+ if (!resource)
37
+ fail('/filter/resourceCodes', 'Unknown source resource');
38
+ return new Set((resource.schema?.fields || []).map((field) => field.code));
39
+ });
40
+ const fields = new Set(subscription.payload?.fields || []);
41
+ let includeChanges = subscription.payload?.includeChanges === true;
42
+ const binding = (raw, path) => {
43
+ const value = object(raw, path, ['source', 'path', 'value']);
44
+ if (value.source === 'literal') {
45
+ if (!Object.hasOwn(value, 'value') || Object.hasOwn(value, 'path'))
46
+ fail(path, 'Literal binding requires only value');
47
+ let serialized;
48
+ try {
49
+ serialized = JSON.stringify(value.value);
50
+ }
51
+ catch {
52
+ fail(path, 'Literal must be JSON');
53
+ }
54
+ if (serialized === undefined || Buffer.byteLength(serialized) > 65536)
55
+ fail(path, 'Literal is too large or not JSON');
56
+ return { source: 'literal', value: JSON.parse(serialized) };
57
+ }
58
+ if (value.source !== 'event' || typeof value.path !== 'string' || Object.hasOwn(value, 'value'))
59
+ fail(path, 'Expected a literal or event binding');
60
+ const parts = value.path.split('.');
61
+ if (parts.length > 8 || parts.some((part) => !/^[A-Za-z0-9_-]+$/.test(part) ||
62
+ ['__proto__', 'prototype', 'constructor'].includes(part)))
63
+ fail(path, 'Invalid event path');
64
+ const projection = /^data\.projection\.([A-Za-z][A-Za-z0-9_]{0,62})$/.exec(value.path);
65
+ const change = /^data\.changes\.([A-Za-z][A-Za-z0-9_]{0,62})\.(before|after)$/.exec(value.path);
66
+ if (projection || change) {
67
+ const field = (projection || change)[1];
68
+ if (sources.some((source) => !source.has(field)))
69
+ fail(path, 'Source field must exist on every filtered resource');
70
+ fields.add(field);
71
+ if (change)
72
+ includeChanges = true;
73
+ }
74
+ else if (!['id', 'time', 'type', 'subject', 'data.recordId', 'data.revision', 'data.operation', 'data.resourceCode'].includes(value.path)) {
75
+ fail(path, 'Event path is not part of the data event contract');
76
+ }
77
+ return { source: 'event', path: value.path };
78
+ };
79
+ if (!Array.isArray(execution.operations) || execution.operations.length < 1 || execution.operations.length > 16)
80
+ fail('/execution/operations', 'Expected 1 to 16 operations');
81
+ const resourceDigests = {};
82
+ const operations = execution.operations.map((raw, index) => {
83
+ const path = `/execution/operations/${index}`;
84
+ const action = object(raw, path, ['operation', 'resourceCode', 'data', 'id', 'expectedRevision']);
85
+ if (!['create', 'update', 'delete'].includes(action.operation))
86
+ fail(path, 'Unsupported Native operation');
87
+ const resource = byCode.get(action.resourceCode);
88
+ if (!resource)
89
+ fail(path, 'Unknown action target resource');
90
+ const resourceFields = new Map((resource.schema?.fields || []).map((field) => [field.code, field]));
91
+ const data = action.data === undefined ? {} : object(action.data, `${path}/data`, [...resourceFields.keys()]);
92
+ if (Object.keys(data).length > 32)
93
+ fail(path, 'Maximum 32 mapped fields per operation');
94
+ if (action.operation === 'create' && (action.id !== undefined || action.expectedRevision !== undefined))
95
+ fail(path, 'Create does not accept id or expectedRevision');
96
+ if (action.operation === 'delete' && action.data !== undefined)
97
+ fail(path, 'Delete does not accept data');
98
+ if (Object.keys(data).some(field => resourceFields.get(field)?.type === 'serial-number'))
99
+ fail(path, 'Generated fields cannot be assigned');
100
+ resourceDigests[action.resourceCode] = sha256Digest(resource);
101
+ return {
102
+ operation: action.operation,
103
+ resourceCode: action.resourceCode,
104
+ ...(action.operation === 'create' ? {} : {
105
+ id: binding(action.id, `${path}/id`), expectedRevision: binding(action.expectedRevision, `${path}/expectedRevision`),
106
+ }),
107
+ ...(action.operation === 'delete' ? {} : {
108
+ data: Object.fromEntries(Object.entries(data).map(([field, value]) => [field, binding(value, `${path}/data/${field}`)])),
109
+ }),
110
+ };
111
+ });
112
+ if (fields.size > 32 || [...fields].some(field => sources.some((source) => !source.has(field))))
113
+ fail('/payload/fields', 'Payload must contain at most 32 declared source fields');
114
+ const plan = { kind: 'native-data', version: 1, operations, resourceDigests };
115
+ if (Buffer.byteLength(JSON.stringify(plan)) > 65536)
116
+ fail('/execution', 'Action plan exceeds 64 KiB');
117
+ return { execution: { ...plan, digest: sha256Digest(plan) }, payload: { includeChanges, fields: [...fields].sort() } };
118
+ }
119
+ //# sourceMappingURL=event-action.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-action.js","sourceRoot":"","sources":["../../src/native-compiler/event-action.ts"],"names":[],"mappings":"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"}