openxiangda-contracts 2.10.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.
- package/dist/native-compiler/compiler.d.ts.map +1 -1
- package/dist/native-compiler/compiler.js +8 -2
- package/dist/native-compiler/compiler.js.map +1 -1
- package/dist/native-compiler/event-action.d.ts +13 -0
- package/dist/native-compiler/event-action.d.ts.map +1 -0
- package/dist/native-compiler/event-action.js +119 -0
- package/dist/native-compiler/event-action.js.map +1 -0
- package/dist/native-compiler/index.cjs +2 -2
- package/dist/native-compiler/index.d.ts +1 -0
- package/dist/native-compiler/index.d.ts.map +1 -1
- package/dist/native-compiler/index.js +2 -2
- package/dist/native-version.d.ts +1 -0
- package/dist/native-version.d.ts.map +1 -1
- package/dist/native-version.js +1 -0
- package/dist/native-version.js.map +1 -1
- package/dist/native.d.ts +33 -0
- package/dist/native.d.ts.map +1 -1
- package/dist/native.js.map +1 -1
- package/dist/schemas.d.ts +114 -0
- package/dist/schemas.d.ts.map +1 -1
- package/dist/schemas.js +14 -0
- package/dist/schemas.js.map +1 -1
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import{createHash as kn}from"node:crypto";function Un(e){if(!e||typeof e!="object")return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function Ze(e,t){if(e===null)return"null";if(typeof e=="string"||typeof e=="boolean")return JSON.stringify(e);if(typeof e=="number"){if(!Number.isFinite(e))throw new TypeError(`JSON number must be finite: ${t}`);return JSON.stringify(e)}if(Array.isArray(e))return`[${e.map((o,i)=>Ze(o,`${t}[${i}]`)).join(",")}]`;if(Un(e))return`{${Object.keys(e).filter(i=>e[i]!==void 0).sort((i,r)=>i===r?0:i<r?-1:1).map(i=>`${JSON.stringify(i)}:${Ze(e[i],`${t}.${i}`)}`).join(",")}}`;let n=e instanceof Date?"Date":e?.constructor?.name||typeof e;throw new TypeError(`Value is not JSON serializable: ${t} (${n})`)}function W(e){return Ze(e,"$")}function Z(e){return kn("sha256").update(W(e)).digest("hex")}var wt=/^[A-Za-z][A-Za-z0-9_]{0,62}$/,tt=/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/,Mn=["text.short","text.long","text.rich","number.integer","number.decimal","boolean","date","time","datetime","date-range","datetime-range","option.single","option.multiple","cascade.single","cascade.multiple","user.single","user.multiple","department.single","department.multiple","resource-ref.single","resource-ref.multiple","image","signature","address","location","uuid","json","file","serial-number","subtable"],xn=new Set(Mn),Pt=new Set(["option.multiple","cascade.multiple","user.multiple","department.multiple","resource-ref.multiple","file","image","subtable"]),Rt=new Set(["option.single","option.multiple","cascade.single","cascade.multiple"]),St=new Set(["resource-ref.single","resource-ref.multiple"]),jn=[{code:"id",type:"uuid",nullable:!1},{code:"revision",type:"number.integer",nullable:!1},{code:"created_by",type:"text.short",nullable:!1},{code:"updated_by",type:"text.short",nullable:!1},{code:"created_at",type:"datetime",nullable:!1},{code:"updated_at",type:"datetime",nullable:!1}],Xi=new Map(jn.map(e=>[e.code,e])),ce=class extends Error{constructor(n,o){super(n);this.code=n;this.pointer=o;this.name="NativeDataFieldContractV2Error"}code;pointer};function Ue(e){return Pt.has(e)}function Me(e,t={}){return e.type!=="serial-number"&&t.system!==!0&&e.nullable===!1&&(!Ue(e.type)||t.requiredHint===!0)}function nt(e,t,n=500){Array.isArray(e)||O("NATIVE_ARRAY_REQUIRED",t),e.length===0&&O("NATIVE_DATA_FIELDS_REQUIRED",t),e.length>n&&O("NATIVE_ARRAY_LIMIT_EXCEEDED",t);let o=new Set;return e.map((i,r)=>{let a=`${t}/${r}`,s=X(i,a);te(s,["code","type","nullable","indexed","options","source","maxLength","precision","scale","min","max","rangeBoundary","timePrecision","file","serial","subtable"],a);let d=ne(s.code,`${a}/code`,63);wt.test(d)||O("NATIVE_FIELD_CODE_INVALID",`${a}/code`),o.has(d)&&O("NATIVE_DATA_FIELD_DUPLICATE",`${a}/code`),o.add(d);let _=ne(s.type,`${a}/type`,32);xn.has(_)||O("NATIVE_DATA_FIELD_TYPE_INVALID",`${a}/type`);let E=_,u=Vt(s.nullable,`${a}/nullable`),c=Vt(s.indexed,`${a}/indexed`);u===!0&&Pt.has(E)&&O("NATIVE_DATA_MULTI_FIELD_NULLABLE_INVALID",`${a}/nullable`);let p=Jn(s.options,E,a),f=Gn(s.source,E,a),A=Yn(s,E,a),m=Wn(s.rangeBoundary,E,a),N=Hn(s.file,E,a),g=Kn(s.serial,E,a),$=qn(s.subtable,E,a);return{code:d,type:E,...u===void 0?{}:{nullable:u},...c===void 0?{}:{indexed:c},...p?{options:p}:{},...f?{source:f}:{},...A,...m?{rangeBoundary:m}:{},...N?{file:N}:{},...g?{serial:g}:{},...$?{subtable:$}:{}}})}function Wn(e,t,n){let o=`${n}/rangeBoundary`;if(!(t==="date-range"||t==="datetime-range")){e!==void 0&&O("NATIVE_DATA_FIELD_RANGE_BOUNDARY_TYPE_INVALID",o);return}return e!=="closed"&&e!=="half-open"&&O("NATIVE_DATA_FIELD_RANGE_BOUNDARY_REQUIRED",o),e}function Ft(e,t){Array.isArray(e)||O("NATIVE_ARRAY_REQUIRED",t);let n=new Map;e.forEach((o,i)=>{let r=`${t}/${i}`,a=X(o,r),s=ne(a.code,`${r}/code`,64);(!tt.test(s)||n.has(s))&&O("NATIVE_RESOURCE_CODE_INVALID",`${r}/code`);let d=X(a.schema,`${r}/schema`);n.set(s,{pointer:r,fields:nt(d.fields,`${r}/schema/fields`)})});for(let[o,i]of n){let r=new Map(i.fields.map(s=>[s.code,s]));i.fields.filter(s=>s.type==="subtable").reduce((s,d)=>s+(d.subtable?.maxRows??20),0)>49&&O("NATIVE_DATA_FIELD_SUBTABLE_AGGREGATE_MAX_ROWS_EXCEEDED",`${i.pointer}/schema/fields`),i.fields.forEach((s,d)=>{let _=`${i.pointer}/schema/fields/${d}`;if(s.source&&Bn(s.source,r,n,`${_}/source`),s.subtable){let E=n.get(s.subtable.resourceCode);(!E||s.subtable.resourceCode===o)&&O("NATIVE_DATA_FIELD_SUBTABLE_TARGET_MISSING",`${_}/subtable/resourceCode`);let u=E.fields.find(p=>p.code===s.subtable?.foreignKey);(!u||u.type!=="uuid"||u.nullable!==!1)&&O("NATIVE_DATA_FIELD_SUBTABLE_FOREIGN_KEY_INVALID",`${_}/subtable/foreignKey`);let c=E.fields.find(p=>p.code===s.subtable?.orderField);(!c||c.type!=="number.integer"||c.nullable!==!1)&&O("NATIVE_DATA_FIELD_SUBTABLE_ORDER_FIELD_INVALID",`${_}/subtable/orderField`)}})}}function Lt(e,t,n){if(e===void 0)return[];(!Array.isArray(e)||e.length>20)&&O("NATIVE_DATA_RESOURCE_INVARIANTS_INVALID",n);let o=new Map(t.map(r=>[r.code,r])),i=new Set;return e.map((r,a)=>{let s=`${n}/${a}`,d=X(r,s);te(d,["code","message","expression"],s);let _=ne(d.code,`${s}/code`,128);(!/^[a-z][a-z0-9]*(?:[._-][a-z0-9]+)*$/.test(_)||i.has(_))&&O("NATIVE_DATA_RESOURCE_INVARIANT_CODE_INVALID",`${s}/code`),i.add(_);let E=ke(d.message,`${s}/message`,500);E!==void 0&&E.length===0&&O("NATIVE_DATA_RESOURCE_INVARIANT_MESSAGE_INVALID",`${s}/message`);let u=X(d.expression,`${s}/expression`);te(u,["leftField","operator","rightField"],`${s}/expression`);let c=de(u.leftField,`${s}/expression/leftField`),p=de(u.rightField,`${s}/expression/rightField`),f=o.get(c),A=o.get(p);(!f||!A)&&O("NATIVE_DATA_RESOURCE_INVARIANT_FIELD_UNKNOWN",`${s}/expression`),f.type===A.type||["number.integer","number.decimal"].includes(f.type)&&["number.integer","number.decimal"].includes(A.type)||O("NATIVE_DATA_RESOURCE_INVARIANT_FIELD_TYPES_INVALID",`${s}/expression`);let N=String(u.operator);return["eq","neq","gt","gte","lt","lte"].includes(N)||O("NATIVE_DATA_RESOURCE_INVARIANT_OPERATOR_INVALID",`${s}/expression/operator`),!["eq","neq"].includes(N)&&!["number.integer","number.decimal","date","time","datetime","text.short","text.long","text.rich","serial-number","uuid"].includes(f.type)&&O("NATIVE_DATA_RESOURCE_INVARIANT_FIELD_TYPES_INVALID",`${s}/expression`),{code:_,...E===void 0?{}:{message:E},expression:{leftField:c,operator:N,rightField:p}}})}function Bn(e,t,n,o){let i=n.get(e.resourceCode);i||O("NATIVE_DATA_FIELD_SOURCE_TARGET_MISSING",`${o}/resourceCode`);let r=new Map(i.fields.map(s=>[s.code,s])),a=r.get(e.labelField);(!a||!["text.short","text.long"].includes(a.type))&&O("NATIVE_DATA_FIELD_SOURCE_LABEL_INVALID",`${o}/labelField`);for(let s of["searchFields","descriptionFields","snapshotFields"])for(let d of e[s]||[])r.has(d)||O("NATIVE_DATA_FIELD_SOURCE_FIELD_MISSING",`${o}/${s}`);for(let[s,d]of(e.filters||[]).entries())r.has(d.field)||O("NATIVE_DATA_FIELD_SOURCE_FILTER_FIELD_MISSING",`${o}/filters/${s}/field`),"binding"in d&&!t.has(d.binding.field)&&O("NATIVE_DATA_FIELD_SOURCE_BINDING_FIELD_MISSING",`${o}/filters/${s}/binding/field`)}function Jn(e,t,n){let o=`${n}/options`;if(e===void 0){Rt.has(t)&&O("NATIVE_DATA_FIELD_OPTIONS_REQUIRED",o);return}(!Rt.has(t)||!Array.isArray(e))&&O("NATIVE_DATA_FIELD_OPTIONS_TYPE_INVALID",o),(e.length<1||e.length>100)&&O("NATIVE_DATA_FIELD_OPTIONS_INVALID",o);let i=0,r=(a,s,d)=>{d>5&&O("NATIVE_DATA_FIELD_OPTIONS_DEPTH_EXCEEDED",s);let _=new Set;return a.map((E,u)=>{i+=1,i>1e3&&O("NATIVE_DATA_FIELD_OPTIONS_COUNT_EXCEEDED",o);let c=`${s}/${u}`,p=X(E,c);te(p,["label","value","description","color","children"],c);let f=ne(p.label,`${c}/label`,500),A=ne(p.value,`${c}/value`,500);_.has(A)&&O("NATIVE_DATA_FIELD_OPTION_VALUE_DUPLICATE",`${c}/value`),_.add(A);let m=ke(p.description,`${c}/description`,2e3),N=ke(p.color,`${c}/color`,64),g;return p.children!==void 0&&((!t.startsWith("cascade.")||!Array.isArray(p.children))&&O("NATIVE_DATA_FIELD_OPTION_CHILDREN_INVALID",`${c}/children`),(p.children.length<1||p.children.length>100)&&O("NATIVE_DATA_FIELD_OPTION_CHILDREN_INVALID",`${c}/children`),g=r(p.children,`${c}/children`,d+1)),{label:f,value:A,...m===void 0?{}:{description:m},...N===void 0?{}:{color:N},...g?{children:g}:{}}})};return r(e,o,1)}function Gn(e,t,n){let o=`${n}/source`;if(e===void 0){St.has(t)&&O("NATIVE_DATA_FIELD_SOURCE_REQUIRED",o);return}St.has(t)||O("NATIVE_DATA_FIELD_SOURCE_TYPE_INVALID",o);let i=X(e,o);te(i,["kind","resourceCode","labelField","searchFields","descriptionFields","snapshotFields","filters","pageSize","loadMode"],o),i.kind!=="resource"&&O("NATIVE_DATA_FIELD_SOURCE_KIND_INVALID",`${o}/kind`);let r=ne(i.resourceCode,`${o}/resourceCode`,64);tt.test(r)||O("NATIVE_RESOURCE_CODE_INVALID",`${o}/resourceCode`);let a=de(i.labelField,`${o}/labelField`),s=et(i.searchFields,`${o}/searchFields`,10),d=et(i.descriptionFields,`${o}/descriptionFields`,10),_=et(i.snapshotFields,`${o}/snapshotFields`,50),E=Ne(i.pageSize,`${o}/pageSize`,1,100),u;i.loadMode!==void 0&&(["search","all"].includes(String(i.loadMode))||O("NATIVE_DATA_FIELD_SOURCE_LOAD_MODE_INVALID",`${o}/loadMode`),u=i.loadMode);let c=zn(i.filters,`${o}/filters`);return{kind:"resource",resourceCode:r,labelField:a,...s?{searchFields:s}:{},...d?{descriptionFields:d}:{},..._?{snapshotFields:_}:{},...c?{filters:c}:{},...E===void 0?{}:{pageSize:E},...u?{loadMode:u}:{}}}function zn(e,t){if(e!==void 0)return(!Array.isArray(e)||e.length>20)&&O("NATIVE_DATA_FIELD_SOURCE_FILTERS_INVALID",t),e.map((n,o)=>{let i=`${t}/${o}`,r=X(n,i),a=Object.prototype.hasOwnProperty.call(r,"value"),s=Object.prototype.hasOwnProperty.call(r,"binding");te(r,a?["field","operator","value"]:["field","operator","binding"],i),a===s&&O("NATIVE_DATA_FIELD_SOURCE_FILTER_VALUE_INVALID",i);let d=de(r.field,`${i}/field`);["eq","in"].includes(String(r.operator))||O("NATIVE_DATA_FIELD_SOURCE_FILTER_OPERATOR_INVALID",`${i}/operator`);let _=r.operator;if(a)return{field:d,operator:_,value:r.value};let E=X(r.binding,`${i}/binding`);return te(E,["kind","field"],`${i}/binding`),E.kind!=="field"&&O("NATIVE_DATA_FIELD_SOURCE_BINDING_KIND_INVALID",`${i}/binding/kind`),{field:d,operator:_,binding:{kind:"field",field:de(E.field,`${i}/binding/field`)}}})}function Yn(e,t,n){let o={};if(e.maxLength!==void 0&&(["text.short","text.long","text.rich"].includes(t)||O("NATIVE_DATA_FIELD_MAX_LENGTH_TYPE_INVALID",`${n}/maxLength`),o.maxLength=ve(e.maxLength,`${n}/maxLength`,1,1e6)),(e.precision!==void 0||e.scale!==void 0)&&((t!=="number.decimal"||e.precision===void 0)&&O("NATIVE_DATA_FIELD_DECIMAL_CONFIG_INVALID",n),o.precision=ve(e.precision,`${n}/precision`,1,1e3),o.scale=e.scale===void 0?0:ve(e.scale,`${n}/scale`,0,o.precision)),e.min!==void 0||e.max!==void 0){["number.integer","number.decimal"].includes(t)||O("NATIVE_DATA_FIELD_NUMERIC_BOUNDS_TYPE_INVALID",n);let i=yt(e.min,`${n}/min`),r=yt(e.max,`${n}/max`);t==="number.integer"&&[i,r].some(a=>a!==void 0&&!Number.isSafeInteger(a))&&O("NATIVE_DATA_FIELD_NUMERIC_BOUNDS_INVALID",n),i!==void 0&&r!==void 0&&i>r&&O("NATIVE_DATA_FIELD_NUMERIC_BOUNDS_INVALID",n),i!==void 0&&(o.min=i),r!==void 0&&(o.max=r)}return e.timePrecision!==void 0&&((t!=="time"||!["minute","second"].includes(e.timePrecision))&&O("NATIVE_DATA_FIELD_TIME_PRECISION_INVALID",`${n}/timePrecision`),o.timePrecision=e.timePrecision),o}function Hn(e,t,n){if(e===void 0)return;let o=`${n}/file`;["file","image","signature"].includes(t)||O("NATIVE_DATA_FIELD_FILE_TYPE_INVALID",o);let i=X(e,o);te(i,["maxCount","maxSizeMb","accept"],o);let r=Ne(i.maxCount,`${o}/maxCount`,1,100);t==="signature"&&r!==void 0&&r!==1&&O("NATIVE_DATA_FIELD_SIGNATURE_COUNT_INVALID",`${o}/maxCount`);let a=Ne(i.maxSizeMb,`${o}/maxSizeMb`,1,1024),s;return i.accept!==void 0&&((!Array.isArray(i.accept)||i.accept.length>50)&&O("NATIVE_DATA_FIELD_FILE_ACCEPT_INVALID",`${o}/accept`),s=i.accept.map((d,_)=>ne(d,`${o}/accept/${_}`,255)),new Set(s).size!==s.length&&O("NATIVE_DATA_FIELD_FILE_ACCEPT_INVALID",`${o}/accept`)),{...r===void 0?{}:{maxCount:r},...a===void 0?{}:{maxSizeMb:a},...s===void 0?{}:{accept:s}}}function Kn(e,t,n){let o=`${n}/serial`;if(e===void 0){t==="serial-number"&&O("NATIVE_DATA_FIELD_SERIAL_REQUIRED",o);return}t!=="serial-number"&&O("NATIVE_DATA_FIELD_SERIAL_TYPE_INVALID",o);let i=X(e,o);te(i,["prefix","digits","start"],o);let r=ke(i.prefix,`${o}/prefix`,64),a=Ne(i.digits,`${o}/digits`,1,32),s=Ne(i.start,`${o}/start`,0,Number.MAX_SAFE_INTEGER);return{...r===void 0?{}:{prefix:r},...a===void 0?{}:{digits:a},...s===void 0?{}:{start:s}}}function qn(e,t,n){let o=`${n}/subtable`;if(e===void 0){t==="subtable"&&O("NATIVE_DATA_FIELD_SUBTABLE_REQUIRED",o);return}t!=="subtable"&&O("NATIVE_DATA_FIELD_SUBTABLE_TYPE_INVALID",o);let i=X(e,o);te(i,["resourceCode","foreignKey","orderField","maxRows"],o);let r=ne(i.resourceCode,`${o}/resourceCode`,64);tt.test(r)||O("NATIVE_RESOURCE_CODE_INVALID",`${o}/resourceCode`);let a=de(i.foreignKey,`${o}/foreignKey`),s=de(i.orderField,`${o}/orderField`);s===a&&O("NATIVE_DATA_FIELD_SUBTABLE_ORDER_FIELD_INVALID",`${o}/orderField`);let d=Ne(i.maxRows,`${o}/maxRows`,1,49);return{resourceCode:r,foreignKey:a,orderField:s,...d===void 0?{}:{maxRows:d}}}function et(e,t,n){if(e===void 0)return;(!Array.isArray(e)||e.length>n)&&O("NATIVE_DATA_FIELD_SOURCE_FIELDS_INVALID",t);let o=e.map((i,r)=>de(i,`${t}/${r}`));return new Set(o).size!==o.length&&O("NATIVE_DATA_FIELD_SOURCE_FIELDS_INVALID",t),o}function de(e,t){let n=ne(e,t,63);return wt.test(n)||O("NATIVE_FIELD_CODE_INVALID",t),n}function X(e,t){return(!e||typeof e!="object"||Array.isArray(e))&&O("NATIVE_OBJECT_REQUIRED",t),e}function te(e,t,n){let o=new Set(t);for(let i of Object.keys(e))o.has(i)||O("NATIVE_PROPERTY_UNKNOWN",`${n}/${i}`)}function ne(e,t,n){return(typeof e!="string"||e.length===0||e.length>n)&&O("NATIVE_STRING_INVALID",t),e}function ke(e,t,n){if(e!==void 0)return(typeof e!="string"||e.length>n)&&O("NATIVE_STRING_INVALID",t),e}function Vt(e,t){if(e!==void 0)return typeof e!="boolean"&&O("NATIVE_BOOLEAN_REQUIRED",t),e}function Ne(e,t,n,o){if(e!==void 0)return ve(e,t,n,o)}function yt(e,t){if(e!==void 0)return(typeof e!="number"||!Number.isFinite(e))&&O("NATIVE_NUMBER_REQUIRED",t),e}function ve(e,t,n,o){return(!Number.isSafeInteger(e)||Number(e)<n||Number(e)>o)&&O("NATIVE_INTEGER_OUT_OF_RANGE",t),Number(e)}function O(e,t){throw new ce(e,t)}var Xn=["eq","neq","gt","gte","lt","lte","contains","startsWith","endsWith","in","between","has","hasAny","hasAll","overlaps","containedBy","jsonContains","isEmpty","isNotEmpty"],Qn=new Set(Xn);function Zi(e){return Qn.has(String(e))}var ot=["eq","neq","contains","startsWith","endsWith","in","isEmpty","isNotEmpty"],$e=["eq","neq","gt","gte","lt","lte","between","in","isEmpty"],Zn=["eq","neq","in","isEmpty"],xe=["eq","neq","in","isEmpty","isNotEmpty"],Te=["has","hasAny","hasAll","isEmpty","isNotEmpty"],vt=["overlaps","contains","containedBy","isEmpty"],it=["jsonContains","isEmpty","isNotEmpty"],st=["isEmpty","isNotEmpty"],eo={"text.short":ot,"text.long":ot,"text.rich":ot,"number.integer":$e,"number.decimal":$e,boolean:Zn,date:$e,time:$e,datetime:$e,"date-range":vt,"datetime-range":vt,"option.single":xe,"option.multiple":Te,"cascade.single":Te,"cascade.multiple":Te,"user.single":xe,"user.multiple":Te,"department.single":xe,"department.multiple":Te,"resource-ref.single":xe,"resource-ref.multiple":Te,file:st,image:st,signature:st,address:it,location:it,uuid:["eq","neq","in","isEmpty"],json:it,"serial-number":["eq","neq","in","contains","startsWith"],subtable:[]},to=new Set(["text.short","text.long","text.rich","option.single","user.single","department.single","resource-ref.single","serial-number"]),no=new Set(["option.multiple","cascade.single","cascade.multiple","user.multiple","department.multiple","resource-ref.multiple","file","image","signature","address","location","json","subtable"]);function Ut(e){return eo[e]}function es(e,t){return Ut(e).includes(t)}function rt(e){return to.has(e)}function at(e){return!no.has(e)}function Mt(e){return Ut(e).length>0}var kt=new Set(["number.integer","number.decimal"]),xt=new Set(["text.short","text.long","number.integer","number.decimal","date","time","datetime","serial-number"]),oo=new Set([...xt,"boolean","uuid"]),io=new Set(["option.single","user.single","department.single","resource-ref.single"]);function ts(e,t){return t==="sum"||t==="avg"?kt.has(e)?{valueExpression:"column",numericResult:!0}:null:t==="min"||t==="max"?xt.has(e)?{valueExpression:"column",numericResult:kt.has(e)}:null:io.has(e)?{valueExpression:"snapshot-value",numericResult:!0}:oo.has(e)?{valueExpression:"column",numericResult:!0}:null}var so=500,le={surface:["mutationOwner","generated","fields","list","form","detail","mobile","views"],generated:["list","detail","create","update","delete"],field:["label","type","widget","section","requiredHint","system","hidden","readCapabilities","createCapabilities","updateCapabilities","maxLength","precision","scale","min","max","rangeBoundary","maxCount","maxSizeMb","accept","options","list","searchable","sortable","source","timePrecision","serial","subtable"],list:["actions","fieldOrder","defaultPageSize","searchableFields","filterFields","defaultSort"],defaultSort:["field","order"],layout:["layout","fieldOrder"],mobile:["enabled"]},ro={"text.short":["text","email","phone"],"text.long":["textarea"],"text.rich":["rich-text"],"number.integer":["number","rating"],"number.decimal":["number","money","percent"],boolean:["switch"],date:["date"],time:["time"],datetime:["datetime"],"date-range":["date-range"],"datetime-range":["datetime-range"],"option.single":["select","radio"],"option.multiple":["multi-select","checkbox"],"cascade.single":["cascade"],"cascade.multiple":["cascade"],"user.single":["directory-user"],"user.multiple":["directory-user"],"department.single":["directory-department","scope"],"department.multiple":["directory-department","scope"],"resource-ref.single":["select","radio","resource"],"resource-ref.multiple":["multi-select","checkbox","resource"],file:["attachment"],image:["image"],signature:["signature"],address:["address"],location:["location"],uuid:["readonly"],json:["json"],"serial-number":["readonly"],subtable:["subtable"]};function lt(e,t,n){if(e===void 0)return;let o=Y(e,n);oe(o,le.surface,n);let i=o.mutationOwner===void 0?"native":ie(o.mutationOwner,`${n}/mutationOwner`,16);["native","action","readonly","workflow"].includes(i)||w("NATIVE_DATA_SURFACE_MUTATION_OWNER_INVALID",`${n}/mutationOwner`);let r=o.generated===void 0?{}:Y(o.generated,`${n}/generated`);oe(r,le.generated,`${n}/generated`);for(let d of le.generated)dt(r[d],`${n}/generated/${d}`);if(i!=="native")for(let d of["create","update","delete"])r[d]===!0&&w("NATIVE_DATA_SURFACE_MUTATION_OWNER_CONFLICT",`${n}/generated/${d}`);let a=new Map(t.map(d=>[d.code,d])),s=Y(o.fields,`${n}/fields`);for(let d of Object.keys(s))a.has(d)||w("NATIVE_DATA_SURFACE_FIELD_MISSING",`${n}/fields/${d}`);for(let d of t)Object.prototype.hasOwnProperty.call(s,d.code)||w("NATIVE_DATA_SURFACE_FIELD_REQUIRED",`${n}/fields/${d.code}`),co(s[d.code],d,`${n}/fields/${d.code}`);for(let d of["create","update"]){let _=r[d]??i==="native",E=t.some(u=>{let c=Y(s[u.code],`${n}/fields/${u.code}`);return Wt(u,c,d)});_&&!E&&w("NATIVE_DATA_SURFACE_WRITABLE_FIELDS_REQUIRED",`${n}/generated/${d}`)}if(lo(o.list,a,`${n}/list`),jt(o.form,a,`${n}/form`),jt(o.detail,a,`${n}/detail`),o.mobile!==void 0){let d=Y(o.mobile,`${n}/mobile`);oe(d,le.mobile,`${n}/mobile`),dt(d.enabled,`${n}/mobile/enabled`)}ao(o,t,n)}function ut(e,t){let n=e.views?.find(i=>i.code===t);n||w("NATIVE_DATA_VIEW_NOT_FOUND",`/surface/views/${t}`);let o=new Map((n.sections||[]).flatMap(i=>i.fields.map(r=>[r,i.title])));return{mutationOwner:e.mutationOwner||"native",generated:n.generated,list:n.list,form:n.form,detail:n.detail,mobile:n.mobile,fields:Object.fromEntries(Object.entries(e.fields).map(([i,r])=>{let a={...r};delete a.section;let s=o.get(i);return[i,{...a,...s?{section:s}:{},list:n.list.fieldOrder.includes(i)}]}))}}function ao(e,t,n){if(e.views===void 0)return;(!Array.isArray(e.views)||e.views.length>20)&&w("NATIVE_DATA_VIEWS_LIMIT_INVALID",`${n}/views`);let o=new Set;e.views.forEach((i,r)=>{let a=`${n}/views/${r}`,s=Y(i,a);oe(s,["code","name","generated","list","form","detail","mobile","sections"],a);let d=ie(s.code,`${a}/code`,64);(!/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/.test(d)||o.has(d))&&w("NATIVE_DATA_VIEW_CODE_INVALID",`${a}/code`),o.add(d),ie(s.name,`${a}/name`,255),Y(s.generated,`${a}/generated`),Y(s.mobile,`${a}/mobile`);for(let E of["list","detail","create","update","delete"])typeof s.generated[E]!="boolean"&&w("NATIVE_DATA_VIEW_OPERATION_INVALID",`${a}/generated/${E}`);typeof s.mobile.enabled!="boolean"&&w("NATIVE_DATA_VIEW_MOBILE_INVALID",`${a}/mobile/enabled`);for(let E of["list","form","detail"]){let u=Y(s[E],`${a}/${E}`),c=ge(u.fieldOrder,`${a}/${E}/fieldOrder`,500,!0);for(let p of c){let f=e.fields[p];(!f||(f.hidden??f.system)===!0)&&w("NATIVE_DATA_VIEW_FIELD_INVALID",`${a}/${E}/fieldOrder`)}}if(s.sections!==void 0){(!Array.isArray(s.sections)||s.sections.length>100)&&w("NATIVE_DATA_VIEW_SECTIONS_INVALID",`${a}/sections`);let E=new Set;s.sections.forEach((u,c)=>{let p=`${a}/sections/${c}`,f=Y(u,p);oe(f,["title","fields"],p),ie(f.title,`${p}/title`,255);for(let A of ge(f.fields,`${p}/fields`,100,!0)){let m=e.fields[A];(!m||(m.hidden??m.system)===!0||E.has(A))&&w("NATIVE_DATA_VIEW_FIELD_INVALID",`${p}/fields`),E.add(A)}})}let _=ut(e,d);if(lt(_,t,a),s.generated.create!==!1&&(e.mutationOwner||"native")==="native")for(let E of t)Me(E,e.fields[E.code])&&Wt(E,e.fields[E.code],"create")&&!s.form.fieldOrder.includes(E.code)&&w("NATIVE_DATA_VIEW_CREATE_REQUIRED_FIELD_MISSING",`${a}/form/fieldOrder`)})}function Wt(e,t,n){if(e.type==="serial-number"||t.system===!0)return!1;let o=t[`${n}Capabilities`];return Array.isArray(o)&&o.length>0}function co(e,t,n){let o=Y(e,n);oe(o,le.field,n),ie(o.label,`${n}/label`,500),o.type!==t.type&&w("NATIVE_DATA_SURFACE_FIELD_TYPE_MISMATCH",`${n}/type`);let i=ie(o.widget,`${n}/widget`,64);ro[t.type].includes(i)||w("NATIVE_DATA_SURFACE_WIDGET_INCOMPATIBLE",`${n}/widget`),_o(o.section,`${n}/section`,255);for(let r of["requiredHint","system","hidden","list","searchable","sortable"])dt(o[r],`${n}/${r}`);o.searchable===!0&&!rt(t.type)&&w("NATIVE_DATA_SURFACE_SEARCH_UNSUPPORTED",`${n}/searchable`),o.sortable===!0&&!at(t.type)&&w("NATIVE_DATA_SURFACE_SORT_UNSUPPORTED",`${n}/sortable`);for(let r of["readCapabilities","createCapabilities","updateCapabilities"])ge(o[r],`${n}/${r}`,100,!0);if(o.maxCount!==void 0&&(!Number.isSafeInteger(o.maxCount)||Number(o.maxCount)<1||Number(o.maxCount)>100)&&w("NATIVE_DATA_SURFACE_MAX_COUNT_INVALID",`${n}/maxCount`),o.maxSizeMb!==void 0&&(!Number.isSafeInteger(o.maxSizeMb)||Number(o.maxSizeMb)<1||Number(o.maxSizeMb)>1024)&&w("NATIVE_DATA_SURFACE_MAX_SIZE_INVALID",`${n}/maxSizeMb`),o.accept!==void 0){let r=Array.isArray(o.accept)?o.accept:[o.accept];ge(r,`${n}/accept`,50,!1)}for(let r of["maxLength","precision","scale","min","max","rangeBoundary","options","source","timePrecision","serial","subtable"])uo(o,t,r,n);fo(o,t,n)}function lo(e,t,n){if(e===void 0)return;let o=Y(e,n);if(oe(o,le.list,n),o.actions!==void 0){let i=Y(o.actions,`${n}/actions`);oe(i,["import","export"],`${n}/actions`);for(let r of["import","export"])i[r]!==void 0&&typeof i[r]!="boolean"&&w("NATIVE_DATA_SURFACE_LIST_ACTION_INVALID",`${n}/actions/${r}`)}if(o.fieldOrder!==void 0)for(let i of ge(o.fieldOrder,`${n}/fieldOrder`,500,!0))t.has(i)||w("NATIVE_DATA_SURFACE_LIST_FIELD_INVALID",`${n}/fieldOrder`);o.defaultPageSize!==void 0&&(!Number.isSafeInteger(o.defaultPageSize)||Number(o.defaultPageSize)<1||Number(o.defaultPageSize)>200)&&w("NATIVE_DATA_SURFACE_PAGE_SIZE_INVALID",`${n}/defaultPageSize`);for(let[i,r]of[["searchableFields",rt],["filterFields",Mt]]){if(o[i]===void 0)continue;let a=ge(o[i],`${n}/${i}`,100,!0);for(let s of a){let d=t.get(s);(!d||!r(d.type))&&w("NATIVE_DATA_SURFACE_LIST_FIELD_INVALID",`${n}/${i}`)}}if(o.defaultSort!==void 0){let i=Y(o.defaultSort,`${n}/defaultSort`);oe(i,le.defaultSort,`${n}/defaultSort`);let r=ie(i.field,`${n}/defaultSort/field`,63),a=t.get(r);(!a||!at(a.type))&&w("NATIVE_DATA_SURFACE_SORT_UNSUPPORTED",`${n}/defaultSort/field`),i.order!==void 0&&!["asc","desc"].includes(i.order)&&w("NATIVE_DATA_SURFACE_SORT_ORDER_INVALID",`${n}/defaultSort/order`)}}function jt(e,t,n){if(e===void 0)return;let o=Y(e,n);if(oe(o,le.layout,n),o.layout!==void 0&&!["flat","sections"].includes(o.layout)&&w("NATIVE_DATA_SURFACE_LAYOUT_INVALID",`${n}/layout`),o.fieldOrder!==void 0){let i=`${n}/fieldOrder`;(!Array.isArray(o.fieldOrder)||o.fieldOrder.length>t.size||o.fieldOrder.length>so)&&w("NATIVE_DATA_SURFACE_FIELD_ORDER_INVALID",i);let r=o.fieldOrder.map((a,s)=>ie(a,`${i}/${s}`,63));new Set(r).size!==r.length&&w("NATIVE_DATA_SURFACE_FIELD_ORDER_INVALID",i),r.forEach((a,s)=>{t.has(a)||w("NATIVE_DATA_SURFACE_FIELD_ORDER_FIELD_MISSING",`${i}/${s}`)})}}function uo(e,t,n,o){e[n]===void 0&&t[n]===void 0||((e[n]===void 0||t[n]===void 0)&&w("NATIVE_DATA_SURFACE_FIELD_PROJECTION_MISMATCH",`${o}/${n}`),W(e[n])!==W(t[n])&&w("NATIVE_DATA_SURFACE_FIELD_PROJECTION_MISMATCH",`${o}/${n}`))}function fo(e,t,n){let o=t.file||{},i={...e.maxCount===void 0?{}:{maxCount:e.maxCount},...e.maxSizeMb===void 0?{}:{maxSizeMb:e.maxSizeMb},...e.accept===void 0?{}:{accept:ct(e.accept)}};for(let r of["maxCount","maxSizeMb","accept"]){if(i[r]===void 0&&o[r]===void 0)continue;(i[r]===void 0||o[r]===void 0)&&w("NATIVE_DATA_SURFACE_FIELD_PROJECTION_MISMATCH",`${n}/${r}`);let a=r==="accept"?ct(i[r]):i[r],s=r==="accept"?ct(o[r]):o[r];W(a)!==W(s)&&w("NATIVE_DATA_SURFACE_FIELD_PROJECTION_MISMATCH",`${n}/${r}`)}}function ct(e){return(Array.isArray(e)?[...e]:[e]).sort((t,n)=>{let o=String(t),i=String(n);return o===i?0:o<i?-1:1})}function ge(e,t,n,o){(!Array.isArray(e)||!o&&e.length===0||e.length>n)&&w("NATIVE_DATA_SURFACE_STRING_ARRAY_INVALID",t);let i=e.map((r,a)=>ie(r,`${t}/${a}`,255));return new Set(i).size!==i.length&&w("NATIVE_DATA_SURFACE_STRING_ARRAY_INVALID",t),i}function Y(e,t){return(!e||typeof e!="object"||Array.isArray(e))&&w("NATIVE_OBJECT_REQUIRED",t),e}function oe(e,t,n){let o=new Set(t);for(let i of Object.keys(e))o.has(i)||w("NATIVE_PROPERTY_UNKNOWN",`${n}/${i}`)}function ie(e,t,n){return(typeof e!="string"||e.length===0||e.length>n)&&w("NATIVE_STRING_INVALID",t),e}function _o(e,t,n){e!==void 0&&(typeof e!="string"||e.length>n)&&w("NATIVE_STRING_INVALID",t)}function dt(e,t){e!==void 0&&typeof e!="boolean"&&w("NATIVE_BOOLEAN_REQUIRED",t)}function w(e,t){throw new ce(e,t)}var Bt=["created_by","updated_by","created_at","updated_at"];function he(e){return Bt.includes(e)}function Jt(e){return Bt.some(t=>Object.prototype.hasOwnProperty.call(e.fieldPolicies||{},t))}import{createHash as Eo}from"crypto";var ft=new Set(["option.single","user.single","department.single","resource-ref.single"]),po=new Set(["option.multiple","cascade.single","cascade.multiple","user.multiple","department.multiple","resource-ref.multiple","address","location","json"]),zt=new Set(["option.multiple","cascade.single","cascade.multiple","user.multiple","department.multiple","resource-ref.multiple","file","image"]),Ao=new Set(["option.single","user.single","department.single","resource-ref.single","signature","address","location"]),Io=new Set([...ft,...zt,"signature","address","location","json"]);function Es(e,t){let n=new Set([...Array.isArray(t?.list?.searchableFields)?t.list.searchableFields:[],...Object.entries(t?.fields||{}).filter(([,o])=>o?.searchable===!0).map(([o])=>o)]);return e.map(o=>mo(o,n.has(o.code))).sort((o,i)=>o.code.localeCompare(i.code))}function mo(e,t=!1){let n=e.type==="date-range"||e.type==="datetime-range";if(n&&e.rangeBoundary!=="closed"&&e.rangeBoundary!=="half-open")throw new Error("OPENXIANGDA_NATIVE_DATA_RANGE_BOUNDARY_INVALID");return{code:e.code,type:e.type,nullable:!0,indexed:e.indexed===!0,storage:go(e),index:To(e,t),...n?{rangeBoundary:e.rangeBoundary}:{},...e.type==="serial-number"?{serial:{prefix:e.serial?.prefix||"",digits:e.serial?.digits??6,start:e.serial?.start??1}}:{},...e.type==="subtable"&&e.subtable?{subtable:{resourceCode:e.subtable.resourceCode,foreignKey:e.subtable.foreignKey,orderField:e.subtable.orderField,maxRows:e.subtable.maxRows??20}}:{}}}function ps(e,t){if(t.type==="subtable")return null;let n=K(t.code),o=Yt(e,t),i=[o?` DEFAULT ${o}`:"",Co(n,t),No(n,t)].join("");return`${n} ${t.storage}${i}`}function As(e,t){return Yt(e,t)}function No(e,t){if(t.type!=="date-range"&&t.type!=="datetime-range")return"";if(t.rangeBoundary!=="closed"&&t.rangeBoundary!=="half-open")throw new Error("OPENXIANGDA_NATIVE_DATA_RANGE_BOUNDARY_INVALID");let n=t.type==="datetime-range"&&t.rangeBoundary==="closed";return` CHECK (${e} IS NULL OR (NOT isempty(${e}) AND lower(${e}) IS NOT NULL AND upper(${e}) IS NOT NULL AND lower_inc(${e}) AND ${n?"":"NOT "}upper_inc(${e})))`}function Is(e){return e.type==="serial-number"||Ue(e.type)&&e.type!=="subtable"}function ms(e,t){return t.filter(n=>n.type==="serial-number").map(n=>{let o=We(e,n.code),i=n.serial?.start??1;return`CREATE SEQUENCE IF NOT EXISTS ${o} AS bigint MINVALUE ${i} START WITH ${i} CACHE 1`})}function Ns(e,t){let n=je(e);return t.filter(o=>o.type==="serial-number").map(o=>`ALTER SEQUENCE ${We(e,o.code)} OWNED BY ${n}.${K(o.code)}`)}function Ts(e,t){return t.filter(n=>n.type==="serial-number").map(n=>`GRANT USAGE, SELECT ON SEQUENCE ${We(e,n.code)} TO "openxiangda_data_api"`)}function gs(e,t){let n=je(e),o=[];for(let i of t){if(i.type==="subtable")continue;let r=K(i.code),a=K(ue("idx",e,i.code,i.index));switch(i.index){case"btree":o.push(`CREATE INDEX IF NOT EXISTS ${a} ON ${n} (${r})`);break;case"btree-snapshot-expressions":{let s=K(ue("idx",e,i.code,"snapshot-value")),d=K(ue("idx",e,i.code,"snapshot-label"));o.push(`CREATE INDEX IF NOT EXISTS ${s} ON ${n} ((${r} ->> 'value'))`,`CREATE INDEX IF NOT EXISTS ${d} ON ${n} ((${r} ->> 'label'))`);break}case"gin-jsonb-path":o.push(`CREATE INDEX IF NOT EXISTS ${a} ON ${n} USING GIN (${r} jsonb_path_ops)`);break;case"gist-range":o.push(`CREATE INDEX IF NOT EXISTS ${a} ON ${n} USING GIST (${r})`);break;case"gin-trigram":{let s=ft.has(i.type)?`((${r} ->> 'label')) gin_trgm_ops`:`${r} gin_trgm_ops`;o.push(`CREATE INDEX IF NOT EXISTS ${a} ON ${n} USING GIN (${s})`);break}case"none":break}if(i.type==="serial-number"){let s=K(ue("uidx",e,i.code,"serial"));o.push(`CREATE UNIQUE INDEX IF NOT EXISTS ${s} ON ${n} (${r})`)}}return o}function Cs(e,t,n,o){let i=je(e),r=je(t),a=K(ue("uidx",e,"environment_id","subtable-parent")),s=K(ue("idx",t,n,o,"subtable-child")),d=K(ue("fk",t,n,e)),_=K(n),E=K(o);return[`CREATE UNIQUE INDEX IF NOT EXISTS ${a} ON ${i} ("tenant_id", "app_code", "environment_key", "id")`,`CREATE INDEX IF NOT EXISTS ${s} ON ${r} ("tenant_id", "app_code", "environment_key", ${_}, ${E}, "id")`,`DO $native_subtable$ BEGIN
|
|
1
|
+
import{createHash as Un}from"node:crypto";function Mn(e){if(!e||typeof e!="object")return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function Ze(e,t){if(e===null)return"null";if(typeof e=="string"||typeof e=="boolean")return JSON.stringify(e);if(typeof e=="number"){if(!Number.isFinite(e))throw new TypeError(`JSON number must be finite: ${t}`);return JSON.stringify(e)}if(Array.isArray(e))return`[${e.map((n,i)=>Ze(n,`${t}[${i}]`)).join(",")}]`;if(Mn(e))return`{${Object.keys(e).filter(i=>e[i]!==void 0).sort((i,r)=>i===r?0:i<r?-1:1).map(i=>`${JSON.stringify(i)}:${Ze(e[i],`${t}.${i}`)}`).join(",")}}`;let o=e instanceof Date?"Date":e?.constructor?.name||typeof e;throw new TypeError(`Value is not JSON serializable: ${t} (${o})`)}function W(e){return Ze(e,"$")}function K(e){return Un("sha256").update(W(e)).digest("hex")}var Pt=/^[A-Za-z][A-Za-z0-9_]{0,62}$/,tt=/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/,jn=["text.short","text.long","text.rich","number.integer","number.decimal","boolean","date","time","datetime","date-range","datetime-range","option.single","option.multiple","cascade.single","cascade.multiple","user.single","user.multiple","department.single","department.multiple","resource-ref.single","resource-ref.multiple","image","signature","address","location","uuid","json","file","serial-number","subtable"],Wn=new Set(jn),vt=new Set(["option.multiple","cascade.multiple","user.multiple","department.multiple","resource-ref.multiple","file","image","subtable"]),yt=new Set(["option.single","option.multiple","cascade.single","cascade.multiple"]),St=new Set(["resource-ref.single","resource-ref.multiple"]),Bn=[{code:"id",type:"uuid",nullable:!1},{code:"revision",type:"number.integer",nullable:!1},{code:"created_by",type:"text.short",nullable:!1},{code:"updated_by",type:"text.short",nullable:!1},{code:"created_at",type:"datetime",nullable:!1},{code:"updated_at",type:"datetime",nullable:!1}],Zi=new Map(Bn.map(e=>[e.code,e])),ce=class extends Error{constructor(o,n){super(o);this.code=o;this.pointer=n;this.name="NativeDataFieldContractV2Error"}code;pointer};function xe(e){return vt.has(e)}function Ue(e,t={}){return e.type!=="serial-number"&&t.system!==!0&&e.nullable===!1&&(!xe(e.type)||t.requiredHint===!0)}function nt(e,t,o=500){Array.isArray(e)||$("NATIVE_ARRAY_REQUIRED",t),e.length===0&&$("NATIVE_DATA_FIELDS_REQUIRED",t),e.length>o&&$("NATIVE_ARRAY_LIMIT_EXCEEDED",t);let n=new Set;return e.map((i,r)=>{let a=`${t}/${r}`,s=Q(i,a);te(s,["code","type","nullable","indexed","options","source","maxLength","precision","scale","min","max","rangeBoundary","timePrecision","file","serial","subtable"],a);let d=ne(s.code,`${a}/code`,63);Pt.test(d)||$("NATIVE_FIELD_CODE_INVALID",`${a}/code`),n.has(d)&&$("NATIVE_DATA_FIELD_DUPLICATE",`${a}/code`),n.add(d);let _=ne(s.type,`${a}/type`,32);Wn.has(_)||$("NATIVE_DATA_FIELD_TYPE_INVALID",`${a}/type`);let p=_,u=Vt(s.nullable,`${a}/nullable`),c=Vt(s.indexed,`${a}/indexed`);u===!0&&vt.has(p)&&$("NATIVE_DATA_MULTI_FIELD_NULLABLE_INVALID",`${a}/nullable`);let A=zn(s.options,p,a),f=Yn(s.source,p,a),E=Kn(s,p,a),I=Jn(s.rangeBoundary,p,a),N=qn(s.file,p,a),T=Xn(s.serial,p,a),b=Qn(s.subtable,p,a);return{code:d,type:p,...u===void 0?{}:{nullable:u},...c===void 0?{}:{indexed:c},...A?{options:A}:{},...f?{source:f}:{},...E,...I?{rangeBoundary:I}:{},...N?{file:N}:{},...T?{serial:T}:{},...b?{subtable:b}:{}}})}function Jn(e,t,o){let n=`${o}/rangeBoundary`;if(!(t==="date-range"||t==="datetime-range")){e!==void 0&&$("NATIVE_DATA_FIELD_RANGE_BOUNDARY_TYPE_INVALID",n);return}return e!=="closed"&&e!=="half-open"&&$("NATIVE_DATA_FIELD_RANGE_BOUNDARY_REQUIRED",n),e}function Ft(e,t){Array.isArray(e)||$("NATIVE_ARRAY_REQUIRED",t);let o=new Map;e.forEach((n,i)=>{let r=`${t}/${i}`,a=Q(n,r),s=ne(a.code,`${r}/code`,64);(!tt.test(s)||o.has(s))&&$("NATIVE_RESOURCE_CODE_INVALID",`${r}/code`);let d=Q(a.schema,`${r}/schema`);o.set(s,{pointer:r,fields:nt(d.fields,`${r}/schema/fields`)})});for(let[n,i]of o){let r=new Map(i.fields.map(s=>[s.code,s]));i.fields.filter(s=>s.type==="subtable").reduce((s,d)=>s+(d.subtable?.maxRows??20),0)>49&&$("NATIVE_DATA_FIELD_SUBTABLE_AGGREGATE_MAX_ROWS_EXCEEDED",`${i.pointer}/schema/fields`),i.fields.forEach((s,d)=>{let _=`${i.pointer}/schema/fields/${d}`;if(s.source&&Gn(s.source,r,o,`${_}/source`),s.subtable){let p=o.get(s.subtable.resourceCode);(!p||s.subtable.resourceCode===n)&&$("NATIVE_DATA_FIELD_SUBTABLE_TARGET_MISSING",`${_}/subtable/resourceCode`);let u=p.fields.find(A=>A.code===s.subtable?.foreignKey);(!u||u.type!=="uuid"||u.nullable!==!1)&&$("NATIVE_DATA_FIELD_SUBTABLE_FOREIGN_KEY_INVALID",`${_}/subtable/foreignKey`);let c=p.fields.find(A=>A.code===s.subtable?.orderField);(!c||c.type!=="number.integer"||c.nullable!==!1)&&$("NATIVE_DATA_FIELD_SUBTABLE_ORDER_FIELD_INVALID",`${_}/subtable/orderField`)}})}}function Lt(e,t,o){if(e===void 0)return[];(!Array.isArray(e)||e.length>20)&&$("NATIVE_DATA_RESOURCE_INVARIANTS_INVALID",o);let n=new Map(t.map(r=>[r.code,r])),i=new Set;return e.map((r,a)=>{let s=`${o}/${a}`,d=Q(r,s);te(d,["code","message","expression"],s);let _=ne(d.code,`${s}/code`,128);(!/^[a-z][a-z0-9]*(?:[._-][a-z0-9]+)*$/.test(_)||i.has(_))&&$("NATIVE_DATA_RESOURCE_INVARIANT_CODE_INVALID",`${s}/code`),i.add(_);let p=ke(d.message,`${s}/message`,500);p!==void 0&&p.length===0&&$("NATIVE_DATA_RESOURCE_INVARIANT_MESSAGE_INVALID",`${s}/message`);let u=Q(d.expression,`${s}/expression`);te(u,["leftField","operator","rightField"],`${s}/expression`);let c=de(u.leftField,`${s}/expression/leftField`),A=de(u.rightField,`${s}/expression/rightField`),f=n.get(c),E=n.get(A);(!f||!E)&&$("NATIVE_DATA_RESOURCE_INVARIANT_FIELD_UNKNOWN",`${s}/expression`),f.type===E.type||["number.integer","number.decimal"].includes(f.type)&&["number.integer","number.decimal"].includes(E.type)||$("NATIVE_DATA_RESOURCE_INVARIANT_FIELD_TYPES_INVALID",`${s}/expression`);let N=String(u.operator);return["eq","neq","gt","gte","lt","lte"].includes(N)||$("NATIVE_DATA_RESOURCE_INVARIANT_OPERATOR_INVALID",`${s}/expression/operator`),!["eq","neq"].includes(N)&&!["number.integer","number.decimal","date","time","datetime","text.short","text.long","text.rich","serial-number","uuid"].includes(f.type)&&$("NATIVE_DATA_RESOURCE_INVARIANT_FIELD_TYPES_INVALID",`${s}/expression`),{code:_,...p===void 0?{}:{message:p},expression:{leftField:c,operator:N,rightField:A}}})}function Gn(e,t,o,n){let i=o.get(e.resourceCode);i||$("NATIVE_DATA_FIELD_SOURCE_TARGET_MISSING",`${n}/resourceCode`);let r=new Map(i.fields.map(s=>[s.code,s])),a=r.get(e.labelField);(!a||!["text.short","text.long"].includes(a.type))&&$("NATIVE_DATA_FIELD_SOURCE_LABEL_INVALID",`${n}/labelField`);for(let s of["searchFields","descriptionFields","snapshotFields"])for(let d of e[s]||[])r.has(d)||$("NATIVE_DATA_FIELD_SOURCE_FIELD_MISSING",`${n}/${s}`);for(let[s,d]of(e.filters||[]).entries())r.has(d.field)||$("NATIVE_DATA_FIELD_SOURCE_FILTER_FIELD_MISSING",`${n}/filters/${s}/field`),"binding"in d&&!t.has(d.binding.field)&&$("NATIVE_DATA_FIELD_SOURCE_BINDING_FIELD_MISSING",`${n}/filters/${s}/binding/field`)}function zn(e,t,o){let n=`${o}/options`;if(e===void 0){yt.has(t)&&$("NATIVE_DATA_FIELD_OPTIONS_REQUIRED",n);return}(!yt.has(t)||!Array.isArray(e))&&$("NATIVE_DATA_FIELD_OPTIONS_TYPE_INVALID",n),(e.length<1||e.length>100)&&$("NATIVE_DATA_FIELD_OPTIONS_INVALID",n);let i=0,r=(a,s,d)=>{d>5&&$("NATIVE_DATA_FIELD_OPTIONS_DEPTH_EXCEEDED",s);let _=new Set;return a.map((p,u)=>{i+=1,i>1e3&&$("NATIVE_DATA_FIELD_OPTIONS_COUNT_EXCEEDED",n);let c=`${s}/${u}`,A=Q(p,c);te(A,["label","value","description","color","children"],c);let f=ne(A.label,`${c}/label`,500),E=ne(A.value,`${c}/value`,500);_.has(E)&&$("NATIVE_DATA_FIELD_OPTION_VALUE_DUPLICATE",`${c}/value`),_.add(E);let I=ke(A.description,`${c}/description`,2e3),N=ke(A.color,`${c}/color`,64),T;return A.children!==void 0&&((!t.startsWith("cascade.")||!Array.isArray(A.children))&&$("NATIVE_DATA_FIELD_OPTION_CHILDREN_INVALID",`${c}/children`),(A.children.length<1||A.children.length>100)&&$("NATIVE_DATA_FIELD_OPTION_CHILDREN_INVALID",`${c}/children`),T=r(A.children,`${c}/children`,d+1)),{label:f,value:E,...I===void 0?{}:{description:I},...N===void 0?{}:{color:N},...T?{children:T}:{}}})};return r(e,n,1)}function Yn(e,t,o){let n=`${o}/source`;if(e===void 0){St.has(t)&&$("NATIVE_DATA_FIELD_SOURCE_REQUIRED",n);return}St.has(t)||$("NATIVE_DATA_FIELD_SOURCE_TYPE_INVALID",n);let i=Q(e,n);te(i,["kind","resourceCode","labelField","searchFields","descriptionFields","snapshotFields","filters","pageSize","loadMode"],n),i.kind!=="resource"&&$("NATIVE_DATA_FIELD_SOURCE_KIND_INVALID",`${n}/kind`);let r=ne(i.resourceCode,`${n}/resourceCode`,64);tt.test(r)||$("NATIVE_RESOURCE_CODE_INVALID",`${n}/resourceCode`);let a=de(i.labelField,`${n}/labelField`),s=et(i.searchFields,`${n}/searchFields`,10),d=et(i.descriptionFields,`${n}/descriptionFields`,10),_=et(i.snapshotFields,`${n}/snapshotFields`,50),p=Ne(i.pageSize,`${n}/pageSize`,1,100),u;i.loadMode!==void 0&&(["search","all"].includes(String(i.loadMode))||$("NATIVE_DATA_FIELD_SOURCE_LOAD_MODE_INVALID",`${n}/loadMode`),u=i.loadMode);let c=Hn(i.filters,`${n}/filters`);return{kind:"resource",resourceCode:r,labelField:a,...s?{searchFields:s}:{},...d?{descriptionFields:d}:{},..._?{snapshotFields:_}:{},...c?{filters:c}:{},...p===void 0?{}:{pageSize:p},...u?{loadMode:u}:{}}}function Hn(e,t){if(e!==void 0)return(!Array.isArray(e)||e.length>20)&&$("NATIVE_DATA_FIELD_SOURCE_FILTERS_INVALID",t),e.map((o,n)=>{let i=`${t}/${n}`,r=Q(o,i),a=Object.prototype.hasOwnProperty.call(r,"value"),s=Object.prototype.hasOwnProperty.call(r,"binding");te(r,a?["field","operator","value"]:["field","operator","binding"],i),a===s&&$("NATIVE_DATA_FIELD_SOURCE_FILTER_VALUE_INVALID",i);let d=de(r.field,`${i}/field`);["eq","in"].includes(String(r.operator))||$("NATIVE_DATA_FIELD_SOURCE_FILTER_OPERATOR_INVALID",`${i}/operator`);let _=r.operator;if(a)return{field:d,operator:_,value:r.value};let p=Q(r.binding,`${i}/binding`);return te(p,["kind","field"],`${i}/binding`),p.kind!=="field"&&$("NATIVE_DATA_FIELD_SOURCE_BINDING_KIND_INVALID",`${i}/binding/kind`),{field:d,operator:_,binding:{kind:"field",field:de(p.field,`${i}/binding/field`)}}})}function Kn(e,t,o){let n={};if(e.maxLength!==void 0&&(["text.short","text.long","text.rich"].includes(t)||$("NATIVE_DATA_FIELD_MAX_LENGTH_TYPE_INVALID",`${o}/maxLength`),n.maxLength=Le(e.maxLength,`${o}/maxLength`,1,1e6)),(e.precision!==void 0||e.scale!==void 0)&&((t!=="number.decimal"||e.precision===void 0)&&$("NATIVE_DATA_FIELD_DECIMAL_CONFIG_INVALID",o),n.precision=Le(e.precision,`${o}/precision`,1,1e3),n.scale=e.scale===void 0?0:Le(e.scale,`${o}/scale`,0,n.precision)),e.min!==void 0||e.max!==void 0){["number.integer","number.decimal"].includes(t)||$("NATIVE_DATA_FIELD_NUMERIC_BOUNDS_TYPE_INVALID",o);let i=wt(e.min,`${o}/min`),r=wt(e.max,`${o}/max`);t==="number.integer"&&[i,r].some(a=>a!==void 0&&!Number.isSafeInteger(a))&&$("NATIVE_DATA_FIELD_NUMERIC_BOUNDS_INVALID",o),i!==void 0&&r!==void 0&&i>r&&$("NATIVE_DATA_FIELD_NUMERIC_BOUNDS_INVALID",o),i!==void 0&&(n.min=i),r!==void 0&&(n.max=r)}return e.timePrecision!==void 0&&((t!=="time"||!["minute","second"].includes(e.timePrecision))&&$("NATIVE_DATA_FIELD_TIME_PRECISION_INVALID",`${o}/timePrecision`),n.timePrecision=e.timePrecision),n}function qn(e,t,o){if(e===void 0)return;let n=`${o}/file`;["file","image","signature"].includes(t)||$("NATIVE_DATA_FIELD_FILE_TYPE_INVALID",n);let i=Q(e,n);te(i,["maxCount","maxSizeMb","accept"],n);let r=Ne(i.maxCount,`${n}/maxCount`,1,100);t==="signature"&&r!==void 0&&r!==1&&$("NATIVE_DATA_FIELD_SIGNATURE_COUNT_INVALID",`${n}/maxCount`);let a=Ne(i.maxSizeMb,`${n}/maxSizeMb`,1,1024),s;return i.accept!==void 0&&((!Array.isArray(i.accept)||i.accept.length>50)&&$("NATIVE_DATA_FIELD_FILE_ACCEPT_INVALID",`${n}/accept`),s=i.accept.map((d,_)=>ne(d,`${n}/accept/${_}`,255)),new Set(s).size!==s.length&&$("NATIVE_DATA_FIELD_FILE_ACCEPT_INVALID",`${n}/accept`)),{...r===void 0?{}:{maxCount:r},...a===void 0?{}:{maxSizeMb:a},...s===void 0?{}:{accept:s}}}function Xn(e,t,o){let n=`${o}/serial`;if(e===void 0){t==="serial-number"&&$("NATIVE_DATA_FIELD_SERIAL_REQUIRED",n);return}t!=="serial-number"&&$("NATIVE_DATA_FIELD_SERIAL_TYPE_INVALID",n);let i=Q(e,n);te(i,["prefix","digits","start"],n);let r=ke(i.prefix,`${n}/prefix`,64),a=Ne(i.digits,`${n}/digits`,1,32),s=Ne(i.start,`${n}/start`,0,Number.MAX_SAFE_INTEGER);return{...r===void 0?{}:{prefix:r},...a===void 0?{}:{digits:a},...s===void 0?{}:{start:s}}}function Qn(e,t,o){let n=`${o}/subtable`;if(e===void 0){t==="subtable"&&$("NATIVE_DATA_FIELD_SUBTABLE_REQUIRED",n);return}t!=="subtable"&&$("NATIVE_DATA_FIELD_SUBTABLE_TYPE_INVALID",n);let i=Q(e,n);te(i,["resourceCode","foreignKey","orderField","maxRows"],n);let r=ne(i.resourceCode,`${n}/resourceCode`,64);tt.test(r)||$("NATIVE_RESOURCE_CODE_INVALID",`${n}/resourceCode`);let a=de(i.foreignKey,`${n}/foreignKey`),s=de(i.orderField,`${n}/orderField`);s===a&&$("NATIVE_DATA_FIELD_SUBTABLE_ORDER_FIELD_INVALID",`${n}/orderField`);let d=Ne(i.maxRows,`${n}/maxRows`,1,49);return{resourceCode:r,foreignKey:a,orderField:s,...d===void 0?{}:{maxRows:d}}}function et(e,t,o){if(e===void 0)return;(!Array.isArray(e)||e.length>o)&&$("NATIVE_DATA_FIELD_SOURCE_FIELDS_INVALID",t);let n=e.map((i,r)=>de(i,`${t}/${r}`));return new Set(n).size!==n.length&&$("NATIVE_DATA_FIELD_SOURCE_FIELDS_INVALID",t),n}function de(e,t){let o=ne(e,t,63);return Pt.test(o)||$("NATIVE_FIELD_CODE_INVALID",t),o}function Q(e,t){return(!e||typeof e!="object"||Array.isArray(e))&&$("NATIVE_OBJECT_REQUIRED",t),e}function te(e,t,o){let n=new Set(t);for(let i of Object.keys(e))n.has(i)||$("NATIVE_PROPERTY_UNKNOWN",`${o}/${i}`)}function ne(e,t,o){return(typeof e!="string"||e.length===0||e.length>o)&&$("NATIVE_STRING_INVALID",t),e}function ke(e,t,o){if(e!==void 0)return(typeof e!="string"||e.length>o)&&$("NATIVE_STRING_INVALID",t),e}function Vt(e,t){if(e!==void 0)return typeof e!="boolean"&&$("NATIVE_BOOLEAN_REQUIRED",t),e}function Ne(e,t,o,n){if(e!==void 0)return Le(e,t,o,n)}function wt(e,t){if(e!==void 0)return(typeof e!="number"||!Number.isFinite(e))&&$("NATIVE_NUMBER_REQUIRED",t),e}function Le(e,t,o,n){return(!Number.isSafeInteger(e)||Number(e)<o||Number(e)>n)&&$("NATIVE_INTEGER_OUT_OF_RANGE",t),Number(e)}function $(e,t){throw new ce(e,t)}var Zn=["eq","neq","gt","gte","lt","lte","contains","startsWith","endsWith","in","between","has","hasAny","hasAll","overlaps","containedBy","jsonContains","isEmpty","isNotEmpty"],eo=new Set(Zn);function ts(e){return eo.has(String(e))}var ot=["eq","neq","contains","startsWith","endsWith","in","isEmpty","isNotEmpty"],$e=["eq","neq","gt","gte","lt","lte","between","in","isEmpty"],to=["eq","neq","in","isEmpty"],Me=["eq","neq","in","isEmpty","isNotEmpty"],Te=["has","hasAny","hasAll","isEmpty","isNotEmpty"],kt=["overlaps","contains","containedBy","isEmpty"],it=["jsonContains","isEmpty","isNotEmpty"],st=["isEmpty","isNotEmpty"],no={"text.short":ot,"text.long":ot,"text.rich":ot,"number.integer":$e,"number.decimal":$e,boolean:to,date:$e,time:$e,datetime:$e,"date-range":kt,"datetime-range":kt,"option.single":Me,"option.multiple":Te,"cascade.single":Te,"cascade.multiple":Te,"user.single":Me,"user.multiple":Te,"department.single":Me,"department.multiple":Te,"resource-ref.single":Me,"resource-ref.multiple":Te,file:st,image:st,signature:st,address:it,location:it,uuid:["eq","neq","in","isEmpty"],json:it,"serial-number":["eq","neq","in","contains","startsWith"],subtable:[]},oo=new Set(["text.short","text.long","text.rich","option.single","user.single","department.single","resource-ref.single","serial-number"]),io=new Set(["option.multiple","cascade.single","cascade.multiple","user.multiple","department.multiple","resource-ref.multiple","file","image","signature","address","location","json","subtable"]);function Ut(e){return no[e]}function ns(e,t){return Ut(e).includes(t)}function rt(e){return oo.has(e)}function at(e){return!io.has(e)}function Mt(e){return Ut(e).length>0}var xt=new Set(["number.integer","number.decimal"]),jt=new Set(["text.short","text.long","number.integer","number.decimal","date","time","datetime","serial-number"]),so=new Set([...jt,"boolean","uuid"]),ro=new Set(["option.single","user.single","department.single","resource-ref.single"]);function os(e,t){return t==="sum"||t==="avg"?xt.has(e)?{valueExpression:"column",numericResult:!0}:null:t==="min"||t==="max"?jt.has(e)?{valueExpression:"column",numericResult:xt.has(e)}:null:ro.has(e)?{valueExpression:"snapshot-value",numericResult:!0}:so.has(e)?{valueExpression:"column",numericResult:!0}:null}var ao=500,le={surface:["mutationOwner","generated","fields","list","form","detail","mobile","views"],generated:["list","detail","create","update","delete"],field:["label","type","widget","section","requiredHint","system","hidden","readCapabilities","createCapabilities","updateCapabilities","maxLength","precision","scale","min","max","rangeBoundary","maxCount","maxSizeMb","accept","options","list","searchable","sortable","source","timePrecision","serial","subtable"],list:["actions","fieldOrder","defaultPageSize","searchableFields","filterFields","defaultSort"],defaultSort:["field","order"],layout:["layout","fieldOrder"],mobile:["enabled"]},co={"text.short":["text","email","phone"],"text.long":["textarea"],"text.rich":["rich-text"],"number.integer":["number","rating"],"number.decimal":["number","money","percent"],boolean:["switch"],date:["date"],time:["time"],datetime:["datetime"],"date-range":["date-range"],"datetime-range":["datetime-range"],"option.single":["select","radio"],"option.multiple":["multi-select","checkbox"],"cascade.single":["cascade"],"cascade.multiple":["cascade"],"user.single":["directory-user"],"user.multiple":["directory-user"],"department.single":["directory-department","scope"],"department.multiple":["directory-department","scope"],"resource-ref.single":["select","radio","resource"],"resource-ref.multiple":["multi-select","checkbox","resource"],file:["attachment"],image:["image"],signature:["signature"],address:["address"],location:["location"],uuid:["readonly"],json:["json"],"serial-number":["readonly"],subtable:["subtable"]};function lt(e,t,o){if(e===void 0)return;let n=Y(e,o);oe(n,le.surface,o);let i=n.mutationOwner===void 0?"native":ie(n.mutationOwner,`${o}/mutationOwner`,16);["native","action","readonly","workflow"].includes(i)||w("NATIVE_DATA_SURFACE_MUTATION_OWNER_INVALID",`${o}/mutationOwner`);let r=n.generated===void 0?{}:Y(n.generated,`${o}/generated`);oe(r,le.generated,`${o}/generated`);for(let d of le.generated)dt(r[d],`${o}/generated/${d}`);if(i!=="native")for(let d of["create","update","delete"])r[d]===!0&&w("NATIVE_DATA_SURFACE_MUTATION_OWNER_CONFLICT",`${o}/generated/${d}`);let a=new Map(t.map(d=>[d.code,d])),s=Y(n.fields,`${o}/fields`);for(let d of Object.keys(s))a.has(d)||w("NATIVE_DATA_SURFACE_FIELD_MISSING",`${o}/fields/${d}`);for(let d of t)Object.prototype.hasOwnProperty.call(s,d.code)||w("NATIVE_DATA_SURFACE_FIELD_REQUIRED",`${o}/fields/${d.code}`),uo(s[d.code],d,`${o}/fields/${d.code}`);for(let d of["create","update"]){let _=r[d]??i==="native",p=t.some(u=>{let c=Y(s[u.code],`${o}/fields/${u.code}`);return Bt(u,c,d)});_&&!p&&w("NATIVE_DATA_SURFACE_WRITABLE_FIELDS_REQUIRED",`${o}/generated/${d}`)}if(fo(n.list,a,`${o}/list`),Wt(n.form,a,`${o}/form`),Wt(n.detail,a,`${o}/detail`),n.mobile!==void 0){let d=Y(n.mobile,`${o}/mobile`);oe(d,le.mobile,`${o}/mobile`),dt(d.enabled,`${o}/mobile/enabled`)}lo(n,t,o)}function ut(e,t){let o=e.views?.find(i=>i.code===t);o||w("NATIVE_DATA_VIEW_NOT_FOUND",`/surface/views/${t}`);let n=new Map((o.sections||[]).flatMap(i=>i.fields.map(r=>[r,i.title])));return{mutationOwner:e.mutationOwner||"native",generated:o.generated,list:o.list,form:o.form,detail:o.detail,mobile:o.mobile,fields:Object.fromEntries(Object.entries(e.fields).map(([i,r])=>{let a={...r};delete a.section;let s=n.get(i);return[i,{...a,...s?{section:s}:{},list:o.list.fieldOrder.includes(i)}]}))}}function lo(e,t,o){if(e.views===void 0)return;(!Array.isArray(e.views)||e.views.length>20)&&w("NATIVE_DATA_VIEWS_LIMIT_INVALID",`${o}/views`);let n=new Set;e.views.forEach((i,r)=>{let a=`${o}/views/${r}`,s=Y(i,a);oe(s,["code","name","generated","list","form","detail","mobile","sections"],a);let d=ie(s.code,`${a}/code`,64);(!/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/.test(d)||n.has(d))&&w("NATIVE_DATA_VIEW_CODE_INVALID",`${a}/code`),n.add(d),ie(s.name,`${a}/name`,255),Y(s.generated,`${a}/generated`),Y(s.mobile,`${a}/mobile`);for(let p of["list","detail","create","update","delete"])typeof s.generated[p]!="boolean"&&w("NATIVE_DATA_VIEW_OPERATION_INVALID",`${a}/generated/${p}`);typeof s.mobile.enabled!="boolean"&&w("NATIVE_DATA_VIEW_MOBILE_INVALID",`${a}/mobile/enabled`);for(let p of["list","form","detail"]){let u=Y(s[p],`${a}/${p}`),c=ge(u.fieldOrder,`${a}/${p}/fieldOrder`,500,!0);for(let A of c){let f=e.fields[A];(!f||(f.hidden??f.system)===!0)&&w("NATIVE_DATA_VIEW_FIELD_INVALID",`${a}/${p}/fieldOrder`)}}if(s.sections!==void 0){(!Array.isArray(s.sections)||s.sections.length>100)&&w("NATIVE_DATA_VIEW_SECTIONS_INVALID",`${a}/sections`);let p=new Set;s.sections.forEach((u,c)=>{let A=`${a}/sections/${c}`,f=Y(u,A);oe(f,["title","fields"],A),ie(f.title,`${A}/title`,255);for(let E of ge(f.fields,`${A}/fields`,100,!0)){let I=e.fields[E];(!I||(I.hidden??I.system)===!0||p.has(E))&&w("NATIVE_DATA_VIEW_FIELD_INVALID",`${A}/fields`),p.add(E)}})}let _=ut(e,d);if(lt(_,t,a),s.generated.create!==!1&&(e.mutationOwner||"native")==="native")for(let p of t)Ue(p,e.fields[p.code])&&Bt(p,e.fields[p.code],"create")&&!s.form.fieldOrder.includes(p.code)&&w("NATIVE_DATA_VIEW_CREATE_REQUIRED_FIELD_MISSING",`${a}/form/fieldOrder`)})}function Bt(e,t,o){if(e.type==="serial-number"||t.system===!0)return!1;let n=t[`${o}Capabilities`];return Array.isArray(n)&&n.length>0}function uo(e,t,o){let n=Y(e,o);oe(n,le.field,o),ie(n.label,`${o}/label`,500),n.type!==t.type&&w("NATIVE_DATA_SURFACE_FIELD_TYPE_MISMATCH",`${o}/type`);let i=ie(n.widget,`${o}/widget`,64);co[t.type].includes(i)||w("NATIVE_DATA_SURFACE_WIDGET_INCOMPATIBLE",`${o}/widget`),Eo(n.section,`${o}/section`,255);for(let r of["requiredHint","system","hidden","list","searchable","sortable"])dt(n[r],`${o}/${r}`);n.searchable===!0&&!rt(t.type)&&w("NATIVE_DATA_SURFACE_SEARCH_UNSUPPORTED",`${o}/searchable`),n.sortable===!0&&!at(t.type)&&w("NATIVE_DATA_SURFACE_SORT_UNSUPPORTED",`${o}/sortable`);for(let r of["readCapabilities","createCapabilities","updateCapabilities"])ge(n[r],`${o}/${r}`,100,!0);if(n.maxCount!==void 0&&(!Number.isSafeInteger(n.maxCount)||Number(n.maxCount)<1||Number(n.maxCount)>100)&&w("NATIVE_DATA_SURFACE_MAX_COUNT_INVALID",`${o}/maxCount`),n.maxSizeMb!==void 0&&(!Number.isSafeInteger(n.maxSizeMb)||Number(n.maxSizeMb)<1||Number(n.maxSizeMb)>1024)&&w("NATIVE_DATA_SURFACE_MAX_SIZE_INVALID",`${o}/maxSizeMb`),n.accept!==void 0){let r=Array.isArray(n.accept)?n.accept:[n.accept];ge(r,`${o}/accept`,50,!1)}for(let r of["maxLength","precision","scale","min","max","rangeBoundary","options","source","timePrecision","serial","subtable"])_o(n,t,r,o);po(n,t,o)}function fo(e,t,o){if(e===void 0)return;let n=Y(e,o);if(oe(n,le.list,o),n.actions!==void 0){let i=Y(n.actions,`${o}/actions`);oe(i,["import","export"],`${o}/actions`);for(let r of["import","export"])i[r]!==void 0&&typeof i[r]!="boolean"&&w("NATIVE_DATA_SURFACE_LIST_ACTION_INVALID",`${o}/actions/${r}`)}if(n.fieldOrder!==void 0)for(let i of ge(n.fieldOrder,`${o}/fieldOrder`,500,!0))t.has(i)||w("NATIVE_DATA_SURFACE_LIST_FIELD_INVALID",`${o}/fieldOrder`);n.defaultPageSize!==void 0&&(!Number.isSafeInteger(n.defaultPageSize)||Number(n.defaultPageSize)<1||Number(n.defaultPageSize)>200)&&w("NATIVE_DATA_SURFACE_PAGE_SIZE_INVALID",`${o}/defaultPageSize`);for(let[i,r]of[["searchableFields",rt],["filterFields",Mt]]){if(n[i]===void 0)continue;let a=ge(n[i],`${o}/${i}`,100,!0);for(let s of a){let d=t.get(s);(!d||!r(d.type))&&w("NATIVE_DATA_SURFACE_LIST_FIELD_INVALID",`${o}/${i}`)}}if(n.defaultSort!==void 0){let i=Y(n.defaultSort,`${o}/defaultSort`);oe(i,le.defaultSort,`${o}/defaultSort`);let r=ie(i.field,`${o}/defaultSort/field`,63),a=t.get(r);(!a||!at(a.type))&&w("NATIVE_DATA_SURFACE_SORT_UNSUPPORTED",`${o}/defaultSort/field`),i.order!==void 0&&!["asc","desc"].includes(i.order)&&w("NATIVE_DATA_SURFACE_SORT_ORDER_INVALID",`${o}/defaultSort/order`)}}function Wt(e,t,o){if(e===void 0)return;let n=Y(e,o);if(oe(n,le.layout,o),n.layout!==void 0&&!["flat","sections"].includes(n.layout)&&w("NATIVE_DATA_SURFACE_LAYOUT_INVALID",`${o}/layout`),n.fieldOrder!==void 0){let i=`${o}/fieldOrder`;(!Array.isArray(n.fieldOrder)||n.fieldOrder.length>t.size||n.fieldOrder.length>ao)&&w("NATIVE_DATA_SURFACE_FIELD_ORDER_INVALID",i);let r=n.fieldOrder.map((a,s)=>ie(a,`${i}/${s}`,63));new Set(r).size!==r.length&&w("NATIVE_DATA_SURFACE_FIELD_ORDER_INVALID",i),r.forEach((a,s)=>{t.has(a)||w("NATIVE_DATA_SURFACE_FIELD_ORDER_FIELD_MISSING",`${i}/${s}`)})}}function _o(e,t,o,n){e[o]===void 0&&t[o]===void 0||((e[o]===void 0||t[o]===void 0)&&w("NATIVE_DATA_SURFACE_FIELD_PROJECTION_MISMATCH",`${n}/${o}`),W(e[o])!==W(t[o])&&w("NATIVE_DATA_SURFACE_FIELD_PROJECTION_MISMATCH",`${n}/${o}`))}function po(e,t,o){let n=t.file||{},i={...e.maxCount===void 0?{}:{maxCount:e.maxCount},...e.maxSizeMb===void 0?{}:{maxSizeMb:e.maxSizeMb},...e.accept===void 0?{}:{accept:ct(e.accept)}};for(let r of["maxCount","maxSizeMb","accept"]){if(i[r]===void 0&&n[r]===void 0)continue;(i[r]===void 0||n[r]===void 0)&&w("NATIVE_DATA_SURFACE_FIELD_PROJECTION_MISMATCH",`${o}/${r}`);let a=r==="accept"?ct(i[r]):i[r],s=r==="accept"?ct(n[r]):n[r];W(a)!==W(s)&&w("NATIVE_DATA_SURFACE_FIELD_PROJECTION_MISMATCH",`${o}/${r}`)}}function ct(e){return(Array.isArray(e)?[...e]:[e]).sort((t,o)=>{let n=String(t),i=String(o);return n===i?0:n<i?-1:1})}function ge(e,t,o,n){(!Array.isArray(e)||!n&&e.length===0||e.length>o)&&w("NATIVE_DATA_SURFACE_STRING_ARRAY_INVALID",t);let i=e.map((r,a)=>ie(r,`${t}/${a}`,255));return new Set(i).size!==i.length&&w("NATIVE_DATA_SURFACE_STRING_ARRAY_INVALID",t),i}function Y(e,t){return(!e||typeof e!="object"||Array.isArray(e))&&w("NATIVE_OBJECT_REQUIRED",t),e}function oe(e,t,o){let n=new Set(t);for(let i of Object.keys(e))n.has(i)||w("NATIVE_PROPERTY_UNKNOWN",`${o}/${i}`)}function ie(e,t,o){return(typeof e!="string"||e.length===0||e.length>o)&&w("NATIVE_STRING_INVALID",t),e}function Eo(e,t,o){e!==void 0&&(typeof e!="string"||e.length>o)&&w("NATIVE_STRING_INVALID",t)}function dt(e,t){e!==void 0&&typeof e!="boolean"&&w("NATIVE_BOOLEAN_REQUIRED",t)}function w(e,t){throw new ce(e,t)}var Jt=["created_by","updated_by","created_at","updated_at"];function he(e){return Jt.includes(e)}function Gt(e){return Jt.some(t=>Object.prototype.hasOwnProperty.call(e.fieldPolicies||{},t))}import{createHash as Ao}from"crypto";var ft=new Set(["option.single","user.single","department.single","resource-ref.single"]),Io=new Set(["option.multiple","cascade.single","cascade.multiple","user.multiple","department.multiple","resource-ref.multiple","address","location","json"]),Yt=new Set(["option.multiple","cascade.single","cascade.multiple","user.multiple","department.multiple","resource-ref.multiple","file","image"]),mo=new Set(["option.single","user.single","department.single","resource-ref.single","signature","address","location"]),No=new Set([...ft,...Yt,"signature","address","location","json"]);function As(e,t){let o=new Set([...Array.isArray(t?.list?.searchableFields)?t.list.searchableFields:[],...Object.entries(t?.fields||{}).filter(([,n])=>n?.searchable===!0).map(([n])=>n)]);return e.map(n=>To(n,o.has(n.code))).sort((n,i)=>n.code.localeCompare(i.code))}function To(e,t=!1){let o=e.type==="date-range"||e.type==="datetime-range";if(o&&e.rangeBoundary!=="closed"&&e.rangeBoundary!=="half-open")throw new Error("OPENXIANGDA_NATIVE_DATA_RANGE_BOUNDARY_INVALID");return{code:e.code,type:e.type,nullable:!0,indexed:e.indexed===!0,storage:Oo(e),index:Co(e,t),...o?{rangeBoundary:e.rangeBoundary}:{},...e.type==="serial-number"?{serial:{prefix:e.serial?.prefix||"",digits:e.serial?.digits??6,start:e.serial?.start??1}}:{},...e.type==="subtable"&&e.subtable?{subtable:{resourceCode:e.subtable.resourceCode,foreignKey:e.subtable.foreignKey,orderField:e.subtable.orderField,maxRows:e.subtable.maxRows??20}}:{}}}function Is(e,t){if(t.type==="subtable")return null;let o=q(t.code),n=Ht(e,t),i=[n?` DEFAULT ${n}`:"",bo(o,t),go(o,t)].join("");return`${o} ${t.storage}${i}`}function ms(e,t){return Ht(e,t)}function go(e,t){if(t.type!=="date-range"&&t.type!=="datetime-range")return"";if(t.rangeBoundary!=="closed"&&t.rangeBoundary!=="half-open")throw new Error("OPENXIANGDA_NATIVE_DATA_RANGE_BOUNDARY_INVALID");let o=t.type==="datetime-range"&&t.rangeBoundary==="closed";return` CHECK (${e} IS NULL OR (NOT isempty(${e}) AND lower(${e}) IS NOT NULL AND upper(${e}) IS NOT NULL AND lower_inc(${e}) AND ${o?"":"NOT "}upper_inc(${e})))`}function Ns(e){return e.type==="serial-number"||xe(e.type)&&e.type!=="subtable"}function Ts(e,t){return t.filter(o=>o.type==="serial-number").map(o=>{let n=We(e,o.code),i=o.serial?.start??1;return`CREATE SEQUENCE IF NOT EXISTS ${n} AS bigint MINVALUE ${i} START WITH ${i} CACHE 1`})}function gs(e,t){let o=je(e);return t.filter(n=>n.type==="serial-number").map(n=>`ALTER SEQUENCE ${We(e,n.code)} OWNED BY ${o}.${q(n.code)}`)}function Cs(e,t){return t.filter(o=>o.type==="serial-number").map(o=>`GRANT USAGE, SELECT ON SEQUENCE ${We(e,o.code)} TO "openxiangda_data_api"`)}function Os(e,t){let o=je(e),n=[];for(let i of t){if(i.type==="subtable")continue;let r=q(i.code),a=q(ue("idx",e,i.code,i.index));switch(i.index){case"btree":n.push(`CREATE INDEX IF NOT EXISTS ${a} ON ${o} (${r})`);break;case"btree-snapshot-expressions":{let s=q(ue("idx",e,i.code,"snapshot-value")),d=q(ue("idx",e,i.code,"snapshot-label"));n.push(`CREATE INDEX IF NOT EXISTS ${s} ON ${o} ((${r} ->> 'value'))`,`CREATE INDEX IF NOT EXISTS ${d} ON ${o} ((${r} ->> 'label'))`);break}case"gin-jsonb-path":n.push(`CREATE INDEX IF NOT EXISTS ${a} ON ${o} USING GIN (${r} jsonb_path_ops)`);break;case"gist-range":n.push(`CREATE INDEX IF NOT EXISTS ${a} ON ${o} USING GIST (${r})`);break;case"gin-trigram":{let s=ft.has(i.type)?`((${r} ->> 'label')) gin_trgm_ops`:`${r} gin_trgm_ops`;n.push(`CREATE INDEX IF NOT EXISTS ${a} ON ${o} USING GIN (${s})`);break}case"none":break}if(i.type==="serial-number"){let s=q(ue("uidx",e,i.code,"serial"));n.push(`CREATE UNIQUE INDEX IF NOT EXISTS ${s} ON ${o} (${r})`)}}return n}function bs(e,t,o,n){let i=je(e),r=je(t),a=q(ue("uidx",e,"environment_id","subtable-parent")),s=q(ue("idx",t,o,n,"subtable-child")),d=q(ue("fk",t,o,e)),_=q(o),p=q(n);return[`CREATE UNIQUE INDEX IF NOT EXISTS ${a} ON ${i} ("tenant_id", "app_code", "environment_key", "id")`,`CREATE INDEX IF NOT EXISTS ${s} ON ${r} ("tenant_id", "app_code", "environment_key", ${_}, ${p}, "id")`,`DO $native_subtable$ BEGIN
|
|
2
2
|
ALTER TABLE ${r}
|
|
3
3
|
ADD CONSTRAINT ${d}
|
|
4
4
|
FOREIGN KEY ("tenant_id", "app_code", "environment_key", ${_})
|
|
5
5
|
REFERENCES ${i} ("tenant_id", "app_code", "environment_key", "id")
|
|
6
6
|
ON DELETE CASCADE;
|
|
7
7
|
EXCEPTION WHEN duplicate_object THEN NULL;
|
|
8
|
-
END $native_subtable$`]}function ue(e,...t){return`${e}_${Eo("sha256").update(t.join(":")).digest("hex").slice(0,32)}`}function K(e){if(!/^[A-Za-z_][A-Za-z0-9_]{0,62}$/.test(e))throw new Error("OPENXIANGDA_NATIVE_IDENTIFIER_INVALID");return`"${e}"`}function To(e,t){return e.type==="subtable"?"none":t?"gin-trigram":e.indexed?["date-range","datetime-range"].includes(e.type)?"gist-range":ft.has(e.type)?"btree-snapshot-expressions":po.has(e.type)?"gin-jsonb-path":"btree":"none"}function go(e){switch(e.type){case"text.short":return`varchar(${e.maxLength??255})`;case"text.long":case"text.rich":return"text";case"number.integer":return"bigint";case"number.decimal":return`numeric(${e.precision??38},${e.scale??10})`;case"boolean":return"boolean";case"date":return"date";case"time":return"time(0)";case"datetime":return"timestamptz";case"date-range":return"daterange";case"datetime-range":return"tstzrange";case"uuid":return"uuid";case"serial-number":return"varchar(255)";case"subtable":return"child-resource";default:return Io.has(e.type),"jsonb"}}function Yt(e,t){if(Ue(t.type)&&t.type!=="subtable")return"'[]'::jsonb";if(t.type!=="serial-number")return"";let n=Gt(t.serial?.prefix||""),o=t.serial?.digits??6;return`(${n} || lpad(nextval(${Gt(We(e,t.code))})::text, ${o}, '0'))`}function Co(e,t){return zt.has(t.type)?` CHECK (${e} IS NULL OR jsonb_typeof(${e}) = 'array')`:Ao.has(t.type)?` CHECK (${e} IS NULL OR jsonb_typeof(${e}) = 'object')`:""}function je(e){return`"app_data".${K(e)}`}function We(e,t){let n=ue("seq",e,t);return`"app_data".${K(n)}`}function Gt(e){return`'${e.replace(/'/g,"''")}'`}var Ht=new Set(["option.single","option.multiple","user.single","user.multiple","department.single","department.multiple","resource-ref.single","resource-ref.multiple"]),Oo=new Set([...Ht,"cascade.single","cascade.multiple","file","image","signature","address","location","json"]),Kt=/^[A-Za-z][A-Za-z0-9_]{0,62}$/,bo=new Set(["__proto__","prototype","constructor"]),_t=class extends Error{constructor(n){super("OPENXIANGDA_SCOPE_PROJECTION_FIELD_PATH_INVALID");this.path=n;this.name="NativeScopeSourceFieldPathV2Error"}path;code="OPENXIANGDA_SCOPE_PROJECTION_FIELD_PATH_INVALID"};function De(e,t){let n=Xt(e);if(!n)return null;let o=t.get(n[0]);if(!o)return null;let i=n.slice(1).join(".")||void 0;return{field:o,...i?{valuePath:i}:{}}}function Et(e){return!!(e&&e.field.type==="user.single"&&e.valuePath==="value")}function qt(e,t,n){if(!e||!t||!$o(e))return!1;let{field:o,valuePath:i}=e;if(!i)return t.valueType==="uuid"?o.type==="uuid":["text.short","text.long","serial-number"].includes(o.type);if(i==="value")return!(t.valueSourceResourceCode&&o.type.startsWith("resource-ref.")&&o.source?.resourceCode!==t.valueSourceResourceCode);let r=i.slice(9),s=n.get(o.source?.resourceCode||"")?.get(r)?.type;return t.valueType==="uuid"?s==="uuid":["text.short","text.long","serial-number"].includes(s||"")}function bs(e,t){let n=Xt(t);if(!n)throw new _t(String(t||""));let o=e;for(let i of n){if(!o||typeof o!="object"||!Object.prototype.hasOwnProperty.call(o,i))return;o=o[i]}return o}function $o(e){let{field:t,valuePath:n}=e;if(!n)return!Oo.has(t.type);if(n==="value")return Ht.has(t.type);if(!n.startsWith("snapshot."))return!1;let o=n.slice(9);return Kt.test(o)&&t.type.startsWith("resource-ref.")&&!!t.source?.snapshotFields?.includes(o)}function Xt(e){if(typeof e!="string"||e.length===0||e.length>192)return null;let t=e.split(".");return![1,2,3].includes(t.length)||t.some(n=>!Kt.test(n)||bo.has(n))||t.length===2&&t[1]!=="value"||t.length===3&&t[1]!=="snapshot"?null:t}var ho=new Set(["option.single","user.single","department.single","resource-ref.single"]),Do=new Set(["text.short","text.long","text.rich","number.integer","number.decimal","boolean","date","time","datetime","uuid","serial-number"]),Ro=new Set(["value","label","description","color"]),So=new Set(["avatarUrl","employeeNo","title","mobile","email"]),Vo=new Set(["fullPath","parent.value","parent.label"]),yo=new Set(["country.value","country.label","province.value","province.label","city.value","city.label","district.value","district.label","street.value","street.label","detail","fullAddress"]),wo=new Set(["longitude","latitude","accuracy"]),Po=new Set(["address","name","province","city","district","source"]);function hs(e){let t=new Map(e.map(n=>[n.code,new Map(n.schema.fields.map(o=>[o.code,o]))]));return e.map(n=>({...n,schema:{...n.schema,fields:n.schema.fields.map(o=>{let i=Fo(o,t);if(!Object.keys(i).length)return o;let r={...o};return Object.defineProperty(r,"queryPathTypes",{configurable:!1,enumerable:!1,writable:!1,value:Object.freeze(i)}),r})}}))}function Ds(e,t){if(ho.has(e.type)&&Ro.has(t)||e.type==="user.single"&&So.has(t)||e.type==="department.single"&&Vo.has(t))return Re(t);if(e.type==="resource-ref.single"){let n=e.queryPathTypes?.[t];return n?{parts:t.split("."),type:n}:null}if(e.type==="address"&&yo.has(t))return Re(t);if(e.type==="location"){if(wo.has(t))return{parts:[t],type:"number.decimal"};if(Po.has(t))return Re(t);if(t==="capturedAt")return{parts:[t],type:"datetime"}}return null}function Fo(e,t){if(e.type!=="resource-ref.single"||!e.source)return{};let n=t.get(e.source.resourceCode);return n?Object.fromEntries((e.source.snapshotFields||[]).flatMap(o=>{let i=n.get(o);return i?[[`snapshot.${o}`,Do.has(i.type)?i.type:"json"]]:[]})):{}}function Re(e){return{parts:e.split("."),type:"text.short"}}function fe(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)?e:void 0}function Zt(e,t){if(e?.instanceCommands===void 0)return[];let n=fe(e.instanceCommands);if(!n||!Object.keys(n).length||Object.keys(n).some(i=>!["withdraw","terminate"].includes(i)))return["WORKFLOW_INSTANCE_COMMAND_POLICIES_INVALID"];let o=[];for(let[i,r]of Object.entries(n)){let a=fe(r),s=i==="withdraw"?["beforeFact"]:["beforeFact","capability"];if(!a||Object.keys(a).some(d=>!s.includes(d))){o.push(`WORKFLOW_INSTANCE_COMMAND_POLICY_INVALID:${i}`);continue}if(i==="terminate"){let d=a.capability;(typeof d!="string"||d.length>255||!/^app:[a-z][a-z0-9]*(?:-[a-z0-9]+)*:[A-Za-z0-9:._-]+$/.test(d)||t&&(!d.startsWith(`app:${t.appCode}:`)||!t.capabilities.includes(d)))&&o.push("WORKFLOW_INSTANCE_TERMINATE_CAPABILITY_INVALID")}if(i==="withdraw"||a.beforeFact!==void 0){let d=a.beforeFact,_=fe(e.inputSchema),E=fe(fe(_?.properties)?.[d]),u=fe(fe(e.subject)?.factProjection)?.[d],c=t?.fields.get(u);(typeof d!="string"||!/^[A-Za-z][A-Za-z0-9_]{0,62}$/.test(d)||!Array.isArray(_?.required)||!_.required.includes(d)||E?.type!=="string"||E?.format!=="date-time"||typeof u!="string"||t&&(c?.type!=="datetime"||c.nullable===!0))&&o.push(`WORKFLOW_INSTANCE_COMMAND_DEADLINE_FACT_INVALID:${i}`)}}return o}function Ss(e,t){let n=e?.terminate?.capability;return typeof n=="string"&&/^app:[a-z][a-z0-9]*(?:-[a-z0-9]+)*:[A-Za-z0-9:._-]+$/.test(n)&&t.includes(n)}function Qt(e){if(typeof e!="string")return null;let t=/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(?:\.(\d{1,3}))?(Z|[+-]\d{2}:\d{2})$/.exec(e);if(!t)return null;let[,n,o,i,r,a,s]=t,d=t[8],_=new Date(Date.UTC(Number(n),Number(o),0)).getUTCDate();if(Number(o)<1||Number(o)>12||Number(i)<1||Number(i)>_||Number(r)>23||Number(a)>59||Number(s)>59||d!=="Z"&&(Number(d.slice(1,3))>23||Number(d.slice(4))>59))return null;let E=Date.parse(e);return Number.isFinite(E)?E:null}function Vs(e,t,n,o){let i=e?.[t];if(!i||t==="terminate"&&i.beforeFact===void 0)return null;let r=i.beforeFact,a=fe(n),s=r&&a&&Object.hasOwn(a,r)?Qt(a[r]):null,d=o instanceof Date?o.getTime():Qt(o);return s===null||d===null||!Number.isFinite(d)?"WORKFLOW_V2_CANCELLATION_DEADLINE_INVALID":d<s?null:"WORKFLOW_V2_CANCELLATION_DEADLINE_PASSED"}import*as ze from"crypto";var en="native-4",tn={"application-native-2":"1.0.0","authz.native-batch-explain":"1.0.0","authz.native-management":"1.0.0","deployment.durable-runs":"1.0.0","deployment.platform-executor":"1.0.0","environment.on-demand-production":"1.0.0","environment.runtime-lifecycle":"1.0.0","data-api-v2":"1.1.0","data.native-golden-crud":"1.0.0","data.audit-read-access":"1.0.0","data.managed-files":"1.1.0","workflow.named-input-sources":"1.0.0","directory-v2":"1.0.0","events-v2":"1.0.0","events.durable-receipts":"1.0.0","events.capture-policy":"1.0.0","workflow-kernel-v2":"1.0.0","workflow.instance-cancellation-policy":"1.0.0","business-process.durable-command":"1.1.0","workflow.fresh-command-token":"1.0.0","notification-hub-v2":"1.0.0","authentication.application-login-surface":"1.0.0","public-access.anonymous-owner-records":"1.0.0"};var Ps=5,Fs=20,Ls=50,vs=50,ks=100,Ve=class extends Error{constructor(n,o){super(n);this.code=n;this.pointer=o;this.name="NativeDataPolicyExpressionV2Error"}code;pointer};function Be(e,t){let n=[],o=(i,r,a)=>{a>5&&Se("NATIVE_DATA_POLICY_EXPRESSION_DEPTH_EXCEEDED",r);let s=on(i,r),d=["allOf","anyOf"].filter(u=>u in s);if(d.length===0){n.push({rule:s,pointer:r}),n.length>50&&Se("NATIVE_DATA_POLICY_EXPRESSION_LEAVES_EXCEEDED",r);return}let _=d[0],E=s[_];(d.length!==1||Object.keys(s).length!==1||!Array.isArray(E)||E.length<1||E.length>20)&&Se("NATIVE_DATA_POLICY_EXPRESSION_GROUP_INVALID",r),E.forEach((u,c)=>o(u,`${r}/${_}/${c}`,a+1))};return o(e,t,1),n}function nn(e,t){Be(e,t);let n=(o,i)=>{let r=on(o,i);if(Array.isArray(r.allOf))return pt(r.allOf.flatMap((a,s)=>n(a,`${i}/allOf/${s}`)),i);if(Array.isArray(r.anyOf)){let a=[[]];return r.anyOf.forEach((s,d)=>{let _=n(s,`${i}/anyOf/${d}`);a=pt(a.flatMap(E=>_.map(u=>[...E,...u])),i)}),a}return[[r]]};return pt(n(e,t),t)}function pt(e,t){let n=e.reduce((o,i)=>o+i.length,0);return(e.length>50||n>100)&&Se("NATIVE_DATA_POLICY_EXPRESSION_EXPANSION_EXCEEDED",t),e}function on(e,t){return(!e||typeof e!="object"||Array.isArray(e))&&Se("NATIVE_DATA_POLICY_EXPRESSION_NODE_INVALID",t),e}function Se(e,t){throw new Ve(e,t)}var Lo="openxiangda.config-bundle/v3",Cn="openxiangda.contract-bundle/v3",sn="openxiangda.native-configuration-projection/v1",we=en,vo=/^[a-f0-9]{64}$/,ko=/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/,Uo=/^app:[a-z][a-z0-9]*(?:-[a-z0-9]+)*:[A-Za-z0-9:._*-]+$/,Mo=/^[a-z][a-z0-9]*(?:[-_.][a-z0-9]+)*$/,xo=/^[a-z][a-z0-9]*(?:[-.][a-z0-9]+)*$/,jo=/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/,Wo=/^[A-Za-z][A-Za-z0-9_]{0,62}$/,rn=/^[A-Za-z][A-Za-z0-9_]{0,127}$/,Bo=/^[a-z][a-z0-9]*(?:[-_][a-z0-9]+)*$/,Jo=/^[A-Z][A-Z0-9_]*$/,Go=/^[A-Za-z][A-Za-z0-9_-]{0,127}$/,zo=/^[A-Za-z][A-Za-z0-9_-]{0,127}$/,Yo=/^[A-Za-z][A-Za-z0-9_.]{0,127}$/,Ho=16,Ko=2*1024,qo=new Set(["text.short","text.long","number.integer","number.decimal","boolean","date","time","datetime","option.single","option.multiple","cascade.single","cascade.multiple","user.single","user.multiple","department.single","department.multiple","resource-ref.single","resource-ref.multiple","uuid","serial-number"]),Xo=new Set(["overview","database","operations","workflow","members","calendar","document","folder","settings"]),Qo=new Set(["approve","reject","return","transfer","delegate","add_assignee","resubmit","withdraw","terminate","admin_reassign","admin_override","retry_resolution"]),Zo=4*1024*1024,ei=8*1024*1024,ti=40,ni=1e5,It=1024*1024,oi="openxiangda.event-handler-manifest/v2",On="openxiangda.application-route-manifest/v3",an=64,ii=new Set(["id","revision","created_by","updated_by","created_at","updated_at"]),B=Object.freeze({perspectives:100,resources:100,capabilities:2e3,operations:500,eventConsumers:100,eventProducers:1e3,eventSchemas:100,eventTypes:500,workflows:100,routes:500,adminPages:500,adminNavigationGroups:100,adminNavigationItems:500}),mt=["openxiangda.data.record.created.v2","openxiangda.data.record.updated.v2","openxiangda.data.record.deleted.v2"],Nt=["openxiangda.workflow.instance.started.v2","openxiangda.workflow.instance.cc_added.v2","openxiangda.workflow.instance.completed.v2","openxiangda.workflow.instance.rejected.v2","openxiangda.workflow.instance.returned.v2","openxiangda.workflow.instance.resumed.v2","openxiangda.workflow.instance.withdrawn.v2","openxiangda.workflow.instance.terminated.v2","openxiangda.workflow.task.created.v2","openxiangda.workflow.task.assigned.v2","openxiangda.workflow.task.assignment_pending.v2","openxiangda.workflow.task.assignment_resolution_failed.v2","openxiangda.workflow.task.approved.v2","openxiangda.workflow.task.completed.v2","openxiangda.workflow.task.rejected.v2","openxiangda.workflow.task.returned.v2","openxiangda.workflow.task.resubmitted.v2","openxiangda.workflow.task.transferred.v2","openxiangda.workflow.task.reassigned.v2","openxiangda.workflow.task.delegated.v2","openxiangda.workflow.task.assignee_added.v2","openxiangda.workflow.task.cancelled.v2","openxiangda.workflow.participant.activated.v2","openxiangda.workflow.participant.completed.v2","openxiangda.workflow.participant.rejected.v2","openxiangda.workflow.participant.returned.v2","openxiangda.workflow.participant.transferred.v2","openxiangda.workflow.participant.reassigned.v2","openxiangda.workflow.participant.delegated.v2","openxiangda.workflow.participant.added.v2","openxiangda.workflow.participant.suspended.v2","openxiangda.workflow.participant.resumed.v2","openxiangda.workflow.participant.cancelled.v2"],si=new Set(Nt),Tt=class extends Error{code;pointer;identifiers;constructor(t,n,o={}){super(t),this.name="NativeConfigurationCompilerError",this.code=t,this.pointer=n,this.identifiers=Object.fromEntries(Object.entries(o).slice(0,8).map(([i,r])=>[i,String(r).slice(0,128)]))}};function qs(e){let t=b(e.appCode,"/appCode",128);ko.test(t)||l("NATIVE_CONFIG_APP_CODE_INVALID","/appCode");let n=Ct(e.expectedConfigDigest,"/expectedConfigDigest"),o=Ct(e.expectedContractDigest,"/expectedContractDigest"),i=Nn(e.configBytes,Zo,"/configBytes","NATIVE_CONFIG_ARTIFACT_TOO_LARGE"),r=Nn(e.contractBytes,ei,"/contractBytes","NATIVE_CONTRACT_ARTIFACT_TOO_LARGE");Tn(i,n,"/configBytes","NATIVE_CONFIG_DIGEST_MISMATCH"),Tn(r,o,"/contractBytes","NATIVE_CONTRACT_DIGEST_MISMATCH");let a=In(i,"/configBytes","NATIVE_CONFIG_JSON_INVALID","NATIVE_CONFIG_NOT_CANONICAL"),s=In(r,"/contractBytes","NATIVE_CONTRACT_JSON_INVALID","NATIVE_CONTRACT_NOT_CANONICAL");mn(a,"/config"),mn(s,"/contracts");let d=a,_=s;di(d,t),li(_,t,n);let E=ui(d,n,_.generatorVersion);W(E)!==W(_)&&l("NATIVE_CONTRACT_CLOSURE_MISMATCH",Ot(E,_,"/contracts"));let u={authz:{appCode:t,...d.authz,perspectives:d.perspectives,capabilityCatalog:E.capabilities},data:{appCode:t,resources:d.data.resources,resourceContracts:E.resources},events:{appCode:t,...d.events,consumers:E.eventConsumers,producers:E.eventProducers,handlerManifest:E.eventHandlerManifest,eventTypes:E.eventTypes,capturePlans:ai({resources:d.data.resources,dataPolicies:d.authz.dataPolicies,subscriptions:E.eventConsumers,capturePolicies:d.events.capturePolicies})},workflows:{appCode:t,...d.workflows,contracts:E.workflows},runtime:{appCode:t,requirements:d.runtime,backend:d.backend,frontend:d.frontend},contracts:E},c={authz:Ce(u.authz),data:Ce(u.data),events:Ce(u.events),workflows:Ce(u.workflows),runtime:Ce(u.runtime),contracts:Ce(u.contracts)},p={configDigest:n,contractDigest:o,generatorVersion:_.generatorVersion},f=ri(d),A={schemaVersion:sn,compilerContractVersion:we,appCode:t,source:p,projections:c,requiredPlatformCapabilities:f,aggregateDigest:Z({schemaVersion:sn,compilerContractVersion:we,appCode:t,source:p,requiredPlatformCapabilities:f,projectionDigests:Object.fromEntries(Object.entries(c).map(([m,N])=>[m,N.digest]))})};return Ln(A)}function ri(e){let t=e.authz.roles,n=e.data.resources,o=e.backend.operations,i=t.some(f=>f.capabilities.some(A=>A.endsWith(":directory:read")))||n.some(f=>f.schema.fields.some(A=>["user.single","user.multiple","department.single","department.multiple"].includes(A.type)))||o.some(f=>f.platformAccess?.directory),r=!!(e.events.subscriptions.length||e.events.timers.length||e.events.dateTriggers.length||e.events.schemas.length),a=o.some(f=>f.platformAccess?.managedFiles||f.platformAccess?.managedFileCopies)||e.events.subscriptions.some(f=>f.platformAccess?.managedFileCopies),s=o.some(f=>f.platformAccess?.notification)||e.events.subscriptions.some(f=>f.platformAccess?.notification),d=e.workflows.definitions.filter(f=>f.launch.mode==="standalone"||f.launch.mode==="hidden-handoff"),_=o.some(f=>f.platformAccess?.workflow)||d.length>0,E={resources:n},u={perspectives:e.perspectives,authz:e.authz},c={schemaVersion:e.schemaVersion,appCode:e.appCode,frontend:{routes:e.frontend.routes,user:e.frontend.user,admin:e.frontend.admin,devicePolicy:e.frontend.devicePolicy},backend:{operations:o.map(f=>({code:f.code,method:f.method,path:f.path,capability:f.capability,platformAccess:f.platformAccess||null,ai:f.ai||null}))}};return[{code:"application-native-2",declaration:c},{code:"authz.native-batch-explain",declaration:u},{code:"authz.native-management",declaration:u},{code:"deployment.durable-runs",declaration:c.backend},{code:"deployment.platform-executor",declaration:c.backend},{code:"environment.on-demand-production",declaration:{environments:["preproduction","production"]}},{code:"environment.runtime-lifecycle",declaration:{environments:["preproduction","production"]}},...n.length?[{code:"data-api-v2",declaration:E},{code:"data.native-golden-crud",declaration:E}]:[],...n.some(Jt)?[{code:"data.audit-read-access",declaration:E}]:[],...i?[{code:"directory-v2",declaration:{roles:t.map(f=>({code:f.code,capabilities:f.capabilities.filter(A=>A.endsWith(":directory:read"))})),resources:n.map(f=>({code:f.code,fields:f.schema.fields.filter(A=>["user.single","user.multiple","department.single","department.multiple"].includes(A.type))})),operations:o.filter(f=>f.platformAccess?.directory).map(f=>({code:f.code,directory:f.platformAccess.directory}))}}]:[],...a?[{code:"data.managed-files",declaration:{operations:o.filter(f=>f.platformAccess?.managedFiles||f.platformAccess?.managedFileCopies).map(f=>({code:f.code,...f.platformAccess?.managedFiles?{managedFiles:f.platformAccess.managedFiles}:{},...f.platformAccess?.managedFileCopies?{managedFileCopies:f.platformAccess.managedFileCopies}:{}})),subscriptions:e.events.subscriptions.filter(f=>f.platformAccess?.managedFileCopies).map(f=>({code:f.code,managedFileCopies:f.platformAccess.managedFileCopies}))}}]:[],...e.events.capturePolicies?.length?[{code:"events.capture-policy",declaration:e.events.capturePolicies}]:[],...r?[{code:"events-v2",declaration:e.events},{code:"events.durable-receipts",declaration:e.events}]:[],...e.workflows.activations.length?[{code:"workflow-kernel-v2",declaration:e.workflows},{code:"workflow.fresh-command-token",declaration:e.workflows}]:[],...e.workflows.definitions.some(f=>f.definition.instanceCommands!==void 0)?[{code:"workflow.instance-cancellation-policy",declaration:e.workflows.definitions.filter(f=>f.definition.instanceCommands!==void 0)}]:[],..._?[{code:"business-process.durable-command",declaration:{operations:o.filter(f=>f.platformAccess?.workflow).map(f=>({code:f.code,workflow:f.platformAccess.workflow})),definitions:d,activations:e.workflows.activations.filter(f=>d.some(A=>A.definition.code===f.workflowCode))}}]:[],...s?[{code:"notification-hub-v2",declaration:{operations:o.filter(f=>f.platformAccess?.notification).map(f=>({code:f.code,notification:f.platformAccess.notification})),subscriptions:e.events.subscriptions.filter(f=>f.platformAccess?.notification).map(f=>({code:f.code,notification:f.platformAccess.notification}))}}]:[],...e.frontend.authentication?[{code:"authentication.application-login-surface",declaration:e.frontend.authentication}]:[],...e.frontend.publicAccess?[{code:"public-access.anonymous-owner-records",declaration:e.frontend.publicAccess}]:[]].map(({code:f,declaration:A})=>({code:f,contractVersion:tn[f],usageDigest:`sha256:${Z(A)}`})).sort((f,A)=>f.code===A.code?0:f.code<A.code?-1:1)}function ai(e){let t=new Map,n=new Set(e.resources.map(r=>String(r.code)));for(let[r,a]of h(e.capturePolicies===void 0?[]:e.capturePolicies,"/capturePlan/capturePolicies",100).entries()){let s=`/capturePlan/capturePolicies/${r}`,d=I(a,s);T(d,["resourceCode","mode"],s);let _=M(d.resourceCode,`${s}/resourceCode`);n.has(_)||l("NATIVE_EVENT_CAPTURE_RESOURCE_NOT_FOUND",s,{resourceCode:_}),t.has(_)&&l("NATIVE_EVENT_CAPTURE_POLICY_DUPLICATE",s,{resourceCode:_}),d.mode!=="all"&&d.mode!=="subscribed"&&l("NATIVE_EVENT_CAPTURE_MODE_INVALID",`${s}/mode`),t.set(_,d.mode)}let o=new Map(e.dataPolicies.map((r,a)=>{let s=I(r,`/capturePlan/dataPolicies/${a}`);return[String(s.code),s]})),i=e.subscriptions.map((r,a)=>I(r,`/capturePlan/subscriptions/${a}`));return e.resources.map((r,a)=>{let s=`/capturePlan/resources/${a}`,d=I(r,s),_=M(d.code,`${s}/code`),E=d.schema?I(d.schema,`${s}/schema`):d,u=new Set(h(E.fields||[],`${s}/schema/fields`,500).map((C,F)=>J(I(C,`${s}/schema/fields/${F}`).code,`${s}/schema/fields/${F}/code`))),c=d.dataPolicyCode?R(d.dataPolicyCode,`${s}/dataPolicyCode`):null,p=c?o.get(c):void 0;c&&!p&&l("NATIVE_EVENT_CAPTURE_AUTHZ_POLICY_NOT_FOUND",s,{resourceCode:_,dataPolicyCode:c});let f=new Set;for(let C of p?.rules||[])f.add(String(C.field));if(p?.readExpression)for(let C of Be(p.readExpression,`${s}/readExpression`))f.add(String(C.rule.field));let A=new Set,m=new Set,N=new Set;for(let[C,F]of i.entries()){let y=h(F.eventTypes,`/capturePlan/subscriptions/${C}/eventTypes`,20).map(String);if(!y.some(S=>S.startsWith("openxiangda.data.")))continue;let v=I(F.filter||{},`/capturePlan/subscriptions/${C}/filter`),U=Array.isArray(v.resourceCodes)?v.resourceCodes.map(String):[];if(U.length&&!U.includes(_))continue;for(let S of y)mt.includes(S)&&N.add(S);for(let S of ci(v,`/capturePlan/subscriptions/${C}/filter`))A.add(S);let G=I(F.payload||{},`/capturePlan/subscriptions/${C}/payload`);for(let S of h(G.fields||[],`/capturePlan/subscriptions/${C}/payload/fields`,32))m.add(J(S,`/capturePlan/subscriptions/${C}/payload/fields`))}let g=new Set([...A,...m]),$=new Set([...g,...f]);$.size>an&&l("NATIVE_EVENT_CAPTURE_FIELDS_LIMIT",s,{resourceCode:_,maximum:an});for(let C of $)!u.has(C)&&!(f.has(C)&&ii.has(C))&&l("NATIVE_EVENT_CAPTURE_FIELD_NOT_FOUND",s,{resourceCode:_,field:C});let V=I(d.fieldPolicies||{},`${s}/fieldPolicies`);for(let C of g)V[C]?.mask==="omit"&&l("NATIVE_EVENT_CAPTURE_FIELD_SENSITIVE",s,{resourceCode:_,field:C});let D={resourceCode:_,...t.get(_)==="subscribed"?{capturedEventTypes:[...N].sort()}:{},filterFields:[...A].sort(),projectionFields:[...m].sort(),authorizationFields:[...f].sort(),captureFields:[...$].sort()};return{...D,digest:Z(D)}}).sort((r,a)=>r.resourceCode.localeCompare(a.resourceCode))}function ci(e,t){let n=new Set;for(let[a,s]of h(e.changes||[],`${t}/changes`,16).entries()){let d=I(s,`${t}/changes/${a}`);n.add(J(d.field,`${t}/changes/${a}/field`))}let o=I(e.changedFields||{},`${t}/changedFields`);for(let a of["anyOf","allOf","noneOf"])for(let[s,d]of h(o[a]||[],`${t}/changedFields/${a}`,32).entries())n.add(J(d,`${t}/changedFields/${a}/${s}`));let i=0,r=(a,s,d)=>{d>3&&l("NATIVE_EVENT_FILTER_DEPTH_LIMIT",s);let _=I(a,s);if(_.change){let u=I(_.change,`${s}/change`);n.add(J(u.field,`${s}/change/field`)),i+=1;return}if(_.not){r(_.not,`${s}/not`,d+1);return}let E=_.all?"all":_.any?"any":null;E||l("NATIVE_EVENT_FILTER_CONDITION_INVALID",s);for(let[u,c]of h(_[E],`${s}/${E}`,16).entries())r(c,`${s}/${E}/${u}`,d+1)};return e.where&&r(e.where,`${t}/where`,1),i+=Array.isArray(e.changes)?e.changes.length:0,i>16&&l("NATIVE_EVENT_FILTER_ATOM_LIMIT",t),[...n].sort()}function di(e,t){T(e,["schemaVersion","compilerContractVersion","appCode","perspectives","authz","backend","data","events","workflows","frontend","runtime"],"/config"),L(e.schemaVersion,Lo,"/config/schemaVersion"),L(e.compilerContractVersion,we,"/config/compilerContractVersion"),L(e.appCode,t,"/config/appCode"),h(e.perspectives,"/config/perspectives",100);let n=I(e.authz,"/config/authz");T(n,["capabilities","roles","scopeDimensions","scopeSources","roleMembershipSources","relationshipGrantSources","dataPolicies","authorizationTransitions"],"/config/authz",["authenticatedUserRoleCode"]),h(n.capabilities,"/config/authz/capabilities",2e3),h(n.roles,"/config/authz/roles",100),h(n.scopeDimensions,"/config/authz/scopeDimensions",100),h(n.scopeSources,"/config/authz/scopeSources",100),h(n.roleMembershipSources,"/config/authz/roleMembershipSources",100),h(n.relationshipGrantSources,"/config/authz/relationshipGrantSources",100),h(n.dataPolicies,"/config/authz/dataPolicies",100),h(n.authorizationTransitions,"/config/authz/authorizationTransitions",100);let o=I(e.backend,"/config/backend");T(o,["secrets","operations"],"/config/backend"),h(o.secrets,"/config/backend/secrets",100),h(o.operations,"/config/backend/operations",500),Wi(o.secrets);let i=I(e.data,"/config/data");T(i,["resources"],"/config/data",["resourceDetailRoutes"]),h(i.resources,"/config/data/resources",100),i.resourceDetailRoutes!==void 0&&h(i.resourceDetailRoutes,"/config/data/resourceDetailRoutes",100);let r=I(e.events,"/config/events");T(r,["schemas","subscriptions","timers","dateTriggers"],"/config/events",["capturePolicies"]),h(r.schemas,"/config/events/schemas",100),h(r.subscriptions,"/config/events/subscriptions",100),h(r.timers,"/config/events/timers",100),h(r.dateTriggers,"/config/events/dateTriggers",100);let a=I(e.workflows,"/config/workflows");T(a,["definitions","bindings","activations","providers","editableParameters"],"/config/workflows"),h(a.definitions,"/config/workflows/definitions",100),h(a.bindings,"/config/workflows/bindings",100),h(a.activations,"/config/workflows/activations",100),h(a.providers,"/config/workflows/providers",100),h(a.editableParameters,"/config/workflows/editableParameters",100);let s=I(e.frontend,"/config/frontend");T(s,["routes","user","admin","devicePolicy"],"/config/frontend",["authentication","publicAccess"]),h(s.routes,"/config/frontend/routes",500);let d=I(s.user,"/config/frontend/user");T(d,["applicationTodoCenter"],"/config/frontend/user"),be(d.applicationTodoCenter,"/config/frontend/user/applicationTodoCenter"),bt(s.devicePolicy,"/config/frontend/devicePolicy"),Object.prototype.hasOwnProperty.call(s,"authentication")&&$n(s.authentication,s.routes,e,"/config/frontend/authentication"),Object.prototype.hasOwnProperty.call(s,"publicAccess")&&Oi(s.publicAccess,e,"/config/frontend/publicAccess");let _=I(s.admin,"/config/frontend/admin");T(_,["navigation"],"/config/frontend/admin",["access"]),_.access!==void 0&&He(_.access,"/config/frontend/admin/access",e.appCode),Di(_.navigation,"/config/frontend/admin/navigation");let E=I(e.runtime,"/config/runtime");T(E,["protocolCapabilities","health"],"/config/runtime"),P(E.protocolCapabilities,"/config/runtime/protocolCapabilities",100),T(I(E.health,"/config/runtime/health"),["livePath","readyPath","versionPath"],"/config/runtime/health"),L(E.health.livePath,"/__platform/health","/config/runtime/health/livePath"),L(E.health.readyPath,"/__platform/ready","/config/runtime/health/readyPath"),L(E.health.versionPath,"/__platform/version","/config/runtime/health/versionPath")}function li(e,t,n){T(e,["schemaVersion","compilerContractVersion","generatorVersion","appCode","configDigest","perspectives","resources","capabilities","operations","eventConsumers","eventProducers","eventSchemas","eventHandlerManifest","eventTypes","workflows","routes","routeManifest","adminPages","adminNavigation"],"/contracts",["authentication","publicAccess","adminAccess"]),L(e.schemaVersion,Cn,"/contracts/schemaVersion"),L(e.compilerContractVersion,we,"/contracts/compilerContractVersion"),b(e.generatorVersion,"/contracts/generatorVersion",128),L(e.appCode,t,"/contracts/appCode"),L(e.configDigest,n,"/contracts/configDigest"),h(e.perspectives,"/contracts/perspectives",B.perspectives),h(e.resources,"/contracts/resources",B.resources),h(e.capabilities,"/contracts/capabilities",B.capabilities),h(e.operations,"/contracts/operations",B.operations),h(e.eventConsumers,"/contracts/eventConsumers",B.eventConsumers),h(e.eventProducers,"/contracts/eventProducers",B.eventProducers),h(e.eventSchemas,"/contracts/eventSchemas",B.eventSchemas),I(e.eventHandlerManifest,"/contracts/eventHandlerManifest"),P(e.eventTypes,"/contracts/eventTypes",B.eventTypes),h(e.workflows,"/contracts/workflows",B.workflows),h(e.routes,"/contracts/routes",B.routes),Object.prototype.hasOwnProperty.call(e,"authentication")&&Ti(e.authentication,"/contracts/authentication"),Object.prototype.hasOwnProperty.call(e,"publicAccess")&&bi(e.publicAccess,"/contracts/publicAccess"),Object.prototype.hasOwnProperty.call(e,"adminAccess")&&He(e.adminAccess,"/contracts/adminAccess",t),Pi(e.routeManifest,"/contracts/routeManifest",t),Vi(e.adminPages,"/contracts/adminPages"),yi(e.adminNavigation,"/contracts/adminNavigation")}function ui(e,t,n){let o=Ei(e);Ui(e,o),xi(e),Mi(e),Bi(e);let i=e.events.schemas.map((c,p)=>{let f=`/config/events/schemas/${p}`,A=I(c,f),m=b(A.eventType,`${f}/eventType`,255);return m.startsWith("openxiangda.")&&l("NATIVE_EVENT_SCHEMA_RESERVED",`${f}/eventType`,{eventType:m}),L(A.schemaDigest,Z(I(A.jsonSchema,`${f}/jsonSchema`)),`${f}/schemaDigest`),A}),r=new Set([...mt,...Nt,...i.map(c=>String(c.eventType))]),a=new Map(e.data.resources.map(c=>[String(c.code),new Map(c.schema.fields.map(p=>[String(p.code),String(p.type)]))])),s=q(e.events.subscriptions.map((c,p)=>{let f=`/config/events/subscriptions/${p}`,A=I(c,f),m=P(A.eventTypes,`${f}/eventTypes`,20);m.forEach(($,V)=>{r.has($)||l("NATIVE_EVENT_TYPE_NOT_REGISTERED",`${f}/eventTypes/${V}`,{eventType:$})});let N=_i(A.delivery,m,`${f}/delivery`),g=fi(A.platformAccess,`${f}/platformAccess`,a);return{code:R(A.code,`${f}/code`),endpointPath:ee(A.endpointPath,`${f}/endpointPath`),eventTypes:m,filter:I(A.filter,`${f}/filter`),payload:I(A.payload,`${f}/payload`),...g?{platformAccess:g}:{},delivery:N}}),c=>c.code),d=new Map(i.map(c=>[String(c.eventType),String(c.dataSchemaVersion)])),_=q([...e.data.resources.flatMap(c=>mt.map(p=>({code:`data:${c.code}:${p}`,source:"data",eventType:p,dataSchemaVersion:"2.0.0",resourceCode:c.code}))),...i.map(c=>({code:`app:${c.eventType}`,source:"app",eventType:c.eventType,dataSchemaVersion:c.dataSchemaVersion})),...e.events.timers.map(c=>({code:c.code,source:"timer",eventType:c.eventType,dataSchemaVersion:d.get(String(c.eventType))||"2.0.0"})),...e.events.dateTriggers.map(c=>({code:c.code,source:"date",eventType:c.eventType,dataSchemaVersion:d.get(String(c.eventType))||"2.0.0",resourceCode:c.resourceCode,field:c.field})),...e.workflows.activations.length?Nt.map(c=>({code:`workflow:${c}`,source:"workflow",eventType:c,dataSchemaVersion:"2.0.0"})):[]],c=>`${c.source}:${c.code}:${c.eventType}`),E=k([...s.flatMap(c=>c.eventTypes),..._.map(c=>String(c.eventType))]);Si(e);let u=Rn(e);return{schemaVersion:Cn,compilerContractVersion:we,generatorVersion:n,appCode:e.appCode,configDigest:t,perspectives:e.perspectives,resources:pi(e),capabilities:q(o,c=>c.code),operations:bn(e),eventConsumers:s,eventProducers:_,eventSchemas:i,eventHandlerManifest:{schemaVersion:oi,appCode:e.appCode,handlers:s.map(c=>({code:c.code,endpointPath:c.endpointPath,eventTypes:c.eventTypes,dataSchemaVersions:k(c.eventTypes.map(p=>p.startsWith("openxiangda.")?"2.0.0":d.get(p)||"2.0.0")),maxBodyBytes:65536,receiptProtocolVersion:2}))},eventTypes:E,workflows:yn(e),routes:Ye(e),...Object.prototype.hasOwnProperty.call(e.frontend,"authentication")?{authentication:gi(e)}:{},...Object.prototype.hasOwnProperty.call(e.frontend,"publicAccess")?{publicAccess:$i(e)}:{},...e.frontend.admin.access?{adminAccess:e.frontend.admin.access}:{},routeManifest:vi(e),adminPages:u,adminNavigation:hi(e)}}function fi(e,t,n){if(e===void 0)return;let o=I(e,t);T(o,["notification","managedFileCopies"],t,!0);let i={};if(o.notification!==void 0){let r=I(o.notification,`${t}/notification`);T(r,["mode"],`${t}/notification`),L(r.mode,"business-standard",`${t}/notification/mode`),i.notification={mode:"business-standard"}}if(o.managedFileCopies!==void 0){let r=h(o.managedFileCopies,`${t}/managedFileCopies`,16);r.length||l("NATIVE_EVENT_MANAGED_FILE_COPIES_REQUIRED",`${t}/managedFileCopies`);let a=new Set;i.managedFileCopies=q(r.map((s,d)=>{let _=`${t}/managedFileCopies/${d}`,E=I(s,_);T(E,["mode","sourceResourceCode","sourceFieldCodes","targetResourceCode","targetFieldCodes"],_),L(E.mode,"copy",`${_}/mode`);let u=M(E.sourceResourceCode,`${_}/sourceResourceCode`),c=M(E.targetResourceCode,`${_}/targetResourceCode`),p=n.get(u),f=n.get(c);(!p||!f)&&l("NATIVE_EVENT_MANAGED_FILE_COPY_RESOURCE_INVALID",_);let A=P(E.sourceFieldCodes,`${_}/sourceFieldCodes`,16),m=P(E.targetFieldCodes,`${_}/targetFieldCodes`,16);(!A.length||A.length!==m.length)&&l("NATIVE_EVENT_MANAGED_FILE_COPY_FIELDS_INVALID",_),A.forEach((g,$)=>{let V=p.get(g),D=f.get(m[$]);(!["file","image"].includes(String(V))||V!==D)&&l("NATIVE_EVENT_MANAGED_FILE_COPY_FIELD_INVALID",`${_}/sourceFieldCodes/${$}`)});let N=`${u}:${A.join(",")}=>${c}:${m.join(",")}`;return a.has(N)&&l("NATIVE_EVENT_MANAGED_FILE_COPY_DUPLICATE",_),a.add(N),{mode:"copy",sourceResourceCode:u,sourceFieldCodes:k(A),targetResourceCode:c,targetFieldCodes:k(m)}}),s=>`${s.sourceResourceCode}:${s.sourceFieldCodes.join(",")}=>${s.targetResourceCode}:${s.targetFieldCodes.join(",")}`)}return Object.keys(i).length||l("NATIVE_EVENT_PLATFORM_ACCESS_EMPTY",t),i}function _i(e,t,n){let o=I(e,n);T(o,["timeoutMs","maxAttempts","initialBackoffMs","maxBackoffMs","ordering","concurrency"],n),H(o.timeoutMs,`${n}/timeoutMs`,1e3,3e4),H(o.maxAttempts,`${n}/maxAttempts`,1,12);let i=H(o.initialBackoffMs,`${n}/initialBackoffMs`,1e3,3e5);H(o.maxBackoffMs,`${n}/maxBackoffMs`,i,18e5),H(o.concurrency,`${n}/concurrency`,1,50);let r=b(o.ordering,`${n}/ordering`,32);return["none","record","workflow-instance"].includes(r)||l("NATIVE_EVENT_DELIVERY_ORDERING_INVALID",`${n}/ordering`),r==="workflow-instance"&&t.some(a=>!si.has(a))&&l("NATIVE_EVENT_WORKFLOW_ORDERING_REQUIRES_WORKFLOW_FACTS",`${n}/ordering`),o}function Ei(e){let t=new Map;for(let n of Fn(e.appCode))t.set(n.code,n);for(let[n,o]of e.authz.capabilities.entries()){let i=`/config/authz/capabilities/${n}`,r=I(o,i);T(r,["code","kind","name","description"],i,!0);let a=_e(r.code,`${i}/code`,e.appCode);t.has(a)&&l("NATIVE_CAPABILITY_DUPLICATE",`${i}/code`),["backend","ui"].includes(r.kind)||l("NATIVE_CAPABILITY_KIND_INVALID",`${i}/kind`);let s={code:a,kind:r.kind,name:b(r.name,`${i}/name`,255),source:"explicit",...r.description===void 0?{}:{description:ht(r.description,`${i}/description`,2e3)}};t.set(a,s)}for(let[n,o]of e.data.resources.entries()){let i=`/config/data/resources/${n}`,r=Pe(o,i,e.appCode),a={read:`\u8BFB\u53D6${r.name}`,create:`\u65B0\u5EFA${r.name}`,update:`\u66F4\u65B0${r.name}`,delete:`\u5220\u9664${r.name}`};for(let s of["read","create","update","delete"]){let d=_e(r.capabilities[s],`${i}/capabilities/${s}`,e.appCode);t.has(d)&&l("NATIVE_CAPABILITY_DUPLICATE",`${i}/capabilities/${s}`),t.set(d,{code:d,kind:"data",name:a[s],source:"data"})}for(let[s,d]of Object.entries(r.fieldPolicies)){if(he(s))continue;let _=I(d,`${i}/fieldPolicies/${s}`);for(let E of["read","create","update"])if(Array.isArray(_[E]))for(let u of P(_[E],`${i}/fieldPolicies/${s}/${E}`,2e3))_e(u,`${i}/fieldPolicies/${s}/${E}`,e.appCode),!t.has(u)&&t.set(u,{code:u,kind:"data",name:`${r.name}.${s}.${E}`,source:"data"})}}return[...t.values()]}function pi(e){let t=Ai(e);return q(e.data.resources.map((n,o)=>{let i=Pe(n,`/config/data/resources/${o}`,e.appCode),r=t.get(i.code);return{code:i.code,schemaDigest:Z(i.schema),fields:q(i.schema.fields.map(a=>({code:a.code,type:a.type})),a=>a.code),...r?{detailRouteCode:r}:{}}}),n=>n.code)}function Ai(e){let t=e.data.resourceDetailRoutes===void 0?[]:h(e.data.resourceDetailRoutes,"/config/data/resourceDetailRoutes",100),n=new Map(e.data.resources.map((r,a)=>{let s=`/config/data/resources/${a}`,d=Pe(r,s,e.appCode);return[d.code,d]})),o=new Map(Ye(e).map(r=>[String(r.code),r])),i=new Map;for(let[r,a]of t.entries()){let s=`/config/data/resourceDetailRoutes/${r}`,d=I(a,s);T(d,["resourceCode","desktop","mobile"],s);let _=M(d.resourceCode,`${s}/resourceCode`);i.has(_)&&l("NATIVE_DATA_RESOURCE_DETAIL_ROUTE_DUPLICATE",`${s}/resourceCode`);let E=n.get(_);E||l("NATIVE_DATA_RESOURCE_DETAIL_ROUTE_RESOURCE_MISSING",`${s}/resourceCode`);let u=R(d.desktop,`${s}/desktop`),c=R(d.mobile,`${s}/mobile`);u===c&&l("NATIVE_DATA_RESOURCE_DETAIL_ROUTE_INVALID",s);let p=String(E.capabilities.read);for(let[f,A]of[["desktop",u],["mobile",c]]){let m=`${s}/${f}`,N=o.get(A);N||l("NATIVE_DATA_RESOURCE_DETAIL_ROUTE_REFERENCE_MISSING",m),N.surface!=="user"&&l("NATIVE_DATA_RESOURCE_DETAIL_ROUTE_SURFACE_INVALID",m);let g=ee(N.path,`${m}/path`),$=[...g.matchAll(/:([A-Za-z][A-Za-z0-9_]*)/g)],V=f==="mobile"?!g.startsWith("/m/"):g==="/m"||g.startsWith("/m/");(g.includes("*")||g.includes("?")||g.includes("#")||g.split("/").includes("..")||$.length!==1||V)&&l("NATIVE_DATA_RESOURCE_DETAIL_ROUTE_PATH_INVALID",m);let D=Array.isArray(N.access?.allOf)?N.access.allOf:[];N.capability!==p&&!D.includes(p)&&l("NATIVE_DATA_RESOURCE_DETAIL_ROUTE_CAPABILITY_INVALID",m)}i.set(_,{desktop:u,mobile:c})}return i}function bn(e){let t=new Map(e.data.resources.map((i,r)=>{let a=`/config/data/resources/${r}`,s=Pe(i,a,e.appCode);return[s.code,new Map(s.schema.fields.map(d=>[String(d.code),String(d.type)]))]})),n=new Set(t.keys()),o=new Set(e.workflows.activations.map((i,r)=>Ke(I(i,`/config/workflows/activations/${r}`).workflowCode,`/config/workflows/activations/${r}/workflowCode`)));return q(e.backend.operations.map((i,r)=>{let a=`/config/backend/operations/${r}`,s=I(i,a);T(s,["code","method","path","capability","requestSchema","responseSchema","description","platformAccess","ai"],a,!0);let d=b(s.method,`${a}/method`,16);["GET","POST","PUT","PATCH","DELETE"].includes(d)||l("NATIVE_OPERATION_METHOD_INVALID",`${a}/method`);let _=R(s.code,`${a}/code`);mi(s.ai,a,_,d,n);let E=Ii(s.platformAccess,`${a}/platformAccess`,t,o,new Set(e.authz.roles.map(u=>String(u.code))));return{code:_,method:d,path:ee(s.path,`${a}/path`),requiredCapability:_e(s.capability,`${a}/capability`,e.appCode),requestSchemaDigest:Z(I(s.requestSchema,`${a}/requestSchema`)),responseSchemaDigest:Z(I(s.responseSchema,`${a}/responseSchema`)),...s.description===void 0?{}:{description:ht(s.description,`${a}/description`,2e3)},...E?{platformAccess:E}:{}}}),i=>i.code)}function Ii(e,t,n,o,i){if(e===void 0)return null;let r=I(e,t);T(r,["directory","managedFiles","managedFileCopies","notification","workflow","roleAssertions"],t,!0),Object.keys(r).length===0&&l("NATIVE_OPERATION_PLATFORM_ACCESS_EMPTY",t);let a={};if(r.roleAssertions!==void 0){let s=I(r.roleAssertions,`${t}/roleAssertions`);T(s,["roleCodes"],`${t}/roleAssertions`);let d=P(s.roleCodes,`${t}/roleAssertions/roleCodes`,20);d.length||l("NATIVE_OPERATION_ROLE_ASSERTIONS_REQUIRED",`${t}/roleAssertions/roleCodes`),d.forEach((_,E)=>{i.has(_)||l("NATIVE_ROLE_REFERENCE_MISSING",`${t}/roleAssertions/roleCodes/${E}`)}),a.roleAssertions={roleCodes:k(d)}}if(r.directory!==void 0){let s=I(r.directory,`${t}/directory`);T(s,["mode","fields"],`${t}/directory`),s.mode!=="current-initiator"&&l("NATIVE_OPERATION_DIRECTORY_MODE_INVALID",`${t}/directory/mode`);let d=new Set(["displayName","employeeNumber","primaryDepartment","departments"]),_=P(s.fields,`${t}/directory/fields`,4);(!_.length||_.some(E=>!d.has(E)))&&l("NATIVE_OPERATION_DIRECTORY_FIELDS_INVALID",`${t}/directory/fields`),a.directory={mode:"current-initiator",fields:k(_)}}if(r.managedFiles!==void 0){let s=h(r.managedFiles,`${t}/managedFiles`,16);s.length||l("NATIVE_OPERATION_MANAGED_FILES_REQUIRED",`${t}/managedFiles`);let d=new Set;a.managedFiles=q(s.map((_,E)=>{let u=`${t}/managedFiles/${E}`,c=I(_,u);T(c,["resourceCode","fieldCodes","intents"],u);let p=M(c.resourceCode,`${u}/resourceCode`);(d.has(p)||!n.has(p))&&l("NATIVE_OPERATION_MANAGED_FILE_RESOURCE_INVALID",`${u}/resourceCode`),d.add(p);let f=P(c.fieldCodes,`${u}/fieldCodes`,16);(!f.length||f.some(m=>!["file","image","signature"].includes(String(n.get(p)?.get(m)||""))))&&l("NATIVE_OPERATION_MANAGED_FILE_FIELD_INVALID",`${u}/fieldCodes`);let A=P(c.intents,`${u}/intents`,2);return(!A.length||A.some(m=>!["create","update"].includes(m)))&&l("NATIVE_OPERATION_MANAGED_FILE_INTENT_INVALID",`${u}/intents`),{resourceCode:p,fieldCodes:k(f),intents:k(A)}}),_=>_.resourceCode)}if(r.managedFileCopies!==void 0){let s=h(r.managedFileCopies,`${t}/managedFileCopies`,16);s.length||l("NATIVE_OPERATION_MANAGED_FILE_COPIES_REQUIRED",`${t}/managedFileCopies`);let d=new Set;a.managedFileCopies=q(s.map((_,E)=>{let u=`${t}/managedFileCopies/${E}`,c=I(_,u);T(c,["mode","sourceResourceCode","sourceFieldCodes","targetResourceCode","targetFieldCodes"],u),L(c.mode,"copy",`${u}/mode`);let p=M(c.sourceResourceCode,`${u}/sourceResourceCode`),f=M(c.targetResourceCode,`${u}/targetResourceCode`),A=n.get(p),m=n.get(f);(!A||!m)&&l("NATIVE_OPERATION_MANAGED_FILE_COPY_RESOURCE_INVALID",u);let N=P(c.sourceFieldCodes,`${u}/sourceFieldCodes`,16),g=P(c.targetFieldCodes,`${u}/targetFieldCodes`,16);(!N.length||N.length!==g.length)&&l("NATIVE_OPERATION_MANAGED_FILE_COPY_FIELDS_INVALID",u),N.forEach((V,D)=>{let C=A.get(V),F=m.get(g[D]);(!["file","image"].includes(String(C))||C!==F)&&l("NATIVE_OPERATION_MANAGED_FILE_COPY_FIELD_INVALID",`${u}/sourceFieldCodes/${D}`)});let $=`${p}:${N.join(",")}=>${f}:${g.join(",")}`;return d.has($)&&l("NATIVE_OPERATION_MANAGED_FILE_COPY_DUPLICATE",u),d.add($),{mode:"copy",sourceResourceCode:p,sourceFieldCodes:k(N),targetResourceCode:f,targetFieldCodes:k(g)}}),_=>`${_.sourceResourceCode}:${_.sourceFieldCodes.join(",")}=>${_.targetResourceCode}:${_.targetFieldCodes.join(",")}`)}if(r.notification!==void 0){let s=I(r.notification,`${t}/notification`);T(s,["mode"],`${t}/notification`),s.mode!=="business-standard"&&l("NATIVE_OPERATION_NOTIFICATION_MODE_INVALID",`${t}/notification/mode`),a.notification={mode:"business-standard"}}if(r.workflow!==void 0){let s=I(r.workflow,`${t}/workflow`);T(s,["codes"],`${t}/workflow`);let d=P(s.codes,`${t}/workflow/codes`,16);(!d.length||d.some(_=>!o.has(_)))&&l("NATIVE_OPERATION_WORKFLOW_CODE_INVALID",`${t}/workflow/codes`),a.workflow={codes:k(d)}}return a}function mi(e,t,n,o,i){if(e===void 0)return;let r=`${t}/ai`,a=I(e,r);xo.test(n)||l("NATIVE_OPERATION_AI_CODE_INVALID",`${t}/code`),T(a,["name","description","risk","resources","sideEffects","concurrency","timeoutMs"],r,!0),b(a.name,`${r}/name`,It),b(a.description,`${r}/description`,It);let s=b(a.risk,`${r}/risk`,16);["read","write","destructive","external"].includes(s)||l("NATIVE_OPERATION_AI_RISK_INVALID",`${r}/risk`),s==="read"!=(o==="GET")&&l("NATIVE_OPERATION_AI_METHOD_RISK_MISMATCH",`${r}/risk`),o==="DELETE"&&!["destructive","external"].includes(s)&&l("NATIVE_OPERATION_AI_METHOD_RISK_MISMATCH",`${r}/risk`);let d=P(a.resources,`${r}/resources`,16);d.length===0&&l("NATIVE_OPERATION_AI_RESOURCE_REQUIRED",`${r}/resources`),d.forEach((E,u)=>{let c=M(E,`${r}/resources/${u}`);i.has(c)||l("NATIVE_OPERATION_AI_RESOURCE_MISSING",`${r}/resources/${u}`)});let _=P(a.sideEffects,`${r}/sideEffects`,20);(s==="read"&&_.length!==0||s!=="read"&&_.length===0)&&l("NATIVE_OPERATION_AI_SIDE_EFFECT_INVALID",`${r}/sideEffects`),a.concurrency!==void 0&&!["none","revision"].includes(b(a.concurrency,`${r}/concurrency`,16))&&l("NATIVE_OPERATION_AI_CONCURRENCY_INVALID",`${r}/concurrency`),a.timeoutMs!==void 0&&H(a.timeoutMs,`${r}/timeoutMs`,100,3e4)}function Je(e){return(e.replace(/\/{2,}/g,"/").replace(/\/$/,"")||"/").split("/").map(n=>n.startsWith(":")?":":n.includes("*")?"*":n).join("/")}function Ni(e,t){let n=I(e,t),o=b(n.type,`${t}/type`,32),i=["code","type","label","presentation","required"],r=o==="sso"?[...i,"provider"]:o==="dingtalk"?[...i,"flow"]:i;T(n,r,t);let a=R(n.code,`${t}/code`),s=b(n.label,`${t}/label`,255),d=b(n.presentation,`${t}/presentation`,16);["primary","secondary"].includes(d)||l("NATIVE_APPLICATION_AUTH_METHOD_PRESENTATION_INVALID",`${t}/presentation`);let _=be(n.required,`${t}/required`);return["sso","password","dingtalk"].includes(o)||l("NATIVE_APPLICATION_AUTH_METHOD_TYPE_INVALID",`${t}/type`),o==="sso"&&n.provider!=="tenant-default"&&l("NATIVE_APPLICATION_AUTH_SSO_PROVIDER_INVALID",`${t}/provider`),o==="dingtalk"&&!["auto","jsapi","oauth"].includes(b(n.flow,`${t}/flow`,16))&&l("NATIVE_APPLICATION_AUTH_DINGTALK_FLOW_INVALID",`${t}/flow`),{code:a,type:o,label:s,presentation:d,required:_,...o==="sso"?{provider:"tenant-default"}:{},...o==="dingtalk"?{flow:n.flow}:{}}}function cn(e,t,n){let o=I(e,n);T(o,["routeCode","path","defaultRouteCode"],n);let i=R(o.routeCode,`${n}/routeCode`),r=ee(o.path,`${n}/path`),a=t==="desktop"?"/login":"/m/login";return(r!==a||/[:*?#\\]/.test(r))&&l("NATIVE_APPLICATION_AUTH_SURFACE_PATH_INVALID",`${n}/path`,{device:t,expectedPath:a}),{routeCode:i,path:r,defaultRouteCode:R(o.defaultRouteCode,`${n}/defaultRouteCode`)}}function $n(e,t,n,o){if(e===null)return;let i=I(e,o);T(i,["accountMode","registration","methods","surfaces"],o),L(i.accountMode,"existing-platform-users-only",`${o}/accountMode`);let r=I(i.registration,`${o}/registration`);T(r,["mode"],`${o}/registration`),L(r.mode,"reject",`${o}/registration/mode`);let a=h(i.methods,`${o}/methods`,8);a.length===0&&l("NATIVE_APPLICATION_AUTH_METHOD_REQUIRED",`${o}/methods`);let s=a.map((m,N)=>Ni(m,`${o}/methods/${N}`)),d=new Set,_=new Set;for(let[m,N]of s.entries())d.has(N.code)&&l("NATIVE_APPLICATION_AUTH_METHOD_CODE_DUPLICATE",`${o}/methods/${m}/code`),_.has(N.type)&&l("NATIVE_APPLICATION_AUTH_METHOD_TYPE_DUPLICATE",`${o}/methods/${m}/type`),d.add(N.code),_.add(N.type);s.filter(m=>m.presentation==="primary").length!==1&&l("NATIVE_APPLICATION_AUTH_PRIMARY_METHOD_INVALID",`${o}/methods`);let E=I(i.surfaces,`${o}/surfaces`);T(E,["desktop","mobile"],`${o}/surfaces`);let u=cn(E.desktop,"desktop",`${o}/surfaces/desktop`),c=cn(E.mobile,"mobile",`${o}/surfaces/mobile`);u.routeCode===c.routeCode&&l("NATIVE_APPLICATION_AUTH_SURFACE_CODE_DUPLICATE",`${o}/surfaces/mobile/routeCode`);let p=h(t,"/config/frontend/routes",500),f=new Map;for(let[m,N]of p.entries()){let g=I(N,`/config/frontend/routes/${m}`);f.set(String(g.code||""),g)}for(let[m,N]of[["desktop",u],["mobile",c]]){f.has(N.routeCode)&&l("NATIVE_APPLICATION_AUTH_SURFACE_CODE_CONFLICT",`${o}/surfaces/${m}/routeCode`);let g=f.get(N.defaultRouteCode),$=String(g?.path||""),V=m==="desktop"?$==="/m"||$.startsWith("/m/"):!($==="/m"||$.startsWith("/m/"));(!g||g.surface!=="user"||/[:*]/.test($)||V)&&l("NATIVE_APPLICATION_AUTH_DEFAULT_ROUTE_INVALID",`${o}/surfaces/${m}/defaultRouteCode`)}let A=hn(n).filter(m=>!m.owner.startsWith("authentication:"));for(let[m,N]of[["desktop",u],["mobile",c]]){let g=A.find($=>Je($.path)===Je(N.path));g&&l("NATIVE_APPLICATION_AUTH_SURFACE_PATH_CONFLICT",`${o}/surfaces/${m}/path`,{owner:g.owner})}}function Ti(e,t){if(e===null)return;let n={data:{resources:[]},workflows:{definitions:[]},frontend:{routes:[{code:"auth-desktop-default",path:"/auth-desktop-default",surface:"user"},{code:"auth-mobile-default",path:"/m/auth-mobile-default",surface:"user"}],user:{applicationTodoCenter:!1},admin:{navigation:[]},authentication:e}},o=I(e,t),i=I(o.surfaces,`${t}/surfaces`),r={...o,surfaces:{...i,desktop:{...I(i.desktop,`${t}/surfaces/desktop`),defaultRouteCode:"auth-desktop-default"},mobile:{...I(i.mobile,`${t}/surfaces/mobile`),defaultRouteCode:"auth-mobile-default"}}};$n(r,n.frontend.routes,{...n,frontend:{...n.frontend,authentication:r}},t)}function gi(e){let t=e.frontend.authentication;return t===null?null:{accountMode:t.accountMode,registration:{mode:t.registration.mode},methods:t.methods.map(n=>({...n})),surfaces:{desktop:{...t.surfaces.desktop},mobile:{...t.surfaces.mobile}}}}var Ci=new Set(["draft.read","draft.update","validate","create","own.list","own.read"]);function Oi(e,t,n){let o=I(e,n);T(o,["policies"],n);let i=h(o.policies,`${n}/policies`,16);i.length<1&&l("NATIVE_PUBLIC_POLICY_REQUIRED",n);let r=new Map(t.frontend.routes.map(_=>[_.code,_])),a=new Map(t.data.resources.map(_=>[_.code,_])),s=new Set,d=new Set;i.forEach((_,E)=>{let u=`${n}/policies/${E}`,c=I(_,u);T(c,["code","routeCode","mode","resourceCode","operations","fields"],u,["requiredFields","ownRecordFields","draft","validations"]);let p=R(c.code,`${u}/code`);s.has(p)&&l("NATIVE_PUBLIC_POLICY_DUPLICATE",`${u}/code`);let f=R(c.routeCode,`${u}/routeCode`);d.has(f)&&l("NATIVE_PUBLIC_ROUTE_DUPLICATE",`${u}/routeCode`);let A=r.get(f);(!A||A.surface!=="user"||A.capability!==void 0||A.access!==void 0||/[:*]/.test(String(A.path)))&&l("NATIVE_PUBLIC_ROUTE_INVALID",`${u}/routeCode`),L(c.mode,"anonymous",`${u}/mode`);let m=M(c.resourceCode,`${u}/resourceCode`),N=a.get(m);N||l("NATIVE_PUBLIC_RESOURCE_MISSING",`${u}/resourceCode`);let g=new Map(N.schema.fields.map(S=>[String(S.code),String(S.type)])),$=P(c.operations,`${u}/operations`,6);($.length<1||$.some(S=>!Ci.has(S)))&&l("NATIVE_PUBLIC_OPERATION_INVALID",`${u}/operations`),$.includes("draft.read")!==$.includes("draft.update")&&l("NATIVE_PUBLIC_DRAFT_OPERATION_INCOMPLETE",`${u}/operations`);let V=P(c.fields,`${u}/fields`,64);(V.length<1||V.some(S=>!g.has(S)))&&l("NATIVE_PUBLIC_FIELD_INVALID",`${u}/fields`);for(let S of["requiredFields","ownRecordFields"]){if(!Object.prototype.hasOwnProperty.call(c,S))continue;P(c[S],`${u}/${S}`,64).some(z=>!V.includes(z))&&l("NATIVE_PUBLIC_FIELD_SCOPE_INVALID",`${u}/${S}`)}let D=Object.prototype.hasOwnProperty.call(c,"requiredFields")?P(c.requiredFields,`${u}/requiredFields`,64):[],C=N.surface||{},F=C.fields||{},y=String(C.mutationOwner||"native")==="native"&&C.generated?.create!==!1,v=N.schema.fields.filter(S=>Me(S,F[S.code])).map(S=>String(S.code));if($.includes("create")&&!y&&l("NATIVE_PUBLIC_CREATE_FIELDS_INCOMPLETE",`${u}/fields`),$.includes("create"))for(let S of v){let Q=V.includes(S)?D.includes(S)?null:"requiredFields":"fields";Q&&l("NATIVE_PUBLIC_CREATE_FIELDS_INCOMPLETE",`${u}/${Q}`,{resourceCode:M,fieldCode:S})}if(Object.prototype.hasOwnProperty.call(c,"draft")){let S=I(c.draft,`${u}/draft`);T(S,["enabled","inactivityTtlSeconds","maxBytes"],`${u}/draft`),L(S.enabled,!0,`${u}/draft/enabled`),H(S.inactivityTtlSeconds,`${u}/draft/inactivityTtlSeconds`,3600,7776e3),H(S.maxBytes,`${u}/draft/maxBytes`,4096,262144)}else $.includes("draft.read")&&l("NATIVE_PUBLIC_DRAFT_REQUIRED",`${u}/draft`);let U=Object.prototype.hasOwnProperty.call(c,"validations")?h(c.validations,`${u}/validations`,16):[],G=new Set;U.forEach((S,Q)=>{let z=`${u}/validations/${Q}`,x=I(S,z);T(x,["code","kind","fields","result"],z);let Ee=R(x.code,`${z}/code`);G.has(Ee)&&l("NATIVE_PUBLIC_VALIDATION_DUPLICATE",`${z}/code`),L(x.kind,"duplicate",`${z}/kind`),L(x.result,"availability",`${z}/result`);let re=P(x.fields,`${z}/fields`,8);(re.length<1||re.some(ae=>!V.includes(ae))||re.some(ae=>["file","subtable"].includes(g.get(ae)||"")))&&l("NATIVE_PUBLIC_VALIDATION_FIELD_INVALID",`${z}/fields`),G.add(Ee)}),s.add(p),d.add(f)})}function bi(e,t){let n=I(e,t);T(n,["policies"],t),h(n.policies,`${t}/policies`,16).length<1&&l("NATIVE_PUBLIC_POLICY_REQUIRED",t)}function $i(e){return{policies:q(e.frontend.publicAccess.policies.map(t=>({code:t.code,routeCode:t.routeCode,mode:t.mode,resourceCode:t.resourceCode,operations:k(t.operations),fields:k(t.fields),...t.requiredFields?{requiredFields:k(t.requiredFields)}:{},...t.ownRecordFields?{ownRecordFields:k(t.ownRecordFields)}:{},...t.draft?{draft:{...t.draft}}:{},...t.validations?{validations:q(t.validations.map(n=>({code:n.code,kind:n.kind,fields:k(n.fields),result:n.result})),n=>n.code)}:{}})),t=>t.code)}}function hn(e){let t=[{owner:"platform:admin-entry",path:"/"},{owner:"platform:admin-entry",path:"/admin"},{owner:"platform:file-preview",path:"/files/:resourceCode/:fileId/preview"}];e.frontend.authentication&&t.push({owner:"authentication:desktop",path:e.frontend.authentication.surfaces.desktop.path},{owner:"authentication:mobile",path:e.frontend.authentication.surfaces.mobile.path});for(let n of e.data.resources){let o=Dn(n),i=`/admin/resources/${n.code}`,r=[["list",i],["detail",`${i}/:id`],["create",`${i}/new`],["update",`${i}/:id/edit`]];for(let[a,s]of r)o[a]&&t.push({owner:`resource:${n.code}:${a}`,path:s},{owner:`resource:${n.code}:${a}:mobile`,path:`/m${s}`})}if(e.frontend.user.applicationTodoCenter===!0&&t.push({owner:"application:todo-center",path:"/todos"},{owner:"application:todo-center:mobile",path:"/m/todos"}),e.workflows.definitions.length>0){t.push({owner:"workflow:work-center",path:"/work-center"},{owner:"workflow:work-center:mobile",path:"/m/work-center"},{owner:"workflow:task",path:"/tasks/:taskId"},{owner:"workflow:task:mobile",path:"/m/tasks/:taskId"},{owner:"workflow:instance",path:"/workflows/:instanceId"},{owner:"workflow:instance:mobile",path:"/m/workflows/:instanceId"});let n=!1;for(let o of e.workflows.definitions)["standalone","hidden-handoff"].includes(o.launch.mode)&&(n=!0);n&&t.push({owner:"workflow:launch",path:"/workflows/:workflowCode/start"},{owner:"workflow:launch:mobile",path:"/m/workflows/:workflowCode/start"})}return t}function Ye(e){let t=new Map(hn(e).map(n=>[Je(n.path),n]));return q(e.frontend.routes.map((n,o)=>{let i=`/config/frontend/routes/${o}`,r=I(n,i);T(r,["code","path","label","surface","parentCode","capability","access","pinned","tabPersistence","keepAlive"],i,!0),["admin","user"].includes(r.surface)||l("NATIVE_ROUTE_SURFACE_INVALID",`${i}/surface`);let a=ee(r.path,`${i}/path`);r.surface==="admin"&&a!=="/admin"&&!a.startsWith("/admin/")&&l("NATIVE_ADMIN_ROUTE_PATH_INVALID",`${i}/path`),r.surface==="user"&&(a==="/admin"||a.startsWith("/admin/"))&&l("NATIVE_USER_ROUTE_PATH_RESERVED",`${i}/path`);let s=Je(a),d=t.get(s);d&&l("NATIVE_ROUTE_PATH_CONFLICT",`${i}/path`,{path:a,owner:d.owner}),t.set(s,{owner:`frontend:${String(r.code||o)}`,path:a});let _=/[:*]/.test(a),E=$t(r,i,e.appCode),u=r.pinned===void 0?void 0:be(r.pinned,`${i}/pinned`),c=r.tabPersistence===void 0?_?"none":"session":b(r.tabPersistence,`${i}/tabPersistence`,16),p=r.keepAlive===void 0?"none":b(r.keepAlive,`${i}/keepAlive`,16);return["session","none"].includes(c)||l("NATIVE_ROUTE_TAB_PERSISTENCE_INVALID",`${i}/tabPersistence`),["none","memory"].includes(p)||l("NATIVE_ROUTE_KEEP_ALIVE_INVALID",`${i}/keepAlive`),_&&u===!0&&l("NATIVE_DYNAMIC_ROUTE_PINNED_FORBIDDEN",`${i}/pinned`),_&&c==="session"&&l("NATIVE_DYNAMIC_ROUTE_TAB_PERSISTENCE_FORBIDDEN",`${i}/tabPersistence`),_&&p==="memory"&&l("NATIVE_DYNAMIC_ROUTE_KEEP_ALIVE_FORBIDDEN",`${i}/keepAlive`),{code:R(r.code,`${i}/code`),path:a,label:b(r.label,`${i}/label`,255),surface:r.surface,...r.parentCode===void 0?{}:{parentCode:R(r.parentCode,`${i}/parentCode`)},...E,...u===void 0?{}:{pinned:u},tabPersistence:c,keepAlive:p}}),n=>n.code)}function Dn(e){let t=e.surface===void 0?{}:I(e.surface,"/surface"),n=t.mutationOwner||"native",o=t.generated===void 0?{}:I(t.generated,"/surface/generated"),i=n==="native";return{list:o.list??!0,detail:o.detail??!0,create:o.create??i,update:o.update??i,delete:o.delete??i}}function Rn(e){let t=[];for(let n of q(e.data.resources,o=>o.code).flatMap(o=>[{resource:o,viewCode:void 0},...(o.surface?.views||[]).map(i=>({viewCode:i.code,resource:{...o,name:i.name,surface:ut(o.surface,i.code)}}))])){let{resource:o,viewCode:i}=n,r=`/admin/resources/${o.code}${i?`/views/${i}`:""}`,a=Dn(o),s=[{operation:"list",kind:"resource-list",path:`${r}`,label:o.name,capability:o.capabilities.read,navigationEligible:!0},{operation:"detail",kind:"resource-detail",path:`${r}/:id`,label:`${o.name}\u8BE6\u60C5`,capability:o.capabilities.read,navigationEligible:!1},{operation:"create",kind:"resource-create",path:`${r}/new`,label:`\u65B0\u589E${o.name}`,capability:o.capabilities.create,navigationEligible:!1},{operation:"update",kind:"resource-update",path:`${r}/:id/edit`,label:`\u7F16\u8F91${o.name}`,capability:o.capabilities.update,navigationEligible:!1}];for(let d of s)a[d.operation]&&t.push({code:`resource:${o.code}${i?`:view:${i}`:""}:${d.operation}`,kind:d.kind,path:d.path,label:d.label,navigationEligible:d.navigationEligible,capability:d.capability,resourceCode:o.code,...i?{viewCode:i}:{}})}for(let n of Ye(e))n.surface==="admin"&&t.push({code:`operation:${n.code}`,kind:"operation",path:n.path,label:n.label,navigationEligible:!/[:*]/.test(n.path),routeCode:n.code});return t.sort((n,o)=>se(n.code,o.code))}function Sn(e){return e.kind==="resource"?`resource:${e.resourceCode}${e.viewCode?`:view:${e.viewCode}`:""}:list`:`operation:${e.routeCode}`}function hi(e){return e.frontend.admin.navigation.map((t,n)=>({code:t.code,label:t.label,...t.icon===void 0?{}:{icon:t.icon},order:t.order??n,items:t.items.map((o,i)=>({pageCode:Sn(o.page),...o.label===void 0?{}:{label:o.label},...o.icon===void 0?{}:{icon:o.icon},order:o.order??i})).sort((o,i)=>o.order-i.order||se(o.pageCode,i.pageCode))})).sort((t,n)=>t.order-n.order||se(t.code,n.code))}function Di(e,t){let n=h(e,t,B.adminNavigationGroups),o=0;n.forEach((i,r)=>{let a=`${t}/${r}`,s=I(i,a);T(s,["code","label","icon","order","items"],a,!0),R(s.code,`${a}/code`),b(s.label,`${a}/label`,255),Ge(s.icon,`${a}/icon`),_n(s.order,`${a}/order`);let d=h(s.items,`${a}/items`,500);d.length===0&&l("NATIVE_ADMIN_GROUP_ORPHANED",`${a}/items`),o+=d.length,o>B.adminNavigationItems&&l("NATIVE_ARRAY_LIMIT_EXCEEDED",t),d.forEach((_,E)=>{let u=`${a}/items/${E}`,c=I(_,u);T(c,["page","label","icon","order"],u,!0),Ri(c.page,`${u}/page`),c.label!==void 0&&b(c.label,`${u}/label`,255),Ge(c.icon,`${u}/icon`),_n(c.order,`${u}/order`)})})}function Ri(e,t){let n=I(e,t),o=b(n.kind,`${t}/kind`,64);if(o==="resource"){T(n,["kind","resourceCode"],t,["viewCode"]),n.viewCode!==void 0&&R(n.viewCode,`${t}/viewCode`),M(n.resourceCode,`${t}/resourceCode`);return}if(o==="operation"){T(n,["kind","routeCode"],t),R(n.routeCode,`${t}/routeCode`);return}l("NATIVE_ADMIN_PAGE_REFERENCE_KIND_INVALID",`${t}/kind`)}function Si(e){let t=new Map(Rn(e).map(i=>[String(i.code),i])),n=new Set,o=new Set;e.frontend.admin.navigation.forEach((i,r)=>{let a=`/config/frontend/admin/navigation/${r}`;n.has(i.code)&&l("NATIVE_ADMIN_GROUP_DUPLICATE",`${a}/code`),n.add(i.code),i.label===i.code&&l("NATIVE_ADMIN_USER_LABEL_REQUIRED",`${a}/label`),i.items.forEach((s,d)=>{let _=`${a}/items/${d}`,E=Sn(s.page),u=t.get(E);(!u||u.navigationEligible!==!0)&&l("NATIVE_ADMIN_PAGE_NOT_FOUND",`${_}/page`),o.has(E)&&l("NATIVE_ADMIN_PAGE_DUPLICATE",`${_}/page`),o.add(E);let c=s.page.resourceCode||s.page.routeCode||s.page.workflowCode||E,p=s.label||u.label;(!p||p===c||p===E)&&l("NATIVE_ADMIN_USER_LABEL_REQUIRED",`${_}/label`)})})}function Vi(e,t){let n=h(e,t,B.adminPages),o=new Set;n.forEach((i,r)=>{let a=`${t}/${r}`,s=I(i,a);T(s,["code","kind","path","label","navigationEligible","capability","access","resourceCode","viewCode","routeCode"],a,!0);let d=b(s.code,`${a}/code`,255);o.has(d)&&l("NATIVE_ADMIN_PAGE_DUPLICATE",`${a}/code`),o.add(d);let _=b(s.kind,`${a}/kind`,64);if(["resource-list","resource-detail","resource-create","resource-update","operation"].includes(_)||l("NATIVE_ADMIN_PAGE_KIND_INVALID",`${a}/kind`),ee(s.path,`${a}/path`),b(s.label,`${a}/label`,255),be(s.navigationEligible,`${a}/navigationEligible`),s.capability!==void 0&&s.access!==void 0&&l("NATIVE_ROUTE_ACCESS_CONFLICT",`${a}/access`),s.capability!==void 0&&b(s.capability,`${a}/capability`,255),s.access!==void 0){let E=I(s.access,`${a}/access`);T(E,["allOf","anyOf"],`${a}/access`,!0);for(let u of["allOf","anyOf"])E[u]!==void 0&&P(E[u],`${a}/access/${u}`,50)}for(let E of["resourceCode","viewCode","routeCode"])s[E]!==void 0&&R(s[E],`${a}/${E}`)})}function yi(e,t){let n=h(e,t,B.adminNavigationGroups),o=0;n.forEach((i,r)=>{let a=`${t}/${r}`,s=I(i,a);T(s,["code","label","icon","order","items"],a,!0),R(s.code,`${a}/code`),b(s.label,`${a}/label`,255),Ge(s.icon,`${a}/icon`),H(s.order,`${a}/order`,-1e4,1e4);let d=h(s.items,`${a}/items`,500);d.length===0&&l("NATIVE_ADMIN_GROUP_ORPHANED",`${a}/items`),o+=d.length,o>B.adminNavigationItems&&l("NATIVE_ARRAY_LIMIT_EXCEEDED",t),d.forEach((_,E)=>{let u=`${a}/items/${E}`,c=I(_,u);T(c,["pageCode","label","icon","order"],u,!0),b(c.pageCode,`${u}/pageCode`,255),c.label!==void 0&&b(c.label,`${u}/label`,255),Ge(c.icon,`${u}/icon`),H(c.order,`${u}/order`,-1e4,1e4)})})}var wi=new Set(["application-todo-center","workflow-work-center","workflow-launch","workflow-task","workflow-instance"]);function Pi(e,t,n){let o=I(e,t);T(o,["schemaVersion","appCode","devicePolicy","rootEntry","authentication","routes","digest"],t),L(o.schemaVersion,On,`${t}/schemaVersion`),L(o.appCode,n,`${t}/appCode`),bt(o.devicePolicy,`${t}/devicePolicy`),Fi(o.rootEntry,`${t}/rootEntry`),Li(o.authentication,`${t}/authentication`),Ct(o.digest,`${t}/digest`);let i=h(o.routes,`${t}/routes`,B.routes),r=new Set;i.forEach((a,s)=>{let d=`${t}/routes/${s}`,_=I(a,d);T(_,["code","kind","desktop","mobile"],d,["workflowCode"]);let E=b(_.code,`${d}/code`,255);r.has(E)&&l("NATIVE_ROUTE_MANIFEST_DUPLICATE",`${d}/code`),r.add(E);let u=b(_.kind,`${d}/kind`,64);wi.has(u)||l("NATIVE_ROUTE_MANIFEST_KIND_INVALID",`${d}/kind`),_.workflowCode!==void 0&&R(_.workflowCode,`${d}/workflowCode`);let c=ln(_.desktop,`${d}/desktop`,n),p=ln(_.mobile,`${d}/mobile`,n);c.surface!=="user"&&l("NATIVE_ROUTE_MANIFEST_DESKTOP_SURFACE_INVALID",`${d}/desktop/surface`),p.surface!=="user"&&l("NATIVE_ROUTE_MANIFEST_MOBILE_SURFACE_INVALID",`${d}/mobile/surface`),c.routeCode===p.routeCode&&l("NATIVE_ROUTE_MANIFEST_PAIR_DUPLICATE",d)}),L(o.digest,Z({schemaVersion:o.schemaVersion,appCode:o.appCode,devicePolicy:o.devicePolicy,rootEntry:o.rootEntry,authentication:o.authentication,routes:o.routes}),`${t}/digest`)}function bt(e,t){let n=I(e,t);T(n,["kind","mobileMaxWidthPx","desktopMinWidthPx"],t),L(n.kind,"viewport-family",`${t}/kind`);let o=H(n.mobileMaxWidthPx,`${t}/mobileMaxWidthPx`,320,1600),i=H(n.desktopMinWidthPx,`${t}/desktopMinWidthPx`,320,1600);return i!==o+1&&l("NATIVE_FRONTEND_DEVICE_POLICY_INVALID",t),{kind:"viewport-family",mobileMaxWidthPx:o,desktopMinWidthPx:i}}function Fi(e,t){let n=I(e,t);T(n,["code","desktop","mobile"],t);let o=R(n.code,`${t}/code`),i=gt(n.desktop,`${t}/desktop`),r=gt(n.mobile,`${t}/mobile`);return(i===r||r==="/"||!r.startsWith("/m/"))&&l("NATIVE_ROUTE_MANIFEST_ROOT_ENTRY_INVALID",t),i.startsWith("/m/")&&l("NATIVE_ROUTE_MANIFEST_ROOT_ENTRY_INVALID",`${t}/desktop`),{code:o,desktop:i,mobile:r}}function Li(e,t){let n=I(e,t);T(n,["desktop","mobile"],t);let o=dn(n.desktop,`${t}/desktop`,!1),i=dn(n.mobile,`${t}/mobile`,!0);return(o.routeCode===i.routeCode||o.path===i.path)&&l("NATIVE_ROUTE_MANIFEST_AUTHENTICATION_DUPLICATE",t),{desktop:o,mobile:i}}function dn(e,t,n){let o=I(e,t);T(o,["routeCode","path"],t);let i=R(o.routeCode,`${t}/routeCode`),r=gt(o.path,`${t}/path`);return(n?!r.startsWith("/m/"):r.startsWith("/m/"))&&l("NATIVE_ROUTE_MANIFEST_AUTHENTICATION_PATH_INVALID",`${t}/path`),{routeCode:i,path:r}}function gt(e,t){let n=ee(e,t);return/[:*?#\\\\]/.test(n)&&l("NATIVE_ROUTE_MANIFEST_STATIC_PATH_INVALID",t),n}function ln(e,t,n){let o=I(e,t);T(o,["routeCode","path","surface","pathParams","requiresAuthentication"],t,["capability","access"]),R(o.routeCode,`${t}/routeCode`);let i=ee(o.path,`${t}/path`),r=b(o.surface,`${t}/surface`,16);["admin","user"].includes(r)||l("NATIVE_ROUTE_SURFACE_INVALID",`${t}/surface`);let a=P(o.pathParams,`${t}/pathParams`,8);return a.forEach((s,d)=>{(!/^[A-Za-z][A-Za-z0-9_]*$/.test(s)||s.length>64)&&l("NATIVE_ROUTE_PATH_PARAM_INVALID",`${t}/pathParams/${d}`)}),W(a)!==W(Vn(i))&&l("NATIVE_ROUTE_PATH_PARAMS_MISMATCH",`${t}/pathParams`),$t(o,t,n),o.requiresAuthentication!==!0&&l("NATIVE_ROUTE_AUTHENTICATION_REQUIRED",`${t}/requiresAuthentication`),o}function Vn(e){return k([...e.matchAll(/:([A-Za-z][A-Za-z0-9_]*)/g)].map(t=>t[1]))}function un(e,t,n,o){return{routeCode:e,path:t,surface:n,pathParams:Vn(t),...o?.capability?{capability:o.capability}:{},...o?.access?{access:o.access}:{},requiresAuthentication:!0}}function fn(e,t,n){return e==="workflow-launch"?`workflow.${n}.launch.${t}`:e==="application-todo-center"?`application.todo-center.${t}`:`${e.replace(/-/g,".")}.${t}`}function vi(e){let t=e.appCode,n=[],o=(p,f,A,m,N,g)=>{n.push({code:p,kind:f,...N?{workflowCode:N}:{},desktop:un(fn(f,"desktop",N),A,"user",g),mobile:un(fn(f,"mobile",N),m,"user",g)})};e.frontend.user.applicationTodoCenter===!0&&o("application:todo-center","application-todo-center","/todos","/m/todos");let i=yn(e);i.length>0&&(o("workflow:work-center","workflow-work-center","/work-center","/m/work-center"),o("workflow:task","workflow-task","/tasks/:taskId","/m/tasks/:taskId"),o("workflow:instance","workflow-instance","/workflows/:instanceId","/m/workflows/:instanceId"));for(let p of i){if(!["standalone","hidden-handoff"].includes(p.launch.mode))continue;let f=k([p.launch.submission?.create?.requiredCapability,p.launch.submission?.existing?.requiredCapability].filter(A=>!!A));o(`workflow:${p.code}:launch`,"workflow-launch","/workflows/:workflowCode/start","/m/workflows/:workflowCode/start",p.code,f.length===1?{capability:f[0]}:f.length>1?{access:{anyOf:f}}:void 0)}let r=n.sort((p,f)=>se(String(p.code),String(f.code))),a=Ye(e),s=p=>{let f=p==="mobile"?"/m/":"/",A=a.filter(N=>N.surface==="user"&&!/[:*?#\\\\]/.test(N.path)&&N.path===f).sort((N,g)=>se(N.code,g.code))[0];if(A)return{code:A.code,path:A.path};let m=a.filter(N=>N.surface==="user"&&!/[:*?#\\\\]/.test(N.path)&&(p==="mobile"?N.path.startsWith("/m/"):!N.path.startsWith("/m/"))).sort((N,g)=>se(N.code,g.code))[0];return m?{code:m.code,path:m.path}:{code:p==="mobile"?"application-root-mobile":"application-root",path:f}},d=e.frontend.authentication?{desktop:{routeCode:e.frontend.authentication.surfaces.desktop.routeCode,path:e.frontend.authentication.surfaces.desktop.path},mobile:{routeCode:e.frontend.authentication.surfaces.mobile.routeCode,path:e.frontend.authentication.surfaces.mobile.path}}:{desktop:{routeCode:"application-login",path:"/login"},mobile:{routeCode:"application-login-mobile",path:"/m/login"}},_=bt(e.frontend.devicePolicy,"/config/frontend/devicePolicy"),E=s("desktop"),u=s("mobile"),c={schemaVersion:On,appCode:t,devicePolicy:_,rootEntry:{code:E.code,desktop:E.path,mobile:u.path},authentication:d,routes:r};return{...c,digest:Z(c)}}function Ge(e,t){if(e===void 0)return;let n=b(e,t,32);Xo.has(n)||l("NATIVE_ADMIN_ICON_INVALID",t)}function _n(e,t){e!==void 0&&H(e,t,-1e4,1e4)}function $t(e,t,n){return e.capability!==void 0&&e.access!==void 0&&l("NATIVE_ROUTE_ACCESS_CONFLICT",`${t}/access`),e.capability!==void 0?{capability:_e(e.capability,`${t}/capability`,n)}:e.access===void 0?{}:{access:He(e.access,`${t}/access`,n)}}function He(e,t,n){let o=I(e,t);T(o,["allOf","anyOf"],t,!0);let i=o.allOf===void 0?void 0:k(P(o.allOf,`${t}/allOf`,50).map((a,s)=>_e(a,`${t}/allOf/${s}`,n))),r=o.anyOf===void 0?void 0:k(P(o.anyOf,`${t}/anyOf`,50).map((a,s)=>_e(a,`${t}/anyOf/${s}`,n)));return(i?.length||0)+(r?.length||0)===0&&l("NATIVE_ROUTE_ACCESS_EMPTY",t),{...i===void 0?{}:{allOf:i},...r===void 0?{}:{anyOf:r}}}function yn(e){let t=new Map(bn(e).map(i=>[String(i.code),i])),n=e.workflows.definitions.map((i,r)=>{let a=`/config/workflows/definitions/${r}`,s=I(i,a);T(s,["version","definition","launch"],a,["detailRouteCode"]);let d=I(s.definition,`${a}/definition`),_=s.detailRouteCode===void 0?void 0:Pn(s.detailRouteCode,`${a}/detailRouteCode`);return{code:R(d.code,`${a}/definition/code`),title:b(d.title,`${a}/definition/title`,255),version:Oe(s.version,`${a}/version`),launch:ki(e,d,s.launch,`${a}/launch`,t),..._?{detailRouteCode:_}:{},definition:d}});return k(n.map(i=>i.code)).map(i=>{let r=n.filter(_=>_.code===i),a=e.workflows.activations.find(_=>_.workflowCode===i)?.definitionVersion,s=r.find(_=>_.version===a)||[...r].sort((_,E)=>E.version-_.version)[0],d=new Set;for(let _ of r){let E=I(_.definition.nodes,"/config/workflows/definitions/nodes");for(let u of Object.values(E)){let c=I(u,"/config/workflows/definitions/nodes/*");if(c.kind==="approval")for(let p of P(c.allowedOperations||[],"/config/workflows/definitions/nodes/*/allowedOperations",20))d.add(p)}}return{code:i,title:s.title,acceptedCommandDeactivationPolicy:s.definition.acceptedCommandDeactivationPolicy,subject:s.definition.subject,launch:s.launch,...["standalone","hidden-handoff"].includes(s.launch.mode)&&!s.launch.submission?{processOperationCode:`openxiangda.workflow.${i}.submit`}:{},...s.detailRouteCode?{detailRouteCode:s.detailRouteCode}:{},definitionVersions:gn(r.map(_=>_.version)),bindingVersions:gn(e.workflows.bindings.map((_,E)=>{let u=`/config/workflows/bindings/${E}`,c=I(_,u),p=I(c.binding,`${u}/binding`);return{code:R(p.workflowCode,`${u}/binding/workflowCode`),version:Oe(c.version,`${u}/version`)}}).filter(_=>_.code===i).map(_=>_.version)),providerCodes:k(e.workflows.providers.map((_,E)=>R(I(_,`/config/workflows/providers/${E}`).code,`/config/workflows/providers/${E}/code`))),allowedOperations:[...d].sort(se),editableParameterCodes:k(e.workflows.editableParameters.map((_,E)=>{let u=`/config/workflows/editableParameters/${E}`,c=I(_,u);return{code:R(c.code,`${u}/code`),workflowCode:R(c.workflowCode,`${u}/workflowCode`)}}).filter(_=>_.workflowCode===i).map(_=>_.code))}})}function wn(e,t){let n=I(e,t);T(n,["mode"],t,["submission"]);let o=b(n.mode,`${t}/mode`,32);return["standalone","custom-page","hidden-handoff","work-center-only"].includes(o)||l("NATIVE_WORKFLOW_LAUNCH_MODE_INVALID",`${t}/mode`),{mode:o,...n.submission===void 0?{}:{submission:I(n.submission,`${t}/submission`)}}}function ki(e,t,n,o,i){let r=wn(n,o);if(!r.submission)return{mode:r.mode};["standalone","hidden-handoff"].includes(r.mode)||l("NATIVE_WORKFLOW_NAMED_OPERATION_SUBMISSION_INVALID",`${o}/submission`);let a=I(r.submission,`${o}/submission`);T(a,["kind"],`${o}/submission`,["create","existing","context"]),L(a.kind,"named-operation",`${o}/submission/kind`);let s=o.endsWith("/launch")?o.slice(0,-7):o,d=I(t.subject,`${s}/definition/subject`),_=M(d.resourceCode,`${s}/definition/subject/resourceCode`),E=e.data.resources.findIndex(C=>C.code===_),u=e.data.resources[E];(E<0||!u)&&l("NATIVE_WORKFLOW_SUBJECT_RESOURCE_MISSING",`${s}/definition/subject/resourceCode`);let c=new Set(I(u.schema,`/config/data/resources/${E}/schema`).fields.map(C=>String(C.code))),p=new Map(e.backend.operations.map(C=>[String(C.code),C])),f=(C,F)=>{let y=`${o}/submission/${F}`,v=I(C,y);T(v,["operationCode","inputs","output"],y);let U=R(v.operationCode,`${y}/operationCode`),G=p.get(U),S=i.get(U),Q=S?.platformAccess?.workflow?.codes;(!G||!S||S.method!=="POST"||!Array.isArray(Q)||!Q.includes(t.code))&&l("NATIVE_WORKFLOW_NAMED_OPERATION_INVALID",y);let z=I(G.requestSchema,`${y}/operation/requestSchema`),x=I(z.properties,`${y}/operation/requestSchema/properties`),Ee=new Set(z.required===void 0?[]:P(z.required,`${y}/operation/requestSchema/required`,64)),re=I(v.inputs,`${y}/inputs`),ae=Object.entries(re);(!ae.length||ae.length>64)&&l("NATIVE_WORKFLOW_NAMED_OPERATION_INPUT_INVALID",`${y}/inputs`);let qe=new Set,pe=new Map,Xe={};for(let[j,Ie]of ae){(!rn.test(j)||!Object.prototype.hasOwnProperty.call(x,j))&&l("NATIVE_WORKFLOW_NAMED_OPERATION_INPUT_INVALID",`${y}/inputs/${j}`);let me=`${y}/inputs/${j}`,Qe=I(Ie,me),Ae=b(Qe.source,`${me}/source`,32);if(["field","idempotency-key","current-user-reference","subject-id","subject-revision","requested-at"].includes(Ae)||l("NATIVE_WORKFLOW_NAMED_OPERATION_INPUT_INVALID",me),T(Qe,["source"],me,Ae==="field"?["fieldCode"]:!1),pe.set(Ae,(pe.get(Ae)||0)+1),Ae==="field"){let Le=J(Qe.fieldCode,`${me}/fieldCode`);(qe.has(Le)||!c.has(Le))&&l("NATIVE_WORKFLOW_NAMED_OPERATION_INPUT_INVALID",`${me}/fieldCode`),qe.add(Le),Xe[j]={source:Ae,fieldCode:Le}}else Xe[j]={source:Ae}}([...Ee].some(j=>!(j in re))||(pe.get("idempotency-key")||0)!==1||!ae.some(([j,Ie])=>I(Ie,`${y}/inputs/${j}`).source==="idempotency-key"&&Ee.has(j))||F==="create"&&((pe.get("subject-id")||0)>0||(pe.get("subject-revision")||0)>0)||F==="existing"&&((pe.get("subject-id")||0)!==1||(pe.get("subject-revision")||0)!==1))&&l("NATIVE_WORKFLOW_NAMED_OPERATION_INPUT_INVALID",`${y}/inputs`);let Fe=I(v.output,`${y}/output`);T(Fe,["subjectId"],`${y}/output`,["subjectRevision","processCommand"]);let vn=I(I(G.responseSchema,`${y}/operation/responseSchema`).properties,`${y}/operation/responseSchema/properties`);for(let j of["subjectId","subjectRevision","processCommand"]){if(Fe[j]===void 0)continue;let Ie=b(Fe[j],`${y}/output/${j}`,128);(!rn.test(Ie)||!Object.prototype.hasOwnProperty.call(vn,Ie))&&l("NATIVE_WORKFLOW_NAMED_OPERATION_OUTPUT_INVALID",`${y}/output/${j}`)}return{operationCode:U,method:"POST",path:S.path,requiredCapability:S.requiredCapability,requestSchemaDigest:S.requestSchemaDigest,responseSchemaDigest:S.responseSchemaDigest,inputs:Xe,output:{...Fe},fieldCodes:qe}},A=a.create===void 0?void 0:f(a.create,"create"),m=a.existing===void 0?void 0:f(a.existing,"existing");!A&&!m&&l("NATIVE_WORKFLOW_NAMED_OPERATION_SUBMISSION_INVALID",`${o}/submission`);let N=new Set([...A?.fieldCodes||[],...m?.fieldCodes||[]]),g=a.context===void 0?[]:h(a.context,`${o}/submission/context`,16),$=new Set,V=g.map((C,F)=>{let y=`${o}/submission/context/${F}`,v=I(C,y);T(v,["queryParameter","fieldCode"],y);let U=b(v.queryParameter,`${y}/queryParameter`,64),G=J(v.fieldCode,`${y}/fieldCode`);return(!/^[A-Za-z][A-Za-z0-9]{0,63}$/.test(U)||$.has(U)||!N.has(G))&&l("NATIVE_WORKFLOW_LAUNCH_CONTEXT_INVALID",y),$.add(U),{queryParameter:U,fieldCode:G}}),D=C=>{let{fieldCodes:F,...y}=C;return y};return{mode:r.mode,submission:{kind:"named-operation",...A?{create:D(A)}:{},...m?{existing:D(m)}:{},context:V}}}function Pn(e,t){let n=I(e,t);T(n,["desktop","mobile"],t);let o=R(n.desktop,`${t}/desktop`),i=R(n.mobile,`${t}/mobile`);return o===i&&l("NATIVE_WORKFLOW_DETAIL_ROUTE_DUPLICATE",t),{desktop:o,mobile:i}}function Ui(e,t){let n=new Set(t.map(E=>E.code)),o=new Map;e.data.resources.forEach((E,u)=>{let c=`/config/data/resources/${u}`,p=I(E,c);for(let[m,N]of Object.entries(p.fieldPolicies||{})){if(!he(m))continue;let g=`${c}/fieldPolicies/${m}/read`,$=I(N,`${c}/fieldPolicies/${m}`);for(let V of P($.read||[],g,2e3))n.has(V)||l("NATIVE_CAPABILITY_REFERENCE_MISSING",g)}if(((p.surface===void 0?{}:I(p.surface,`${c}/surface`)).mutationOwner||"native")==="native")return;let A=I(p.capabilities,`${c}/capabilities`);for(let m of["create","update","delete"])o.set(String(A[m]),m)});let i=new Set;for(let[E,u]of e.authz.roles.entries()){let c=`/config/authz/roles/${E}`,p=I(u,c);T(p,["code","name","description","capabilities"],c,!0);let f=R(p.code,`${c}/code`);i.has(f)&&l("NATIVE_ROLE_DUPLICATE",`${c}/code`),i.add(f),b(p.name,`${c}/name`,255);let A=P(p.capabilities,`${c}/capabilities`,2e3);for(let[m,N]of A.entries())o.has(N)&&l("NATIVE_DATA_SURFACE_MUTATION_GRANT_FORBIDDEN",`${c}/capabilities/${m}`,{operation:o.get(N)}),n.has(N)||l("NATIVE_CAPABILITY_REFERENCE_MISSING",`${c}/capabilities`)}let r=e.authz.authenticatedUserRoleCode===void 0?"":R(e.authz.authenticatedUserRoleCode,"/config/authz/authenticatedUserRoleCode");r&&!i.has(r)&&l("NATIVE_AUTHENTICATED_USER_ROLE_REFERENCE_MISSING","/config/authz/authenticatedUserRoleCode");let a=new Set,s=0;for(let[E,u]of e.perspectives.entries()){let c=`/config/perspectives/${E}`,p=I(u,c);T(p,["code","name","description","roleCodes","capabilityCodes","default"],c,!0);let f=R(p.code,`${c}/code`);a.has(f)&&l("NATIVE_PERSPECTIVE_DUPLICATE",`${c}/code`),a.add(f),b(p.name,`${c}/name`,255);let A=P(p.roleCodes,`${c}/roleCodes`,20);A.length<1&&l("NATIVE_PERSPECTIVE_ROLE_REQUIRED",`${c}/roleCodes`),A.forEach((g,$)=>{i.has(g)||l("NATIVE_PERSPECTIVE_ROLE_MISSING",`${c}/roleCodes/${$}`)});let m=k(e.authz.roles.filter(g=>A.includes(g.code)).flatMap(g=>g.capabilities)),N=P(p.capabilityCodes,`${c}/capabilityCodes`,2e3);W(m)!==W(N)&&l("NATIVE_PERSPECTIVE_CAPABILITY_PROJECTION_MISMATCH",`${c}/capabilityCodes`),p.default===!0?s+=1:p.default!==void 0&&l("NATIVE_PERSPECTIVE_DEFAULT_INVALID",`${c}/default`)}s>1&&l("NATIVE_PERSPECTIVE_DEFAULT_DUPLICATE","/config/perspectives");for(let[E,u]of e.backend.operations.entries()){let c=I(u,`/config/backend/operations/${E}`);n.has(c.capability)||l("NATIVE_CAPABILITY_REFERENCE_MISSING",`/config/backend/operations/${E}/capability`)}let d=new Set,_=new Set;for(let[E,u]of e.frontend.routes.entries()){let c=`/config/frontend/routes/${E}`,p=I(u,c),f=R(p.code,`${c}/code`);d.has(f)&&l("NATIVE_ROUTE_DUPLICATE",`${c}/code`),d.add(f);let A=ee(p.path,`${c}/path`);_.has(A)&&l("NATIVE_ROUTE_PATH_DUPLICATE",`${c}/path`),_.add(A);let m=$t(p,c,e.appCode);m.capability&&!n.has(m.capability)&&l("NATIVE_CAPABILITY_REFERENCE_MISSING",`${c}/capability`);let N=p.access===void 0?void 0:I(p.access,`${c}/access`);for(let g of["allOf","anyOf"]){let $=N?.[g]===void 0?[]:h(N[g],`${c}/access/${g}`,50);for(let[V,D]of $.entries()){let C=_e(D,`${c}/access/${g}/${V}`,e.appCode);n.has(C)||l("NATIVE_CAPABILITY_REFERENCE_MISSING",`${c}/access/${g}/${V}`)}}}if(e.frontend.admin.access!==void 0){let E=He(e.frontend.admin.access,"/config/frontend/admin/access",e.appCode);for(let u of["allOf","anyOf"])for(let[c,p]of(E[u]||[]).entries())n.has(p)||l("NATIVE_CAPABILITY_REFERENCE_MISSING",`/config/frontend/admin/access/${u}/${c}`)}for(let[E,u]of e.frontend.routes.entries()){let c=I(u,`/config/frontend/routes/${E}`);c.parentCode&&!d.has(c.parentCode)&&l("NATIVE_ROUTE_PARENT_MISSING",`/config/frontend/routes/${E}/parentCode`)}}function Mi(e){let t=new Set(e.authz.roles.map(_=>String(_.code))),n=e.authz.authenticatedUserRoleCode===void 0?"":R(e.authz.authenticatedUserRoleCode,"/config/authz/authenticatedUserRoleCode"),o=new Map(e.authz.scopeDimensions.map(_=>[String(_.code),{valueType:_.valueType==="uuid"?"uuid":"string",..._.valueSource?.resourceCode?{valueSourceResourceCode:String(_.valueSource.resourceCode)}:{}}])),i=new Set(o.keys()),r=new Map(e.data.resources.map((_,E)=>{let u=Pe(_,`/config/data/resources/${E}`,e.appCode);return[u.code,new Map(u.schema.fields.map(c=>[String(c.code),c]))]}));for(let[_,E]of e.authz.scopeDimensions.entries()){let u=`/config/authz/scopeDimensions/${_}`,c=I(E,u);if(T(c,["code","name","resourceCode","valueType","hierarchyMode","valueSource"],u,!0),c.valueSource===void 0)continue;let p=I(c.valueSource,`${u}/valueSource`);T(p,["kind","resourceCode","labelField","enabledField"],`${u}/valueSource`,!0),p.kind!=="native_resource"&&l("NATIVE_SCOPE_VALUE_SOURCE_KIND_INVALID",`${u}/valueSource/kind`),c.valueType!=="uuid"&&l("NATIVE_SCOPE_VALUE_SOURCE_TYPE_INVALID",`${u}/valueType`);let f=M(p.resourceCode,`${u}/valueSource/resourceCode`),A=r.get(f);A||l("NATIVE_SCOPE_VALUE_SOURCE_RESOURCE_MISSING",`${u}/valueSource/resourceCode`);let m=J(p.labelField,`${u}/valueSource/labelField`);if(["text.short","text.long"].includes(String(A.get(m)?.type||""))||l("NATIVE_SCOPE_VALUE_SOURCE_LABEL_FIELD_INVALID",`${u}/valueSource/labelField`),p.enabledField!==void 0){let N=J(p.enabledField,`${u}/valueSource/enabledField`);A.get(N)?.type!=="boolean"&&l("NATIVE_SCOPE_VALUE_SOURCE_ENABLED_FIELD_INVALID",`${u}/valueSource/enabledField`)}}let a=new Set,s=new Set;for(let[_,E]of e.authz.scopeSources.entries()){let u=`/config/authz/scopeSources/${_}`,c=I(E,u);T(c,["code","name","resourceCode","subject","grants","operationField","enabledField","effectiveFromField","effectiveToField","failureMode"],u,!0);let p=R(c.code,`${u}/code`);a.has(p)&&l("NATIVE_SCOPE_SOURCE_DUPLICATE",`${u}/code`),a.add(p),b(c.name,`${u}/name`,255);let f=M(c.resourceCode,`${u}/resourceCode`),A=r.get(f);A||l("NATIVE_SCOPE_SOURCE_RESOURCE_MISSING",`${u}/resourceCode`);let m=I(c.subject,`${u}/subject`),N=b(m.type,`${u}/subject/type`,32);T(m,N==="role_membership"?["type","userIdField","roleCode"]:["type","userIdField"],`${u}/subject`),["user","role_membership"].includes(N)||l("NATIVE_SCOPE_SOURCE_SUBJECT_INVALID",`${u}/subject/type`);let g=De(m.userIdField,A);Et(g)||l("NATIVE_SCOPE_SOURCE_SUBJECT_PATH_INVALID",`${u}/subject/userIdField`),N==="role_membership"&&!t.has(String(m.roleCode))&&l("NATIVE_ROLE_REFERENCE_MISSING",`${u}/subject/roleCode`);let $=new Set;for(let[V,D]of h(c.grants,`${u}/grants`,100).entries()){let C=`${u}/grants/${V}`,F=I(D,C);T(F,["dimensionCode","valueField","parentValueField"],C,!0);let y=R(F.dimensionCode,`${C}/dimensionCode`);(!i.has(y)||$.has(y))&&l("NATIVE_SCOPE_SOURCE_DIMENSION_INVALID",`${C}/dimensionCode`),$.add(y),c.failureMode==="last_known_good"&&s.add(y);for(let v of["valueField","parentValueField"]){if(F[v]===void 0)continue;let U=De(F[v],A);qt(U,o.get(y),r)||l("NATIVE_SCOPE_SOURCE_GRANT_PATH_INVALID",`${C}/${v}`)}}$.size===0&&l("NATIVE_SCOPE_SOURCE_GRANT_REQUIRED",`${u}/grants`),["strict","last_known_good"].includes(c.failureMode)||l("NATIVE_SCOPE_SOURCE_FAILURE_MODE_INVALID",`${u}/failureMode`);for(let V of["operationField","enabledField","effectiveFromField","effectiveToField"]){if(c[V]===void 0)continue;let D=J(c[V],`${u}/${V}`);A.has(D)||l("NATIVE_SCOPE_SOURCE_FIELD_MISSING",`${u}/${V}`)}}ji(e,t,r,n);let d=new Set;for(let[_,E]of e.authz.dataPolicies.entries()){let u=`/config/authz/dataPolicies/${_}`,c=I(E,u);T(c,["code","name","resourceCode","unrestrictedRoleCodes","operations","matchMode","rules","readExpression","writeBoundary"],u,!0);let p=R(c.code,`${u}/code`);d.has(p)&&l("NATIVE_DATA_POLICY_DUPLICATE",`${u}/code`),d.add(p);let f=c.readExpression!==void 0,A=P(c.operations||[],`${u}/operations`,4);c.operations!==void 0&&(A.length===0||A.some(D=>!["read","create","update","delete"].includes(D)))&&l("NATIVE_DATA_POLICY_OPERATIONS_INVALID",`${u}/operations`),["AND","OR"].includes(c.matchMode)||l("NATIVE_DATA_POLICY_MATCH_MODE_INVALID",`${u}/matchMode`),f&&c.operations!==void 0&&l("NATIVE_DATA_POLICY_READ_EXPRESSION_OPERATIONS_FORBIDDEN",`${u}/operations`);let m=e.data.resources.find(D=>D.dataPolicyCode===p),N=c.resourceCode||m?.code,g=N?r.get(M(N,`${u}/resourceCode`)):void 0;f&&!g&&l("NATIVE_DATA_POLICY_RESOURCE_MISSING",`${u}/resourceCode`);let $=P(c.unrestrictedRoleCodes||[],`${u}/unrestrictedRoleCodes`,100);c.unrestrictedRoleCodes!==void 0&&$.length===0&&l("NATIVE_DATA_POLICY_UNRESTRICTED_ROLES_INVALID",`${u}/unrestrictedRoleCodes`);for(let D of $)t.has(D)||l("NATIVE_ROLE_REFERENCE_MISSING",`${u}/unrestrictedRoleCodes`);let V;try{let D=h(c.rules,`${u}/rules`,100).map((C,F)=>({rule:I(C,`${u}/rules/${F}`),pointer:`${u}/rules/${F}`}));D.length===0?(!f||c.matchMode!=="AND"||c.writeBoundary!=="capability_only")&&l("NATIVE_DATA_POLICY_WRITE_BOUNDARY_REQUIRED",u):c.writeBoundary!==void 0&&l("NATIVE_DATA_POLICY_WRITE_BOUNDARY_INVALID",`${u}/writeBoundary`),V=[...D],f&&(V.push(...Be(c.readExpression,`${u}/readExpression`)),nn(c.readExpression,`${u}/readExpression`))}catch(D){throw D instanceof Ve&&l(D.code,D.pointer),D}for(let{rule:D,pointer:C}of V){T(D,["subject","dimensionCode","relationCode","resourceCode","field","roleCodes","operation","valuePath","emptyMatchesAll","operator","value","operand"],C,!0);let F=J(D.field,`${C}/field`),y=g?.get(F);f&&!y&&l("NATIVE_DATA_POLICY_FIELD_MISSING",`${C}/field`);for(let x of P(D.roleCodes||[],`${C}/roleCodes`,100))t.has(x)||l("NATIVE_ROLE_REFERENCE_MISSING",`${C}/roleCodes`);let v=String(D.operator||""),U=D.operand==="db_now",G=["is_null","is_not_null"].includes(v),S=["eq","not_eq","in","not_in"].includes(v),Q=!U&&(D.operator!==void 0||D.value!==void 0);if([D.subject==="current_user"?"current_user":"",typeof D.dimensionCode=="string"?"dimension":"",typeof D.relationCode=="string"?"relationship":"",Q?"constant":"",U?"db_now":""].filter(Boolean).length!==1&&l("NATIVE_DATA_POLICY_RULE_SOURCE_INVALID",C),D.subject!==void 0&&D.subject!=="current_user"&&l("NATIVE_DATA_POLICY_SUBJECT_INVALID",`${C}/subject`),Q){if(!S&&!G&&l("NATIVE_DATA_POLICY_OPERATOR_INVALID",`${C}/operator`),["in","not_in"].includes(v)){let x=h(D.value,`${C}/value`,100).map((Ee,re)=>b(Ee,`${C}/value/${re}`,2048));(x.length===0||new Set(x).size!==x.length)&&l("NATIVE_DATA_POLICY_VALUE_INVALID",`${C}/value`)}else["eq","not_eq"].includes(v)?b(D.value,`${C}/value`,2048):(D.value!==void 0||D.operand!==void 0)&&l("NATIVE_DATA_POLICY_VALUE_INVALID",`${C}/value`);for(let x of["operation","valuePath","emptyMatchesAll","resourceCode","operand"])D[x]!==void 0&&l("NATIVE_DATA_POLICY_CONSTANT_RULE_INVALID",`${C}/${x}`)}if(U){(!["lt","lte","gt","gte"].includes(v)||D.value!==void 0||y?.type!=="datetime")&&l("NATIVE_DATA_POLICY_DB_NOW_INVALID",C);for(let x of["operation","valuePath","emptyMatchesAll","resourceCode","value"])D[x]!==void 0&&l("NATIVE_DATA_POLICY_DB_NOW_INVALID",`${C}/${x}`)}D.dimensionCode&&!i.has(D.dimensionCode)&&l("NATIVE_SCOPE_DIMENSION_MISSING",`${C}/dimensionCode`),s.has(String(D.dimensionCode||""))&&D.operation!=="read"&&l("NATIVE_SCOPE_SOURCE_LAST_KNOWN_GOOD_UNSAFE",`${C}/operation`)}}for(let[_,E]of e.data.resources.entries()){let u=I(E,`/config/data/resources/${_}`);u.dataPolicyCode&&!d.has(u.dataPolicyCode)&&l("NATIVE_DATA_POLICY_REFERENCE_MISSING",`/config/data/resources/${_}/dataPolicyCode`)}}function xi(e){try{Ft(e.data.resources,"/config/data/resources")}catch(t){throw t instanceof ce&&l(t.code,t.pointer),t}}function ji(e,t,n,o){let i=new Set;for(let[r,a]of e.authz.roleMembershipSources.entries()){let s=`/config/authz/roleMembershipSources/${r}`,d=I(a,s);T(d,["code","name","resourceCode","userIdField","roleCode","enabledField","effectiveFromField","effectiveToField","failureMode"],s,!0);let _=R(d.code,`${s}/code`);_.length>100&&l("NATIVE_AUTHORIZATION_PROJECTION_SOURCE_CODE_INVALID",`${s}/code`),i.has(_)&&l("NATIVE_AUTHORIZATION_PROJECTION_SOURCE_DUPLICATE",`${s}/code`),i.add(_),b(d.name,`${s}/name`,255);let E=En(d.resourceCode,`${s}/resourceCode`,n);pn(d.userIdField,`${s}/userIdField`,E),t.has(String(d.roleCode||""))||l("NATIVE_ROLE_REFERENCE_MISSING",`${s}/roleCode`),o&&d.roleCode===o&&l("NATIVE_AUTHENTICATED_USER_ROLE_SOURCE_CONFLICT",`${s}/roleCode`),An(d,s,E)}for(let[r,a]of e.authz.relationshipGrantSources.entries()){let s=`/config/authz/relationshipGrantSources/${r}`,d=I(a,s);T(d,["code","name","resourceCode","subject","relationCode","targetResourceCode","resourceIdField","operations","enabledField","effectiveFromField","effectiveToField","failureMode"],s,!0);let _=R(d.code,`${s}/code`);_.length>100&&l("NATIVE_AUTHORIZATION_PROJECTION_SOURCE_CODE_INVALID",`${s}/code`),i.has(_)&&l("NATIVE_AUTHORIZATION_PROJECTION_SOURCE_DUPLICATE",`${s}/code`),i.add(_),b(d.name,`${s}/name`,255);let E=En(d.resourceCode,`${s}/resourceCode`,n),u=I(d.subject,`${s}/subject`),c=b(u.type,`${s}/subject/type`,32);T(u,c==="role_membership"?["type","userIdField","roleCode"]:["type","userIdField"],`${s}/subject`),["user","role_membership"].includes(c)||l("NATIVE_AUTHORIZATION_PROJECTION_SUBJECT_INVALID",`${s}/subject/type`),pn(u.userIdField,`${s}/subject/userIdField`,E),c==="role_membership"&&!t.has(String(u.roleCode||""))&&l("NATIVE_ROLE_REFERENCE_MISSING",`${s}/subject/roleCode`),R(d.relationCode,`${s}/relationCode`);let p=M(d.targetResourceCode,`${s}/targetResourceCode`);n.has(p)||l("NATIVE_AUTHORIZATION_PROJECTION_TARGET_RESOURCE_MISSING",`${s}/targetResourceCode`);let f=De(d.resourceIdField,E),A=f?.field.type==="resource-ref.single"&&f.valuePath==="value"&&f.field.source?.resourceCode===p;(d.resourceIdField==="id"?p!==String(d.resourceCode):!A)&&l("NATIVE_AUTHORIZATION_PROJECTION_RESOURCE_ID_FIELD_INVALID",`${s}/resourceIdField`);let m=P(d.operations,`${s}/operations`,20);(m.length===0||m.some(N=>N.length>64||!/^[A-Za-z0-9][A-Za-z0-9:._*-]{0,63}$/.test(N)))&&l("NATIVE_AUTHORIZATION_PROJECTION_OPERATIONS_INVALID",`${s}/operations`),An(d,s,E)}}function En(e,t,n){let o=M(e,t),i=n.get(o);return i||l("NATIVE_AUTHORIZATION_PROJECTION_RESOURCE_MISSING",t),i}function pn(e,t,n){let o=De(e,n);Et(o)||l("NATIVE_AUTHORIZATION_PROJECTION_USER_FIELD_INVALID",t)}function An(e,t,n){if(e.failureMode!=="strict"&&l("NATIVE_AUTHORIZATION_PROJECTION_FAILURE_MODE_INVALID",`${t}/failureMode`),e.enabledField!==void 0){let o=J(e.enabledField,`${t}/enabledField`);n.get(o)?.type!=="boolean"&&l("NATIVE_AUTHORIZATION_PROJECTION_ENABLED_FIELD_INVALID",`${t}/enabledField`)}for(let o of["effectiveFromField","effectiveToField"]){if(e[o]===void 0)continue;let i=J(e[o],`${t}/${o}`);["date","datetime"].includes(String(n.get(i)?.type))||l("NATIVE_AUTHORIZATION_PROJECTION_EFFECTIVE_FIELD_INVALID",`${t}/${o}`)}}function Wi(e){let t=new Set,n=new Set;e.forEach((o,i)=>{let r=`/config/backend/secrets/${i}`,a=I(o,r);T(a,["name","env","description","required","exposure"],r,!0);let s=b(a.name,`${r}/name`,128),d=b(a.env,`${r}/env`,128);Bo.test(s)||l("NATIVE_SECRET_NAME_INVALID",`${r}/name`),(!Jo.test(d)||d.startsWith("OPENXIANGDA_")||["NODE_ENV","PORT"].includes(d))&&l("NATIVE_SECRET_ENV_INVALID",`${r}/env`),t.has(s)&&l("NATIVE_SECRET_NAME_DUPLICATE",`${r}/name`),n.has(d)&&l("NATIVE_SECRET_ENV_DUPLICATE",`${r}/env`),t.add(s),n.add(d),L(a.exposure,"active_only",`${r}/exposure`),a.required!==void 0&&be(a.required,`${r}/required`),a.description!==void 0&&ht(a.description,`${r}/description`,2e3)})}function Bi(e){let t=new Set,n=new Map,o=new Map(e.data.resources.map(c=>[String(c.code),c])),i=new Map(e.frontend.routes.map((c,p)=>{let f=I(c,`/config/frontend/routes/${p}`);return[R(f.code,`/config/frontend/routes/${p}/code`),f]}));for(let[c,p]of e.workflows.definitions.entries()){let f=`/config/workflows/definitions/${c}`,A=I(p,f);if(T(A,["version","definition","launch"],f,["detailRouteCode"]),wn(A.launch,`${f}/launch`),A.detailRouteCode!==void 0){let $=Pn(A.detailRouteCode,`${f}/detailRouteCode`);for(let[V,D,C]of[["desktop",$.desktop,"admin"],["mobile",$.mobile,"user"]]){let F=`${f}/detailRouteCode/${V}`,y=i.get(D);y||l("NATIVE_WORKFLOW_DETAIL_ROUTE_MISSING",F),y.surface!==C&&l("NATIVE_WORKFLOW_DETAIL_ROUTE_SURFACE_INVALID",F);let v=ee(y.path,F),U=[...v.matchAll(/:([A-Za-z][A-Za-z0-9_]*)/g)].map(G=>G[1]);(v.includes("*")||U.length!==1||U[0]!=="instanceId")&&l("NATIVE_WORKFLOW_DETAIL_ROUTE_PATH_INVALID",F)}}let m=I(A.definition,`${f}/definition`),N=`${m.code}:${Oe(A.version,`${f}/version`)}`;t.has(N)&&l("NATIVE_WORKFLOW_DEFINITION_DUPLICATE",f),t.add(N),Gi(m,`${f}/definition`),Ji(m.subject,o,`${f}/definition/subject`);let g=Zt(m,{appCode:e.appCode,capabilities:e.authz.capabilities.map($=>$.code),fields:new Map((o.get(m.subject.resourceCode)?.schema.fields||[]).map($=>[$.code,$]))});g.length&&l("NATIVE_WORKFLOW_INSTANCE_COMMAND_POLICY_INVALID",`${f}/definition/instanceCommands`,{errors:g}),m.title===m.code&&l("NATIVE_WORKFLOW_USER_TITLE_REQUIRED",`${f}/definition/title`),n.set(N,m)}let r=new Set,a=new Map;for(let[c,p]of e.workflows.bindings.entries()){let f=I(p,`/config/workflows/bindings/${c}`),A=I(f.binding,`/config/workflows/bindings/${c}/binding`),m=`${A.workflowCode}:${Oe(f.version,`/config/workflows/bindings/${c}/version`)}`;r.has(m)&&l("NATIVE_WORKFLOW_BINDING_DUPLICATE",`/config/workflows/bindings/${c}`),r.add(m),zi(A,`/config/workflows/bindings/${c}/binding`),a.set(m,A)}let s=new Set,d=new Map;for(let[c,p]of e.workflows.activations.entries()){let f=`/config/workflows/activations/${c}`,A=I(p,f);T(A,["workflowCode","definitionVersion","bindingVersion","acceptedCommandDeactivationPolicy"],f,["environmentKey"]);let m=R(A.workflowCode,`${f}/workflowCode`);s.has(m)&&l("NATIVE_WORKFLOW_ACTIVATION_DUPLICATE",f),s.add(m);let N=`${m}:${Oe(A.definitionVersion,`${f}/definitionVersion`)}`,g=`${m}:${Oe(A.bindingVersion,`${f}/bindingVersion`)}`;t.has(N)||l("NATIVE_WORKFLOW_DEFINITION_REFERENCE_MISSING",`${f}/definitionVersion`),r.has(g)||l("NATIVE_WORKFLOW_BINDING_REFERENCE_MISSING",`${f}/bindingVersion`);let $=n.get(N),V=a.get(g);(!["finish-pinned","cancel-on-deactivate"].includes(A.acceptedCommandDeactivationPolicy)||A.acceptedCommandDeactivationPolicy!==$.acceptedCommandDeactivationPolicy)&&l("NATIVE_WORKFLOW_COMMAND_DEACTIVATION_POLICY_MISMATCH",`${f}/acceptedCommandDeactivationPolicy`),Yi($,V,`/config/workflows/activations/${c}`),d.set(m,V)}let _=new Set;e.workflows.providers.forEach((c,p)=>{let f=`/config/workflows/providers/${p}`,A=I(c,f);T(A,["code","endpointPath","timeoutMs"],f,!0);let m=R(A.code,`${f}/code`);_.has(m)&&l("NATIVE_WORKFLOW_PROVIDER_DUPLICATE",`${f}/code`),_.add(m),ee(A.endpointPath,`${f}/endpointPath`),A.timeoutMs!==void 0&&H(A.timeoutMs,`${f}/timeoutMs`,100,1e4)});for(let[c,p]of d.entries())for(let[f,A]of Object.entries(I(p.bindings,"/config/workflows/bindings/*/binding/bindings"))){let m=I(A,`/config/workflows/${c}/bindings/${f}`);m.provider==="application_provider"&&!_.has(m.providerCode)&&l("NATIVE_WORKFLOW_PROVIDER_REFERENCE_MISSING",`/config/workflows/${c}/bindings/${f}/providerCode`)}let E=new Set(e.authz.roles.map(c=>c.code)),u=new Set;e.workflows.editableParameters.forEach((c,p)=>{let f=`/config/workflows/editableParameters/${p}`,A=I(c,f);T(A,["code","workflowCode","bindingKey","label","valueType","required","allowedRoleCodes","allowedProviderCodes","maxItems"],f,!0);let m=R(A.code,`${f}/code`);u.has(m)&&l("NATIVE_WORKFLOW_EDITABLE_PARAMETER_DUPLICATE",`${f}/code`),u.add(m);let N=Ke(A.workflowCode,`${f}/workflowCode`),g=Dt(A.bindingKey,`${f}/bindingKey`),$=d.get(N);(!$||!I($.bindings,`${f}/bindingKey`)[g])&&l("NATIVE_WORKFLOW_EDITABLE_BINDING_MISSING",`${f}/bindingKey`),b(A.label,`${f}/label`,255),["role_code","user_ids","provider_code"].includes(A.valueType)||l("NATIVE_WORKFLOW_EDITABLE_VALUE_TYPE_INVALID",`${f}/valueType`);for(let V of P(A.allowedRoleCodes||[],`${f}/allowedRoleCodes`,100))E.has(V)||l("NATIVE_ROLE_REFERENCE_MISSING",`${f}/allowedRoleCodes`);for(let V of P(A.allowedProviderCodes||[],`${f}/allowedProviderCodes`,100))_.has(V)||l("NATIVE_WORKFLOW_PROVIDER_REFERENCE_MISSING",`${f}/allowedProviderCodes`);A.required!==void 0&&be(A.required,`${f}/required`),A.maxItems!==void 0&&H(A.maxItems,`${f}/maxItems`,1,200)})}function Ji(e,t,n){let o=I(e,n);T(o,["resourceCode","factProjection"],n,["summaryFields"]);let i=M(o.resourceCode,`${n}/resourceCode`),r=t.get(i);r||l("NATIVE_WORKFLOW_SUBJECT_RESOURCE_MISSING",`${n}/resourceCode`);let a=new Set(h(I(r.schema,`${n}/resourceCode`).fields,`${n}/resourceCode`,500).map((_,E)=>J(I(_,`${n}/resourceCode/${E}`).code,`${n}/resourceCode/${E}`))),s=I(o.factProjection,`${n}/factProjection`),d=Object.entries(s);(d.length<1||d.length>64)&&l("NATIVE_WORKFLOW_SUBJECT_FACT_PROJECTION_INVALID",`${n}/factProjection`);for(let[_,E]of d){Yo.test(_)||l("NATIVE_WORKFLOW_SUBJECT_FACT_KEY_INVALID",`${n}/factProjection/${_}`);let u=J(E,`${n}/factProjection/${_}`);a.has(u)||l("NATIVE_WORKFLOW_SUBJECT_FIELD_MISSING",`${n}/factProjection/${_}`)}if(o.summaryFields!==void 0){let _=P(o.summaryFields,`${n}/summaryFields`,Ho).map((f,A)=>J(f,`${n}/summaryFields/${A}`)),E=t.get(i),u=E.surface&&typeof E.surface=="object"&&!Array.isArray(E.surface)?E.surface:{},c=u.fields&&typeof u.fields=="object"&&!Array.isArray(u.fields)?u.fields:{},p=new Map(h(I(E.schema,`${n}/resourceCode`).fields,`${n}/resourceCode`,500).map((f,A)=>{let m=I(f,`${n}/resourceCode/${A}`);return[String(m.code),m]}));for(let[f,A]of _.entries()){let m=p.get(A),N=c[A],g=String(m?.type||""),$=m?.maxLength;(!m||m.system===!0||N&&typeof N=="object"&&!Array.isArray(N)&&N.system===!0||["id","revision","created_by","updated_by","created_at","updated_at"].includes(A)||!qo.has(g)||g==="text.long"&&typeof $=="number"&&Number.isFinite($)&&$>Ko)&&l("NATIVE_WORKFLOW_SUBJECT_SUMMARY_FIELDS_INVALID",`${n}/summaryFields/${f}`)}}}function Gi(e,t){T(e,["schemaVersion","code","title","subject","acceptedCommandDeactivationPolicy","startAt","inputSchema","nodes"],t,["organizationContext","instanceCommands"]),L(e.schemaVersion,"openxiangda.workflow-definition/v2",`${t}/schemaVersion`),Ke(e.code,`${t}/code`),b(e.title,`${t}/title`,255),["finish-pinned","cancel-on-deactivate"].includes(e.acceptedCommandDeactivationPolicy)||l("NATIVE_WORKFLOW_COMMAND_DEACTIVATION_POLICY_REQUIRED",`${t}/acceptedCommandDeactivationPolicy`);let n=I(e.nodes,`${t}/nodes`),o=Object.keys(n);(o.length===0||o.length>200)&&l("NATIVE_WORKFLOW_NODE_COUNT_INVALID",`${t}/nodes`);let i=b(e.startAt,`${t}/startAt`,128);n[i]||l("NATIVE_WORKFLOW_START_NODE_MISSING",`${t}/startAt`);let r=new Map;for(let[_,E]of Object.entries(n)){let u=`${t}/nodes/${_}`,c=I(E,u);L(c.id,_,`${u}/id`),["approval","condition","end"].includes(c.kind)||l("NATIVE_WORKFLOW_NODE_KIND_INVALID",`${u}/kind`);let p=[];if(c.kind==="approval"){Dt(c.binding,`${u}/binding`),["single","any","all","sequence"].includes(c.mode)||l("NATIVE_WORKFLOW_APPROVAL_MODE_INVALID",`${u}/mode`),p.push(b(c.onApprove,`${u}/onApprove`,128),b(c.onReject,`${u}/onReject`,128));for(let f of P(c.returnTargets||[],`${u}/returnTargets`,200))n[f]||l("NATIVE_WORKFLOW_TARGET_MISSING",`${u}/returnTargets`);for(let f of P(c.allowedOperations||[],`${u}/allowedOperations`,20))Qo.has(f)||l("NATIVE_WORKFLOW_OPERATION_INVALID",`${u}/allowedOperations`)}else if(c.kind==="condition"){let f=h(c.branches,`${u}/branches`,100);f.length===0&&l("NATIVE_WORKFLOW_BRANCH_REQUIRED",`${u}/branches`),f.forEach((A,m)=>{let N=I(A,`${u}/branches/${m}`);ye(N.when,`${u}/branches/${m}/when`,0),p.push(b(N.target,`${u}/branches/${m}/target`,128))}),p.push(b(c.otherwise,`${u}/otherwise`,128))}else b(c.outcome,`${u}/outcome`,128);for(let f of p)n[f]||l("NATIVE_WORKFLOW_TARGET_MISSING",u);r.set(_,p)}let a=new Set,s=new Set,d=_=>{if(s.has(_)&&l("NATIVE_WORKFLOW_CYCLE_FORBIDDEN",`${t}/nodes/${_}`),!a.has(_)){a.add(_),s.add(_);for(let E of r.get(_)||[])d(E);s.delete(_)}};d(i),a.size!==o.length&&l("NATIVE_WORKFLOW_NODE_UNREACHABLE",`${t}/nodes`)}function ye(e,t,n){n>20&&l("NATIVE_WORKFLOW_EXPRESSION_DEPTH_EXCEEDED",t);let o=I(e,t),i=b(o.op,`${t}/op`,16);if(i!=="literal"){if(i==="path"){let r=b(o.path,`${t}/path`,255);/^[A-Za-z][A-Za-z0-9_.]{0,254}$/.test(r)||l("NATIVE_WORKFLOW_EXPRESSION_PATH_INVALID",`${t}/path`);return}if(["eq","neq","gt","gte","lt","lte","in","contains"].includes(i)){ye(o.left,`${t}/left`,n+1),ye(o.right,`${t}/right`,n+1);return}if(["and","or"].includes(i)){let r=h(o.values,`${t}/values`,100);r.length===0&&l("NATIVE_WORKFLOW_EXPRESSION_EMPTY",`${t}/values`),r.forEach((a,s)=>ye(a,`${t}/values/${s}`,n+1));return}if(["not","exists"].includes(i)){ye(o.value,`${t}/value`,n+1);return}l("NATIVE_WORKFLOW_EXPRESSION_OPERATOR_INVALID",`${t}/op`)}}function zi(e,t){L(e.schemaVersion,"openxiangda.workflow-binding/v2",`${t}/schemaVersion`),Ke(e.workflowCode,`${t}/workflowCode`);let n=I(e.bindings,`${t}/bindings`);Object.keys(n).length>200&&l("NATIVE_WORKFLOW_BINDING_LIMIT_EXCEEDED",`${t}/bindings`);for(let[o,i]of Object.entries(n)){Dt(o,`${t}/bindings/${o}`);let r=I(i,`${t}/bindings/${o}`),a=b(r.provider,`${t}/bindings/${o}/provider`,64);["fixed_users","initiator","input_users","form_field_users","department_supervisor","app_role","app_role_in_scope","business_relation","previous_node_actor","initiator_select","application_provider"].includes(a)||l("NATIVE_WORKFLOW_BINDING_PROVIDER_INVALID",`${t}/bindings/${o}/provider`),a==="fixed_users"&&h(r.users,`${t}/bindings/${o}/users`,200).length===0&&l("NATIVE_WORKFLOW_BINDING_USERS_REQUIRED",`${t}/bindings/${o}/users`),["input_users","form_field_users"].includes(a)&&b(r.inputPath,`${t}/bindings/${o}/inputPath`,255),["app_role","app_role_in_scope","initiator_select"].includes(a)&&R(r.roleCode,`${t}/bindings/${o}/roleCode`),a==="department_supervisor"&&b(r.departmentIdFrom,`${t}/bindings/${o}/departmentIdFrom`,255),a==="application_provider"&&R(r.providerCode,`${t}/bindings/${o}/providerCode`)}}function Yi(e,t,n){L(t.workflowCode,e.code,`${n}/workflowCode`);let o=I(t.bindings,`${n}/bindings`);for(let[i,r]of Object.entries(I(e.nodes,`${n}/nodes`))){let a=I(r,`${n}/nodes/${i}`);a.kind==="approval"&&!o[a.binding]&&l("NATIVE_WORKFLOW_BINDING_REFERENCE_MISSING",`${n}/nodes/${i}/binding`)}}function Pe(e,t,n){let o=I(e,t);T(o,["schemaVersion","appCode","code","name","schema","surface","invariants","capabilities","dataPolicyCode","fieldPolicies"],t,!0),L(o.schemaVersion,"openxiangda.data-resource/v2",`${t}/schemaVersion`),L(o.appCode,n,`${t}/appCode`);let i=M(o.code,`${t}/code`),r=b(o.name,`${t}/name`,255),a=I(o.schema,`${t}/schema`);T(a,["fields"],`${t}/schema`);let s,d;try{s=nt(a.fields,`${t}/schema/fields`),d=Lt(o.invariants,s,`${t}/invariants`),lt(o.surface,s,`${t}/surface`)}catch(c){throw c instanceof ce&&l(c.code,c.pointer),c}let _=new Set(s.map(c=>c.code)),E=I(o.capabilities,`${t}/capabilities`);T(E,["read","create","update","delete"],`${t}/capabilities`);let u=I(o.fieldPolicies,`${t}/fieldPolicies`);for(let[c,p]of Object.entries(u)){!_.has(c)&&!he(c)&&l("NATIVE_DATA_FIELD_POLICY_FIELD_MISSING",`${t}/fieldPolicies/${c}`);let f=`${t}/fieldPolicies/${c}`,A=I(p,f);he(c)&&(T(A,["read"],f,!0),(!Array.isArray(A.read)||A.read.length>20||A.read.some(m=>typeof m!="string"||!m.trim())||new Set(A.read).size!==A.read.length)&&l("NATIVE_DATA_AUDIT_READ_POLICY_INVALID",`${f}/read`)),T(A,["read","create","update","mask"],f,!0),A.mask!==void 0&&!["omit","null"].includes(A.mask)&&l("NATIVE_DATA_FIELD_POLICY_MASK_INVALID",`${f}/mask`)}return{...o,code:i,name:r,schema:{fields:s},...o.invariants===void 0?{}:{invariants:d},capabilities:E,fieldPolicies:u}}function Fn(e){return[{code:`app:${e}:directory:read`,kind:"platform",name:"\u8BFB\u53D6\u53D7\u9650\u7EC4\u7EC7\u76EE\u5F55",source:"platform"},...[["app:role:read","\u67E5\u770B\u89D2\u8272\u4E0E\u6388\u6743"],["app:role:define","\u5B9A\u4E49\u624B\u5DE5\u89D2\u8272"],["app:role:assign","\u5206\u914D\u89D2\u8272\u6210\u5458"],["app:role:grant-capability","\u6388\u4E88\u89D2\u8272\u80FD\u529B"],["app:scope-grant:manage","\u7BA1\u7406\u6570\u636E\u8303\u56F4"],["app:super-admin:manage","\u7BA1\u7406\u5E94\u7528\u6700\u9AD8\u7BA1\u7406\u5458"]].map(([t,n])=>({code:t,kind:"platform",name:n,source:"platform"}))]}function In(e,t,n,o){let i=e.toString("utf8"),r;try{r=JSON.parse(i)}catch{l(n,t)}let a=I(r,t);return W(a)!==i&&l(o,t),a}function mn(e,t){let n=0,o=(i,r,a)=>{if(n+=1,n>ni&&l("NATIVE_ARTIFACT_NODE_LIMIT_EXCEEDED",r),a>ti&&l("NATIVE_ARTIFACT_DEPTH_LIMIT_EXCEEDED",r),typeof i=="string"){Buffer.byteLength(i)>It&&l("NATIVE_ARTIFACT_STRING_LIMIT_EXCEEDED",r);return}if(Array.isArray(i)){i.forEach((s,d)=>o(s,`${r}/${d}`,a+1));return}if(!(!i||typeof i!="object"))for(let[s,d]of Object.entries(i))["__proto__","prototype","constructor"].includes(s)&&l("NATIVE_ARTIFACT_DANGEROUS_KEY",`${r}/${s}`),Hi(s)&&l("NATIVE_ARTIFACT_RUNTIME_FIELD_FORBIDDEN",`${r}/${s}`),o(d,`${r}/${s}`,a+1)};o(e,t,0)}function Hi(e){return["environmentKey","environmentId","secretValue","ciphertext","oauthClient","oauthClientId","oauthClientSecret","signingSecret","kubernetesNamespace","nodePort","productionUrl"].includes(e)}function Ce(e){return{value:e,digest:Z(e)}}function Nn(e,t,n,o){typeof e!="string"&&!Buffer.isBuffer(e)&&!(e instanceof Uint8Array)&&l("NATIVE_ARTIFACT_BYTES_REQUIRED",n);let i=Buffer.isBuffer(e)?e:Buffer.from(e);return i.byteLength===0&&l("NATIVE_ARTIFACT_EMPTY",n),i.byteLength>t&&l(o,n),i}function Tn(e,t,n,o){let i=ze.createHash("sha256").update(e).digest("hex");ze.timingSafeEqual(Buffer.from(i),Buffer.from(t))||l(o,n)}function I(e,t){return(!e||typeof e!="object"||Array.isArray(e))&&l("NATIVE_OBJECT_REQUIRED",t),e}function h(e,t,n){return Array.isArray(e)||l("NATIVE_ARRAY_REQUIRED",t),e.length>n&&l("NATIVE_ARRAY_LIMIT_EXCEEDED",t),e}function P(e,t,n){let o=h(e,t,n).map((i,r)=>b(i,`${t}/${r}`,255));return new Set(o).size!==o.length&&l("NATIVE_ARRAY_DUPLICATE",t),o}function b(e,t,n){return(typeof e!="string"||e.length===0||e.length>n)&&l("NATIVE_STRING_INVALID",t),e}function ht(e,t,n){return(typeof e!="string"||e.length>n)&&l("NATIVE_STRING_INVALID",t),e}function R(e,t){let n=b(e,t,128);return Mo.test(n)||l("NATIVE_CODE_INVALID",t),n}function M(e,t){let n=b(e,t,64);return jo.test(n)||l("NATIVE_RESOURCE_CODE_INVALID",t),n}function J(e,t){let n=b(e,t,63);return Wo.test(n)||l("NATIVE_FIELD_CODE_INVALID",t),n}function Ke(e,t){let n=b(e,t,128);return Go.test(n)||l("NATIVE_WORKFLOW_CODE_INVALID",t),n}function Dt(e,t){let n=b(e,t,128);return zo.test(n)||l("NATIVE_WORKFLOW_BINDING_CODE_INVALID",t),n}function _e(e,t,n){let o=b(e,t,255);return Uo.test(o)||l("NATIVE_CAPABILITY_CODE_INVALID",t),!o.startsWith(`app:${n}:`)&&!Fn(n).some(i=>i.code===o)&&l("NATIVE_CAPABILITY_APP_MISMATCH",t),o}function ee(e,t){let n=b(e,t,2048);return(!n.startsWith("/")||n.startsWith("//")||n.includes("..")||n.includes("?")||n.includes("#"))&&l("NATIVE_ABSOLUTE_PATH_INVALID",t),n}function Oe(e,t){return(!Number.isInteger(e)||Number(e)<1)&&l("NATIVE_POSITIVE_INTEGER_REQUIRED",t),Number(e)}function H(e,t,n,o){return(!Number.isInteger(e)||Number(e)<n||Number(e)>o)&&l("NATIVE_INTEGER_OUT_OF_RANGE",t),Number(e)}function be(e,t){return typeof e!="boolean"&&l("NATIVE_BOOLEAN_REQUIRED",t),e}function Ct(e,t){let n=b(e,t,64).toLowerCase();return vo.test(n)||l("NATIVE_DIGEST_INVALID",t),n}function L(e,t,n){e!==t&&l("NATIVE_VALUE_MISMATCH",n)}function T(e,t,n,o=!1){let i=new Set([...t,...Array.isArray(o)?o:[]]);for(let r of Object.keys(e))i.has(r)||l("NATIVE_PROPERTY_UNKNOWN",`${n}/${r}`);if(o!==!0)for(let r of t)Object.prototype.hasOwnProperty.call(e,r)||l("NATIVE_PROPERTY_REQUIRED",`${n}/${r}`)}function q(e,t){return[...e].sort((n,o)=>se(t(n),t(o)))}function k(e){return[...new Set(e)].sort(se)}function gn(e){return[...new Set(e)].sort((t,n)=>t-n)}function se(e,t){return e===t?0:e<t?-1:1}function Ln(e){return!e||typeof e!="object"||Object.isFrozen(e)||(Object.freeze(e),Object.values(e).forEach(t=>Ln(t))),e}function Ot(e,t,n){if(At(e,t))return n;if(Array.isArray(e)&&Array.isArray(t)){let o=Math.max(e.length,t.length);for(let i=0;i<o;i+=1)if(!At(e[i],t[i]))return Ot(e[i],t[i],`${n}/${i}`)}if(e&&t&&typeof e=="object"&&typeof t=="object"&&!Array.isArray(e)&&!Array.isArray(t)){let o=k([...Object.keys(e),...Object.keys(t)]);for(let i of o){let r=e[i],a=t[i];if(!At(r,a))return Ot(r,a,`${n}/${i}`)}}return n}function At(e,t){return e===void 0||t===void 0?e===t:W(e)===W(t)}function l(e,t,n={}){throw new Tt(e,t,n)}var Qs="da8662319e94a28b1945f835cc01fd1a1a84242134e66749b32f6b73602c3f69";export{Bt as DATA_AUDIT_METADATA_FIELDS,mt as DATA_EVENT_TYPES_V2,Qs as NATIVE_CONFIGURATION_VALIDATOR_DIGEST,B as NATIVE_CONTRACT_CAPACITY_V2,vs as NATIVE_DATA_POLICY_EXPRESSION_MAX_CLAUSES,Ps as NATIVE_DATA_POLICY_EXPRESSION_MAX_DEPTH,Fs as NATIVE_DATA_POLICY_EXPRESSION_MAX_GROUP_ITEMS,Ls as NATIVE_DATA_POLICY_EXPRESSION_MAX_LEAVES,ks as NATIVE_DATA_POLICY_EXPRESSION_MAX_OCCURRENCES,Xn as NATIVE_DATA_QUERY_OPERATORS_V2,Tt as NativeConfigurationCompilerError,ce as NativeDataFieldContractV2Error,Ve as NativeDataPolicyExpressionV2Error,_t as NativeScopeSourceFieldPathV2Error,Mn as OPENXIANGDA_NATIVE_DATA_FIELD_TYPES_V2,le as OPENXIANGDA_NATIVE_DATA_SURFACE_KEYS_V2,jn as OPENXIANGDA_NATIVE_SYSTEM_FIELDS_V2,Xi as OPENXIANGDA_NATIVE_SYSTEM_FIELD_MAP_V2,Nt as WORKFLOW_EVENT_TYPES_V2,qs as compileNativeApplicationConfiguration,ai as compileNativeEventCapturePlansV2,ri as compileRequiredPlatformCapabilitiesV3,Jt as hasDataAuditReadPolicy,he as isDataAuditMetadataField,Zi as isNativeDataQueryOperatorV2,Ue as isNativeMultiValueFieldV2,hs as materializeNativeDataQueryPathTypesV2,Be as nativeDataPolicyExpressionLeavesV2,nn as nativeDataPolicyExpressionToCnfV2,Ds as nativeDataQueryPathPlanV2,ts as nativeFieldAggregatePlanV2,ps as nativeFieldColumnDefinitionV2,As as nativeFieldDefaultSqlV2,Is as nativeFieldHasDefaultV2,gs as nativeFieldIndexStatementsV2,Me as nativeFieldRequiresCreateInputV2,Ts as nativeFieldSequenceGrantStatementsV2,Ns as nativeFieldSequenceOwnershipStatementsV2,ms as nativeFieldSequenceStatementsV2,Mt as nativeFieldSupportsFilterV2,es as nativeFieldSupportsOperatorV2,rt as nativeFieldSupportsSearchV2,at as nativeFieldSupportsSortV2,Ut as nativeOperatorsForFieldV2,mo as nativePhysicalFieldV2,Es as nativePhysicalFieldsV2,ue as nativePhysicalObjectNameV2,bs as nativeScopeSourceFieldValueV2,qt as nativeScopeSourceGrantPathSupportedV2,Et as nativeScopeSourceSubjectPathSupportedV2,Cs as nativeSubtableConstraintStatementsV2,nt as parseNativeDataFieldsV2,Lt as parseNativeDataResourceInvariantsV2,ut as projectNativeDataResourceViewV2,K as quoteNativeIdentifierV2,De as resolveNativeScopeSourceFieldPathV2,Ft as validateNativeDataResourceReferencesV2,lt as validateNativeDataResourceSurfaceV2,Zt as validateWorkflowInstanceCommandPolicies,Vs as workflowInstanceCommandDeadlineError,Ss as workflowInstanceTerminateCapabilityAllowed,Qt as workflowPolicyTimestamp};
|
|
8
|
+
END $native_subtable$`]}function ue(e,...t){return`${e}_${Ao("sha256").update(t.join(":")).digest("hex").slice(0,32)}`}function q(e){if(!/^[A-Za-z_][A-Za-z0-9_]{0,62}$/.test(e))throw new Error("OPENXIANGDA_NATIVE_IDENTIFIER_INVALID");return`"${e}"`}function Co(e,t){return e.type==="subtable"?"none":t?"gin-trigram":e.indexed?["date-range","datetime-range"].includes(e.type)?"gist-range":ft.has(e.type)?"btree-snapshot-expressions":Io.has(e.type)?"gin-jsonb-path":"btree":"none"}function Oo(e){switch(e.type){case"text.short":return`varchar(${e.maxLength??255})`;case"text.long":case"text.rich":return"text";case"number.integer":return"bigint";case"number.decimal":return`numeric(${e.precision??38},${e.scale??10})`;case"boolean":return"boolean";case"date":return"date";case"time":return"time(0)";case"datetime":return"timestamptz";case"date-range":return"daterange";case"datetime-range":return"tstzrange";case"uuid":return"uuid";case"serial-number":return"varchar(255)";case"subtable":return"child-resource";default:return No.has(e.type),"jsonb"}}function Ht(e,t){if(xe(t.type)&&t.type!=="subtable")return"'[]'::jsonb";if(t.type!=="serial-number")return"";let o=zt(t.serial?.prefix||""),n=t.serial?.digits??6;return`(${o} || lpad(nextval(${zt(We(e,t.code))})::text, ${n}, '0'))`}function bo(e,t){return Yt.has(t.type)?` CHECK (${e} IS NULL OR jsonb_typeof(${e}) = 'array')`:mo.has(t.type)?` CHECK (${e} IS NULL OR jsonb_typeof(${e}) = 'object')`:""}function je(e){return`"app_data".${q(e)}`}function We(e,t){let o=ue("seq",e,t);return`"app_data".${q(o)}`}function zt(e){return`'${e.replace(/'/g,"''")}'`}var Kt=new Set(["option.single","option.multiple","user.single","user.multiple","department.single","department.multiple","resource-ref.single","resource-ref.multiple"]),$o=new Set([...Kt,"cascade.single","cascade.multiple","file","image","signature","address","location","json"]),qt=/^[A-Za-z][A-Za-z0-9_]{0,62}$/,ho=new Set(["__proto__","prototype","constructor"]),_t=class extends Error{constructor(o){super("OPENXIANGDA_SCOPE_PROJECTION_FIELD_PATH_INVALID");this.path=o;this.name="NativeScopeSourceFieldPathV2Error"}path;code="OPENXIANGDA_SCOPE_PROJECTION_FIELD_PATH_INVALID"};function Re(e,t){let o=Qt(e);if(!o)return null;let n=t.get(o[0]);if(!n)return null;let i=o.slice(1).join(".")||void 0;return{field:n,...i?{valuePath:i}:{}}}function pt(e){return!!(e&&e.field.type==="user.single"&&e.valuePath==="value")}function Xt(e,t,o){if(!e||!t||!Ro(e))return!1;let{field:n,valuePath:i}=e;if(!i)return t.valueType==="uuid"?n.type==="uuid":["text.short","text.long","serial-number"].includes(n.type);if(i==="value")return!(t.valueSourceResourceCode&&n.type.startsWith("resource-ref.")&&n.source?.resourceCode!==t.valueSourceResourceCode);let r=i.slice(9),s=o.get(n.source?.resourceCode||"")?.get(r)?.type;return t.valueType==="uuid"?s==="uuid":["text.short","text.long","serial-number"].includes(s||"")}function hs(e,t){let o=Qt(t);if(!o)throw new _t(String(t||""));let n=e;for(let i of o){if(!n||typeof n!="object"||!Object.prototype.hasOwnProperty.call(n,i))return;n=n[i]}return n}function Ro(e){let{field:t,valuePath:o}=e;if(!o)return!$o.has(t.type);if(o==="value")return Kt.has(t.type);if(!o.startsWith("snapshot."))return!1;let n=o.slice(9);return qt.test(n)&&t.type.startsWith("resource-ref.")&&!!t.source?.snapshotFields?.includes(n)}function Qt(e){if(typeof e!="string"||e.length===0||e.length>192)return null;let t=e.split(".");return![1,2,3].includes(t.length)||t.some(o=>!qt.test(o)||ho.has(o))||t.length===2&&t[1]!=="value"||t.length===3&&t[1]!=="snapshot"?null:t}var Do=new Set(["option.single","user.single","department.single","resource-ref.single"]),yo=new Set(["text.short","text.long","text.rich","number.integer","number.decimal","boolean","date","time","datetime","uuid","serial-number"]),So=new Set(["value","label","description","color"]),Vo=new Set(["avatarUrl","employeeNo","title","mobile","email"]),wo=new Set(["fullPath","parent.value","parent.label"]),Po=new Set(["country.value","country.label","province.value","province.label","city.value","city.label","district.value","district.label","street.value","street.label","detail","fullAddress"]),vo=new Set(["longitude","latitude","accuracy"]),Fo=new Set(["address","name","province","city","district","source"]);function Ds(e){let t=new Map(e.map(o=>[o.code,new Map(o.schema.fields.map(n=>[n.code,n]))]));return e.map(o=>({...o,schema:{...o.schema,fields:o.schema.fields.map(n=>{let i=Lo(n,t);if(!Object.keys(i).length)return n;let r={...n};return Object.defineProperty(r,"queryPathTypes",{configurable:!1,enumerable:!1,writable:!1,value:Object.freeze(i)}),r})}}))}function ys(e,t){if(Do.has(e.type)&&So.has(t)||e.type==="user.single"&&Vo.has(t)||e.type==="department.single"&&wo.has(t))return De(t);if(e.type==="resource-ref.single"){let o=e.queryPathTypes?.[t];return o?{parts:t.split("."),type:o}:null}if(e.type==="address"&&Po.has(t))return De(t);if(e.type==="location"){if(vo.has(t))return{parts:[t],type:"number.decimal"};if(Fo.has(t))return De(t);if(t==="capturedAt")return{parts:[t],type:"datetime"}}return null}function Lo(e,t){if(e.type!=="resource-ref.single"||!e.source)return{};let o=t.get(e.source.resourceCode);return o?Object.fromEntries((e.source.snapshotFields||[]).flatMap(n=>{let i=o.get(n);return i?[[`snapshot.${n}`,yo.has(i.type)?i.type:"json"]]:[]})):{}}function De(e){return{parts:e.split("."),type:"text.short"}}var Et=class extends Error{constructor(o,n){super(n);this.pointer=o}pointer;code="NATIVE_EVENT_ACTION_INVALID"};function Zt(e,t,o="/events/subscriptions"){if(e.execution===void 0)return;let n=(E,I)=>{throw new Et(`${o}${E}`,I)},i=(E,I,N)=>((!E||typeof E!="object"||Array.isArray(E)||Object.keys(E).some(T=>!N.includes(T)))&&n(I,"Invalid action object or unsupported property"),E),r=i(e.execution,"/execution",["kind","version","operations"]);(r.kind!=="native-data"||r.version!==1)&&n("/execution","Expected native-data version 1"),e.platformAccess&&n("/platformAccess","Native actions do not use application runtime capabilities"),(!Array.isArray(e.eventTypes)||!e.eventTypes.length||e.eventTypes.some(E=>!/^openxiangda\.data\.record\.(created|updated|deleted)\.v2$/.test(E)))&&n("/eventTypes","Native data actions require declared data events");let a=e.filter?.resourceCodes;(!Array.isArray(a)||!a.length||a.length>20)&&n("/filter/resourceCodes","Native actions require explicit source resources");let s=new Map(t.map(E=>[E.code,E])),d=a.map(E=>{let I=s.get(E);return I||n("/filter/resourceCodes","Unknown source resource"),new Set((I.schema?.fields||[]).map(N=>N.code))}),_=new Set(e.payload?.fields||[]),p=e.payload?.includeChanges===!0,u=(E,I)=>{let N=i(E,I,["source","path","value"]);if(N.source==="literal"){(!Object.hasOwn(N,"value")||Object.hasOwn(N,"path"))&&n(I,"Literal binding requires only value");let O;try{O=JSON.stringify(N.value)}catch{n(I,"Literal must be JSON")}return(O===void 0||Buffer.byteLength(O)>65536)&&n(I,"Literal is too large or not JSON"),{source:"literal",value:JSON.parse(O)}}(N.source!=="event"||typeof N.path!="string"||Object.hasOwn(N,"value"))&&n(I,"Expected a literal or event binding");let T=N.path.split(".");(T.length>8||T.some(O=>!/^[A-Za-z0-9_-]+$/.test(O)||["__proto__","prototype","constructor"].includes(O)))&&n(I,"Invalid event path");let b=/^data\.projection\.([A-Za-z][A-Za-z0-9_]{0,62})$/.exec(N.path),D=/^data\.changes\.([A-Za-z][A-Za-z0-9_]{0,62})\.(before|after)$/.exec(N.path);if(b||D){let O=(b||D)[1];d.some(C=>!C.has(O))&&n(I,"Source field must exist on every filtered resource"),_.add(O),D&&(p=!0)}else["id","time","type","subject","data.recordId","data.revision","data.operation","data.resourceCode"].includes(N.path)||n(I,"Event path is not part of the data event contract");return{source:"event",path:N.path}};(!Array.isArray(r.operations)||r.operations.length<1||r.operations.length>16)&&n("/execution/operations","Expected 1 to 16 operations");let c={},A=r.operations.map((E,I)=>{let N=`/execution/operations/${I}`,T=i(E,N,["operation","resourceCode","data","id","expectedRevision"]);["create","update","delete"].includes(T.operation)||n(N,"Unsupported Native operation");let b=s.get(T.resourceCode);b||n(N,"Unknown action target resource");let D=new Map((b.schema?.fields||[]).map(C=>[C.code,C])),O=T.data===void 0?{}:i(T.data,`${N}/data`,[...D.keys()]);return Object.keys(O).length>32&&n(N,"Maximum 32 mapped fields per operation"),T.operation==="create"&&(T.id!==void 0||T.expectedRevision!==void 0)&&n(N,"Create does not accept id or expectedRevision"),T.operation==="delete"&&T.data!==void 0&&n(N,"Delete does not accept data"),Object.keys(O).some(C=>D.get(C)?.type==="serial-number")&&n(N,"Generated fields cannot be assigned"),c[T.resourceCode]=K(b),{operation:T.operation,resourceCode:T.resourceCode,...T.operation==="create"?{}:{id:u(T.id,`${N}/id`),expectedRevision:u(T.expectedRevision,`${N}/expectedRevision`)},...T.operation==="delete"?{}:{data:Object.fromEntries(Object.entries(O).map(([C,v])=>[C,u(v,`${N}/data/${C}`)]))}}});(_.size>32||[..._].some(E=>d.some(I=>!I.has(E))))&&n("/payload/fields","Payload must contain at most 32 declared source fields");let f={kind:"native-data",version:1,operations:A,resourceDigests:c};return Buffer.byteLength(JSON.stringify(f))>65536&&n("/execution","Action plan exceeds 64 KiB"),{execution:{...f,digest:K(f)},payload:{includeChanges:p,fields:[..._].sort()}}}function fe(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)?e:void 0}function tn(e,t){if(e?.instanceCommands===void 0)return[];let o=fe(e.instanceCommands);if(!o||!Object.keys(o).length||Object.keys(o).some(i=>!["withdraw","terminate"].includes(i)))return["WORKFLOW_INSTANCE_COMMAND_POLICIES_INVALID"];let n=[];for(let[i,r]of Object.entries(o)){let a=fe(r),s=i==="withdraw"?["beforeFact"]:["beforeFact","capability"];if(!a||Object.keys(a).some(d=>!s.includes(d))){n.push(`WORKFLOW_INSTANCE_COMMAND_POLICY_INVALID:${i}`);continue}if(i==="terminate"){let d=a.capability;(typeof d!="string"||d.length>255||!/^app:[a-z][a-z0-9]*(?:-[a-z0-9]+)*:[A-Za-z0-9:._-]+$/.test(d)||t&&(!d.startsWith(`app:${t.appCode}:`)||!t.capabilities.includes(d)))&&n.push("WORKFLOW_INSTANCE_TERMINATE_CAPABILITY_INVALID")}if(i==="withdraw"||a.beforeFact!==void 0){let d=a.beforeFact,_=fe(e.inputSchema),p=fe(fe(_?.properties)?.[d]),u=fe(fe(e.subject)?.factProjection)?.[d],c=t?.fields.get(u);(typeof d!="string"||!/^[A-Za-z][A-Za-z0-9_]{0,62}$/.test(d)||!Array.isArray(_?.required)||!_.required.includes(d)||p?.type!=="string"||p?.format!=="date-time"||typeof u!="string"||t&&(c?.type!=="datetime"||c.nullable===!0))&&n.push(`WORKFLOW_INSTANCE_COMMAND_DEADLINE_FACT_INVALID:${i}`)}}return n}function Ps(e,t){let o=e?.terminate?.capability;return typeof o=="string"&&/^app:[a-z][a-z0-9]*(?:-[a-z0-9]+)*:[A-Za-z0-9:._-]+$/.test(o)&&t.includes(o)}function en(e){if(typeof e!="string")return null;let t=/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(?:\.(\d{1,3}))?(Z|[+-]\d{2}:\d{2})$/.exec(e);if(!t)return null;let[,o,n,i,r,a,s]=t,d=t[8],_=new Date(Date.UTC(Number(o),Number(n),0)).getUTCDate();if(Number(n)<1||Number(n)>12||Number(i)<1||Number(i)>_||Number(r)>23||Number(a)>59||Number(s)>59||d!=="Z"&&(Number(d.slice(1,3))>23||Number(d.slice(4))>59))return null;let p=Date.parse(e);return Number.isFinite(p)?p:null}function vs(e,t,o,n){let i=e?.[t];if(!i||t==="terminate"&&i.beforeFact===void 0)return null;let r=i.beforeFact,a=fe(o),s=r&&a&&Object.hasOwn(a,r)?en(a[r]):null,d=n instanceof Date?n.getTime():en(n);return s===null||d===null||!Number.isFinite(d)?"WORKFLOW_V2_CANCELLATION_DEADLINE_INVALID":d<s?null:"WORKFLOW_V2_CANCELLATION_DEADLINE_PASSED"}import*as ze from"crypto";var nn="native-4",on={"application-native-2":"1.0.0","authz.native-batch-explain":"1.0.0","authz.native-management":"1.0.0","deployment.durable-runs":"1.0.0","deployment.platform-executor":"1.0.0","environment.on-demand-production":"1.0.0","environment.runtime-lifecycle":"1.0.0","data-api-v2":"1.1.0","data.native-golden-crud":"1.0.0","data.audit-read-access":"1.0.0","data.managed-files":"1.1.0","workflow.named-input-sources":"1.0.0","directory-v2":"1.0.0","events-v2":"1.0.0","events.durable-receipts":"1.0.0","events.capture-policy":"1.0.0","events.native-data-actions":"1.0.0","workflow-kernel-v2":"1.0.0","workflow.instance-cancellation-policy":"1.0.0","business-process.durable-command":"1.1.0","workflow.fresh-command-token":"1.0.0","notification-hub-v2":"1.0.0","authentication.application-login-surface":"1.0.0","public-access.anonymous-owner-records":"1.0.0"};var ks=5,xs=20,Us=50,Ms=50,js=100,Se=class extends Error{constructor(o,n){super(o);this.code=o;this.pointer=n;this.name="NativeDataPolicyExpressionV2Error"}code;pointer};function Be(e,t){let o=[],n=(i,r,a)=>{a>5&&ye("NATIVE_DATA_POLICY_EXPRESSION_DEPTH_EXCEEDED",r);let s=rn(i,r),d=["allOf","anyOf"].filter(u=>u in s);if(d.length===0){o.push({rule:s,pointer:r}),o.length>50&&ye("NATIVE_DATA_POLICY_EXPRESSION_LEAVES_EXCEEDED",r);return}let _=d[0],p=s[_];(d.length!==1||Object.keys(s).length!==1||!Array.isArray(p)||p.length<1||p.length>20)&&ye("NATIVE_DATA_POLICY_EXPRESSION_GROUP_INVALID",r),p.forEach((u,c)=>n(u,`${r}/${_}/${c}`,a+1))};return n(e,t,1),o}function sn(e,t){Be(e,t);let o=(n,i)=>{let r=rn(n,i);if(Array.isArray(r.allOf))return At(r.allOf.flatMap((a,s)=>o(a,`${i}/allOf/${s}`)),i);if(Array.isArray(r.anyOf)){let a=[[]];return r.anyOf.forEach((s,d)=>{let _=o(s,`${i}/anyOf/${d}`);a=At(a.flatMap(p=>_.map(u=>[...p,...u])),i)}),a}return[[r]]};return At(o(e,t),t)}function At(e,t){let o=e.reduce((n,i)=>n+i.length,0);return(e.length>50||o>100)&&ye("NATIVE_DATA_POLICY_EXPRESSION_EXPANSION_EXCEEDED",t),e}function rn(e,t){return(!e||typeof e!="object"||Array.isArray(e))&&ye("NATIVE_DATA_POLICY_EXPRESSION_NODE_INVALID",t),e}function ye(e,t){throw new Se(e,t)}var ko="openxiangda.config-bundle/v3",bn="openxiangda.contract-bundle/v3",an="openxiangda.native-configuration-projection/v1",we=nn,xo=/^[a-f0-9]{64}$/,Uo=/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/,Mo=/^app:[a-z][a-z0-9]*(?:-[a-z0-9]+)*:[A-Za-z0-9:._*-]+$/,jo=/^[a-z][a-z0-9]*(?:[-_.][a-z0-9]+)*$/,Wo=/^[a-z][a-z0-9]*(?:[-.][a-z0-9]+)*$/,Bo=/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/,Jo=/^[A-Za-z][A-Za-z0-9_]{0,62}$/,cn=/^[A-Za-z][A-Za-z0-9_]{0,127}$/,Go=/^[a-z][a-z0-9]*(?:[-_][a-z0-9]+)*$/,zo=/^[A-Z][A-Z0-9_]*$/,Yo=/^[A-Za-z][A-Za-z0-9_-]{0,127}$/,Ho=/^[A-Za-z][A-Za-z0-9_-]{0,127}$/,Ko=/^[A-Za-z][A-Za-z0-9_.]{0,127}$/,qo=16,Xo=2*1024,Qo=new Set(["text.short","text.long","number.integer","number.decimal","boolean","date","time","datetime","option.single","option.multiple","cascade.single","cascade.multiple","user.single","user.multiple","department.single","department.multiple","resource-ref.single","resource-ref.multiple","uuid","serial-number"]),Zo=new Set(["overview","database","operations","workflow","members","calendar","document","folder","settings"]),ei=new Set(["approve","reject","return","transfer","delegate","add_assignee","resubmit","withdraw","terminate","admin_reassign","admin_override","retry_resolution"]),ti=4*1024*1024,ni=8*1024*1024,oi=40,ii=1e5,mt=1024*1024,si="openxiangda.event-handler-manifest/v2",$n="openxiangda.application-route-manifest/v3",dn=64,ri=new Set(["id","revision","created_by","updated_by","created_at","updated_at"]),B=Object.freeze({perspectives:100,resources:100,capabilities:2e3,operations:500,eventConsumers:100,eventProducers:1e3,eventSchemas:100,eventTypes:500,workflows:100,routes:500,adminPages:500,adminNavigationGroups:100,adminNavigationItems:500}),Nt=["openxiangda.data.record.created.v2","openxiangda.data.record.updated.v2","openxiangda.data.record.deleted.v2"],Tt=["openxiangda.workflow.instance.started.v2","openxiangda.workflow.instance.cc_added.v2","openxiangda.workflow.instance.completed.v2","openxiangda.workflow.instance.rejected.v2","openxiangda.workflow.instance.returned.v2","openxiangda.workflow.instance.resumed.v2","openxiangda.workflow.instance.withdrawn.v2","openxiangda.workflow.instance.terminated.v2","openxiangda.workflow.task.created.v2","openxiangda.workflow.task.assigned.v2","openxiangda.workflow.task.assignment_pending.v2","openxiangda.workflow.task.assignment_resolution_failed.v2","openxiangda.workflow.task.approved.v2","openxiangda.workflow.task.completed.v2","openxiangda.workflow.task.rejected.v2","openxiangda.workflow.task.returned.v2","openxiangda.workflow.task.resubmitted.v2","openxiangda.workflow.task.transferred.v2","openxiangda.workflow.task.reassigned.v2","openxiangda.workflow.task.delegated.v2","openxiangda.workflow.task.assignee_added.v2","openxiangda.workflow.task.cancelled.v2","openxiangda.workflow.participant.activated.v2","openxiangda.workflow.participant.completed.v2","openxiangda.workflow.participant.rejected.v2","openxiangda.workflow.participant.returned.v2","openxiangda.workflow.participant.transferred.v2","openxiangda.workflow.participant.reassigned.v2","openxiangda.workflow.participant.delegated.v2","openxiangda.workflow.participant.added.v2","openxiangda.workflow.participant.suspended.v2","openxiangda.workflow.participant.resumed.v2","openxiangda.workflow.participant.cancelled.v2"],ai=new Set(Tt),gt=class extends Error{code;pointer;identifiers;constructor(t,o,n={}){super(t),this.name="NativeConfigurationCompilerError",this.code=t,this.pointer=o,this.identifiers=Object.fromEntries(Object.entries(n).slice(0,8).map(([i,r])=>[i,String(r).slice(0,128)]))}};function tr(e){let t=h(e.appCode,"/appCode",128);Uo.test(t)||l("NATIVE_CONFIG_APP_CODE_INVALID","/appCode");let o=Ot(e.expectedConfigDigest,"/expectedConfigDigest"),n=Ot(e.expectedContractDigest,"/expectedContractDigest"),i=gn(e.configBytes,ti,"/configBytes","NATIVE_CONFIG_ARTIFACT_TOO_LARGE"),r=gn(e.contractBytes,ni,"/contractBytes","NATIVE_CONTRACT_ARTIFACT_TOO_LARGE");Cn(i,o,"/configBytes","NATIVE_CONFIG_DIGEST_MISMATCH"),Cn(r,n,"/contractBytes","NATIVE_CONTRACT_DIGEST_MISMATCH");let a=Nn(i,"/configBytes","NATIVE_CONFIG_JSON_INVALID","NATIVE_CONFIG_NOT_CANONICAL"),s=Nn(r,"/contractBytes","NATIVE_CONTRACT_JSON_INVALID","NATIVE_CONTRACT_NOT_CANONICAL");Tn(a,"/config"),Tn(s,"/contracts");let d=a,_=s;ui(d,t),fi(_,t,o);let p=_i(d,o,_.generatorVersion);W(p)!==W(_)&&l("NATIVE_CONTRACT_CLOSURE_MISMATCH",bt(p,_,"/contracts"));let u={authz:{appCode:t,...d.authz,perspectives:d.perspectives,capabilityCatalog:p.capabilities},data:{appCode:t,resources:d.data.resources,resourceContracts:p.resources},events:{appCode:t,...d.events,consumers:p.eventConsumers,producers:p.eventProducers,handlerManifest:p.eventHandlerManifest,eventTypes:p.eventTypes,capturePlans:di({resources:d.data.resources,dataPolicies:d.authz.dataPolicies,subscriptions:p.eventConsumers,capturePolicies:d.events.capturePolicies})},workflows:{appCode:t,...d.workflows,contracts:p.workflows},runtime:{appCode:t,requirements:d.runtime,backend:d.backend,frontend:d.frontend},contracts:p},c={authz:Ce(u.authz),data:Ce(u.data),events:Ce(u.events),workflows:Ce(u.workflows),runtime:Ce(u.runtime),contracts:Ce(u.contracts)},A={configDigest:o,contractDigest:n,generatorVersion:_.generatorVersion},f=ci(d),E={schemaVersion:an,compilerContractVersion:we,appCode:t,source:A,projections:c,requiredPlatformCapabilities:f,aggregateDigest:K({schemaVersion:an,compilerContractVersion:we,appCode:t,source:A,requiredPlatformCapabilities:f,projectionDigests:Object.fromEntries(Object.entries(c).map(([I,N])=>[I,N.digest]))})};return kn(E)}function ci(e){let t=e.authz.roles,o=e.data.resources,n=e.backend.operations,i=t.some(f=>f.capabilities.some(E=>E.endsWith(":directory:read")))||o.some(f=>f.schema.fields.some(E=>["user.single","user.multiple","department.single","department.multiple"].includes(E.type)))||n.some(f=>f.platformAccess?.directory),r=!!(e.events.subscriptions.length||e.events.timers.length||e.events.dateTriggers.length||e.events.schemas.length),a=n.some(f=>f.platformAccess?.managedFiles||f.platformAccess?.managedFileCopies)||e.events.subscriptions.some(f=>f.platformAccess?.managedFileCopies),s=n.some(f=>f.platformAccess?.notification)||e.events.subscriptions.some(f=>f.platformAccess?.notification),d=e.workflows.definitions.filter(f=>f.launch.mode==="standalone"||f.launch.mode==="hidden-handoff"),_=n.some(f=>f.platformAccess?.workflow)||d.length>0,p={resources:o},u={perspectives:e.perspectives,authz:e.authz},c={schemaVersion:e.schemaVersion,appCode:e.appCode,frontend:{routes:e.frontend.routes,user:e.frontend.user,admin:e.frontend.admin,devicePolicy:e.frontend.devicePolicy},backend:{operations:n.map(f=>({code:f.code,method:f.method,path:f.path,capability:f.capability,platformAccess:f.platformAccess||null,ai:f.ai||null}))}};return[{code:"application-native-2",declaration:c},{code:"authz.native-batch-explain",declaration:u},{code:"authz.native-management",declaration:u},{code:"deployment.durable-runs",declaration:c.backend},{code:"deployment.platform-executor",declaration:c.backend},{code:"environment.on-demand-production",declaration:{environments:["preproduction","production"]}},{code:"environment.runtime-lifecycle",declaration:{environments:["preproduction","production"]}},...o.length?[{code:"data-api-v2",declaration:p},{code:"data.native-golden-crud",declaration:p}]:[],...o.some(Gt)?[{code:"data.audit-read-access",declaration:p}]:[],...i?[{code:"directory-v2",declaration:{roles:t.map(f=>({code:f.code,capabilities:f.capabilities.filter(E=>E.endsWith(":directory:read"))})),resources:o.map(f=>({code:f.code,fields:f.schema.fields.filter(E=>["user.single","user.multiple","department.single","department.multiple"].includes(E.type))})),operations:n.filter(f=>f.platformAccess?.directory).map(f=>({code:f.code,directory:f.platformAccess.directory}))}}]:[],...a?[{code:"data.managed-files",declaration:{operations:n.filter(f=>f.platformAccess?.managedFiles||f.platformAccess?.managedFileCopies).map(f=>({code:f.code,...f.platformAccess?.managedFiles?{managedFiles:f.platformAccess.managedFiles}:{},...f.platformAccess?.managedFileCopies?{managedFileCopies:f.platformAccess.managedFileCopies}:{}})),subscriptions:e.events.subscriptions.filter(f=>f.platformAccess?.managedFileCopies).map(f=>({code:f.code,managedFileCopies:f.platformAccess.managedFileCopies}))}}]:[],...e.events.subscriptions.some(f=>f.execution)?[{code:"events.native-data-actions",declaration:e.events.subscriptions.filter(f=>f.execution)}]:[],...e.events.capturePolicies?.length?[{code:"events.capture-policy",declaration:e.events.capturePolicies}]:[],...r?[{code:"events-v2",declaration:e.events},{code:"events.durable-receipts",declaration:e.events}]:[],...e.workflows.activations.length?[{code:"workflow-kernel-v2",declaration:e.workflows},{code:"workflow.fresh-command-token",declaration:e.workflows}]:[],...e.workflows.definitions.some(f=>f.definition.instanceCommands!==void 0)?[{code:"workflow.instance-cancellation-policy",declaration:e.workflows.definitions.filter(f=>f.definition.instanceCommands!==void 0)}]:[],..._?[{code:"business-process.durable-command",declaration:{operations:n.filter(f=>f.platformAccess?.workflow).map(f=>({code:f.code,workflow:f.platformAccess.workflow})),definitions:d,activations:e.workflows.activations.filter(f=>d.some(E=>E.definition.code===f.workflowCode))}}]:[],...s?[{code:"notification-hub-v2",declaration:{operations:n.filter(f=>f.platformAccess?.notification).map(f=>({code:f.code,notification:f.platformAccess.notification})),subscriptions:e.events.subscriptions.filter(f=>f.platformAccess?.notification).map(f=>({code:f.code,notification:f.platformAccess.notification}))}}]:[],...e.frontend.authentication?[{code:"authentication.application-login-surface",declaration:e.frontend.authentication}]:[],...e.frontend.publicAccess?[{code:"public-access.anonymous-owner-records",declaration:e.frontend.publicAccess}]:[]].map(({code:f,declaration:E})=>({code:f,contractVersion:on[f],usageDigest:`sha256:${K(E)}`})).sort((f,E)=>f.code===E.code?0:f.code<E.code?-1:1)}function di(e){let t=new Map,o=new Set(e.resources.map(r=>String(r.code)));for(let[r,a]of R(e.capturePolicies===void 0?[]:e.capturePolicies,"/capturePlan/capturePolicies",100).entries()){let s=`/capturePlan/capturePolicies/${r}`,d=m(a,s);g(d,["resourceCode","mode"],s);let _=U(d.resourceCode,`${s}/resourceCode`);o.has(_)||l("NATIVE_EVENT_CAPTURE_RESOURCE_NOT_FOUND",s,{resourceCode:_}),t.has(_)&&l("NATIVE_EVENT_CAPTURE_POLICY_DUPLICATE",s,{resourceCode:_}),d.mode!=="all"&&d.mode!=="subscribed"&&l("NATIVE_EVENT_CAPTURE_MODE_INVALID",`${s}/mode`),t.set(_,d.mode)}let n=new Map(e.dataPolicies.map((r,a)=>{let s=m(r,`/capturePlan/dataPolicies/${a}`);return[String(s.code),s]})),i=e.subscriptions.map((r,a)=>m(r,`/capturePlan/subscriptions/${a}`));return e.resources.map((r,a)=>{let s=`/capturePlan/resources/${a}`,d=m(r,s),_=U(d.code,`${s}/code`),p=d.schema?m(d.schema,`${s}/schema`):d,u=new Set(R(p.fields||[],`${s}/schema/fields`,500).map((C,v)=>J(m(C,`${s}/schema/fields/${v}`).code,`${s}/schema/fields/${v}/code`))),c=d.dataPolicyCode?y(d.dataPolicyCode,`${s}/dataPolicyCode`):null,A=c?n.get(c):void 0;c&&!A&&l("NATIVE_EVENT_CAPTURE_AUTHZ_POLICY_NOT_FOUND",s,{resourceCode:_,dataPolicyCode:c});let f=new Set;for(let C of A?.rules||[])f.add(String(C.field));if(A?.readExpression)for(let C of Be(A.readExpression,`${s}/readExpression`))f.add(String(C.rule.field));let E=new Set,I=new Set,N=new Set;for(let[C,v]of i.entries()){let V=R(v.eventTypes,`/capturePlan/subscriptions/${C}/eventTypes`,20).map(String);if(!V.some(S=>S.startsWith("openxiangda.data.")))continue;let L=m(v.filter||{},`/capturePlan/subscriptions/${C}/filter`),x=Array.isArray(L.resourceCodes)?L.resourceCodes.map(String):[];if(x.length&&!x.includes(_))continue;for(let S of V)Nt.includes(S)&&N.add(S);for(let S of li(L,`/capturePlan/subscriptions/${C}/filter`))E.add(S);let G=m(v.payload||{},`/capturePlan/subscriptions/${C}/payload`);for(let S of R(G.fields||[],`/capturePlan/subscriptions/${C}/payload/fields`,32))I.add(J(S,`/capturePlan/subscriptions/${C}/payload/fields`))}let T=new Set([...E,...I]),b=new Set([...T,...f]);b.size>dn&&l("NATIVE_EVENT_CAPTURE_FIELDS_LIMIT",s,{resourceCode:_,maximum:dn});for(let C of b)!u.has(C)&&!(f.has(C)&&ri.has(C))&&l("NATIVE_EVENT_CAPTURE_FIELD_NOT_FOUND",s,{resourceCode:_,field:C});let D=m(d.fieldPolicies||{},`${s}/fieldPolicies`);for(let C of T)D[C]?.mask==="omit"&&l("NATIVE_EVENT_CAPTURE_FIELD_SENSITIVE",s,{resourceCode:_,field:C});let O={resourceCode:_,...t.get(_)==="subscribed"?{capturedEventTypes:[...N].sort()}:{},filterFields:[...E].sort(),projectionFields:[...I].sort(),authorizationFields:[...f].sort(),captureFields:[...b].sort()};return{...O,digest:K(O)}}).sort((r,a)=>r.resourceCode.localeCompare(a.resourceCode))}function li(e,t){let o=new Set;for(let[a,s]of R(e.changes||[],`${t}/changes`,16).entries()){let d=m(s,`${t}/changes/${a}`);o.add(J(d.field,`${t}/changes/${a}/field`))}let n=m(e.changedFields||{},`${t}/changedFields`);for(let a of["anyOf","allOf","noneOf"])for(let[s,d]of R(n[a]||[],`${t}/changedFields/${a}`,32).entries())o.add(J(d,`${t}/changedFields/${a}/${s}`));let i=0,r=(a,s,d)=>{d>3&&l("NATIVE_EVENT_FILTER_DEPTH_LIMIT",s);let _=m(a,s);if(_.change){let u=m(_.change,`${s}/change`);o.add(J(u.field,`${s}/change/field`)),i+=1;return}if(_.not){r(_.not,`${s}/not`,d+1);return}let p=_.all?"all":_.any?"any":null;p||l("NATIVE_EVENT_FILTER_CONDITION_INVALID",s);for(let[u,c]of R(_[p],`${s}/${p}`,16).entries())r(c,`${s}/${p}/${u}`,d+1)};return e.where&&r(e.where,`${t}/where`,1),i+=Array.isArray(e.changes)?e.changes.length:0,i>16&&l("NATIVE_EVENT_FILTER_ATOM_LIMIT",t),[...o].sort()}function ui(e,t){g(e,["schemaVersion","compilerContractVersion","appCode","perspectives","authz","backend","data","events","workflows","frontend","runtime"],"/config"),F(e.schemaVersion,ko,"/config/schemaVersion"),F(e.compilerContractVersion,we,"/config/compilerContractVersion"),F(e.appCode,t,"/config/appCode"),R(e.perspectives,"/config/perspectives",100);let o=m(e.authz,"/config/authz");g(o,["capabilities","roles","scopeDimensions","scopeSources","roleMembershipSources","relationshipGrantSources","dataPolicies","authorizationTransitions"],"/config/authz",["authenticatedUserRoleCode"]),R(o.capabilities,"/config/authz/capabilities",2e3),R(o.roles,"/config/authz/roles",100),R(o.scopeDimensions,"/config/authz/scopeDimensions",100),R(o.scopeSources,"/config/authz/scopeSources",100),R(o.roleMembershipSources,"/config/authz/roleMembershipSources",100),R(o.relationshipGrantSources,"/config/authz/relationshipGrantSources",100),R(o.dataPolicies,"/config/authz/dataPolicies",100),R(o.authorizationTransitions,"/config/authz/authorizationTransitions",100);let n=m(e.backend,"/config/backend");g(n,["secrets","operations"],"/config/backend"),R(n.secrets,"/config/backend/secrets",100),R(n.operations,"/config/backend/operations",500),Ji(n.secrets);let i=m(e.data,"/config/data");g(i,["resources"],"/config/data",["resourceDetailRoutes"]),R(i.resources,"/config/data/resources",100),i.resourceDetailRoutes!==void 0&&R(i.resourceDetailRoutes,"/config/data/resourceDetailRoutes",100);let r=m(e.events,"/config/events");g(r,["schemas","subscriptions","timers","dateTriggers"],"/config/events",["capturePolicies"]),R(r.schemas,"/config/events/schemas",100),R(r.subscriptions,"/config/events/subscriptions",100),R(r.timers,"/config/events/timers",100),R(r.dateTriggers,"/config/events/dateTriggers",100);let a=m(e.workflows,"/config/workflows");g(a,["definitions","bindings","activations","providers","editableParameters"],"/config/workflows"),R(a.definitions,"/config/workflows/definitions",100),R(a.bindings,"/config/workflows/bindings",100),R(a.activations,"/config/workflows/activations",100),R(a.providers,"/config/workflows/providers",100),R(a.editableParameters,"/config/workflows/editableParameters",100);let s=m(e.frontend,"/config/frontend");g(s,["routes","user","admin","devicePolicy"],"/config/frontend",["authentication","publicAccess"]),R(s.routes,"/config/frontend/routes",500);let d=m(s.user,"/config/frontend/user");g(d,["applicationTodoCenter"],"/config/frontend/user"),be(d.applicationTodoCenter,"/config/frontend/user/applicationTodoCenter"),$t(s.devicePolicy,"/config/frontend/devicePolicy"),Object.prototype.hasOwnProperty.call(s,"authentication")&&Rn(s.authentication,s.routes,e,"/config/frontend/authentication"),Object.prototype.hasOwnProperty.call(s,"publicAccess")&&$i(s.publicAccess,e,"/config/frontend/publicAccess");let _=m(s.admin,"/config/frontend/admin");g(_,["navigation"],"/config/frontend/admin",["access"]),_.access!==void 0&&He(_.access,"/config/frontend/admin/access",e.appCode),yi(_.navigation,"/config/frontend/admin/navigation");let p=m(e.runtime,"/config/runtime");g(p,["protocolCapabilities","health"],"/config/runtime"),P(p.protocolCapabilities,"/config/runtime/protocolCapabilities",100),g(m(p.health,"/config/runtime/health"),["livePath","readyPath","versionPath"],"/config/runtime/health"),F(p.health.livePath,"/__platform/health","/config/runtime/health/livePath"),F(p.health.readyPath,"/__platform/ready","/config/runtime/health/readyPath"),F(p.health.versionPath,"/__platform/version","/config/runtime/health/versionPath")}function fi(e,t,o){g(e,["schemaVersion","compilerContractVersion","generatorVersion","appCode","configDigest","perspectives","resources","capabilities","operations","eventConsumers","eventProducers","eventSchemas","eventHandlerManifest","eventTypes","workflows","routes","routeManifest","adminPages","adminNavigation"],"/contracts",["authentication","publicAccess","adminAccess"]),F(e.schemaVersion,bn,"/contracts/schemaVersion"),F(e.compilerContractVersion,we,"/contracts/compilerContractVersion"),h(e.generatorVersion,"/contracts/generatorVersion",128),F(e.appCode,t,"/contracts/appCode"),F(e.configDigest,o,"/contracts/configDigest"),R(e.perspectives,"/contracts/perspectives",B.perspectives),R(e.resources,"/contracts/resources",B.resources),R(e.capabilities,"/contracts/capabilities",B.capabilities),R(e.operations,"/contracts/operations",B.operations),R(e.eventConsumers,"/contracts/eventConsumers",B.eventConsumers),R(e.eventProducers,"/contracts/eventProducers",B.eventProducers),R(e.eventSchemas,"/contracts/eventSchemas",B.eventSchemas),m(e.eventHandlerManifest,"/contracts/eventHandlerManifest"),P(e.eventTypes,"/contracts/eventTypes",B.eventTypes),R(e.workflows,"/contracts/workflows",B.workflows),R(e.routes,"/contracts/routes",B.routes),Object.prototype.hasOwnProperty.call(e,"authentication")&&Ci(e.authentication,"/contracts/authentication"),Object.prototype.hasOwnProperty.call(e,"publicAccess")&&hi(e.publicAccess,"/contracts/publicAccess"),Object.prototype.hasOwnProperty.call(e,"adminAccess")&&He(e.adminAccess,"/contracts/adminAccess",t),Fi(e.routeManifest,"/contracts/routeManifest",t),wi(e.adminPages,"/contracts/adminPages"),Pi(e.adminNavigation,"/contracts/adminNavigation")}function _i(e,t,o){let n=Ai(e);Mi(e,n),Wi(e),ji(e),Gi(e);let i=e.events.schemas.map((c,A)=>{let f=`/config/events/schemas/${A}`,E=m(c,f),I=h(E.eventType,`${f}/eventType`,255);return I.startsWith("openxiangda.")&&l("NATIVE_EVENT_SCHEMA_RESERVED",`${f}/eventType`,{eventType:I}),F(E.schemaDigest,K(m(E.jsonSchema,`${f}/jsonSchema`)),`${f}/schemaDigest`),E}),r=new Set([...Nt,...Tt,...i.map(c=>String(c.eventType))]),a=new Map(e.data.resources.map(c=>[String(c.code),new Map(c.schema.fields.map(A=>[String(A.code),String(A.type)]))])),s=X(e.events.subscriptions.map((c,A)=>{let f=`/config/events/subscriptions/${A}`,E=m(c,f),I=P(E.eventTypes,`${f}/eventTypes`,20);I.forEach((D,O)=>{r.has(D)||l("NATIVE_EVENT_TYPE_NOT_REGISTERED",`${f}/eventTypes/${O}`,{eventType:D})});let N=Zt(E,e.data.resources,f),T=Ei(E.delivery,I,`${f}/delivery`),b=pi(E.platformAccess,`${f}/platformAccess`,a);return{code:y(E.code,`${f}/code`),endpointPath:ee(E.endpointPath,`${f}/endpointPath`),eventTypes:I,filter:m(E.filter,`${f}/filter`),payload:N?.payload||m(E.payload,`${f}/payload`),...N?{execution:N.execution}:{},...b?{platformAccess:b}:{},delivery:T}}),c=>c.code),d=new Map(i.map(c=>[String(c.eventType),String(c.dataSchemaVersion)])),_=X([...e.data.resources.flatMap(c=>Nt.map(A=>({code:`data:${c.code}:${A}`,source:"data",eventType:A,dataSchemaVersion:"2.0.0",resourceCode:c.code}))),...i.map(c=>({code:`app:${c.eventType}`,source:"app",eventType:c.eventType,dataSchemaVersion:c.dataSchemaVersion})),...e.events.timers.map(c=>({code:c.code,source:"timer",eventType:c.eventType,dataSchemaVersion:d.get(String(c.eventType))||"2.0.0"})),...e.events.dateTriggers.map(c=>({code:c.code,source:"date",eventType:c.eventType,dataSchemaVersion:d.get(String(c.eventType))||"2.0.0",resourceCode:c.resourceCode,field:c.field})),...e.workflows.activations.length?Tt.map(c=>({code:`workflow:${c}`,source:"workflow",eventType:c,dataSchemaVersion:"2.0.0"})):[]],c=>`${c.source}:${c.code}:${c.eventType}`),p=k([...s.flatMap(c=>c.eventTypes),..._.map(c=>String(c.eventType))]);Vi(e);let u=Sn(e);return{schemaVersion:bn,compilerContractVersion:we,generatorVersion:o,appCode:e.appCode,configDigest:t,perspectives:e.perspectives,resources:Ii(e),capabilities:X(n,c=>c.code),operations:hn(e),eventConsumers:s,eventProducers:_,eventSchemas:i,eventHandlerManifest:{schemaVersion:si,appCode:e.appCode,handlers:s.filter(c=>!c.execution).map(c=>({code:c.code,endpointPath:c.endpointPath,eventTypes:c.eventTypes,dataSchemaVersions:k(c.eventTypes.map(A=>A.startsWith("openxiangda.")?"2.0.0":d.get(A)||"2.0.0")),maxBodyBytes:65536,receiptProtocolVersion:2}))},eventTypes:p,workflows:Pn(e),routes:Ye(e),...Object.prototype.hasOwnProperty.call(e.frontend,"authentication")?{authentication:Oi(e)}:{},...Object.prototype.hasOwnProperty.call(e.frontend,"publicAccess")?{publicAccess:Ri(e)}:{},...e.frontend.admin.access?{adminAccess:e.frontend.admin.access}:{},routeManifest:xi(e),adminPages:u,adminNavigation:Di(e)}}function pi(e,t,o){if(e===void 0)return;let n=m(e,t);g(n,["notification","managedFileCopies"],t,!0);let i={};if(n.notification!==void 0){let r=m(n.notification,`${t}/notification`);g(r,["mode"],`${t}/notification`),F(r.mode,"business-standard",`${t}/notification/mode`),i.notification={mode:"business-standard"}}if(n.managedFileCopies!==void 0){let r=R(n.managedFileCopies,`${t}/managedFileCopies`,16);r.length||l("NATIVE_EVENT_MANAGED_FILE_COPIES_REQUIRED",`${t}/managedFileCopies`);let a=new Set;i.managedFileCopies=X(r.map((s,d)=>{let _=`${t}/managedFileCopies/${d}`,p=m(s,_);g(p,["mode","sourceResourceCode","sourceFieldCodes","targetResourceCode","targetFieldCodes"],_),F(p.mode,"copy",`${_}/mode`);let u=U(p.sourceResourceCode,`${_}/sourceResourceCode`),c=U(p.targetResourceCode,`${_}/targetResourceCode`),A=o.get(u),f=o.get(c);(!A||!f)&&l("NATIVE_EVENT_MANAGED_FILE_COPY_RESOURCE_INVALID",_);let E=P(p.sourceFieldCodes,`${_}/sourceFieldCodes`,16),I=P(p.targetFieldCodes,`${_}/targetFieldCodes`,16);(!E.length||E.length!==I.length)&&l("NATIVE_EVENT_MANAGED_FILE_COPY_FIELDS_INVALID",_),E.forEach((T,b)=>{let D=A.get(T),O=f.get(I[b]);(!["file","image"].includes(String(D))||D!==O)&&l("NATIVE_EVENT_MANAGED_FILE_COPY_FIELD_INVALID",`${_}/sourceFieldCodes/${b}`)});let N=`${u}:${E.join(",")}=>${c}:${I.join(",")}`;return a.has(N)&&l("NATIVE_EVENT_MANAGED_FILE_COPY_DUPLICATE",_),a.add(N),{mode:"copy",sourceResourceCode:u,sourceFieldCodes:k(E),targetResourceCode:c,targetFieldCodes:k(I)}}),s=>`${s.sourceResourceCode}:${s.sourceFieldCodes.join(",")}=>${s.targetResourceCode}:${s.targetFieldCodes.join(",")}`)}return Object.keys(i).length||l("NATIVE_EVENT_PLATFORM_ACCESS_EMPTY",t),i}function Ei(e,t,o){let n=m(e,o);g(n,["timeoutMs","maxAttempts","initialBackoffMs","maxBackoffMs","ordering","concurrency"],o),H(n.timeoutMs,`${o}/timeoutMs`,1e3,3e4),H(n.maxAttempts,`${o}/maxAttempts`,1,12);let i=H(n.initialBackoffMs,`${o}/initialBackoffMs`,1e3,3e5);H(n.maxBackoffMs,`${o}/maxBackoffMs`,i,18e5),H(n.concurrency,`${o}/concurrency`,1,50);let r=h(n.ordering,`${o}/ordering`,32);return["none","record","workflow-instance"].includes(r)||l("NATIVE_EVENT_DELIVERY_ORDERING_INVALID",`${o}/ordering`),r==="workflow-instance"&&t.some(a=>!ai.has(a))&&l("NATIVE_EVENT_WORKFLOW_ORDERING_REQUIRES_WORKFLOW_FACTS",`${o}/ordering`),n}function Ai(e){let t=new Map;for(let o of Ln(e.appCode))t.set(o.code,o);for(let[o,n]of e.authz.capabilities.entries()){let i=`/config/authz/capabilities/${o}`,r=m(n,i);g(r,["code","kind","name","description"],i,!0);let a=_e(r.code,`${i}/code`,e.appCode);t.has(a)&&l("NATIVE_CAPABILITY_DUPLICATE",`${i}/code`),["backend","ui"].includes(r.kind)||l("NATIVE_CAPABILITY_KIND_INVALID",`${i}/kind`);let s={code:a,kind:r.kind,name:h(r.name,`${i}/name`,255),source:"explicit",...r.description===void 0?{}:{description:Rt(r.description,`${i}/description`,2e3)}};t.set(a,s)}for(let[o,n]of e.data.resources.entries()){let i=`/config/data/resources/${o}`,r=Pe(n,i,e.appCode),a={read:`\u8BFB\u53D6${r.name}`,create:`\u65B0\u5EFA${r.name}`,update:`\u66F4\u65B0${r.name}`,delete:`\u5220\u9664${r.name}`};for(let s of["read","create","update","delete"]){let d=_e(r.capabilities[s],`${i}/capabilities/${s}`,e.appCode);t.has(d)&&l("NATIVE_CAPABILITY_DUPLICATE",`${i}/capabilities/${s}`),t.set(d,{code:d,kind:"data",name:a[s],source:"data"})}for(let[s,d]of Object.entries(r.fieldPolicies)){if(he(s))continue;let _=m(d,`${i}/fieldPolicies/${s}`);for(let p of["read","create","update"])if(Array.isArray(_[p]))for(let u of P(_[p],`${i}/fieldPolicies/${s}/${p}`,2e3))_e(u,`${i}/fieldPolicies/${s}/${p}`,e.appCode),!t.has(u)&&t.set(u,{code:u,kind:"data",name:`${r.name}.${s}.${p}`,source:"data"})}}return[...t.values()]}function Ii(e){let t=mi(e);return X(e.data.resources.map((o,n)=>{let i=Pe(o,`/config/data/resources/${n}`,e.appCode),r=t.get(i.code);return{code:i.code,schemaDigest:K(i.schema),fields:X(i.schema.fields.map(a=>({code:a.code,type:a.type})),a=>a.code),...r?{detailRouteCode:r}:{}}}),o=>o.code)}function mi(e){let t=e.data.resourceDetailRoutes===void 0?[]:R(e.data.resourceDetailRoutes,"/config/data/resourceDetailRoutes",100),o=new Map(e.data.resources.map((r,a)=>{let s=`/config/data/resources/${a}`,d=Pe(r,s,e.appCode);return[d.code,d]})),n=new Map(Ye(e).map(r=>[String(r.code),r])),i=new Map;for(let[r,a]of t.entries()){let s=`/config/data/resourceDetailRoutes/${r}`,d=m(a,s);g(d,["resourceCode","desktop","mobile"],s);let _=U(d.resourceCode,`${s}/resourceCode`);i.has(_)&&l("NATIVE_DATA_RESOURCE_DETAIL_ROUTE_DUPLICATE",`${s}/resourceCode`);let p=o.get(_);p||l("NATIVE_DATA_RESOURCE_DETAIL_ROUTE_RESOURCE_MISSING",`${s}/resourceCode`);let u=y(d.desktop,`${s}/desktop`),c=y(d.mobile,`${s}/mobile`);u===c&&l("NATIVE_DATA_RESOURCE_DETAIL_ROUTE_INVALID",s);let A=String(p.capabilities.read);for(let[f,E]of[["desktop",u],["mobile",c]]){let I=`${s}/${f}`,N=n.get(E);N||l("NATIVE_DATA_RESOURCE_DETAIL_ROUTE_REFERENCE_MISSING",I),N.surface!=="user"&&l("NATIVE_DATA_RESOURCE_DETAIL_ROUTE_SURFACE_INVALID",I);let T=ee(N.path,`${I}/path`),b=[...T.matchAll(/:([A-Za-z][A-Za-z0-9_]*)/g)],D=f==="mobile"?!T.startsWith("/m/"):T==="/m"||T.startsWith("/m/");(T.includes("*")||T.includes("?")||T.includes("#")||T.split("/").includes("..")||b.length!==1||D)&&l("NATIVE_DATA_RESOURCE_DETAIL_ROUTE_PATH_INVALID",I);let O=Array.isArray(N.access?.allOf)?N.access.allOf:[];N.capability!==A&&!O.includes(A)&&l("NATIVE_DATA_RESOURCE_DETAIL_ROUTE_CAPABILITY_INVALID",I)}i.set(_,{desktop:u,mobile:c})}return i}function hn(e){let t=new Map(e.data.resources.map((i,r)=>{let a=`/config/data/resources/${r}`,s=Pe(i,a,e.appCode);return[s.code,new Map(s.schema.fields.map(d=>[String(d.code),String(d.type)]))]})),o=new Set(t.keys()),n=new Set(e.workflows.activations.map((i,r)=>Ke(m(i,`/config/workflows/activations/${r}`).workflowCode,`/config/workflows/activations/${r}/workflowCode`)));return X(e.backend.operations.map((i,r)=>{let a=`/config/backend/operations/${r}`,s=m(i,a);g(s,["code","method","path","capability","requestSchema","responseSchema","description","platformAccess","ai"],a,!0);let d=h(s.method,`${a}/method`,16);["GET","POST","PUT","PATCH","DELETE"].includes(d)||l("NATIVE_OPERATION_METHOD_INVALID",`${a}/method`);let _=y(s.code,`${a}/code`);Ti(s.ai,a,_,d,o);let p=Ni(s.platformAccess,`${a}/platformAccess`,t,n,new Set(e.authz.roles.map(u=>String(u.code))));return{code:_,method:d,path:ee(s.path,`${a}/path`),requiredCapability:_e(s.capability,`${a}/capability`,e.appCode),requestSchemaDigest:K(m(s.requestSchema,`${a}/requestSchema`)),responseSchemaDigest:K(m(s.responseSchema,`${a}/responseSchema`)),...s.description===void 0?{}:{description:Rt(s.description,`${a}/description`,2e3)},...p?{platformAccess:p}:{}}}),i=>i.code)}function Ni(e,t,o,n,i){if(e===void 0)return null;let r=m(e,t);g(r,["directory","managedFiles","managedFileCopies","notification","workflow","roleAssertions"],t,!0),Object.keys(r).length===0&&l("NATIVE_OPERATION_PLATFORM_ACCESS_EMPTY",t);let a={};if(r.roleAssertions!==void 0){let s=m(r.roleAssertions,`${t}/roleAssertions`);g(s,["roleCodes"],`${t}/roleAssertions`);let d=P(s.roleCodes,`${t}/roleAssertions/roleCodes`,20);d.length||l("NATIVE_OPERATION_ROLE_ASSERTIONS_REQUIRED",`${t}/roleAssertions/roleCodes`),d.forEach((_,p)=>{i.has(_)||l("NATIVE_ROLE_REFERENCE_MISSING",`${t}/roleAssertions/roleCodes/${p}`)}),a.roleAssertions={roleCodes:k(d)}}if(r.directory!==void 0){let s=m(r.directory,`${t}/directory`);g(s,["mode","fields"],`${t}/directory`),s.mode!=="current-initiator"&&l("NATIVE_OPERATION_DIRECTORY_MODE_INVALID",`${t}/directory/mode`);let d=new Set(["displayName","employeeNumber","primaryDepartment","departments"]),_=P(s.fields,`${t}/directory/fields`,4);(!_.length||_.some(p=>!d.has(p)))&&l("NATIVE_OPERATION_DIRECTORY_FIELDS_INVALID",`${t}/directory/fields`),a.directory={mode:"current-initiator",fields:k(_)}}if(r.managedFiles!==void 0){let s=R(r.managedFiles,`${t}/managedFiles`,16);s.length||l("NATIVE_OPERATION_MANAGED_FILES_REQUIRED",`${t}/managedFiles`);let d=new Set;a.managedFiles=X(s.map((_,p)=>{let u=`${t}/managedFiles/${p}`,c=m(_,u);g(c,["resourceCode","fieldCodes","intents"],u);let A=U(c.resourceCode,`${u}/resourceCode`);(d.has(A)||!o.has(A))&&l("NATIVE_OPERATION_MANAGED_FILE_RESOURCE_INVALID",`${u}/resourceCode`),d.add(A);let f=P(c.fieldCodes,`${u}/fieldCodes`,16);(!f.length||f.some(I=>!["file","image","signature"].includes(String(o.get(A)?.get(I)||""))))&&l("NATIVE_OPERATION_MANAGED_FILE_FIELD_INVALID",`${u}/fieldCodes`);let E=P(c.intents,`${u}/intents`,2);return(!E.length||E.some(I=>!["create","update"].includes(I)))&&l("NATIVE_OPERATION_MANAGED_FILE_INTENT_INVALID",`${u}/intents`),{resourceCode:A,fieldCodes:k(f),intents:k(E)}}),_=>_.resourceCode)}if(r.managedFileCopies!==void 0){let s=R(r.managedFileCopies,`${t}/managedFileCopies`,16);s.length||l("NATIVE_OPERATION_MANAGED_FILE_COPIES_REQUIRED",`${t}/managedFileCopies`);let d=new Set;a.managedFileCopies=X(s.map((_,p)=>{let u=`${t}/managedFileCopies/${p}`,c=m(_,u);g(c,["mode","sourceResourceCode","sourceFieldCodes","targetResourceCode","targetFieldCodes"],u),F(c.mode,"copy",`${u}/mode`);let A=U(c.sourceResourceCode,`${u}/sourceResourceCode`),f=U(c.targetResourceCode,`${u}/targetResourceCode`),E=o.get(A),I=o.get(f);(!E||!I)&&l("NATIVE_OPERATION_MANAGED_FILE_COPY_RESOURCE_INVALID",u);let N=P(c.sourceFieldCodes,`${u}/sourceFieldCodes`,16),T=P(c.targetFieldCodes,`${u}/targetFieldCodes`,16);(!N.length||N.length!==T.length)&&l("NATIVE_OPERATION_MANAGED_FILE_COPY_FIELDS_INVALID",u),N.forEach((D,O)=>{let C=E.get(D),v=I.get(T[O]);(!["file","image"].includes(String(C))||C!==v)&&l("NATIVE_OPERATION_MANAGED_FILE_COPY_FIELD_INVALID",`${u}/sourceFieldCodes/${O}`)});let b=`${A}:${N.join(",")}=>${f}:${T.join(",")}`;return d.has(b)&&l("NATIVE_OPERATION_MANAGED_FILE_COPY_DUPLICATE",u),d.add(b),{mode:"copy",sourceResourceCode:A,sourceFieldCodes:k(N),targetResourceCode:f,targetFieldCodes:k(T)}}),_=>`${_.sourceResourceCode}:${_.sourceFieldCodes.join(",")}=>${_.targetResourceCode}:${_.targetFieldCodes.join(",")}`)}if(r.notification!==void 0){let s=m(r.notification,`${t}/notification`);g(s,["mode"],`${t}/notification`),s.mode!=="business-standard"&&l("NATIVE_OPERATION_NOTIFICATION_MODE_INVALID",`${t}/notification/mode`),a.notification={mode:"business-standard"}}if(r.workflow!==void 0){let s=m(r.workflow,`${t}/workflow`);g(s,["codes"],`${t}/workflow`);let d=P(s.codes,`${t}/workflow/codes`,16);(!d.length||d.some(_=>!n.has(_)))&&l("NATIVE_OPERATION_WORKFLOW_CODE_INVALID",`${t}/workflow/codes`),a.workflow={codes:k(d)}}return a}function Ti(e,t,o,n,i){if(e===void 0)return;let r=`${t}/ai`,a=m(e,r);Wo.test(o)||l("NATIVE_OPERATION_AI_CODE_INVALID",`${t}/code`),g(a,["name","description","risk","resources","sideEffects","concurrency","timeoutMs"],r,!0),h(a.name,`${r}/name`,mt),h(a.description,`${r}/description`,mt);let s=h(a.risk,`${r}/risk`,16);["read","write","destructive","external"].includes(s)||l("NATIVE_OPERATION_AI_RISK_INVALID",`${r}/risk`),s==="read"!=(n==="GET")&&l("NATIVE_OPERATION_AI_METHOD_RISK_MISMATCH",`${r}/risk`),n==="DELETE"&&!["destructive","external"].includes(s)&&l("NATIVE_OPERATION_AI_METHOD_RISK_MISMATCH",`${r}/risk`);let d=P(a.resources,`${r}/resources`,16);d.length===0&&l("NATIVE_OPERATION_AI_RESOURCE_REQUIRED",`${r}/resources`),d.forEach((p,u)=>{let c=U(p,`${r}/resources/${u}`);i.has(c)||l("NATIVE_OPERATION_AI_RESOURCE_MISSING",`${r}/resources/${u}`)});let _=P(a.sideEffects,`${r}/sideEffects`,20);(s==="read"&&_.length!==0||s!=="read"&&_.length===0)&&l("NATIVE_OPERATION_AI_SIDE_EFFECT_INVALID",`${r}/sideEffects`),a.concurrency!==void 0&&!["none","revision"].includes(h(a.concurrency,`${r}/concurrency`,16))&&l("NATIVE_OPERATION_AI_CONCURRENCY_INVALID",`${r}/concurrency`),a.timeoutMs!==void 0&&H(a.timeoutMs,`${r}/timeoutMs`,100,3e4)}function Je(e){return(e.replace(/\/{2,}/g,"/").replace(/\/$/,"")||"/").split("/").map(o=>o.startsWith(":")?":":o.includes("*")?"*":o).join("/")}function gi(e,t){let o=m(e,t),n=h(o.type,`${t}/type`,32),i=["code","type","label","presentation","required"],r=n==="sso"?[...i,"provider"]:n==="dingtalk"?[...i,"flow"]:i;g(o,r,t);let a=y(o.code,`${t}/code`),s=h(o.label,`${t}/label`,255),d=h(o.presentation,`${t}/presentation`,16);["primary","secondary"].includes(d)||l("NATIVE_APPLICATION_AUTH_METHOD_PRESENTATION_INVALID",`${t}/presentation`);let _=be(o.required,`${t}/required`);return["sso","password","dingtalk"].includes(n)||l("NATIVE_APPLICATION_AUTH_METHOD_TYPE_INVALID",`${t}/type`),n==="sso"&&o.provider!=="tenant-default"&&l("NATIVE_APPLICATION_AUTH_SSO_PROVIDER_INVALID",`${t}/provider`),n==="dingtalk"&&!["auto","jsapi","oauth"].includes(h(o.flow,`${t}/flow`,16))&&l("NATIVE_APPLICATION_AUTH_DINGTALK_FLOW_INVALID",`${t}/flow`),{code:a,type:n,label:s,presentation:d,required:_,...n==="sso"?{provider:"tenant-default"}:{},...n==="dingtalk"?{flow:o.flow}:{}}}function ln(e,t,o){let n=m(e,o);g(n,["routeCode","path","defaultRouteCode"],o);let i=y(n.routeCode,`${o}/routeCode`),r=ee(n.path,`${o}/path`),a=t==="desktop"?"/login":"/m/login";return(r!==a||/[:*?#\\]/.test(r))&&l("NATIVE_APPLICATION_AUTH_SURFACE_PATH_INVALID",`${o}/path`,{device:t,expectedPath:a}),{routeCode:i,path:r,defaultRouteCode:y(n.defaultRouteCode,`${o}/defaultRouteCode`)}}function Rn(e,t,o,n){if(e===null)return;let i=m(e,n);g(i,["accountMode","registration","methods","surfaces"],n),F(i.accountMode,"existing-platform-users-only",`${n}/accountMode`);let r=m(i.registration,`${n}/registration`);g(r,["mode"],`${n}/registration`),F(r.mode,"reject",`${n}/registration/mode`);let a=R(i.methods,`${n}/methods`,8);a.length===0&&l("NATIVE_APPLICATION_AUTH_METHOD_REQUIRED",`${n}/methods`);let s=a.map((I,N)=>gi(I,`${n}/methods/${N}`)),d=new Set,_=new Set;for(let[I,N]of s.entries())d.has(N.code)&&l("NATIVE_APPLICATION_AUTH_METHOD_CODE_DUPLICATE",`${n}/methods/${I}/code`),_.has(N.type)&&l("NATIVE_APPLICATION_AUTH_METHOD_TYPE_DUPLICATE",`${n}/methods/${I}/type`),d.add(N.code),_.add(N.type);s.filter(I=>I.presentation==="primary").length!==1&&l("NATIVE_APPLICATION_AUTH_PRIMARY_METHOD_INVALID",`${n}/methods`);let p=m(i.surfaces,`${n}/surfaces`);g(p,["desktop","mobile"],`${n}/surfaces`);let u=ln(p.desktop,"desktop",`${n}/surfaces/desktop`),c=ln(p.mobile,"mobile",`${n}/surfaces/mobile`);u.routeCode===c.routeCode&&l("NATIVE_APPLICATION_AUTH_SURFACE_CODE_DUPLICATE",`${n}/surfaces/mobile/routeCode`);let A=R(t,"/config/frontend/routes",500),f=new Map;for(let[I,N]of A.entries()){let T=m(N,`/config/frontend/routes/${I}`);f.set(String(T.code||""),T)}for(let[I,N]of[["desktop",u],["mobile",c]]){f.has(N.routeCode)&&l("NATIVE_APPLICATION_AUTH_SURFACE_CODE_CONFLICT",`${n}/surfaces/${I}/routeCode`);let T=f.get(N.defaultRouteCode),b=String(T?.path||""),D=I==="desktop"?b==="/m"||b.startsWith("/m/"):!(b==="/m"||b.startsWith("/m/"));(!T||T.surface!=="user"||/[:*]/.test(b)||D)&&l("NATIVE_APPLICATION_AUTH_DEFAULT_ROUTE_INVALID",`${n}/surfaces/${I}/defaultRouteCode`)}let E=Dn(o).filter(I=>!I.owner.startsWith("authentication:"));for(let[I,N]of[["desktop",u],["mobile",c]]){let T=E.find(b=>Je(b.path)===Je(N.path));T&&l("NATIVE_APPLICATION_AUTH_SURFACE_PATH_CONFLICT",`${n}/surfaces/${I}/path`,{owner:T.owner})}}function Ci(e,t){if(e===null)return;let o={data:{resources:[]},workflows:{definitions:[]},frontend:{routes:[{code:"auth-desktop-default",path:"/auth-desktop-default",surface:"user"},{code:"auth-mobile-default",path:"/m/auth-mobile-default",surface:"user"}],user:{applicationTodoCenter:!1},admin:{navigation:[]},authentication:e}},n=m(e,t),i=m(n.surfaces,`${t}/surfaces`),r={...n,surfaces:{...i,desktop:{...m(i.desktop,`${t}/surfaces/desktop`),defaultRouteCode:"auth-desktop-default"},mobile:{...m(i.mobile,`${t}/surfaces/mobile`),defaultRouteCode:"auth-mobile-default"}}};Rn(r,o.frontend.routes,{...o,frontend:{...o.frontend,authentication:r}},t)}function Oi(e){let t=e.frontend.authentication;return t===null?null:{accountMode:t.accountMode,registration:{mode:t.registration.mode},methods:t.methods.map(o=>({...o})),surfaces:{desktop:{...t.surfaces.desktop},mobile:{...t.surfaces.mobile}}}}var bi=new Set(["draft.read","draft.update","validate","create","own.list","own.read"]);function $i(e,t,o){let n=m(e,o);g(n,["policies"],o);let i=R(n.policies,`${o}/policies`,16);i.length<1&&l("NATIVE_PUBLIC_POLICY_REQUIRED",o);let r=new Map(t.frontend.routes.map(_=>[_.code,_])),a=new Map(t.data.resources.map(_=>[_.code,_])),s=new Set,d=new Set;i.forEach((_,p)=>{let u=`${o}/policies/${p}`,c=m(_,u);g(c,["code","routeCode","mode","resourceCode","operations","fields"],u,["requiredFields","ownRecordFields","draft","validations"]);let A=y(c.code,`${u}/code`);s.has(A)&&l("NATIVE_PUBLIC_POLICY_DUPLICATE",`${u}/code`);let f=y(c.routeCode,`${u}/routeCode`);d.has(f)&&l("NATIVE_PUBLIC_ROUTE_DUPLICATE",`${u}/routeCode`);let E=r.get(f);(!E||E.surface!=="user"||E.capability!==void 0||E.access!==void 0||/[:*]/.test(String(E.path)))&&l("NATIVE_PUBLIC_ROUTE_INVALID",`${u}/routeCode`),F(c.mode,"anonymous",`${u}/mode`);let I=U(c.resourceCode,`${u}/resourceCode`),N=a.get(I);N||l("NATIVE_PUBLIC_RESOURCE_MISSING",`${u}/resourceCode`);let T=new Map(N.schema.fields.map(S=>[String(S.code),String(S.type)])),b=P(c.operations,`${u}/operations`,6);(b.length<1||b.some(S=>!bi.has(S)))&&l("NATIVE_PUBLIC_OPERATION_INVALID",`${u}/operations`),b.includes("draft.read")!==b.includes("draft.update")&&l("NATIVE_PUBLIC_DRAFT_OPERATION_INCOMPLETE",`${u}/operations`);let D=P(c.fields,`${u}/fields`,64);(D.length<1||D.some(S=>!T.has(S)))&&l("NATIVE_PUBLIC_FIELD_INVALID",`${u}/fields`);for(let S of["requiredFields","ownRecordFields"]){if(!Object.prototype.hasOwnProperty.call(c,S))continue;P(c[S],`${u}/${S}`,64).some(z=>!D.includes(z))&&l("NATIVE_PUBLIC_FIELD_SCOPE_INVALID",`${u}/${S}`)}let O=Object.prototype.hasOwnProperty.call(c,"requiredFields")?P(c.requiredFields,`${u}/requiredFields`,64):[],C=N.surface||{},v=C.fields||{},V=String(C.mutationOwner||"native")==="native"&&C.generated?.create!==!1,L=N.schema.fields.filter(S=>Ue(S,v[S.code])).map(S=>String(S.code));if(b.includes("create")&&!V&&l("NATIVE_PUBLIC_CREATE_FIELDS_INCOMPLETE",`${u}/fields`),b.includes("create"))for(let S of L){let Z=D.includes(S)?O.includes(S)?null:"requiredFields":"fields";Z&&l("NATIVE_PUBLIC_CREATE_FIELDS_INCOMPLETE",`${u}/${Z}`,{resourceCode:U,fieldCode:S})}if(Object.prototype.hasOwnProperty.call(c,"draft")){let S=m(c.draft,`${u}/draft`);g(S,["enabled","inactivityTtlSeconds","maxBytes"],`${u}/draft`),F(S.enabled,!0,`${u}/draft/enabled`),H(S.inactivityTtlSeconds,`${u}/draft/inactivityTtlSeconds`,3600,7776e3),H(S.maxBytes,`${u}/draft/maxBytes`,4096,262144)}else b.includes("draft.read")&&l("NATIVE_PUBLIC_DRAFT_REQUIRED",`${u}/draft`);let x=Object.prototype.hasOwnProperty.call(c,"validations")?R(c.validations,`${u}/validations`,16):[],G=new Set;x.forEach((S,Z)=>{let z=`${u}/validations/${Z}`,M=m(S,z);g(M,["code","kind","fields","result"],z);let pe=y(M.code,`${z}/code`);G.has(pe)&&l("NATIVE_PUBLIC_VALIDATION_DUPLICATE",`${z}/code`),F(M.kind,"duplicate",`${z}/kind`),F(M.result,"availability",`${z}/result`);let re=P(M.fields,`${z}/fields`,8);(re.length<1||re.some(ae=>!D.includes(ae))||re.some(ae=>["file","subtable"].includes(T.get(ae)||"")))&&l("NATIVE_PUBLIC_VALIDATION_FIELD_INVALID",`${z}/fields`),G.add(pe)}),s.add(A),d.add(f)})}function hi(e,t){let o=m(e,t);g(o,["policies"],t),R(o.policies,`${t}/policies`,16).length<1&&l("NATIVE_PUBLIC_POLICY_REQUIRED",t)}function Ri(e){return{policies:X(e.frontend.publicAccess.policies.map(t=>({code:t.code,routeCode:t.routeCode,mode:t.mode,resourceCode:t.resourceCode,operations:k(t.operations),fields:k(t.fields),...t.requiredFields?{requiredFields:k(t.requiredFields)}:{},...t.ownRecordFields?{ownRecordFields:k(t.ownRecordFields)}:{},...t.draft?{draft:{...t.draft}}:{},...t.validations?{validations:X(t.validations.map(o=>({code:o.code,kind:o.kind,fields:k(o.fields),result:o.result})),o=>o.code)}:{}})),t=>t.code)}}function Dn(e){let t=[{owner:"platform:admin-entry",path:"/"},{owner:"platform:admin-entry",path:"/admin"},{owner:"platform:file-preview",path:"/files/:resourceCode/:fileId/preview"}];e.frontend.authentication&&t.push({owner:"authentication:desktop",path:e.frontend.authentication.surfaces.desktop.path},{owner:"authentication:mobile",path:e.frontend.authentication.surfaces.mobile.path});for(let o of e.data.resources){let n=yn(o),i=`/admin/resources/${o.code}`,r=[["list",i],["detail",`${i}/:id`],["create",`${i}/new`],["update",`${i}/:id/edit`]];for(let[a,s]of r)n[a]&&t.push({owner:`resource:${o.code}:${a}`,path:s},{owner:`resource:${o.code}:${a}:mobile`,path:`/m${s}`})}if(e.frontend.user.applicationTodoCenter===!0&&t.push({owner:"application:todo-center",path:"/todos"},{owner:"application:todo-center:mobile",path:"/m/todos"}),e.workflows.definitions.length>0){t.push({owner:"workflow:work-center",path:"/work-center"},{owner:"workflow:work-center:mobile",path:"/m/work-center"},{owner:"workflow:task",path:"/tasks/:taskId"},{owner:"workflow:task:mobile",path:"/m/tasks/:taskId"},{owner:"workflow:instance",path:"/workflows/:instanceId"},{owner:"workflow:instance:mobile",path:"/m/workflows/:instanceId"});let o=!1;for(let n of e.workflows.definitions)["standalone","hidden-handoff"].includes(n.launch.mode)&&(o=!0);o&&t.push({owner:"workflow:launch",path:"/workflows/:workflowCode/start"},{owner:"workflow:launch:mobile",path:"/m/workflows/:workflowCode/start"})}return t}function Ye(e){let t=new Map(Dn(e).map(o=>[Je(o.path),o]));return X(e.frontend.routes.map((o,n)=>{let i=`/config/frontend/routes/${n}`,r=m(o,i);g(r,["code","path","label","surface","parentCode","capability","access","pinned","tabPersistence","keepAlive"],i,!0),["admin","user"].includes(r.surface)||l("NATIVE_ROUTE_SURFACE_INVALID",`${i}/surface`);let a=ee(r.path,`${i}/path`);r.surface==="admin"&&a!=="/admin"&&!a.startsWith("/admin/")&&l("NATIVE_ADMIN_ROUTE_PATH_INVALID",`${i}/path`),r.surface==="user"&&(a==="/admin"||a.startsWith("/admin/"))&&l("NATIVE_USER_ROUTE_PATH_RESERVED",`${i}/path`);let s=Je(a),d=t.get(s);d&&l("NATIVE_ROUTE_PATH_CONFLICT",`${i}/path`,{path:a,owner:d.owner}),t.set(s,{owner:`frontend:${String(r.code||n)}`,path:a});let _=/[:*]/.test(a),p=ht(r,i,e.appCode),u=r.pinned===void 0?void 0:be(r.pinned,`${i}/pinned`),c=r.tabPersistence===void 0?_?"none":"session":h(r.tabPersistence,`${i}/tabPersistence`,16),A=r.keepAlive===void 0?"none":h(r.keepAlive,`${i}/keepAlive`,16);return["session","none"].includes(c)||l("NATIVE_ROUTE_TAB_PERSISTENCE_INVALID",`${i}/tabPersistence`),["none","memory"].includes(A)||l("NATIVE_ROUTE_KEEP_ALIVE_INVALID",`${i}/keepAlive`),_&&u===!0&&l("NATIVE_DYNAMIC_ROUTE_PINNED_FORBIDDEN",`${i}/pinned`),_&&c==="session"&&l("NATIVE_DYNAMIC_ROUTE_TAB_PERSISTENCE_FORBIDDEN",`${i}/tabPersistence`),_&&A==="memory"&&l("NATIVE_DYNAMIC_ROUTE_KEEP_ALIVE_FORBIDDEN",`${i}/keepAlive`),{code:y(r.code,`${i}/code`),path:a,label:h(r.label,`${i}/label`,255),surface:r.surface,...r.parentCode===void 0?{}:{parentCode:y(r.parentCode,`${i}/parentCode`)},...p,...u===void 0?{}:{pinned:u},tabPersistence:c,keepAlive:A}}),o=>o.code)}function yn(e){let t=e.surface===void 0?{}:m(e.surface,"/surface"),o=t.mutationOwner||"native",n=t.generated===void 0?{}:m(t.generated,"/surface/generated"),i=o==="native";return{list:n.list??!0,detail:n.detail??!0,create:n.create??i,update:n.update??i,delete:n.delete??i}}function Sn(e){let t=[];for(let o of X(e.data.resources,n=>n.code).flatMap(n=>[{resource:n,viewCode:void 0},...(n.surface?.views||[]).map(i=>({viewCode:i.code,resource:{...n,name:i.name,surface:ut(n.surface,i.code)}}))])){let{resource:n,viewCode:i}=o,r=`/admin/resources/${n.code}${i?`/views/${i}`:""}`,a=yn(n),s=[{operation:"list",kind:"resource-list",path:`${r}`,label:n.name,capability:n.capabilities.read,navigationEligible:!0},{operation:"detail",kind:"resource-detail",path:`${r}/:id`,label:`${n.name}\u8BE6\u60C5`,capability:n.capabilities.read,navigationEligible:!1},{operation:"create",kind:"resource-create",path:`${r}/new`,label:`\u65B0\u589E${n.name}`,capability:n.capabilities.create,navigationEligible:!1},{operation:"update",kind:"resource-update",path:`${r}/:id/edit`,label:`\u7F16\u8F91${n.name}`,capability:n.capabilities.update,navigationEligible:!1}];for(let d of s)a[d.operation]&&t.push({code:`resource:${n.code}${i?`:view:${i}`:""}:${d.operation}`,kind:d.kind,path:d.path,label:d.label,navigationEligible:d.navigationEligible,capability:d.capability,resourceCode:n.code,...i?{viewCode:i}:{}})}for(let o of Ye(e))o.surface==="admin"&&t.push({code:`operation:${o.code}`,kind:"operation",path:o.path,label:o.label,navigationEligible:!/[:*]/.test(o.path),routeCode:o.code});return t.sort((o,n)=>se(o.code,n.code))}function Vn(e){return e.kind==="resource"?`resource:${e.resourceCode}${e.viewCode?`:view:${e.viewCode}`:""}:list`:`operation:${e.routeCode}`}function Di(e){return e.frontend.admin.navigation.map((t,o)=>({code:t.code,label:t.label,...t.icon===void 0?{}:{icon:t.icon},order:t.order??o,items:t.items.map((n,i)=>({pageCode:Vn(n.page),...n.label===void 0?{}:{label:n.label},...n.icon===void 0?{}:{icon:n.icon},order:n.order??i})).sort((n,i)=>n.order-i.order||se(n.pageCode,i.pageCode))})).sort((t,o)=>t.order-o.order||se(t.code,o.code))}function yi(e,t){let o=R(e,t,B.adminNavigationGroups),n=0;o.forEach((i,r)=>{let a=`${t}/${r}`,s=m(i,a);g(s,["code","label","icon","order","items"],a,!0),y(s.code,`${a}/code`),h(s.label,`${a}/label`,255),Ge(s.icon,`${a}/icon`),En(s.order,`${a}/order`);let d=R(s.items,`${a}/items`,500);d.length===0&&l("NATIVE_ADMIN_GROUP_ORPHANED",`${a}/items`),n+=d.length,n>B.adminNavigationItems&&l("NATIVE_ARRAY_LIMIT_EXCEEDED",t),d.forEach((_,p)=>{let u=`${a}/items/${p}`,c=m(_,u);g(c,["page","label","icon","order"],u,!0),Si(c.page,`${u}/page`),c.label!==void 0&&h(c.label,`${u}/label`,255),Ge(c.icon,`${u}/icon`),En(c.order,`${u}/order`)})})}function Si(e,t){let o=m(e,t),n=h(o.kind,`${t}/kind`,64);if(n==="resource"){g(o,["kind","resourceCode"],t,["viewCode"]),o.viewCode!==void 0&&y(o.viewCode,`${t}/viewCode`),U(o.resourceCode,`${t}/resourceCode`);return}if(n==="operation"){g(o,["kind","routeCode"],t),y(o.routeCode,`${t}/routeCode`);return}l("NATIVE_ADMIN_PAGE_REFERENCE_KIND_INVALID",`${t}/kind`)}function Vi(e){let t=new Map(Sn(e).map(i=>[String(i.code),i])),o=new Set,n=new Set;e.frontend.admin.navigation.forEach((i,r)=>{let a=`/config/frontend/admin/navigation/${r}`;o.has(i.code)&&l("NATIVE_ADMIN_GROUP_DUPLICATE",`${a}/code`),o.add(i.code),i.label===i.code&&l("NATIVE_ADMIN_USER_LABEL_REQUIRED",`${a}/label`),i.items.forEach((s,d)=>{let _=`${a}/items/${d}`,p=Vn(s.page),u=t.get(p);(!u||u.navigationEligible!==!0)&&l("NATIVE_ADMIN_PAGE_NOT_FOUND",`${_}/page`),n.has(p)&&l("NATIVE_ADMIN_PAGE_DUPLICATE",`${_}/page`),n.add(p);let c=s.page.resourceCode||s.page.routeCode||s.page.workflowCode||p,A=s.label||u.label;(!A||A===c||A===p)&&l("NATIVE_ADMIN_USER_LABEL_REQUIRED",`${_}/label`)})})}function wi(e,t){let o=R(e,t,B.adminPages),n=new Set;o.forEach((i,r)=>{let a=`${t}/${r}`,s=m(i,a);g(s,["code","kind","path","label","navigationEligible","capability","access","resourceCode","viewCode","routeCode"],a,!0);let d=h(s.code,`${a}/code`,255);n.has(d)&&l("NATIVE_ADMIN_PAGE_DUPLICATE",`${a}/code`),n.add(d);let _=h(s.kind,`${a}/kind`,64);if(["resource-list","resource-detail","resource-create","resource-update","operation"].includes(_)||l("NATIVE_ADMIN_PAGE_KIND_INVALID",`${a}/kind`),ee(s.path,`${a}/path`),h(s.label,`${a}/label`,255),be(s.navigationEligible,`${a}/navigationEligible`),s.capability!==void 0&&s.access!==void 0&&l("NATIVE_ROUTE_ACCESS_CONFLICT",`${a}/access`),s.capability!==void 0&&h(s.capability,`${a}/capability`,255),s.access!==void 0){let p=m(s.access,`${a}/access`);g(p,["allOf","anyOf"],`${a}/access`,!0);for(let u of["allOf","anyOf"])p[u]!==void 0&&P(p[u],`${a}/access/${u}`,50)}for(let p of["resourceCode","viewCode","routeCode"])s[p]!==void 0&&y(s[p],`${a}/${p}`)})}function Pi(e,t){let o=R(e,t,B.adminNavigationGroups),n=0;o.forEach((i,r)=>{let a=`${t}/${r}`,s=m(i,a);g(s,["code","label","icon","order","items"],a,!0),y(s.code,`${a}/code`),h(s.label,`${a}/label`,255),Ge(s.icon,`${a}/icon`),H(s.order,`${a}/order`,-1e4,1e4);let d=R(s.items,`${a}/items`,500);d.length===0&&l("NATIVE_ADMIN_GROUP_ORPHANED",`${a}/items`),n+=d.length,n>B.adminNavigationItems&&l("NATIVE_ARRAY_LIMIT_EXCEEDED",t),d.forEach((_,p)=>{let u=`${a}/items/${p}`,c=m(_,u);g(c,["pageCode","label","icon","order"],u,!0),h(c.pageCode,`${u}/pageCode`,255),c.label!==void 0&&h(c.label,`${u}/label`,255),Ge(c.icon,`${u}/icon`),H(c.order,`${u}/order`,-1e4,1e4)})})}var vi=new Set(["application-todo-center","workflow-work-center","workflow-launch","workflow-task","workflow-instance"]);function Fi(e,t,o){let n=m(e,t);g(n,["schemaVersion","appCode","devicePolicy","rootEntry","authentication","routes","digest"],t),F(n.schemaVersion,$n,`${t}/schemaVersion`),F(n.appCode,o,`${t}/appCode`),$t(n.devicePolicy,`${t}/devicePolicy`),Li(n.rootEntry,`${t}/rootEntry`),ki(n.authentication,`${t}/authentication`),Ot(n.digest,`${t}/digest`);let i=R(n.routes,`${t}/routes`,B.routes),r=new Set;i.forEach((a,s)=>{let d=`${t}/routes/${s}`,_=m(a,d);g(_,["code","kind","desktop","mobile"],d,["workflowCode"]);let p=h(_.code,`${d}/code`,255);r.has(p)&&l("NATIVE_ROUTE_MANIFEST_DUPLICATE",`${d}/code`),r.add(p);let u=h(_.kind,`${d}/kind`,64);vi.has(u)||l("NATIVE_ROUTE_MANIFEST_KIND_INVALID",`${d}/kind`),_.workflowCode!==void 0&&y(_.workflowCode,`${d}/workflowCode`);let c=fn(_.desktop,`${d}/desktop`,o),A=fn(_.mobile,`${d}/mobile`,o);c.surface!=="user"&&l("NATIVE_ROUTE_MANIFEST_DESKTOP_SURFACE_INVALID",`${d}/desktop/surface`),A.surface!=="user"&&l("NATIVE_ROUTE_MANIFEST_MOBILE_SURFACE_INVALID",`${d}/mobile/surface`),c.routeCode===A.routeCode&&l("NATIVE_ROUTE_MANIFEST_PAIR_DUPLICATE",d)}),F(n.digest,K({schemaVersion:n.schemaVersion,appCode:n.appCode,devicePolicy:n.devicePolicy,rootEntry:n.rootEntry,authentication:n.authentication,routes:n.routes}),`${t}/digest`)}function $t(e,t){let o=m(e,t);g(o,["kind","mobileMaxWidthPx","desktopMinWidthPx"],t),F(o.kind,"viewport-family",`${t}/kind`);let n=H(o.mobileMaxWidthPx,`${t}/mobileMaxWidthPx`,320,1600),i=H(o.desktopMinWidthPx,`${t}/desktopMinWidthPx`,320,1600);return i!==n+1&&l("NATIVE_FRONTEND_DEVICE_POLICY_INVALID",t),{kind:"viewport-family",mobileMaxWidthPx:n,desktopMinWidthPx:i}}function Li(e,t){let o=m(e,t);g(o,["code","desktop","mobile"],t);let n=y(o.code,`${t}/code`),i=Ct(o.desktop,`${t}/desktop`),r=Ct(o.mobile,`${t}/mobile`);return(i===r||r==="/"||!r.startsWith("/m/"))&&l("NATIVE_ROUTE_MANIFEST_ROOT_ENTRY_INVALID",t),i.startsWith("/m/")&&l("NATIVE_ROUTE_MANIFEST_ROOT_ENTRY_INVALID",`${t}/desktop`),{code:n,desktop:i,mobile:r}}function ki(e,t){let o=m(e,t);g(o,["desktop","mobile"],t);let n=un(o.desktop,`${t}/desktop`,!1),i=un(o.mobile,`${t}/mobile`,!0);return(n.routeCode===i.routeCode||n.path===i.path)&&l("NATIVE_ROUTE_MANIFEST_AUTHENTICATION_DUPLICATE",t),{desktop:n,mobile:i}}function un(e,t,o){let n=m(e,t);g(n,["routeCode","path"],t);let i=y(n.routeCode,`${t}/routeCode`),r=Ct(n.path,`${t}/path`);return(o?!r.startsWith("/m/"):r.startsWith("/m/"))&&l("NATIVE_ROUTE_MANIFEST_AUTHENTICATION_PATH_INVALID",`${t}/path`),{routeCode:i,path:r}}function Ct(e,t){let o=ee(e,t);return/[:*?#\\\\]/.test(o)&&l("NATIVE_ROUTE_MANIFEST_STATIC_PATH_INVALID",t),o}function fn(e,t,o){let n=m(e,t);g(n,["routeCode","path","surface","pathParams","requiresAuthentication"],t,["capability","access"]),y(n.routeCode,`${t}/routeCode`);let i=ee(n.path,`${t}/path`),r=h(n.surface,`${t}/surface`,16);["admin","user"].includes(r)||l("NATIVE_ROUTE_SURFACE_INVALID",`${t}/surface`);let a=P(n.pathParams,`${t}/pathParams`,8);return a.forEach((s,d)=>{(!/^[A-Za-z][A-Za-z0-9_]*$/.test(s)||s.length>64)&&l("NATIVE_ROUTE_PATH_PARAM_INVALID",`${t}/pathParams/${d}`)}),W(a)!==W(wn(i))&&l("NATIVE_ROUTE_PATH_PARAMS_MISMATCH",`${t}/pathParams`),ht(n,t,o),n.requiresAuthentication!==!0&&l("NATIVE_ROUTE_AUTHENTICATION_REQUIRED",`${t}/requiresAuthentication`),n}function wn(e){return k([...e.matchAll(/:([A-Za-z][A-Za-z0-9_]*)/g)].map(t=>t[1]))}function _n(e,t,o,n){return{routeCode:e,path:t,surface:o,pathParams:wn(t),...n?.capability?{capability:n.capability}:{},...n?.access?{access:n.access}:{},requiresAuthentication:!0}}function pn(e,t,o){return e==="workflow-launch"?`workflow.${o}.launch.${t}`:e==="application-todo-center"?`application.todo-center.${t}`:`${e.replace(/-/g,".")}.${t}`}function xi(e){let t=e.appCode,o=[],n=(A,f,E,I,N,T)=>{o.push({code:A,kind:f,...N?{workflowCode:N}:{},desktop:_n(pn(f,"desktop",N),E,"user",T),mobile:_n(pn(f,"mobile",N),I,"user",T)})};e.frontend.user.applicationTodoCenter===!0&&n("application:todo-center","application-todo-center","/todos","/m/todos");let i=Pn(e);i.length>0&&(n("workflow:work-center","workflow-work-center","/work-center","/m/work-center"),n("workflow:task","workflow-task","/tasks/:taskId","/m/tasks/:taskId"),n("workflow:instance","workflow-instance","/workflows/:instanceId","/m/workflows/:instanceId"));for(let A of i){if(!["standalone","hidden-handoff"].includes(A.launch.mode))continue;let f=k([A.launch.submission?.create?.requiredCapability,A.launch.submission?.existing?.requiredCapability].filter(E=>!!E));n(`workflow:${A.code}:launch`,"workflow-launch","/workflows/:workflowCode/start","/m/workflows/:workflowCode/start",A.code,f.length===1?{capability:f[0]}:f.length>1?{access:{anyOf:f}}:void 0)}let r=o.sort((A,f)=>se(String(A.code),String(f.code))),a=Ye(e),s=A=>{let f=A==="mobile"?"/m/":"/",E=a.filter(N=>N.surface==="user"&&!/[:*?#\\\\]/.test(N.path)&&N.path===f).sort((N,T)=>se(N.code,T.code))[0];if(E)return{code:E.code,path:E.path};let I=a.filter(N=>N.surface==="user"&&!/[:*?#\\\\]/.test(N.path)&&(A==="mobile"?N.path.startsWith("/m/"):!N.path.startsWith("/m/"))).sort((N,T)=>se(N.code,T.code))[0];return I?{code:I.code,path:I.path}:{code:A==="mobile"?"application-root-mobile":"application-root",path:f}},d=e.frontend.authentication?{desktop:{routeCode:e.frontend.authentication.surfaces.desktop.routeCode,path:e.frontend.authentication.surfaces.desktop.path},mobile:{routeCode:e.frontend.authentication.surfaces.mobile.routeCode,path:e.frontend.authentication.surfaces.mobile.path}}:{desktop:{routeCode:"application-login",path:"/login"},mobile:{routeCode:"application-login-mobile",path:"/m/login"}},_=$t(e.frontend.devicePolicy,"/config/frontend/devicePolicy"),p=s("desktop"),u=s("mobile"),c={schemaVersion:$n,appCode:t,devicePolicy:_,rootEntry:{code:p.code,desktop:p.path,mobile:u.path},authentication:d,routes:r};return{...c,digest:K(c)}}function Ge(e,t){if(e===void 0)return;let o=h(e,t,32);Zo.has(o)||l("NATIVE_ADMIN_ICON_INVALID",t)}function En(e,t){e!==void 0&&H(e,t,-1e4,1e4)}function ht(e,t,o){return e.capability!==void 0&&e.access!==void 0&&l("NATIVE_ROUTE_ACCESS_CONFLICT",`${t}/access`),e.capability!==void 0?{capability:_e(e.capability,`${t}/capability`,o)}:e.access===void 0?{}:{access:He(e.access,`${t}/access`,o)}}function He(e,t,o){let n=m(e,t);g(n,["allOf","anyOf"],t,!0);let i=n.allOf===void 0?void 0:k(P(n.allOf,`${t}/allOf`,50).map((a,s)=>_e(a,`${t}/allOf/${s}`,o))),r=n.anyOf===void 0?void 0:k(P(n.anyOf,`${t}/anyOf`,50).map((a,s)=>_e(a,`${t}/anyOf/${s}`,o)));return(i?.length||0)+(r?.length||0)===0&&l("NATIVE_ROUTE_ACCESS_EMPTY",t),{...i===void 0?{}:{allOf:i},...r===void 0?{}:{anyOf:r}}}function Pn(e){let t=new Map(hn(e).map(i=>[String(i.code),i])),o=e.workflows.definitions.map((i,r)=>{let a=`/config/workflows/definitions/${r}`,s=m(i,a);g(s,["version","definition","launch"],a,["detailRouteCode"]);let d=m(s.definition,`${a}/definition`),_=s.detailRouteCode===void 0?void 0:Fn(s.detailRouteCode,`${a}/detailRouteCode`);return{code:y(d.code,`${a}/definition/code`),title:h(d.title,`${a}/definition/title`,255),version:Oe(s.version,`${a}/version`),launch:Ui(e,d,s.launch,`${a}/launch`,t),..._?{detailRouteCode:_}:{},definition:d}});return k(o.map(i=>i.code)).map(i=>{let r=o.filter(_=>_.code===i),a=e.workflows.activations.find(_=>_.workflowCode===i)?.definitionVersion,s=r.find(_=>_.version===a)||[...r].sort((_,p)=>p.version-_.version)[0],d=new Set;for(let _ of r){let p=m(_.definition.nodes,"/config/workflows/definitions/nodes");for(let u of Object.values(p)){let c=m(u,"/config/workflows/definitions/nodes/*");if(c.kind==="approval")for(let A of P(c.allowedOperations||[],"/config/workflows/definitions/nodes/*/allowedOperations",20))d.add(A)}}return{code:i,title:s.title,acceptedCommandDeactivationPolicy:s.definition.acceptedCommandDeactivationPolicy,subject:s.definition.subject,launch:s.launch,...["standalone","hidden-handoff"].includes(s.launch.mode)&&!s.launch.submission?{processOperationCode:`openxiangda.workflow.${i}.submit`}:{},...s.detailRouteCode?{detailRouteCode:s.detailRouteCode}:{},definitionVersions:On(r.map(_=>_.version)),bindingVersions:On(e.workflows.bindings.map((_,p)=>{let u=`/config/workflows/bindings/${p}`,c=m(_,u),A=m(c.binding,`${u}/binding`);return{code:y(A.workflowCode,`${u}/binding/workflowCode`),version:Oe(c.version,`${u}/version`)}}).filter(_=>_.code===i).map(_=>_.version)),providerCodes:k(e.workflows.providers.map((_,p)=>y(m(_,`/config/workflows/providers/${p}`).code,`/config/workflows/providers/${p}/code`))),allowedOperations:[...d].sort(se),editableParameterCodes:k(e.workflows.editableParameters.map((_,p)=>{let u=`/config/workflows/editableParameters/${p}`,c=m(_,u);return{code:y(c.code,`${u}/code`),workflowCode:y(c.workflowCode,`${u}/workflowCode`)}}).filter(_=>_.workflowCode===i).map(_=>_.code))}})}function vn(e,t){let o=m(e,t);g(o,["mode"],t,["submission"]);let n=h(o.mode,`${t}/mode`,32);return["standalone","custom-page","hidden-handoff","work-center-only"].includes(n)||l("NATIVE_WORKFLOW_LAUNCH_MODE_INVALID",`${t}/mode`),{mode:n,...o.submission===void 0?{}:{submission:m(o.submission,`${t}/submission`)}}}function Ui(e,t,o,n,i){let r=vn(o,n);if(!r.submission)return{mode:r.mode};["standalone","hidden-handoff"].includes(r.mode)||l("NATIVE_WORKFLOW_NAMED_OPERATION_SUBMISSION_INVALID",`${n}/submission`);let a=m(r.submission,`${n}/submission`);g(a,["kind"],`${n}/submission`,["create","existing","context"]),F(a.kind,"named-operation",`${n}/submission/kind`);let s=n.endsWith("/launch")?n.slice(0,-7):n,d=m(t.subject,`${s}/definition/subject`),_=U(d.resourceCode,`${s}/definition/subject/resourceCode`),p=e.data.resources.findIndex(C=>C.code===_),u=e.data.resources[p];(p<0||!u)&&l("NATIVE_WORKFLOW_SUBJECT_RESOURCE_MISSING",`${s}/definition/subject/resourceCode`);let c=new Set(m(u.schema,`/config/data/resources/${p}/schema`).fields.map(C=>String(C.code))),A=new Map(e.backend.operations.map(C=>[String(C.code),C])),f=(C,v)=>{let V=`${n}/submission/${v}`,L=m(C,V);g(L,["operationCode","inputs","output"],V);let x=y(L.operationCode,`${V}/operationCode`),G=A.get(x),S=i.get(x),Z=S?.platformAccess?.workflow?.codes;(!G||!S||S.method!=="POST"||!Array.isArray(Z)||!Z.includes(t.code))&&l("NATIVE_WORKFLOW_NAMED_OPERATION_INVALID",V);let z=m(G.requestSchema,`${V}/operation/requestSchema`),M=m(z.properties,`${V}/operation/requestSchema/properties`),pe=new Set(z.required===void 0?[]:P(z.required,`${V}/operation/requestSchema/required`,64)),re=m(L.inputs,`${V}/inputs`),ae=Object.entries(re);(!ae.length||ae.length>64)&&l("NATIVE_WORKFLOW_NAMED_OPERATION_INPUT_INVALID",`${V}/inputs`);let qe=new Set,Ee=new Map,Xe={};for(let[j,Ie]of ae){(!cn.test(j)||!Object.prototype.hasOwnProperty.call(M,j))&&l("NATIVE_WORKFLOW_NAMED_OPERATION_INPUT_INVALID",`${V}/inputs/${j}`);let me=`${V}/inputs/${j}`,Qe=m(Ie,me),Ae=h(Qe.source,`${me}/source`,32);if(["field","idempotency-key","current-user-reference","subject-id","subject-revision","requested-at"].includes(Ae)||l("NATIVE_WORKFLOW_NAMED_OPERATION_INPUT_INVALID",me),g(Qe,["source"],me,Ae==="field"?["fieldCode"]:!1),Ee.set(Ae,(Ee.get(Ae)||0)+1),Ae==="field"){let Fe=J(Qe.fieldCode,`${me}/fieldCode`);(qe.has(Fe)||!c.has(Fe))&&l("NATIVE_WORKFLOW_NAMED_OPERATION_INPUT_INVALID",`${me}/fieldCode`),qe.add(Fe),Xe[j]={source:Ae,fieldCode:Fe}}else Xe[j]={source:Ae}}([...pe].some(j=>!(j in re))||(Ee.get("idempotency-key")||0)!==1||!ae.some(([j,Ie])=>m(Ie,`${V}/inputs/${j}`).source==="idempotency-key"&&pe.has(j))||v==="create"&&((Ee.get("subject-id")||0)>0||(Ee.get("subject-revision")||0)>0)||v==="existing"&&((Ee.get("subject-id")||0)!==1||(Ee.get("subject-revision")||0)!==1))&&l("NATIVE_WORKFLOW_NAMED_OPERATION_INPUT_INVALID",`${V}/inputs`);let ve=m(L.output,`${V}/output`);g(ve,["subjectId"],`${V}/output`,["subjectRevision","processCommand"]);let xn=m(m(G.responseSchema,`${V}/operation/responseSchema`).properties,`${V}/operation/responseSchema/properties`);for(let j of["subjectId","subjectRevision","processCommand"]){if(ve[j]===void 0)continue;let Ie=h(ve[j],`${V}/output/${j}`,128);(!cn.test(Ie)||!Object.prototype.hasOwnProperty.call(xn,Ie))&&l("NATIVE_WORKFLOW_NAMED_OPERATION_OUTPUT_INVALID",`${V}/output/${j}`)}return{operationCode:x,method:"POST",path:S.path,requiredCapability:S.requiredCapability,requestSchemaDigest:S.requestSchemaDigest,responseSchemaDigest:S.responseSchemaDigest,inputs:Xe,output:{...ve},fieldCodes:qe}},E=a.create===void 0?void 0:f(a.create,"create"),I=a.existing===void 0?void 0:f(a.existing,"existing");!E&&!I&&l("NATIVE_WORKFLOW_NAMED_OPERATION_SUBMISSION_INVALID",`${n}/submission`);let N=new Set([...E?.fieldCodes||[],...I?.fieldCodes||[]]),T=a.context===void 0?[]:R(a.context,`${n}/submission/context`,16),b=new Set,D=T.map((C,v)=>{let V=`${n}/submission/context/${v}`,L=m(C,V);g(L,["queryParameter","fieldCode"],V);let x=h(L.queryParameter,`${V}/queryParameter`,64),G=J(L.fieldCode,`${V}/fieldCode`);return(!/^[A-Za-z][A-Za-z0-9]{0,63}$/.test(x)||b.has(x)||!N.has(G))&&l("NATIVE_WORKFLOW_LAUNCH_CONTEXT_INVALID",V),b.add(x),{queryParameter:x,fieldCode:G}}),O=C=>{let{fieldCodes:v,...V}=C;return V};return{mode:r.mode,submission:{kind:"named-operation",...E?{create:O(E)}:{},...I?{existing:O(I)}:{},context:D}}}function Fn(e,t){let o=m(e,t);g(o,["desktop","mobile"],t);let n=y(o.desktop,`${t}/desktop`),i=y(o.mobile,`${t}/mobile`);return n===i&&l("NATIVE_WORKFLOW_DETAIL_ROUTE_DUPLICATE",t),{desktop:n,mobile:i}}function Mi(e,t){let o=new Set(t.map(p=>p.code)),n=new Map;e.data.resources.forEach((p,u)=>{let c=`/config/data/resources/${u}`,A=m(p,c);for(let[I,N]of Object.entries(A.fieldPolicies||{})){if(!he(I))continue;let T=`${c}/fieldPolicies/${I}/read`,b=m(N,`${c}/fieldPolicies/${I}`);for(let D of P(b.read||[],T,2e3))o.has(D)||l("NATIVE_CAPABILITY_REFERENCE_MISSING",T)}if(((A.surface===void 0?{}:m(A.surface,`${c}/surface`)).mutationOwner||"native")==="native")return;let E=m(A.capabilities,`${c}/capabilities`);for(let I of["create","update","delete"])n.set(String(E[I]),I)});let i=new Set;for(let[p,u]of e.authz.roles.entries()){let c=`/config/authz/roles/${p}`,A=m(u,c);g(A,["code","name","description","capabilities"],c,!0);let f=y(A.code,`${c}/code`);i.has(f)&&l("NATIVE_ROLE_DUPLICATE",`${c}/code`),i.add(f),h(A.name,`${c}/name`,255);let E=P(A.capabilities,`${c}/capabilities`,2e3);for(let[I,N]of E.entries())n.has(N)&&l("NATIVE_DATA_SURFACE_MUTATION_GRANT_FORBIDDEN",`${c}/capabilities/${I}`,{operation:n.get(N)}),o.has(N)||l("NATIVE_CAPABILITY_REFERENCE_MISSING",`${c}/capabilities`)}let r=e.authz.authenticatedUserRoleCode===void 0?"":y(e.authz.authenticatedUserRoleCode,"/config/authz/authenticatedUserRoleCode");r&&!i.has(r)&&l("NATIVE_AUTHENTICATED_USER_ROLE_REFERENCE_MISSING","/config/authz/authenticatedUserRoleCode");let a=new Set,s=0;for(let[p,u]of e.perspectives.entries()){let c=`/config/perspectives/${p}`,A=m(u,c);g(A,["code","name","description","roleCodes","capabilityCodes","default"],c,!0);let f=y(A.code,`${c}/code`);a.has(f)&&l("NATIVE_PERSPECTIVE_DUPLICATE",`${c}/code`),a.add(f),h(A.name,`${c}/name`,255);let E=P(A.roleCodes,`${c}/roleCodes`,20);E.length<1&&l("NATIVE_PERSPECTIVE_ROLE_REQUIRED",`${c}/roleCodes`),E.forEach((T,b)=>{i.has(T)||l("NATIVE_PERSPECTIVE_ROLE_MISSING",`${c}/roleCodes/${b}`)});let I=k(e.authz.roles.filter(T=>E.includes(T.code)).flatMap(T=>T.capabilities)),N=P(A.capabilityCodes,`${c}/capabilityCodes`,2e3);W(I)!==W(N)&&l("NATIVE_PERSPECTIVE_CAPABILITY_PROJECTION_MISMATCH",`${c}/capabilityCodes`),A.default===!0?s+=1:A.default!==void 0&&l("NATIVE_PERSPECTIVE_DEFAULT_INVALID",`${c}/default`)}s>1&&l("NATIVE_PERSPECTIVE_DEFAULT_DUPLICATE","/config/perspectives");for(let[p,u]of e.backend.operations.entries()){let c=m(u,`/config/backend/operations/${p}`);o.has(c.capability)||l("NATIVE_CAPABILITY_REFERENCE_MISSING",`/config/backend/operations/${p}/capability`)}let d=new Set,_=new Set;for(let[p,u]of e.frontend.routes.entries()){let c=`/config/frontend/routes/${p}`,A=m(u,c),f=y(A.code,`${c}/code`);d.has(f)&&l("NATIVE_ROUTE_DUPLICATE",`${c}/code`),d.add(f);let E=ee(A.path,`${c}/path`);_.has(E)&&l("NATIVE_ROUTE_PATH_DUPLICATE",`${c}/path`),_.add(E);let I=ht(A,c,e.appCode);I.capability&&!o.has(I.capability)&&l("NATIVE_CAPABILITY_REFERENCE_MISSING",`${c}/capability`);let N=A.access===void 0?void 0:m(A.access,`${c}/access`);for(let T of["allOf","anyOf"]){let b=N?.[T]===void 0?[]:R(N[T],`${c}/access/${T}`,50);for(let[D,O]of b.entries()){let C=_e(O,`${c}/access/${T}/${D}`,e.appCode);o.has(C)||l("NATIVE_CAPABILITY_REFERENCE_MISSING",`${c}/access/${T}/${D}`)}}}if(e.frontend.admin.access!==void 0){let p=He(e.frontend.admin.access,"/config/frontend/admin/access",e.appCode);for(let u of["allOf","anyOf"])for(let[c,A]of(p[u]||[]).entries())o.has(A)||l("NATIVE_CAPABILITY_REFERENCE_MISSING",`/config/frontend/admin/access/${u}/${c}`)}for(let[p,u]of e.frontend.routes.entries()){let c=m(u,`/config/frontend/routes/${p}`);c.parentCode&&!d.has(c.parentCode)&&l("NATIVE_ROUTE_PARENT_MISSING",`/config/frontend/routes/${p}/parentCode`)}}function ji(e){let t=new Set(e.authz.roles.map(_=>String(_.code))),o=e.authz.authenticatedUserRoleCode===void 0?"":y(e.authz.authenticatedUserRoleCode,"/config/authz/authenticatedUserRoleCode"),n=new Map(e.authz.scopeDimensions.map(_=>[String(_.code),{valueType:_.valueType==="uuid"?"uuid":"string",..._.valueSource?.resourceCode?{valueSourceResourceCode:String(_.valueSource.resourceCode)}:{}}])),i=new Set(n.keys()),r=new Map(e.data.resources.map((_,p)=>{let u=Pe(_,`/config/data/resources/${p}`,e.appCode);return[u.code,new Map(u.schema.fields.map(c=>[String(c.code),c]))]}));for(let[_,p]of e.authz.scopeDimensions.entries()){let u=`/config/authz/scopeDimensions/${_}`,c=m(p,u);if(g(c,["code","name","resourceCode","valueType","hierarchyMode","valueSource"],u,!0),c.valueSource===void 0)continue;let A=m(c.valueSource,`${u}/valueSource`);g(A,["kind","resourceCode","labelField","enabledField"],`${u}/valueSource`,!0),A.kind!=="native_resource"&&l("NATIVE_SCOPE_VALUE_SOURCE_KIND_INVALID",`${u}/valueSource/kind`),c.valueType!=="uuid"&&l("NATIVE_SCOPE_VALUE_SOURCE_TYPE_INVALID",`${u}/valueType`);let f=U(A.resourceCode,`${u}/valueSource/resourceCode`),E=r.get(f);E||l("NATIVE_SCOPE_VALUE_SOURCE_RESOURCE_MISSING",`${u}/valueSource/resourceCode`);let I=J(A.labelField,`${u}/valueSource/labelField`);if(["text.short","text.long"].includes(String(E.get(I)?.type||""))||l("NATIVE_SCOPE_VALUE_SOURCE_LABEL_FIELD_INVALID",`${u}/valueSource/labelField`),A.enabledField!==void 0){let N=J(A.enabledField,`${u}/valueSource/enabledField`);E.get(N)?.type!=="boolean"&&l("NATIVE_SCOPE_VALUE_SOURCE_ENABLED_FIELD_INVALID",`${u}/valueSource/enabledField`)}}let a=new Set,s=new Set;for(let[_,p]of e.authz.scopeSources.entries()){let u=`/config/authz/scopeSources/${_}`,c=m(p,u);g(c,["code","name","resourceCode","subject","grants","operationField","enabledField","effectiveFromField","effectiveToField","failureMode"],u,!0);let A=y(c.code,`${u}/code`);a.has(A)&&l("NATIVE_SCOPE_SOURCE_DUPLICATE",`${u}/code`),a.add(A),h(c.name,`${u}/name`,255);let f=U(c.resourceCode,`${u}/resourceCode`),E=r.get(f);E||l("NATIVE_SCOPE_SOURCE_RESOURCE_MISSING",`${u}/resourceCode`);let I=m(c.subject,`${u}/subject`),N=h(I.type,`${u}/subject/type`,32);g(I,N==="role_membership"?["type","userIdField","roleCode"]:["type","userIdField"],`${u}/subject`),["user","role_membership"].includes(N)||l("NATIVE_SCOPE_SOURCE_SUBJECT_INVALID",`${u}/subject/type`);let T=Re(I.userIdField,E);pt(T)||l("NATIVE_SCOPE_SOURCE_SUBJECT_PATH_INVALID",`${u}/subject/userIdField`),N==="role_membership"&&!t.has(String(I.roleCode))&&l("NATIVE_ROLE_REFERENCE_MISSING",`${u}/subject/roleCode`);let b=new Set;for(let[D,O]of R(c.grants,`${u}/grants`,100).entries()){let C=`${u}/grants/${D}`,v=m(O,C);g(v,["dimensionCode","valueField","parentValueField"],C,!0);let V=y(v.dimensionCode,`${C}/dimensionCode`);(!i.has(V)||b.has(V))&&l("NATIVE_SCOPE_SOURCE_DIMENSION_INVALID",`${C}/dimensionCode`),b.add(V),c.failureMode==="last_known_good"&&s.add(V);for(let L of["valueField","parentValueField"]){if(v[L]===void 0)continue;let x=Re(v[L],E);Xt(x,n.get(V),r)||l("NATIVE_SCOPE_SOURCE_GRANT_PATH_INVALID",`${C}/${L}`)}}b.size===0&&l("NATIVE_SCOPE_SOURCE_GRANT_REQUIRED",`${u}/grants`),["strict","last_known_good"].includes(c.failureMode)||l("NATIVE_SCOPE_SOURCE_FAILURE_MODE_INVALID",`${u}/failureMode`);for(let D of["operationField","enabledField","effectiveFromField","effectiveToField"]){if(c[D]===void 0)continue;let O=J(c[D],`${u}/${D}`);E.has(O)||l("NATIVE_SCOPE_SOURCE_FIELD_MISSING",`${u}/${D}`)}}Bi(e,t,r,o);let d=new Set;for(let[_,p]of e.authz.dataPolicies.entries()){let u=`/config/authz/dataPolicies/${_}`,c=m(p,u);g(c,["code","name","resourceCode","unrestrictedRoleCodes","operations","matchMode","rules","readExpression","writeBoundary"],u,!0);let A=y(c.code,`${u}/code`);d.has(A)&&l("NATIVE_DATA_POLICY_DUPLICATE",`${u}/code`),d.add(A);let f=c.readExpression!==void 0,E=P(c.operations||[],`${u}/operations`,4);c.operations!==void 0&&(E.length===0||E.some(O=>!["read","create","update","delete"].includes(O)))&&l("NATIVE_DATA_POLICY_OPERATIONS_INVALID",`${u}/operations`),["AND","OR"].includes(c.matchMode)||l("NATIVE_DATA_POLICY_MATCH_MODE_INVALID",`${u}/matchMode`),f&&c.operations!==void 0&&l("NATIVE_DATA_POLICY_READ_EXPRESSION_OPERATIONS_FORBIDDEN",`${u}/operations`);let I=e.data.resources.find(O=>O.dataPolicyCode===A),N=c.resourceCode||I?.code,T=N?r.get(U(N,`${u}/resourceCode`)):void 0;f&&!T&&l("NATIVE_DATA_POLICY_RESOURCE_MISSING",`${u}/resourceCode`);let b=P(c.unrestrictedRoleCodes||[],`${u}/unrestrictedRoleCodes`,100);c.unrestrictedRoleCodes!==void 0&&b.length===0&&l("NATIVE_DATA_POLICY_UNRESTRICTED_ROLES_INVALID",`${u}/unrestrictedRoleCodes`);for(let O of b)t.has(O)||l("NATIVE_ROLE_REFERENCE_MISSING",`${u}/unrestrictedRoleCodes`);let D;try{let O=R(c.rules,`${u}/rules`,100).map((C,v)=>({rule:m(C,`${u}/rules/${v}`),pointer:`${u}/rules/${v}`}));O.length===0?(!f||c.matchMode!=="AND"||c.writeBoundary!=="capability_only")&&l("NATIVE_DATA_POLICY_WRITE_BOUNDARY_REQUIRED",u):c.writeBoundary!==void 0&&l("NATIVE_DATA_POLICY_WRITE_BOUNDARY_INVALID",`${u}/writeBoundary`),D=[...O],f&&(D.push(...Be(c.readExpression,`${u}/readExpression`)),sn(c.readExpression,`${u}/readExpression`))}catch(O){throw O instanceof Se&&l(O.code,O.pointer),O}for(let{rule:O,pointer:C}of D){g(O,["subject","dimensionCode","relationCode","resourceCode","field","roleCodes","operation","valuePath","emptyMatchesAll","operator","value","operand"],C,!0);let v=J(O.field,`${C}/field`),V=T?.get(v);f&&!V&&l("NATIVE_DATA_POLICY_FIELD_MISSING",`${C}/field`);for(let M of P(O.roleCodes||[],`${C}/roleCodes`,100))t.has(M)||l("NATIVE_ROLE_REFERENCE_MISSING",`${C}/roleCodes`);let L=String(O.operator||""),x=O.operand==="db_now",G=["is_null","is_not_null"].includes(L),S=["eq","not_eq","in","not_in"].includes(L),Z=!x&&(O.operator!==void 0||O.value!==void 0);if([O.subject==="current_user"?"current_user":"",typeof O.dimensionCode=="string"?"dimension":"",typeof O.relationCode=="string"?"relationship":"",Z?"constant":"",x?"db_now":""].filter(Boolean).length!==1&&l("NATIVE_DATA_POLICY_RULE_SOURCE_INVALID",C),O.subject!==void 0&&O.subject!=="current_user"&&l("NATIVE_DATA_POLICY_SUBJECT_INVALID",`${C}/subject`),Z){if(!S&&!G&&l("NATIVE_DATA_POLICY_OPERATOR_INVALID",`${C}/operator`),["in","not_in"].includes(L)){let M=R(O.value,`${C}/value`,100).map((pe,re)=>h(pe,`${C}/value/${re}`,2048));(M.length===0||new Set(M).size!==M.length)&&l("NATIVE_DATA_POLICY_VALUE_INVALID",`${C}/value`)}else["eq","not_eq"].includes(L)?h(O.value,`${C}/value`,2048):(O.value!==void 0||O.operand!==void 0)&&l("NATIVE_DATA_POLICY_VALUE_INVALID",`${C}/value`);for(let M of["operation","valuePath","emptyMatchesAll","resourceCode","operand"])O[M]!==void 0&&l("NATIVE_DATA_POLICY_CONSTANT_RULE_INVALID",`${C}/${M}`)}if(x){(!["lt","lte","gt","gte"].includes(L)||O.value!==void 0||V?.type!=="datetime")&&l("NATIVE_DATA_POLICY_DB_NOW_INVALID",C);for(let M of["operation","valuePath","emptyMatchesAll","resourceCode","value"])O[M]!==void 0&&l("NATIVE_DATA_POLICY_DB_NOW_INVALID",`${C}/${M}`)}O.dimensionCode&&!i.has(O.dimensionCode)&&l("NATIVE_SCOPE_DIMENSION_MISSING",`${C}/dimensionCode`),s.has(String(O.dimensionCode||""))&&O.operation!=="read"&&l("NATIVE_SCOPE_SOURCE_LAST_KNOWN_GOOD_UNSAFE",`${C}/operation`)}}for(let[_,p]of e.data.resources.entries()){let u=m(p,`/config/data/resources/${_}`);u.dataPolicyCode&&!d.has(u.dataPolicyCode)&&l("NATIVE_DATA_POLICY_REFERENCE_MISSING",`/config/data/resources/${_}/dataPolicyCode`)}}function Wi(e){try{Ft(e.data.resources,"/config/data/resources")}catch(t){throw t instanceof ce&&l(t.code,t.pointer),t}}function Bi(e,t,o,n){let i=new Set;for(let[r,a]of e.authz.roleMembershipSources.entries()){let s=`/config/authz/roleMembershipSources/${r}`,d=m(a,s);g(d,["code","name","resourceCode","userIdField","roleCode","enabledField","effectiveFromField","effectiveToField","failureMode"],s,!0);let _=y(d.code,`${s}/code`);_.length>100&&l("NATIVE_AUTHORIZATION_PROJECTION_SOURCE_CODE_INVALID",`${s}/code`),i.has(_)&&l("NATIVE_AUTHORIZATION_PROJECTION_SOURCE_DUPLICATE",`${s}/code`),i.add(_),h(d.name,`${s}/name`,255);let p=An(d.resourceCode,`${s}/resourceCode`,o);In(d.userIdField,`${s}/userIdField`,p),t.has(String(d.roleCode||""))||l("NATIVE_ROLE_REFERENCE_MISSING",`${s}/roleCode`),n&&d.roleCode===n&&l("NATIVE_AUTHENTICATED_USER_ROLE_SOURCE_CONFLICT",`${s}/roleCode`),mn(d,s,p)}for(let[r,a]of e.authz.relationshipGrantSources.entries()){let s=`/config/authz/relationshipGrantSources/${r}`,d=m(a,s);g(d,["code","name","resourceCode","subject","relationCode","targetResourceCode","resourceIdField","operations","enabledField","effectiveFromField","effectiveToField","failureMode"],s,!0);let _=y(d.code,`${s}/code`);_.length>100&&l("NATIVE_AUTHORIZATION_PROJECTION_SOURCE_CODE_INVALID",`${s}/code`),i.has(_)&&l("NATIVE_AUTHORIZATION_PROJECTION_SOURCE_DUPLICATE",`${s}/code`),i.add(_),h(d.name,`${s}/name`,255);let p=An(d.resourceCode,`${s}/resourceCode`,o),u=m(d.subject,`${s}/subject`),c=h(u.type,`${s}/subject/type`,32);g(u,c==="role_membership"?["type","userIdField","roleCode"]:["type","userIdField"],`${s}/subject`),["user","role_membership"].includes(c)||l("NATIVE_AUTHORIZATION_PROJECTION_SUBJECT_INVALID",`${s}/subject/type`),In(u.userIdField,`${s}/subject/userIdField`,p),c==="role_membership"&&!t.has(String(u.roleCode||""))&&l("NATIVE_ROLE_REFERENCE_MISSING",`${s}/subject/roleCode`),y(d.relationCode,`${s}/relationCode`);let A=U(d.targetResourceCode,`${s}/targetResourceCode`);o.has(A)||l("NATIVE_AUTHORIZATION_PROJECTION_TARGET_RESOURCE_MISSING",`${s}/targetResourceCode`);let f=Re(d.resourceIdField,p),E=f?.field.type==="resource-ref.single"&&f.valuePath==="value"&&f.field.source?.resourceCode===A;(d.resourceIdField==="id"?A!==String(d.resourceCode):!E)&&l("NATIVE_AUTHORIZATION_PROJECTION_RESOURCE_ID_FIELD_INVALID",`${s}/resourceIdField`);let I=P(d.operations,`${s}/operations`,20);(I.length===0||I.some(N=>N.length>64||!/^[A-Za-z0-9][A-Za-z0-9:._*-]{0,63}$/.test(N)))&&l("NATIVE_AUTHORIZATION_PROJECTION_OPERATIONS_INVALID",`${s}/operations`),mn(d,s,p)}}function An(e,t,o){let n=U(e,t),i=o.get(n);return i||l("NATIVE_AUTHORIZATION_PROJECTION_RESOURCE_MISSING",t),i}function In(e,t,o){let n=Re(e,o);pt(n)||l("NATIVE_AUTHORIZATION_PROJECTION_USER_FIELD_INVALID",t)}function mn(e,t,o){if(e.failureMode!=="strict"&&l("NATIVE_AUTHORIZATION_PROJECTION_FAILURE_MODE_INVALID",`${t}/failureMode`),e.enabledField!==void 0){let n=J(e.enabledField,`${t}/enabledField`);o.get(n)?.type!=="boolean"&&l("NATIVE_AUTHORIZATION_PROJECTION_ENABLED_FIELD_INVALID",`${t}/enabledField`)}for(let n of["effectiveFromField","effectiveToField"]){if(e[n]===void 0)continue;let i=J(e[n],`${t}/${n}`);["date","datetime"].includes(String(o.get(i)?.type))||l("NATIVE_AUTHORIZATION_PROJECTION_EFFECTIVE_FIELD_INVALID",`${t}/${n}`)}}function Ji(e){let t=new Set,o=new Set;e.forEach((n,i)=>{let r=`/config/backend/secrets/${i}`,a=m(n,r);g(a,["name","env","description","required","exposure"],r,!0);let s=h(a.name,`${r}/name`,128),d=h(a.env,`${r}/env`,128);Go.test(s)||l("NATIVE_SECRET_NAME_INVALID",`${r}/name`),(!zo.test(d)||d.startsWith("OPENXIANGDA_")||["NODE_ENV","PORT"].includes(d))&&l("NATIVE_SECRET_ENV_INVALID",`${r}/env`),t.has(s)&&l("NATIVE_SECRET_NAME_DUPLICATE",`${r}/name`),o.has(d)&&l("NATIVE_SECRET_ENV_DUPLICATE",`${r}/env`),t.add(s),o.add(d),F(a.exposure,"active_only",`${r}/exposure`),a.required!==void 0&&be(a.required,`${r}/required`),a.description!==void 0&&Rt(a.description,`${r}/description`,2e3)})}function Gi(e){let t=new Set,o=new Map,n=new Map(e.data.resources.map(c=>[String(c.code),c])),i=new Map(e.frontend.routes.map((c,A)=>{let f=m(c,`/config/frontend/routes/${A}`);return[y(f.code,`/config/frontend/routes/${A}/code`),f]}));for(let[c,A]of e.workflows.definitions.entries()){let f=`/config/workflows/definitions/${c}`,E=m(A,f);if(g(E,["version","definition","launch"],f,["detailRouteCode"]),vn(E.launch,`${f}/launch`),E.detailRouteCode!==void 0){let b=Fn(E.detailRouteCode,`${f}/detailRouteCode`);for(let[D,O,C]of[["desktop",b.desktop,"admin"],["mobile",b.mobile,"user"]]){let v=`${f}/detailRouteCode/${D}`,V=i.get(O);V||l("NATIVE_WORKFLOW_DETAIL_ROUTE_MISSING",v),V.surface!==C&&l("NATIVE_WORKFLOW_DETAIL_ROUTE_SURFACE_INVALID",v);let L=ee(V.path,v),x=[...L.matchAll(/:([A-Za-z][A-Za-z0-9_]*)/g)].map(G=>G[1]);(L.includes("*")||x.length!==1||x[0]!=="instanceId")&&l("NATIVE_WORKFLOW_DETAIL_ROUTE_PATH_INVALID",v)}}let I=m(E.definition,`${f}/definition`),N=`${I.code}:${Oe(E.version,`${f}/version`)}`;t.has(N)&&l("NATIVE_WORKFLOW_DEFINITION_DUPLICATE",f),t.add(N),Yi(I,`${f}/definition`),zi(I.subject,n,`${f}/definition/subject`);let T=tn(I,{appCode:e.appCode,capabilities:e.authz.capabilities.map(b=>b.code),fields:new Map((n.get(I.subject.resourceCode)?.schema.fields||[]).map(b=>[b.code,b]))});T.length&&l("NATIVE_WORKFLOW_INSTANCE_COMMAND_POLICY_INVALID",`${f}/definition/instanceCommands`,{errors:T}),I.title===I.code&&l("NATIVE_WORKFLOW_USER_TITLE_REQUIRED",`${f}/definition/title`),o.set(N,I)}let r=new Set,a=new Map;for(let[c,A]of e.workflows.bindings.entries()){let f=m(A,`/config/workflows/bindings/${c}`),E=m(f.binding,`/config/workflows/bindings/${c}/binding`),I=`${E.workflowCode}:${Oe(f.version,`/config/workflows/bindings/${c}/version`)}`;r.has(I)&&l("NATIVE_WORKFLOW_BINDING_DUPLICATE",`/config/workflows/bindings/${c}`),r.add(I),Hi(E,`/config/workflows/bindings/${c}/binding`),a.set(I,E)}let s=new Set,d=new Map;for(let[c,A]of e.workflows.activations.entries()){let f=`/config/workflows/activations/${c}`,E=m(A,f);g(E,["workflowCode","definitionVersion","bindingVersion","acceptedCommandDeactivationPolicy"],f,["environmentKey"]);let I=y(E.workflowCode,`${f}/workflowCode`);s.has(I)&&l("NATIVE_WORKFLOW_ACTIVATION_DUPLICATE",f),s.add(I);let N=`${I}:${Oe(E.definitionVersion,`${f}/definitionVersion`)}`,T=`${I}:${Oe(E.bindingVersion,`${f}/bindingVersion`)}`;t.has(N)||l("NATIVE_WORKFLOW_DEFINITION_REFERENCE_MISSING",`${f}/definitionVersion`),r.has(T)||l("NATIVE_WORKFLOW_BINDING_REFERENCE_MISSING",`${f}/bindingVersion`);let b=o.get(N),D=a.get(T);(!["finish-pinned","cancel-on-deactivate"].includes(E.acceptedCommandDeactivationPolicy)||E.acceptedCommandDeactivationPolicy!==b.acceptedCommandDeactivationPolicy)&&l("NATIVE_WORKFLOW_COMMAND_DEACTIVATION_POLICY_MISMATCH",`${f}/acceptedCommandDeactivationPolicy`),Ki(b,D,`/config/workflows/activations/${c}`),d.set(I,D)}let _=new Set;e.workflows.providers.forEach((c,A)=>{let f=`/config/workflows/providers/${A}`,E=m(c,f);g(E,["code","endpointPath","timeoutMs"],f,!0);let I=y(E.code,`${f}/code`);_.has(I)&&l("NATIVE_WORKFLOW_PROVIDER_DUPLICATE",`${f}/code`),_.add(I),ee(E.endpointPath,`${f}/endpointPath`),E.timeoutMs!==void 0&&H(E.timeoutMs,`${f}/timeoutMs`,100,1e4)});for(let[c,A]of d.entries())for(let[f,E]of Object.entries(m(A.bindings,"/config/workflows/bindings/*/binding/bindings"))){let I=m(E,`/config/workflows/${c}/bindings/${f}`);I.provider==="application_provider"&&!_.has(I.providerCode)&&l("NATIVE_WORKFLOW_PROVIDER_REFERENCE_MISSING",`/config/workflows/${c}/bindings/${f}/providerCode`)}let p=new Set(e.authz.roles.map(c=>c.code)),u=new Set;e.workflows.editableParameters.forEach((c,A)=>{let f=`/config/workflows/editableParameters/${A}`,E=m(c,f);g(E,["code","workflowCode","bindingKey","label","valueType","required","allowedRoleCodes","allowedProviderCodes","maxItems"],f,!0);let I=y(E.code,`${f}/code`);u.has(I)&&l("NATIVE_WORKFLOW_EDITABLE_PARAMETER_DUPLICATE",`${f}/code`),u.add(I);let N=Ke(E.workflowCode,`${f}/workflowCode`),T=Dt(E.bindingKey,`${f}/bindingKey`),b=d.get(N);(!b||!m(b.bindings,`${f}/bindingKey`)[T])&&l("NATIVE_WORKFLOW_EDITABLE_BINDING_MISSING",`${f}/bindingKey`),h(E.label,`${f}/label`,255),["role_code","user_ids","provider_code"].includes(E.valueType)||l("NATIVE_WORKFLOW_EDITABLE_VALUE_TYPE_INVALID",`${f}/valueType`);for(let D of P(E.allowedRoleCodes||[],`${f}/allowedRoleCodes`,100))p.has(D)||l("NATIVE_ROLE_REFERENCE_MISSING",`${f}/allowedRoleCodes`);for(let D of P(E.allowedProviderCodes||[],`${f}/allowedProviderCodes`,100))_.has(D)||l("NATIVE_WORKFLOW_PROVIDER_REFERENCE_MISSING",`${f}/allowedProviderCodes`);E.required!==void 0&&be(E.required,`${f}/required`),E.maxItems!==void 0&&H(E.maxItems,`${f}/maxItems`,1,200)})}function zi(e,t,o){let n=m(e,o);g(n,["resourceCode","factProjection"],o,["summaryFields"]);let i=U(n.resourceCode,`${o}/resourceCode`),r=t.get(i);r||l("NATIVE_WORKFLOW_SUBJECT_RESOURCE_MISSING",`${o}/resourceCode`);let a=new Set(R(m(r.schema,`${o}/resourceCode`).fields,`${o}/resourceCode`,500).map((_,p)=>J(m(_,`${o}/resourceCode/${p}`).code,`${o}/resourceCode/${p}`))),s=m(n.factProjection,`${o}/factProjection`),d=Object.entries(s);(d.length<1||d.length>64)&&l("NATIVE_WORKFLOW_SUBJECT_FACT_PROJECTION_INVALID",`${o}/factProjection`);for(let[_,p]of d){Ko.test(_)||l("NATIVE_WORKFLOW_SUBJECT_FACT_KEY_INVALID",`${o}/factProjection/${_}`);let u=J(p,`${o}/factProjection/${_}`);a.has(u)||l("NATIVE_WORKFLOW_SUBJECT_FIELD_MISSING",`${o}/factProjection/${_}`)}if(n.summaryFields!==void 0){let _=P(n.summaryFields,`${o}/summaryFields`,qo).map((f,E)=>J(f,`${o}/summaryFields/${E}`)),p=t.get(i),u=p.surface&&typeof p.surface=="object"&&!Array.isArray(p.surface)?p.surface:{},c=u.fields&&typeof u.fields=="object"&&!Array.isArray(u.fields)?u.fields:{},A=new Map(R(m(p.schema,`${o}/resourceCode`).fields,`${o}/resourceCode`,500).map((f,E)=>{let I=m(f,`${o}/resourceCode/${E}`);return[String(I.code),I]}));for(let[f,E]of _.entries()){let I=A.get(E),N=c[E],T=String(I?.type||""),b=I?.maxLength;(!I||I.system===!0||N&&typeof N=="object"&&!Array.isArray(N)&&N.system===!0||["id","revision","created_by","updated_by","created_at","updated_at"].includes(E)||!Qo.has(T)||T==="text.long"&&typeof b=="number"&&Number.isFinite(b)&&b>Xo)&&l("NATIVE_WORKFLOW_SUBJECT_SUMMARY_FIELDS_INVALID",`${o}/summaryFields/${f}`)}}}function Yi(e,t){g(e,["schemaVersion","code","title","subject","acceptedCommandDeactivationPolicy","startAt","inputSchema","nodes"],t,["organizationContext","instanceCommands"]),F(e.schemaVersion,"openxiangda.workflow-definition/v2",`${t}/schemaVersion`),Ke(e.code,`${t}/code`),h(e.title,`${t}/title`,255),["finish-pinned","cancel-on-deactivate"].includes(e.acceptedCommandDeactivationPolicy)||l("NATIVE_WORKFLOW_COMMAND_DEACTIVATION_POLICY_REQUIRED",`${t}/acceptedCommandDeactivationPolicy`);let o=m(e.nodes,`${t}/nodes`),n=Object.keys(o);(n.length===0||n.length>200)&&l("NATIVE_WORKFLOW_NODE_COUNT_INVALID",`${t}/nodes`);let i=h(e.startAt,`${t}/startAt`,128);o[i]||l("NATIVE_WORKFLOW_START_NODE_MISSING",`${t}/startAt`);let r=new Map;for(let[_,p]of Object.entries(o)){let u=`${t}/nodes/${_}`,c=m(p,u);F(c.id,_,`${u}/id`),["approval","condition","end"].includes(c.kind)||l("NATIVE_WORKFLOW_NODE_KIND_INVALID",`${u}/kind`);let A=[];if(c.kind==="approval"){Dt(c.binding,`${u}/binding`),["single","any","all","sequence"].includes(c.mode)||l("NATIVE_WORKFLOW_APPROVAL_MODE_INVALID",`${u}/mode`),A.push(h(c.onApprove,`${u}/onApprove`,128),h(c.onReject,`${u}/onReject`,128));for(let f of P(c.returnTargets||[],`${u}/returnTargets`,200))o[f]||l("NATIVE_WORKFLOW_TARGET_MISSING",`${u}/returnTargets`);for(let f of P(c.allowedOperations||[],`${u}/allowedOperations`,20))ei.has(f)||l("NATIVE_WORKFLOW_OPERATION_INVALID",`${u}/allowedOperations`)}else if(c.kind==="condition"){let f=R(c.branches,`${u}/branches`,100);f.length===0&&l("NATIVE_WORKFLOW_BRANCH_REQUIRED",`${u}/branches`),f.forEach((E,I)=>{let N=m(E,`${u}/branches/${I}`);Ve(N.when,`${u}/branches/${I}/when`,0),A.push(h(N.target,`${u}/branches/${I}/target`,128))}),A.push(h(c.otherwise,`${u}/otherwise`,128))}else h(c.outcome,`${u}/outcome`,128);for(let f of A)o[f]||l("NATIVE_WORKFLOW_TARGET_MISSING",u);r.set(_,A)}let a=new Set,s=new Set,d=_=>{if(s.has(_)&&l("NATIVE_WORKFLOW_CYCLE_FORBIDDEN",`${t}/nodes/${_}`),!a.has(_)){a.add(_),s.add(_);for(let p of r.get(_)||[])d(p);s.delete(_)}};d(i),a.size!==n.length&&l("NATIVE_WORKFLOW_NODE_UNREACHABLE",`${t}/nodes`)}function Ve(e,t,o){o>20&&l("NATIVE_WORKFLOW_EXPRESSION_DEPTH_EXCEEDED",t);let n=m(e,t),i=h(n.op,`${t}/op`,16);if(i!=="literal"){if(i==="path"){let r=h(n.path,`${t}/path`,255);/^[A-Za-z][A-Za-z0-9_.]{0,254}$/.test(r)||l("NATIVE_WORKFLOW_EXPRESSION_PATH_INVALID",`${t}/path`);return}if(["eq","neq","gt","gte","lt","lte","in","contains"].includes(i)){Ve(n.left,`${t}/left`,o+1),Ve(n.right,`${t}/right`,o+1);return}if(["and","or"].includes(i)){let r=R(n.values,`${t}/values`,100);r.length===0&&l("NATIVE_WORKFLOW_EXPRESSION_EMPTY",`${t}/values`),r.forEach((a,s)=>Ve(a,`${t}/values/${s}`,o+1));return}if(["not","exists"].includes(i)){Ve(n.value,`${t}/value`,o+1);return}l("NATIVE_WORKFLOW_EXPRESSION_OPERATOR_INVALID",`${t}/op`)}}function Hi(e,t){F(e.schemaVersion,"openxiangda.workflow-binding/v2",`${t}/schemaVersion`),Ke(e.workflowCode,`${t}/workflowCode`);let o=m(e.bindings,`${t}/bindings`);Object.keys(o).length>200&&l("NATIVE_WORKFLOW_BINDING_LIMIT_EXCEEDED",`${t}/bindings`);for(let[n,i]of Object.entries(o)){Dt(n,`${t}/bindings/${n}`);let r=m(i,`${t}/bindings/${n}`),a=h(r.provider,`${t}/bindings/${n}/provider`,64);["fixed_users","initiator","input_users","form_field_users","department_supervisor","app_role","app_role_in_scope","business_relation","previous_node_actor","initiator_select","application_provider"].includes(a)||l("NATIVE_WORKFLOW_BINDING_PROVIDER_INVALID",`${t}/bindings/${n}/provider`),a==="fixed_users"&&R(r.users,`${t}/bindings/${n}/users`,200).length===0&&l("NATIVE_WORKFLOW_BINDING_USERS_REQUIRED",`${t}/bindings/${n}/users`),["input_users","form_field_users"].includes(a)&&h(r.inputPath,`${t}/bindings/${n}/inputPath`,255),["app_role","app_role_in_scope","initiator_select"].includes(a)&&y(r.roleCode,`${t}/bindings/${n}/roleCode`),a==="department_supervisor"&&h(r.departmentIdFrom,`${t}/bindings/${n}/departmentIdFrom`,255),a==="application_provider"&&y(r.providerCode,`${t}/bindings/${n}/providerCode`)}}function Ki(e,t,o){F(t.workflowCode,e.code,`${o}/workflowCode`);let n=m(t.bindings,`${o}/bindings`);for(let[i,r]of Object.entries(m(e.nodes,`${o}/nodes`))){let a=m(r,`${o}/nodes/${i}`);a.kind==="approval"&&!n[a.binding]&&l("NATIVE_WORKFLOW_BINDING_REFERENCE_MISSING",`${o}/nodes/${i}/binding`)}}function Pe(e,t,o){let n=m(e,t);g(n,["schemaVersion","appCode","code","name","schema","surface","invariants","capabilities","dataPolicyCode","fieldPolicies"],t,!0),F(n.schemaVersion,"openxiangda.data-resource/v2",`${t}/schemaVersion`),F(n.appCode,o,`${t}/appCode`);let i=U(n.code,`${t}/code`),r=h(n.name,`${t}/name`,255),a=m(n.schema,`${t}/schema`);g(a,["fields"],`${t}/schema`);let s,d;try{s=nt(a.fields,`${t}/schema/fields`),d=Lt(n.invariants,s,`${t}/invariants`),lt(n.surface,s,`${t}/surface`)}catch(c){throw c instanceof ce&&l(c.code,c.pointer),c}let _=new Set(s.map(c=>c.code)),p=m(n.capabilities,`${t}/capabilities`);g(p,["read","create","update","delete"],`${t}/capabilities`);let u=m(n.fieldPolicies,`${t}/fieldPolicies`);for(let[c,A]of Object.entries(u)){!_.has(c)&&!he(c)&&l("NATIVE_DATA_FIELD_POLICY_FIELD_MISSING",`${t}/fieldPolicies/${c}`);let f=`${t}/fieldPolicies/${c}`,E=m(A,f);he(c)&&(g(E,["read"],f,!0),(!Array.isArray(E.read)||E.read.length>20||E.read.some(I=>typeof I!="string"||!I.trim())||new Set(E.read).size!==E.read.length)&&l("NATIVE_DATA_AUDIT_READ_POLICY_INVALID",`${f}/read`)),g(E,["read","create","update","mask"],f,!0),E.mask!==void 0&&!["omit","null"].includes(E.mask)&&l("NATIVE_DATA_FIELD_POLICY_MASK_INVALID",`${f}/mask`)}return{...n,code:i,name:r,schema:{fields:s},...n.invariants===void 0?{}:{invariants:d},capabilities:p,fieldPolicies:u}}function Ln(e){return[{code:`app:${e}:directory:read`,kind:"platform",name:"\u8BFB\u53D6\u53D7\u9650\u7EC4\u7EC7\u76EE\u5F55",source:"platform"},...[["app:role:read","\u67E5\u770B\u89D2\u8272\u4E0E\u6388\u6743"],["app:role:define","\u5B9A\u4E49\u624B\u5DE5\u89D2\u8272"],["app:role:assign","\u5206\u914D\u89D2\u8272\u6210\u5458"],["app:role:grant-capability","\u6388\u4E88\u89D2\u8272\u80FD\u529B"],["app:scope-grant:manage","\u7BA1\u7406\u6570\u636E\u8303\u56F4"],["app:super-admin:manage","\u7BA1\u7406\u5E94\u7528\u6700\u9AD8\u7BA1\u7406\u5458"]].map(([t,o])=>({code:t,kind:"platform",name:o,source:"platform"}))]}function Nn(e,t,o,n){let i=e.toString("utf8"),r;try{r=JSON.parse(i)}catch{l(o,t)}let a=m(r,t);return W(a)!==i&&l(n,t),a}function Tn(e,t){let o=0,n=(i,r,a)=>{if(o+=1,o>ii&&l("NATIVE_ARTIFACT_NODE_LIMIT_EXCEEDED",r),a>oi&&l("NATIVE_ARTIFACT_DEPTH_LIMIT_EXCEEDED",r),typeof i=="string"){Buffer.byteLength(i)>mt&&l("NATIVE_ARTIFACT_STRING_LIMIT_EXCEEDED",r);return}if(Array.isArray(i)){i.forEach((s,d)=>n(s,`${r}/${d}`,a+1));return}if(!(!i||typeof i!="object"))for(let[s,d]of Object.entries(i))["__proto__","prototype","constructor"].includes(s)&&l("NATIVE_ARTIFACT_DANGEROUS_KEY",`${r}/${s}`),qi(s)&&l("NATIVE_ARTIFACT_RUNTIME_FIELD_FORBIDDEN",`${r}/${s}`),n(d,`${r}/${s}`,a+1)};n(e,t,0)}function qi(e){return["environmentKey","environmentId","secretValue","ciphertext","oauthClient","oauthClientId","oauthClientSecret","signingSecret","kubernetesNamespace","nodePort","productionUrl"].includes(e)}function Ce(e){return{value:e,digest:K(e)}}function gn(e,t,o,n){typeof e!="string"&&!Buffer.isBuffer(e)&&!(e instanceof Uint8Array)&&l("NATIVE_ARTIFACT_BYTES_REQUIRED",o);let i=Buffer.isBuffer(e)?e:Buffer.from(e);return i.byteLength===0&&l("NATIVE_ARTIFACT_EMPTY",o),i.byteLength>t&&l(n,o),i}function Cn(e,t,o,n){let i=ze.createHash("sha256").update(e).digest("hex");ze.timingSafeEqual(Buffer.from(i),Buffer.from(t))||l(n,o)}function m(e,t){return(!e||typeof e!="object"||Array.isArray(e))&&l("NATIVE_OBJECT_REQUIRED",t),e}function R(e,t,o){return Array.isArray(e)||l("NATIVE_ARRAY_REQUIRED",t),e.length>o&&l("NATIVE_ARRAY_LIMIT_EXCEEDED",t),e}function P(e,t,o){let n=R(e,t,o).map((i,r)=>h(i,`${t}/${r}`,255));return new Set(n).size!==n.length&&l("NATIVE_ARRAY_DUPLICATE",t),n}function h(e,t,o){return(typeof e!="string"||e.length===0||e.length>o)&&l("NATIVE_STRING_INVALID",t),e}function Rt(e,t,o){return(typeof e!="string"||e.length>o)&&l("NATIVE_STRING_INVALID",t),e}function y(e,t){let o=h(e,t,128);return jo.test(o)||l("NATIVE_CODE_INVALID",t),o}function U(e,t){let o=h(e,t,64);return Bo.test(o)||l("NATIVE_RESOURCE_CODE_INVALID",t),o}function J(e,t){let o=h(e,t,63);return Jo.test(o)||l("NATIVE_FIELD_CODE_INVALID",t),o}function Ke(e,t){let o=h(e,t,128);return Yo.test(o)||l("NATIVE_WORKFLOW_CODE_INVALID",t),o}function Dt(e,t){let o=h(e,t,128);return Ho.test(o)||l("NATIVE_WORKFLOW_BINDING_CODE_INVALID",t),o}function _e(e,t,o){let n=h(e,t,255);return Mo.test(n)||l("NATIVE_CAPABILITY_CODE_INVALID",t),!n.startsWith(`app:${o}:`)&&!Ln(o).some(i=>i.code===n)&&l("NATIVE_CAPABILITY_APP_MISMATCH",t),n}function ee(e,t){let o=h(e,t,2048);return(!o.startsWith("/")||o.startsWith("//")||o.includes("..")||o.includes("?")||o.includes("#"))&&l("NATIVE_ABSOLUTE_PATH_INVALID",t),o}function Oe(e,t){return(!Number.isInteger(e)||Number(e)<1)&&l("NATIVE_POSITIVE_INTEGER_REQUIRED",t),Number(e)}function H(e,t,o,n){return(!Number.isInteger(e)||Number(e)<o||Number(e)>n)&&l("NATIVE_INTEGER_OUT_OF_RANGE",t),Number(e)}function be(e,t){return typeof e!="boolean"&&l("NATIVE_BOOLEAN_REQUIRED",t),e}function Ot(e,t){let o=h(e,t,64).toLowerCase();return xo.test(o)||l("NATIVE_DIGEST_INVALID",t),o}function F(e,t,o){e!==t&&l("NATIVE_VALUE_MISMATCH",o)}function g(e,t,o,n=!1){let i=new Set([...t,...Array.isArray(n)?n:[]]);for(let r of Object.keys(e))i.has(r)||l("NATIVE_PROPERTY_UNKNOWN",`${o}/${r}`);if(n!==!0)for(let r of t)Object.prototype.hasOwnProperty.call(e,r)||l("NATIVE_PROPERTY_REQUIRED",`${o}/${r}`)}function X(e,t){return[...e].sort((o,n)=>se(t(o),t(n)))}function k(e){return[...new Set(e)].sort(se)}function On(e){return[...new Set(e)].sort((t,o)=>t-o)}function se(e,t){return e===t?0:e<t?-1:1}function kn(e){return!e||typeof e!="object"||Object.isFrozen(e)||(Object.freeze(e),Object.values(e).forEach(t=>kn(t))),e}function bt(e,t,o){if(It(e,t))return o;if(Array.isArray(e)&&Array.isArray(t)){let n=Math.max(e.length,t.length);for(let i=0;i<n;i+=1)if(!It(e[i],t[i]))return bt(e[i],t[i],`${o}/${i}`)}if(e&&t&&typeof e=="object"&&typeof t=="object"&&!Array.isArray(e)&&!Array.isArray(t)){let n=k([...Object.keys(e),...Object.keys(t)]);for(let i of n){let r=e[i],a=t[i];if(!It(r,a))return bt(r,a,`${o}/${i}`)}}return o}function It(e,t){return e===void 0||t===void 0?e===t:W(e)===W(t)}function l(e,t,o={}){throw new gt(e,t,o)}var or="63faf4faae50b45f02e7481d9cb94f0352bbbe0fad01827b29ac66b5e0b58efc";export{Jt as DATA_AUDIT_METADATA_FIELDS,Nt as DATA_EVENT_TYPES_V2,or as NATIVE_CONFIGURATION_VALIDATOR_DIGEST,B as NATIVE_CONTRACT_CAPACITY_V2,Ms as NATIVE_DATA_POLICY_EXPRESSION_MAX_CLAUSES,ks as NATIVE_DATA_POLICY_EXPRESSION_MAX_DEPTH,xs as NATIVE_DATA_POLICY_EXPRESSION_MAX_GROUP_ITEMS,Us as NATIVE_DATA_POLICY_EXPRESSION_MAX_LEAVES,js as NATIVE_DATA_POLICY_EXPRESSION_MAX_OCCURRENCES,Zn as NATIVE_DATA_QUERY_OPERATORS_V2,gt as NativeConfigurationCompilerError,ce as NativeDataFieldContractV2Error,Se as NativeDataPolicyExpressionV2Error,Et as NativeEventActionContractError,_t as NativeScopeSourceFieldPathV2Error,jn as OPENXIANGDA_NATIVE_DATA_FIELD_TYPES_V2,le as OPENXIANGDA_NATIVE_DATA_SURFACE_KEYS_V2,Bn as OPENXIANGDA_NATIVE_SYSTEM_FIELDS_V2,Zi as OPENXIANGDA_NATIVE_SYSTEM_FIELD_MAP_V2,Tt as WORKFLOW_EVENT_TYPES_V2,tr as compileNativeApplicationConfiguration,Zt as compileNativeEventAction,di as compileNativeEventCapturePlansV2,ci as compileRequiredPlatformCapabilitiesV3,Gt as hasDataAuditReadPolicy,he as isDataAuditMetadataField,ts as isNativeDataQueryOperatorV2,xe as isNativeMultiValueFieldV2,Ds as materializeNativeDataQueryPathTypesV2,Be as nativeDataPolicyExpressionLeavesV2,sn as nativeDataPolicyExpressionToCnfV2,ys as nativeDataQueryPathPlanV2,os as nativeFieldAggregatePlanV2,Is as nativeFieldColumnDefinitionV2,ms as nativeFieldDefaultSqlV2,Ns as nativeFieldHasDefaultV2,Os as nativeFieldIndexStatementsV2,Ue as nativeFieldRequiresCreateInputV2,Cs as nativeFieldSequenceGrantStatementsV2,gs as nativeFieldSequenceOwnershipStatementsV2,Ts as nativeFieldSequenceStatementsV2,Mt as nativeFieldSupportsFilterV2,ns as nativeFieldSupportsOperatorV2,rt as nativeFieldSupportsSearchV2,at as nativeFieldSupportsSortV2,Ut as nativeOperatorsForFieldV2,To as nativePhysicalFieldV2,As as nativePhysicalFieldsV2,ue as nativePhysicalObjectNameV2,hs as nativeScopeSourceFieldValueV2,Xt as nativeScopeSourceGrantPathSupportedV2,pt as nativeScopeSourceSubjectPathSupportedV2,bs as nativeSubtableConstraintStatementsV2,nt as parseNativeDataFieldsV2,Lt as parseNativeDataResourceInvariantsV2,ut as projectNativeDataResourceViewV2,q as quoteNativeIdentifierV2,Re as resolveNativeScopeSourceFieldPathV2,Ft as validateNativeDataResourceReferencesV2,lt as validateNativeDataResourceSurfaceV2,tn as validateWorkflowInstanceCommandPolicies,vs as workflowInstanceCommandDeadlineError,Ps as workflowInstanceTerminateCapabilityAllowed,en as workflowPolicyTimestamp};
|