openxiangda-contracts 2.25.0 → 2.27.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/browser.d.ts +1 -0
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +1 -0
- package/dist/browser.js.map +1 -1
- package/dist/cli.d.ts +38 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +11 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/native-compiler/compiler.d.ts.map +1 -1
- package/dist/native-compiler/compiler.js +9 -1
- package/dist/native-compiler/compiler.js.map +1 -1
- package/dist/native-compiler/index.cjs +4 -4
- 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 +4 -4
- package/dist/native-compiler/unique-keys.d.ts +102 -0
- package/dist/native-compiler/unique-keys.d.ts.map +1 -0
- package/dist/native-compiler/unique-keys.js +112 -0
- package/dist/native-compiler/unique-keys.js.map +1 -0
- 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/schemas.d.ts +189 -797
- package/dist/schemas.d.ts.map +1 -1
- package/dist/schemas.js +12 -280
- package/dist/schemas.js.map +1 -1
- package/dist/types.d.ts +21 -6
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +2 -5
- package/dist/types.js.map +1 -1
- package/dist/validation.d.ts.map +1 -1
- package/dist/validation.js +9 -0
- package/dist/validation.js.map +1 -1
- package/package.json +1 -1
- package/dist/studio.d.ts +0 -140
- package/dist/studio.d.ts.map +0 -1
- package/dist/studio.js +0 -23
- package/dist/studio.js.map +0 -1
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
"use strict";var To=Object.create;var ze=Object.defineProperty;var No=Object.getOwnPropertyDescriptor;var go=Object.getOwnPropertyNames;var Co=Object.getPrototypeOf,bo=Object.prototype.hasOwnProperty;var Oo=(e,t)=>{for(var n in t)ze(e,n,{get:t[n],enumerable:!0})},rn=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of go(t))!bo.call(e,s)&&s!==n&&ze(e,s,{get:()=>t[s],enumerable:!(o=No(t,s))||o.enumerable});return e};var Ro=(e,t,n)=>(n=e!=null?To(Co(e)):{},rn(t||!e||!e.__esModule?ze(n,"default",{value:e,enumerable:!0}):n,e)),$o=e=>rn(ze({},"__esModule",{value:!0}),e);var tr={};Oo(tr,{DATA_AUDIT_METADATA_FIELDS:()=>ht,DATA_EVENT_TYPES_V2:()=>ut,DATA_SYSTEM_SORT_FIELD_CODES:()=>pn,NATIVE_CONFIGURATION_VALIDATOR_DIGEST:()=>er,NATIVE_CONTRACT_CAPACITY_V2:()=>q,NATIVE_DATA_POLICY_EXPRESSION_MAX_CLAUSES:()=>Fr,NATIVE_DATA_POLICY_EXPRESSION_MAX_DEPTH:()=>yr,NATIVE_DATA_POLICY_EXPRESSION_MAX_GROUP_ITEMS:()=>Vr,NATIVE_DATA_POLICY_EXPRESSION_MAX_LEAVES:()=>wr,NATIVE_DATA_POLICY_EXPRESSION_MAX_OCCURRENCES:()=>Pr,NATIVE_DATA_QUERY_OPERATORS_V2:()=>In,NativeConfigurationCompilerError:()=>_t,NativeDataFieldContractV2Error:()=>ce,NativeDataPolicyExpressionV2Error:()=>Fe,NativeDecimalLifecycleContractError:()=>Oe,NativeEventActionContractError:()=>lt,NativeScopeSourceFieldPathV2Error:()=>ct,OPENXIANGDA_NATIVE_DATA_FIELD_TYPES_V2:()=>fn,OPENXIANGDA_NATIVE_DATA_SURFACE_KEYS_V2:()=>me,OPENXIANGDA_NATIVE_DRAFT_STATE_KEYS_V2:()=>et,OPENXIANGDA_NATIVE_SYSTEM_FIELDS_V2:()=>Ke,OPENXIANGDA_NATIVE_SYSTEM_FIELD_MAP_V2:()=>Do,WORKFLOW_EVENT_TYPES_V2:()=>ft,compileNativeApplicationConfiguration:()=>ci,compileNativeEventAction:()=>Gt,compileNativeEventCapturePlansV2:()=>io,compileRequiredPlatformCapabilitiesV3:()=>so,hasDataAuditReadPolicy:()=>St,isDataAuditMetadataField:()=>Se,isDataSystemSortField:()=>Dt,isNativeDataQueryOperatorV2:()=>Mo,isNativeMultiValueFieldV2:()=>ke,materializeNativeDataQueryPathTypesV2:()=>Fs,nativeDataPolicyExpressionLeavesV2:()=>Be,nativeDataPolicyExpressionToCnfV2:()=>Kt,nativeDataQueryPathPlanV2:()=>Ps,nativeFieldAggregatePlanV2:()=>qo,nativeFieldColumnDefinitionV2:()=>ds,nativeFieldDefaultSqlV2:()=>ls,nativeFieldHasDefaultV2:()=>fs,nativeFieldIndexStatementsV2:()=>As,nativeFieldRequiresCreateInputV2:()=>xe,nativeFieldSequenceGrantStatementsV2:()=>Es,nativeFieldSequenceOwnershipStatementsV2:()=>ps,nativeFieldSequenceStatementsV2:()=>_s,nativeFieldSupportsFilterV2:()=>Pt,nativeFieldSupportsOperatorV2:()=>Go,nativeFieldSupportsSearchV2:()=>Qe,nativeFieldSupportsSortV2:()=>ye,nativeOperatorsForFieldV2:()=>Ft,nativePhysicalFieldV2:()=>hn,nativePhysicalFieldsV2:()=>cs,nativePhysicalObjectNameV2:()=>Ne,nativeScopeSourceFieldValueV2:()=>bs,nativeScopeSourceGrantPathSupportedV2:()=>Wt,nativeScopeSourceSubjectPathSupportedV2:()=>dt,nativeSubtableConstraintStatementsV2:()=>Is,parseDecimalReservationLifecycle:()=>it,parseNativeDataFieldsV2:()=>He,parseNativeDataResourceInvariantsV2:()=>$t,projectNativeDataResourceViewV2:()=>nt,quoteNativeIdentifierV2:()=>ne,resolveNativeScopeSourceFieldPathV2:()=>we,validateDecimalReservationLifecycles:()=>Bt,validateNativeDataDraftStateV2:()=>Lt,validateNativeDataResourceReferencesV2:()=>Rt,validateNativeDataResourceSurfaceV2:()=>tt,validateWorkflowInstanceCommandPolicies:()=>Yt,workflowInstanceCommandDeadlineError:()=>ks,workflowInstanceTerminateCapabilityAllowed:()=>Ls,workflowPolicyTimestamp:()=>zt});module.exports=$o(tr);var an=require("node:crypto");function ho(e){if(!e||typeof e!="object")return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function gt(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,s)=>gt(o,`${t}[${s}]`)).join(",")}]`;if(ho(e))return`{${Object.keys(e).filter(s=>e[s]!==void 0).sort((s,r)=>s===r?0:s<r?-1:1).map(s=>`${JSON.stringify(s)}:${gt(e[s],`${t}.${s}`)}`).join(",")}}`;let n=e instanceof Date?"Date":e?.constructor?.name||typeof e;throw new TypeError(`Value is not JSON serializable: ${t} (${n})`)}function Q(e){return gt(e,"$")}function ee(e){return(0,an.createHash)("sha256").update(Q(e)).digest("hex")}var un=/^[A-Za-z][A-Za-z0-9_]{0,62}$/,Ot=/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/,fn=["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"],So=new Set(fn),_n=new Set(["option.multiple","cascade.multiple","user.multiple","department.multiple","resource-ref.multiple","file","image","subtable"]),cn=new Set(["option.single","option.multiple","cascade.single","cascade.multiple"]),dn=new Set(["resource-ref.single","resource-ref.multiple"]),Ke=[{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}],Do=new Map(Ke.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 ke(e){return _n.has(e)}function xe(e,t={}){return e.type!=="serial-number"&&t.system!==!0&&e.nullable===!1&&(!ke(e.type)||t.requiredHint===!0)}function He(e,t,n=500){Array.isArray(e)||S("NATIVE_ARRAY_REQUIRED",t),e.length===0&&S("NATIVE_DATA_FIELDS_REQUIRED",t),e.length>n&&S("NATIVE_ARRAY_LIMIT_EXCEEDED",t);let o=new Set;return e.map((s,r)=>{let a=`${t}/${r}`,i=ie(s,a);ae(i,["code","type","nullable","indexed","options","source","maxLength","precision","scale","exactDecimal","min","max","rangeBoundary","timePrecision","file","serial","subtable"],a);let c=de(i.code,`${a}/code`,63);un.test(c)||S("NATIVE_FIELD_CODE_INVALID",`${a}/code`),o.has(c)&&S("NATIVE_DATA_FIELD_DUPLICATE",`${a}/code`),o.add(c);let _=de(i.type,`${a}/type`,32);So.has(_)||S("NATIVE_DATA_FIELD_TYPE_INVALID",`${a}/type`);let p=_,d=bt(i.nullable,`${a}/nullable`),u=bt(i.indexed,`${a}/indexed`);d===!0&&_n.has(p)&&S("NATIVE_DATA_MULTI_FIELD_NULLABLE_INVALID",`${a}/nullable`);let E=wo(i.options,p,a),l=Fo(i.source,p,a),A=vo(i,p,a),T=bt(i.exactDecimal,`${a}/exactDecimal`);T!==void 0&&p!=="number.decimal"&&S("NATIVE_DATA_FIELD_EXACT_DECIMAL_TYPE_INVALID",`${a}/exactDecimal`);let m=yo(i.rangeBoundary,p,a),N=Lo(i.file,p,a),b=ko(i.serial,p,a),R=xo(i.subtable,p,a);return{code:c,type:p,...d===void 0?{}:{nullable:d},...u===void 0?{}:{indexed:u},...E?{options:E}:{},...l?{source:l}:{},...A,...T===void 0?{}:{exactDecimal:T},...m?{rangeBoundary:m}:{},...N?{file:N}:{},...b?{serial:b}:{},...R?{subtable:R}:{}}})}function yo(e,t,n){let o=`${n}/rangeBoundary`;if(!(t==="date-range"||t==="datetime-range")){e!==void 0&&S("NATIVE_DATA_FIELD_RANGE_BOUNDARY_TYPE_INVALID",o);return}return e!=="closed"&&e!=="half-open"&&S("NATIVE_DATA_FIELD_RANGE_BOUNDARY_REQUIRED",o),e}function Rt(e,t){Array.isArray(e)||S("NATIVE_ARRAY_REQUIRED",t);let n=new Map;e.forEach((o,s)=>{let r=`${t}/${s}`,a=ie(o,r),i=de(a.code,`${r}/code`,64);(!Ot.test(i)||n.has(i))&&S("NATIVE_RESOURCE_CODE_INVALID",`${r}/code`);let c=ie(a.schema,`${r}/schema`);n.set(i,{pointer:r,fields:He(c.fields,`${r}/schema/fields`)})});for(let[o,s]of n){let r=new Map(s.fields.map(i=>[i.code,i]));s.fields.filter(i=>i.type==="subtable").reduce((i,c)=>i+(c.subtable?.maxRows??20),0)>49&&S("NATIVE_DATA_FIELD_SUBTABLE_AGGREGATE_MAX_ROWS_EXCEEDED",`${s.pointer}/schema/fields`),s.fields.forEach((i,c)=>{let _=`${s.pointer}/schema/fields/${c}`;if(i.source&&Vo(i.source,r,n,`${_}/source`),i.subtable){let p=n.get(i.subtable.resourceCode);(!p||i.subtable.resourceCode===o)&&S("NATIVE_DATA_FIELD_SUBTABLE_TARGET_MISSING",`${_}/subtable/resourceCode`);let d=p.fields.find(E=>E.code===i.subtable?.foreignKey);(!d||d.type!=="uuid"||d.nullable!==!1)&&S("NATIVE_DATA_FIELD_SUBTABLE_FOREIGN_KEY_INVALID",`${_}/subtable/foreignKey`);let u=p.fields.find(E=>E.code===i.subtable?.orderField);(!u||u.type!=="number.integer"||u.nullable!==!1)&&S("NATIVE_DATA_FIELD_SUBTABLE_ORDER_FIELD_INVALID",`${_}/subtable/orderField`)}})}}function $t(e,t,n){if(e===void 0)return[];(!Array.isArray(e)||e.length>20)&&S("NATIVE_DATA_RESOURCE_INVARIANTS_INVALID",n);let o=new Map(t.map(r=>[r.code,r])),s=new Set;return e.map((r,a)=>{let i=`${n}/${a}`,c=ie(r,i);ae(c,["code","message","expression"],i);let _=de(c.code,`${i}/code`,128);(!/^[a-z][a-z0-9]*(?:[._-][a-z0-9]+)*$/.test(_)||s.has(_))&&S("NATIVE_DATA_RESOURCE_INVARIANT_CODE_INVALID",`${i}/code`),s.add(_);let p=qe(c.message,`${i}/message`,500);p!==void 0&&p.length===0&&S("NATIVE_DATA_RESOURCE_INVARIANT_MESSAGE_INVALID",`${i}/message`);let d=ie(c.expression,`${i}/expression`);if(d.kind==="nonBlankTextWhenOption"){ae(d,["kind","optionField","optionValue","textField"],`${i}/expression`);let N=_e(d.optionField,`${i}/expression/optionField`),b=_e(d.textField,`${i}/expression/textField`),R=de(d.optionValue,`${i}/expression/optionValue`,128),g=o.get(N),C=o.get(b);return(!g||!C)&&S("NATIVE_DATA_RESOURCE_INVARIANT_FIELD_UNKNOWN",`${i}/expression`),(g.type!=="option.single"||!["text.short","text.long"].includes(C.type)||!g.options?.some(D=>D.value===R))&&S("NATIVE_DATA_RESOURCE_INVARIANT_FIELD_TYPES_INVALID",`${i}/expression`),{code:_,...p===void 0?{}:{message:p},expression:{kind:"nonBlankTextWhenOption",optionField:N,optionValue:R,textField:b}}}ae(d,["leftField","operator","rightField"],`${i}/expression`);let u=_e(d.leftField,`${i}/expression/leftField`),E=_e(d.rightField,`${i}/expression/rightField`),l=o.get(u),A=o.get(E);(!l||!A)&&S("NATIVE_DATA_RESOURCE_INVARIANT_FIELD_UNKNOWN",`${i}/expression`),l.type===A.type||["number.integer","number.decimal"].includes(l.type)&&["number.integer","number.decimal"].includes(A.type)||S("NATIVE_DATA_RESOURCE_INVARIANT_FIELD_TYPES_INVALID",`${i}/expression`);let m=String(d.operator);return["eq","neq","gt","gte","lt","lte"].includes(m)||S("NATIVE_DATA_RESOURCE_INVARIANT_OPERATOR_INVALID",`${i}/expression/operator`),!["eq","neq"].includes(m)&&!["number.integer","number.decimal","date","time","datetime","text.short","text.long","text.rich","serial-number","uuid"].includes(l.type)&&S("NATIVE_DATA_RESOURCE_INVARIANT_FIELD_TYPES_INVALID",`${i}/expression`),{code:_,...p===void 0?{}:{message:p},expression:{leftField:u,operator:m,rightField:E}}})}function Vo(e,t,n,o){let s=n.get(e.resourceCode);s||S("NATIVE_DATA_FIELD_SOURCE_TARGET_MISSING",`${o}/resourceCode`);let r=new Map(s.fields.map(i=>[i.code,i])),a=r.get(e.labelField);(!a||!["text.short","text.long"].includes(a.type))&&S("NATIVE_DATA_FIELD_SOURCE_LABEL_INVALID",`${o}/labelField`);for(let i of["searchFields","descriptionFields","snapshotFields"])for(let c of e[i]||[])r.has(c)||S("NATIVE_DATA_FIELD_SOURCE_FIELD_MISSING",`${o}/${i}`);for(let[i,c]of(e.filters||[]).entries())r.has(c.field)||S("NATIVE_DATA_FIELD_SOURCE_FILTER_FIELD_MISSING",`${o}/filters/${i}/field`),"binding"in c&&!t.has(c.binding.field)&&S("NATIVE_DATA_FIELD_SOURCE_BINDING_FIELD_MISSING",`${o}/filters/${i}/binding/field`)}function wo(e,t,n){let o=`${n}/options`;if(e===void 0){cn.has(t)&&S("NATIVE_DATA_FIELD_OPTIONS_REQUIRED",o);return}(!cn.has(t)||!Array.isArray(e))&&S("NATIVE_DATA_FIELD_OPTIONS_TYPE_INVALID",o),(e.length<1||e.length>100)&&S("NATIVE_DATA_FIELD_OPTIONS_INVALID",o);let s=0,r=(a,i,c)=>{c>5&&S("NATIVE_DATA_FIELD_OPTIONS_DEPTH_EXCEEDED",i);let _=new Set;return a.map((p,d)=>{s+=1,s>1e3&&S("NATIVE_DATA_FIELD_OPTIONS_COUNT_EXCEEDED",o);let u=`${i}/${d}`,E=ie(p,u);ae(E,["label","value","description","color","children"],u);let l=de(E.label,`${u}/label`,500),A=de(E.value,`${u}/value`,500);_.has(A)&&S("NATIVE_DATA_FIELD_OPTION_VALUE_DUPLICATE",`${u}/value`),_.add(A);let T=qe(E.description,`${u}/description`,2e3),m=qe(E.color,`${u}/color`,64),N;return E.children!==void 0&&((!t.startsWith("cascade.")||!Array.isArray(E.children))&&S("NATIVE_DATA_FIELD_OPTION_CHILDREN_INVALID",`${u}/children`),(E.children.length<1||E.children.length>100)&&S("NATIVE_DATA_FIELD_OPTION_CHILDREN_INVALID",`${u}/children`),N=r(E.children,`${u}/children`,c+1)),{label:l,value:A,...T===void 0?{}:{description:T},...m===void 0?{}:{color:m},...N?{children:N}:{}}})};return r(e,o,1)}function Fo(e,t,n){let o=`${n}/source`;if(e===void 0){dn.has(t)&&S("NATIVE_DATA_FIELD_SOURCE_REQUIRED",o);return}dn.has(t)||S("NATIVE_DATA_FIELD_SOURCE_TYPE_INVALID",o);let s=ie(e,o);ae(s,["kind","resourceCode","labelField","searchFields","descriptionFields","snapshotFields","filters","pageSize","loadMode"],o),s.kind!=="resource"&&S("NATIVE_DATA_FIELD_SOURCE_KIND_INVALID",`${o}/kind`);let r=de(s.resourceCode,`${o}/resourceCode`,64);Ot.test(r)||S("NATIVE_RESOURCE_CODE_INVALID",`${o}/resourceCode`);let a=_e(s.labelField,`${o}/labelField`),i=Ct(s.searchFields,`${o}/searchFields`,10),c=Ct(s.descriptionFields,`${o}/descriptionFields`,10),_=Ct(s.snapshotFields,`${o}/snapshotFields`,50),p=he(s.pageSize,`${o}/pageSize`,1,100),d;s.loadMode!==void 0&&(["search","all"].includes(String(s.loadMode))||S("NATIVE_DATA_FIELD_SOURCE_LOAD_MODE_INVALID",`${o}/loadMode`),d=s.loadMode);let u=Po(s.filters,`${o}/filters`);return{kind:"resource",resourceCode:r,labelField:a,...i?{searchFields:i}:{},...c?{descriptionFields:c}:{},..._?{snapshotFields:_}:{},...u?{filters:u}:{},...p===void 0?{}:{pageSize:p},...d?{loadMode:d}:{}}}function Po(e,t){if(e!==void 0)return(!Array.isArray(e)||e.length>20)&&S("NATIVE_DATA_FIELD_SOURCE_FILTERS_INVALID",t),e.map((n,o)=>{let s=`${t}/${o}`,r=ie(n,s),a=Object.prototype.hasOwnProperty.call(r,"value"),i=Object.prototype.hasOwnProperty.call(r,"binding");ae(r,a?["field","operator","value"]:["field","operator","binding"],s),a===i&&S("NATIVE_DATA_FIELD_SOURCE_FILTER_VALUE_INVALID",s);let c=_e(r.field,`${s}/field`);["eq","in"].includes(String(r.operator))||S("NATIVE_DATA_FIELD_SOURCE_FILTER_OPERATOR_INVALID",`${s}/operator`);let _=r.operator;if(a)return{field:c,operator:_,value:r.value};let p=ie(r.binding,`${s}/binding`);return ae(p,["kind","field"],`${s}/binding`),p.kind!=="field"&&S("NATIVE_DATA_FIELD_SOURCE_BINDING_KIND_INVALID",`${s}/binding/kind`),{field:c,operator:_,binding:{kind:"field",field:_e(p.field,`${s}/binding/field`)}}})}function vo(e,t,n){let o={};if(e.maxLength!==void 0&&(["text.short","text.long","text.rich"].includes(t)||S("NATIVE_DATA_FIELD_MAX_LENGTH_TYPE_INVALID",`${n}/maxLength`),o.maxLength=Ye(e.maxLength,`${n}/maxLength`,1,1e6)),(e.precision!==void 0||e.scale!==void 0)&&((t!=="number.decimal"||e.precision===void 0)&&S("NATIVE_DATA_FIELD_DECIMAL_CONFIG_INVALID",n),o.precision=Ye(e.precision,`${n}/precision`,1,1e3),o.scale=e.scale===void 0?0:Ye(e.scale,`${n}/scale`,0,o.precision)),e.min!==void 0||e.max!==void 0){["number.integer","number.decimal"].includes(t)||S("NATIVE_DATA_FIELD_NUMERIC_BOUNDS_TYPE_INVALID",n);let s=ln(e.min,`${n}/min`),r=ln(e.max,`${n}/max`);t==="number.integer"&&[s,r].some(a=>a!==void 0&&!Number.isSafeInteger(a))&&S("NATIVE_DATA_FIELD_NUMERIC_BOUNDS_INVALID",n),s!==void 0&&r!==void 0&&s>r&&S("NATIVE_DATA_FIELD_NUMERIC_BOUNDS_INVALID",n),s!==void 0&&(o.min=s),r!==void 0&&(o.max=r)}return e.timePrecision!==void 0&&((t!=="time"||!["minute","second"].includes(e.timePrecision))&&S("NATIVE_DATA_FIELD_TIME_PRECISION_INVALID",`${n}/timePrecision`),o.timePrecision=e.timePrecision),o}function Lo(e,t,n){if(e===void 0)return;let o=`${n}/file`;["file","image","signature"].includes(t)||S("NATIVE_DATA_FIELD_FILE_TYPE_INVALID",o);let s=ie(e,o);ae(s,["maxCount","maxSizeMb","accept"],o);let r=he(s.maxCount,`${o}/maxCount`,1,100);t==="signature"&&r!==void 0&&r!==1&&S("NATIVE_DATA_FIELD_SIGNATURE_COUNT_INVALID",`${o}/maxCount`);let a=he(s.maxSizeMb,`${o}/maxSizeMb`,1,1024),i;return s.accept!==void 0&&((!Array.isArray(s.accept)||s.accept.length>50)&&S("NATIVE_DATA_FIELD_FILE_ACCEPT_INVALID",`${o}/accept`),i=s.accept.map((c,_)=>de(c,`${o}/accept/${_}`,255)),new Set(i).size!==i.length&&S("NATIVE_DATA_FIELD_FILE_ACCEPT_INVALID",`${o}/accept`)),{...r===void 0?{}:{maxCount:r},...a===void 0?{}:{maxSizeMb:a},...i===void 0?{}:{accept:i}}}function ko(e,t,n){let o=`${n}/serial`;if(e===void 0){t==="serial-number"&&S("NATIVE_DATA_FIELD_SERIAL_REQUIRED",o);return}t!=="serial-number"&&S("NATIVE_DATA_FIELD_SERIAL_TYPE_INVALID",o);let s=ie(e,o);ae(s,["prefix","digits","start"],o);let r=qe(s.prefix,`${o}/prefix`,64),a=he(s.digits,`${o}/digits`,1,32),i=he(s.start,`${o}/start`,0,Number.MAX_SAFE_INTEGER);return{...r===void 0?{}:{prefix:r},...a===void 0?{}:{digits:a},...i===void 0?{}:{start:i}}}function xo(e,t,n){let o=`${n}/subtable`;if(e===void 0){t==="subtable"&&S("NATIVE_DATA_FIELD_SUBTABLE_REQUIRED",o);return}t!=="subtable"&&S("NATIVE_DATA_FIELD_SUBTABLE_TYPE_INVALID",o);let s=ie(e,o);ae(s,["resourceCode","foreignKey","orderField","maxRows"],o);let r=de(s.resourceCode,`${o}/resourceCode`,64);Ot.test(r)||S("NATIVE_RESOURCE_CODE_INVALID",`${o}/resourceCode`);let a=_e(s.foreignKey,`${o}/foreignKey`),i=_e(s.orderField,`${o}/orderField`);i===a&&S("NATIVE_DATA_FIELD_SUBTABLE_ORDER_FIELD_INVALID",`${o}/orderField`);let c=he(s.maxRows,`${o}/maxRows`,1,49);return{resourceCode:r,foreignKey:a,orderField:i,...c===void 0?{}:{maxRows:c}}}function Ct(e,t,n){if(e===void 0)return;(!Array.isArray(e)||e.length>n)&&S("NATIVE_DATA_FIELD_SOURCE_FIELDS_INVALID",t);let o=e.map((s,r)=>_e(s,`${t}/${r}`));return new Set(o).size!==o.length&&S("NATIVE_DATA_FIELD_SOURCE_FIELDS_INVALID",t),o}function _e(e,t){let n=de(e,t,63);return un.test(n)||S("NATIVE_FIELD_CODE_INVALID",t),n}function ie(e,t){return(!e||typeof e!="object"||Array.isArray(e))&&S("NATIVE_OBJECT_REQUIRED",t),e}function ae(e,t,n){let o=new Set(t);for(let s of Object.keys(e))o.has(s)||S("NATIVE_PROPERTY_UNKNOWN",`${n}/${s}`)}function de(e,t,n){return(typeof e!="string"||e.length===0||e.length>n)&&S("NATIVE_STRING_INVALID",t),e}function qe(e,t,n){if(e!==void 0)return(typeof e!="string"||e.length>n)&&S("NATIVE_STRING_INVALID",t),e}function bt(e,t){if(e!==void 0)return typeof e!="boolean"&&S("NATIVE_BOOLEAN_REQUIRED",t),e}function he(e,t,n,o){if(e!==void 0)return Ye(e,t,n,o)}function ln(e,t){if(e!==void 0)return(typeof e!="number"||!Number.isFinite(e))&&S("NATIVE_NUMBER_REQUIRED",t),e}function Ye(e,t,n,o){return(!Number.isSafeInteger(e)||Number(e)<n||Number(e)>o)&&S("NATIVE_INTEGER_OUT_OF_RANGE",t),Number(e)}function S(e,t){throw new ce(e,t)}var ht=["created_by","updated_by","created_at","updated_at"];function Se(e){return ht.includes(e)}function St(e){return ht.some(t=>Object.prototype.hasOwnProperty.call(e.fieldPolicies||{},t))}var pn=Ke.map(e=>e.code);function Dt(e){return pn.includes(e)}var In=["eq","neq","gt","gte","lt","lte","contains","startsWith","endsWith","in","between","has","hasAny","hasAll","overlaps","containedBy","jsonContains","isEmpty","isNotEmpty"],Uo=new Set(In);function Mo(e){return Uo.has(String(e))}var yt=["eq","neq","contains","startsWith","endsWith","in","isEmpty","isNotEmpty"],Ue=["eq","neq","gt","gte","lt","lte","between","in","isEmpty"],jo=["eq","neq","in","isEmpty"],Xe=["eq","neq","in","isEmpty","isNotEmpty"],De=["has","hasAny","hasAll","isEmpty","isNotEmpty"],En=["overlaps","contains","containedBy","isEmpty"],Vt=["jsonContains","isEmpty","isNotEmpty"],wt=["isEmpty","isNotEmpty"],Bo={"text.short":yt,"text.long":yt,"text.rich":yt,"number.integer":Ue,"number.decimal":Ue,boolean:jo,date:Ue,time:Ue,datetime:Ue,"date-range":En,"datetime-range":En,"option.single":Xe,"option.multiple":De,"cascade.single":De,"cascade.multiple":De,"user.single":Xe,"user.multiple":De,"department.single":Xe,"department.multiple":De,"resource-ref.single":Xe,"resource-ref.multiple":De,file:wt,image:wt,signature:wt,address:Vt,location:Vt,uuid:["eq","neq","in","isEmpty"],json:Vt,"serial-number":["eq","neq","in","contains","startsWith"],subtable:[]},Jo=new Set(["text.short","text.long","text.rich","option.single","user.single","department.single","resource-ref.single","serial-number"]),Wo=new Set(["option.multiple","cascade.single","cascade.multiple","user.multiple","department.multiple","resource-ref.multiple","file","image","signature","address","location","json","subtable"]);function Ft(e){return Bo[e]}function Go(e,t){return Ft(e).includes(t)}function Qe(e){return Jo.has(e)}function ye(e){return!Wo.has(e)}function Pt(e){return Ft(e).length>0}var An=new Set(["number.integer","number.decimal"]),mn=new Set(["text.short","text.long","number.integer","number.decimal","date","time","datetime","serial-number"]),zo=new Set([...mn,"boolean","uuid"]),Yo=new Set(["option.single","user.single","department.single","resource-ref.single"]);function qo(e,t){return t==="sum"||t==="avg"?An.has(e)?{valueExpression:"column",numericResult:!0}:null:t==="min"||t==="max"?mn.has(e)?{valueExpression:"column",numericResult:An.has(e)}:null:Yo.has(e)?{valueExpression:"snapshot-value",numericResult:!0}:zo.has(e)?{valueExpression:"column",numericResult:!0}:null}var et=["version","maxBytes","fields"];function Lt(e,t){if(e===void 0)return;let n=vt(e,t);Tn(n,et,t);let o=Ze(n.version,`${t}/version`,1,1e6),s=Ze(n.maxBytes,`${t}/maxBytes`,2,196608);(!o||!s)&&oe("NATIVE_DATA_DRAFT_STATE_SCHEMA_INVALID",t);let r=vt(n.fields,`${t}/fields`),a=Object.entries(r);(!a.length||a.length>50)&&oe("NATIVE_DATA_DRAFT_STATE_FIELDS_INVALID",`${t}/fields`);for(let[i,c]of a){let _=`${t}/fields/${i}`;/^[A-Za-z][A-Za-z0-9_]{0,62}$/.test(i)||oe("NATIVE_DATA_DRAFT_STATE_FIELD_CODE_INVALID",_);let p=vt(c,_),d=Nn(p.type,`${_}/type`,32),u=d==="string"?["type","required","maxLength","enum"]:d==="json.object"?["type","required","maxBytes"]:["type","required"];if(["string","number","integer","boolean","json.object"].includes(d)||oe("NATIVE_DATA_DRAFT_STATE_FIELD_TYPE_INVALID",`${_}/type`),Tn(p,u,_),Ho(p.required,`${_}/required`),d==="string"){let E=Ze(p.maxLength,`${_}/maxLength`,1,196608);E||oe("NATIVE_DATA_DRAFT_STATE_FIELD_INVALID",_),p.enum!==void 0&&Ko(p.enum,`${_}/enum`,100,!1).some(A=>A.length>E)&&oe("NATIVE_DATA_DRAFT_STATE_FIELD_INVALID",`${_}/enum`)}else if(d==="json.object"){let E=Ze(p.maxBytes,`${_}/maxBytes`,2,65536);(!E||E>s)&&oe("NATIVE_DATA_DRAFT_STATE_FIELD_INVALID",_)}}}function Ko(e,t,n,o){(!Array.isArray(e)||!o&&e.length===0||e.length>n)&&oe("NATIVE_DATA_SURFACE_STRING_ARRAY_INVALID",t);let s=e.map((r,a)=>Nn(r,`${t}/${a}`,255));return new Set(s).size!==s.length&&oe("NATIVE_DATA_SURFACE_STRING_ARRAY_INVALID",t),s}function vt(e,t){return(!e||typeof e!="object"||Array.isArray(e))&&oe("NATIVE_OBJECT_REQUIRED",t),e}function Tn(e,t,n){let o=new Set(t);for(let s of Object.keys(e))o.has(s)||oe("NATIVE_PROPERTY_UNKNOWN",`${n}/${s}`)}function Nn(e,t,n){return(typeof e!="string"||e.length===0||e.length>n)&&oe("NATIVE_STRING_INVALID",t),e}function Ho(e,t){e!==void 0&&typeof e!="boolean"&&oe("NATIVE_BOOLEAN_REQUIRED",t)}function Ze(e,t,n,o){return(!Number.isSafeInteger(e)||Number(e)<n||Number(e)>o)&&oe("NATIVE_INTEGER_INVALID",t),Number(e)}function oe(e,t){throw new ce(e,t)}var Xo=500,me={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","exactDecimal","min","max","rangeBoundary","maxCount","maxSizeMb","accept","options","list","searchable","sortable","source","timePrecision","serial","subtable"],list:["actions","fieldOrder","defaultPageSize","searchableFields","filterFields","defaultSort"],defaultSort:["field","order"],form:["layout","fieldOrder","draftState"],detail:["layout","fieldOrder"],layout:["layout","fieldOrder","draftState"],draftState:et,mobile:["enabled"]},Qo={"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 tt(e,t,n){if(e===void 0)return;let o=te(e,n);pe(o,me.surface,n);let s=o.mutationOwner===void 0?"native":Te(o.mutationOwner,`${n}/mutationOwner`,16);["native","action","readonly","workflow"].includes(s)||v("NATIVE_DATA_SURFACE_MUTATION_OWNER_INVALID",`${n}/mutationOwner`);let r=o.generated===void 0?{}:te(o.generated,`${n}/generated`);pe(r,me.generated,`${n}/generated`);for(let c of me.generated)xt(r[c],`${n}/generated/${c}`);if(s!=="native")for(let c of["create","update","delete"])r[c]===!0&&v("NATIVE_DATA_SURFACE_MUTATION_OWNER_CONFLICT",`${n}/generated/${c}`);let a=new Map(t.map(c=>[c.code,c])),i=te(o.fields,`${n}/fields`);for(let c of Object.keys(i))a.has(c)||v("NATIVE_DATA_SURFACE_FIELD_MISSING",`${n}/fields/${c}`);for(let c of t)Object.prototype.hasOwnProperty.call(i,c.code)||v("NATIVE_DATA_SURFACE_FIELD_REQUIRED",`${n}/fields/${c.code}`),es(i[c.code],c,`${n}/fields/${c.code}`);for(let c of["create","update"]){let _=r[c]??s==="native",p=t.some(d=>{let u=te(i[d.code],`${n}/fields/${d.code}`);return Cn(d,u,c)});_&&!p&&v("NATIVE_DATA_SURFACE_WRITABLE_FIELDS_REQUIRED",`${n}/generated/${c}`)}if(ts(o.list,a,`${n}/list`),gn(o.form,a,`${n}/form`,"form"),gn(o.detail,a,`${n}/detail`,"detail"),o.mobile!==void 0){let c=te(o.mobile,`${n}/mobile`);pe(c,me.mobile,`${n}/mobile`),xt(c.enabled,`${n}/mobile/enabled`)}Zo(o,t,n)}function nt(e,t){let n=e.views?.find(s=>s.code===t);n||v("NATIVE_DATA_VIEW_NOT_FOUND",`/surface/views/${t}`);let o=new Map((n.sections||[]).flatMap(s=>s.fields.map(r=>[r,s.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(([s,r])=>{let a={...r};delete a.section;let i=o.get(s);return[s,{...a,...i?{section:i}:{},list:n.list.fieldOrder.includes(s)}]}))}}function Zo(e,t,n){if(e.views===void 0)return;(!Array.isArray(e.views)||e.views.length>20)&&v("NATIVE_DATA_VIEWS_LIMIT_INVALID",`${n}/views`);let o=new Set;e.views.forEach((s,r)=>{let a=`${n}/views/${r}`,i=te(s,a);pe(i,["code","name","generated","list","form","detail","mobile","sections"],a);let c=Te(i.code,`${a}/code`,64);(!/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/.test(c)||o.has(c))&&v("NATIVE_DATA_VIEW_CODE_INVALID",`${a}/code`),o.add(c),Te(i.name,`${a}/name`,255),te(i.generated,`${a}/generated`),te(i.mobile,`${a}/mobile`);for(let p of["list","detail","create","update","delete"])typeof i.generated[p]!="boolean"&&v("NATIVE_DATA_VIEW_OPERATION_INVALID",`${a}/generated/${p}`);typeof i.mobile.enabled!="boolean"&&v("NATIVE_DATA_VIEW_MOBILE_INVALID",`${a}/mobile/enabled`);for(let p of["list","form","detail"]){let d=te(i[p],`${a}/${p}`),u=Ve(d.fieldOrder,`${a}/${p}/fieldOrder`,500,!0);for(let E of u){let l=e.fields[E];(!l||(l.hidden??l.system)===!0)&&v("NATIVE_DATA_VIEW_FIELD_INVALID",`${a}/${p}/fieldOrder`)}}if(i.sections!==void 0){(!Array.isArray(i.sections)||i.sections.length>100)&&v("NATIVE_DATA_VIEW_SECTIONS_INVALID",`${a}/sections`);let p=new Set;i.sections.forEach((d,u)=>{let E=`${a}/sections/${u}`,l=te(d,E);pe(l,["title","fields"],E),Te(l.title,`${E}/title`,255);for(let A of Ve(l.fields,`${E}/fields`,100,!0)){let T=e.fields[A];(!T||(T.hidden??T.system)===!0||p.has(A))&&v("NATIVE_DATA_VIEW_FIELD_INVALID",`${E}/fields`),p.add(A)}})}let _=nt(e,c);if(tt(_,t,a),i.generated.create!==!1&&(e.mutationOwner||"native")==="native")for(let p of t)xe(p,e.fields[p.code])&&Cn(p,e.fields[p.code],"create")&&!i.form.fieldOrder.includes(p.code)&&v("NATIVE_DATA_VIEW_CREATE_REQUIRED_FIELD_MISSING",`${a}/form/fieldOrder`)})}function Cn(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 es(e,t,n){let o=te(e,n);pe(o,me.field,n),Te(o.label,`${n}/label`,500),o.type!==t.type&&v("NATIVE_DATA_SURFACE_FIELD_TYPE_MISMATCH",`${n}/type`);let s=Te(o.widget,`${n}/widget`,64);Qo[t.type].includes(s)||v("NATIVE_DATA_SURFACE_WIDGET_INCOMPATIBLE",`${n}/widget`),ss(o.section,`${n}/section`,255);for(let r of["requiredHint","system","hidden","list","searchable","sortable"])xt(o[r],`${n}/${r}`);o.searchable===!0&&!Qe(t.type)&&v("NATIVE_DATA_SURFACE_SEARCH_UNSUPPORTED",`${n}/searchable`),o.sortable===!0&&!ye(t.type)&&v("NATIVE_DATA_SURFACE_SORT_UNSUPPORTED",`${n}/sortable`);for(let r of["readCapabilities","createCapabilities","updateCapabilities"])Ve(o[r],`${n}/${r}`,100,!0);if(o.maxCount!==void 0&&(!Number.isSafeInteger(o.maxCount)||Number(o.maxCount)<1||Number(o.maxCount)>100)&&v("NATIVE_DATA_SURFACE_MAX_COUNT_INVALID",`${n}/maxCount`),o.maxSizeMb!==void 0&&(!Number.isSafeInteger(o.maxSizeMb)||Number(o.maxSizeMb)<1||Number(o.maxSizeMb)>1024)&&v("NATIVE_DATA_SURFACE_MAX_SIZE_INVALID",`${n}/maxSizeMb`),o.accept!==void 0){let r=Array.isArray(o.accept)?o.accept:[o.accept];Ve(r,`${n}/accept`,50,!1)}for(let r of["maxLength","precision","scale","exactDecimal","min","max","rangeBoundary","options","source","timePrecision","serial","subtable"])ns(o,t,r,n);os(o,t,n)}function ts(e,t,n){if(e===void 0)return;let o=te(e,n);if(pe(o,me.list,n),o.actions!==void 0){let s=te(o.actions,`${n}/actions`);pe(s,["import","export"],`${n}/actions`);for(let r of["import","export"])s[r]!==void 0&&typeof s[r]!="boolean"&&v("NATIVE_DATA_SURFACE_LIST_ACTION_INVALID",`${n}/actions/${r}`)}if(o.fieldOrder!==void 0)for(let s of Ve(o.fieldOrder,`${n}/fieldOrder`,500,!0))t.has(s)||v("NATIVE_DATA_SURFACE_LIST_FIELD_INVALID",`${n}/fieldOrder`);o.defaultPageSize!==void 0&&(!Number.isSafeInteger(o.defaultPageSize)||Number(o.defaultPageSize)<1||Number(o.defaultPageSize)>200)&&v("NATIVE_DATA_SURFACE_PAGE_SIZE_INVALID",`${n}/defaultPageSize`);for(let[s,r]of[["searchableFields",Qe],["filterFields",Pt]]){if(o[s]===void 0)continue;let a=Ve(o[s],`${n}/${s}`,100,!0);for(let i of a){let c=t.get(i);(!c||!r(c.type))&&v("NATIVE_DATA_SURFACE_LIST_FIELD_INVALID",`${n}/${s}`)}}if(o.defaultSort!==void 0){let s=te(o.defaultSort,`${n}/defaultSort`);pe(s,me.defaultSort,`${n}/defaultSort`);let r=Te(s.field,`${n}/defaultSort/field`,63),a=t.get(r);!Dt(r)&&(!a||!ye(a.type))&&v("NATIVE_DATA_SURFACE_SORT_UNSUPPORTED",`${n}/defaultSort/field`),s.order!==void 0&&!["asc","desc"].includes(s.order)&&v("NATIVE_DATA_SURFACE_SORT_ORDER_INVALID",`${n}/defaultSort/order`)}}function gn(e,t,n,o){if(e===void 0)return;let s=te(e,n);if(pe(s,me[o],n),s.layout!==void 0&&!["flat","sections"].includes(s.layout)&&v("NATIVE_DATA_SURFACE_LAYOUT_INVALID",`${n}/layout`),s.fieldOrder!==void 0){let r=`${n}/fieldOrder`;(!Array.isArray(s.fieldOrder)||s.fieldOrder.length>t.size||s.fieldOrder.length>Xo)&&v("NATIVE_DATA_SURFACE_FIELD_ORDER_INVALID",r);let a=s.fieldOrder.map((i,c)=>Te(i,`${r}/${c}`,63));new Set(a).size!==a.length&&v("NATIVE_DATA_SURFACE_FIELD_ORDER_INVALID",r),a.forEach((i,c)=>{t.has(i)||v("NATIVE_DATA_SURFACE_FIELD_ORDER_FIELD_MISSING",`${r}/${c}`)})}o==="form"&&Lt(s.draftState,`${n}/draftState`)}function ns(e,t,n,o){e[n]===void 0&&t[n]===void 0||((e[n]===void 0||t[n]===void 0)&&v("NATIVE_DATA_SURFACE_FIELD_PROJECTION_MISMATCH",`${o}/${n}`),Q(e[n])!==Q(t[n])&&v("NATIVE_DATA_SURFACE_FIELD_PROJECTION_MISMATCH",`${o}/${n}`))}function os(e,t,n){let o=t.file||{},s={...e.maxCount===void 0?{}:{maxCount:e.maxCount},...e.maxSizeMb===void 0?{}:{maxSizeMb:e.maxSizeMb},...e.accept===void 0?{}:{accept:kt(e.accept)}};for(let r of["maxCount","maxSizeMb","accept"]){if(s[r]===void 0&&o[r]===void 0)continue;(s[r]===void 0||o[r]===void 0)&&v("NATIVE_DATA_SURFACE_FIELD_PROJECTION_MISMATCH",`${n}/${r}`);let a=r==="accept"?kt(s[r]):s[r],i=r==="accept"?kt(o[r]):o[r];Q(a)!==Q(i)&&v("NATIVE_DATA_SURFACE_FIELD_PROJECTION_MISMATCH",`${n}/${r}`)}}function kt(e){return(Array.isArray(e)?[...e]:[e]).sort((t,n)=>{let o=String(t),s=String(n);return o===s?0:o<s?-1:1})}function Ve(e,t,n,o){(!Array.isArray(e)||!o&&e.length===0||e.length>n)&&v("NATIVE_DATA_SURFACE_STRING_ARRAY_INVALID",t);let s=e.map((r,a)=>Te(r,`${t}/${a}`,255));return new Set(s).size!==s.length&&v("NATIVE_DATA_SURFACE_STRING_ARRAY_INVALID",t),s}function te(e,t){return(!e||typeof e!="object"||Array.isArray(e))&&v("NATIVE_OBJECT_REQUIRED",t),e}function pe(e,t,n){let o=new Set(t);for(let s of Object.keys(e))o.has(s)||v("NATIVE_PROPERTY_UNKNOWN",`${n}/${s}`)}function Te(e,t,n){return(typeof e!="string"||e.length===0||e.length>n)&&v("NATIVE_STRING_INVALID",t),e}function ss(e,t,n){e!==void 0&&(typeof e!="string"||e.length>n)&&v("NATIVE_STRING_INVALID",t)}function xt(e,t){e!==void 0&&typeof e!="boolean"&&v("NATIVE_BOOLEAN_REQUIRED",t)}function v(e,t){throw new ce(e,t)}var Oe=class extends Error{constructor(n,o){super(`\u91D1\u989D\u751F\u547D\u5468\u671F\u58F0\u660E\u65E0\u6548\uFF1A${o}\uFF08${n}\uFF09`);this.pointer=n;this.reason=o}pointer;reason;code="NATIVE_DECIMAL_LIFECYCLE_INVALID"},jt=["parentTransitions","childTransitions","fulfilledChildStatuses","lockedParentStatuses"],bn=["amountFieldCode","currencyFieldCode","relationFieldCode","parentFieldCode","rootFieldCode","statusFieldCode","parentRelationValue","childRelationValue"],st=e=>!!(e&&typeof e=="object"&&!Array.isArray(e)),ot=e=>Array.isArray(e)?e.filter(st):[],Ee=(e,t)=>{throw new Oe(e,t)},Ut=e=>typeof e=="string"&&/^[A-Za-z0-9._:-]{1,128}$/.test(e),Mt=(e,t)=>e<t?-1:e>t?1:0;function it(e,t="/decimalReservationLifecycle"){if(e===void 0)return;if(!st(e)||Object.keys(e).some(s=>!jt.includes(s))||jt.some(s=>!Object.prototype.hasOwnProperty.call(e,s)))return Ee(t,"\u5FC5\u987B\u5B8C\u6574\u58F0\u660E\u56DB\u9879\u89C4\u5219\uFF0C\u4E0D\u80FD\u5305\u542B\u672A\u77E5\u5C5E\u6027");let n=s=>{let r=e[s];if(!Array.isArray(r)||r.length>64)return Ee(`${t}/${s}`,"\u72B6\u6001\u8FB9\u6700\u591A 64 \u6761");let a=new Set;return r.map((i,c)=>{let _=`${t}/${s}/${c}`;if(!st(i)||Object.keys(i).some(d=>d!=="from"&&d!=="to")||!Ut(i.from)||!Ut(i.to)||i.from===i.to)return Ee(_,"\u72B6\u6001\u8FB9\u5FC5\u987B\u5305\u542B\u4E0D\u540C\u7684\u6709\u6548 from/to");let p=JSON.stringify([i.from,i.to]);return a.has(p)?Ee(_,"\u72B6\u6001\u8FB9\u4E0D\u80FD\u91CD\u590D"):(a.add(p),{from:i.from,to:i.to})}).sort((i,c)=>Mt(i.from,c.from)||Mt(i.to,c.to))},o=s=>{let r=e[s];return!Array.isArray(r)||r.length<1||r.length>16||r.some(a=>!Ut(a))||new Set(r).size!==r.length?Ee(`${t}/${s}`,"\u72B6\u6001\u96C6\u5408\u5FC5\u987B\u5305\u542B 1 \u5230 16 \u4E2A\u4E0D\u91CD\u590D\u7684\u6709\u6548\u72B6\u6001"):[...r].sort(Mt)};return{parentTransitions:n("parentTransitions"),childTransitions:n("childTransitions"),fulfilledChildStatuses:o("fulfilledChildStatuses"),lockedParentStatuses:o("lockedParentStatuses")}}function Bt(e,t,n="/config/data/resources"){ot(e).forEach((o,s)=>{let r=`${n}/${s}/decimalReservationLifecycle`,a=it(o.decimalReservationLifecycle,r);if(!a)return;let i=ot(t).map(d=>d.platformAccess?.decimalReservation).filter(d=>st(d)&&d.resourceCode===o.code),c=i.find(d=>d.mode==="reserve");if(!c)return Ee(r,"\u9700\u8981\u540C\u8D44\u6E90\u5DF2\u58F0\u660E\u7684 reserve \u52A8\u4F5C\u6620\u5C04");if(bn.some(d=>typeof c[d]!="string")||i.some(d=>bn.some(u=>d[u]!==c[u])))return Ee(r,"\u540C\u8D44\u6E90\u989D\u5EA6\u52A8\u4F5C\u7684\u5B57\u6BB5\u6620\u5C04\u5FC5\u987B\u4E00\u81F4");let _=ot(o.schema?.fields).find(d=>d.code===c.statusFieldCode);if(_?.type!=="option.single")return Ee(r,"\u989D\u5EA6\u72B6\u6001\u5B57\u6BB5\u5FC5\u987B\u4E3A option.single");let p=new Set(ot(_.options).map(d=>d.value));for(let d of jt)if((d==="parentTransitions"||d==="childTransitions"?a[d].flatMap(E=>[E.from,E.to]):a[d]).some(E=>!p.has(E)))return Ee(`${r}/${d}`,"\u72B6\u6001\u5FC5\u987B\u6765\u81EA\u989D\u5EA6\u72B6\u6001\u5B57\u6BB5\u7684\u9009\u9879");if(i.some(d=>d.mode==="reserve"&&Array.isArray(d.eligibleParentStatuses)&&d.eligibleParentStatuses.some(u=>a.lockedParentStatuses.includes(String(u)))))return Ee(`${r}/lockedParentStatuses`,"\u9501\u5B9A\u7236\u72B6\u6001\u4E0D\u80FD\u5141\u8BB8\u65B0\u9884\u7559")})}var Rn=require("crypto");var Jt=new Set(["option.single","user.single","department.single","resource-ref.single"]),is=new Set(["option.multiple","cascade.single","cascade.multiple","user.multiple","department.multiple","resource-ref.multiple","address","location","json"]),$n=new Set(["option.multiple","cascade.single","cascade.multiple","user.multiple","department.multiple","resource-ref.multiple","file","image"]),rs=new Set(["option.single","user.single","department.single","resource-ref.single","signature","address","location"]),as=new Set([...Jt,...$n,"signature","address","location","json"]);function cs(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=>hn(o,n.has(o.code))).sort((o,s)=>o.code.localeCompare(s.code))}function hn(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:Ts(e),index:ms(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 ds(e,t){if(t.type==="subtable")return null;let n=ne(t.code),o=Sn(e,t),s=[o?` DEFAULT ${o}`:"",Ns(n,t),us(n,t)].join("");return`${n} ${t.storage}${s}`}function ls(e,t){return Sn(e,t)}function us(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 fs(e){return e.type==="serial-number"||ke(e.type)&&e.type!=="subtable"}function _s(e,t){return t.filter(n=>n.type==="serial-number").map(n=>{let o=at(e,n.code),s=n.serial?.start??1;return`CREATE SEQUENCE IF NOT EXISTS ${o} AS bigint MINVALUE ${s} START WITH ${s} CACHE 1`})}function ps(e,t){let n=rt(e);return t.filter(o=>o.type==="serial-number").map(o=>`ALTER SEQUENCE ${at(e,o.code)} OWNED BY ${n}.${ne(o.code)}`)}function Es(e,t){return t.filter(n=>n.type==="serial-number").map(n=>`GRANT USAGE, SELECT ON SEQUENCE ${at(e,n.code)} TO "openxiangda_data_api"`)}function As(e,t){let n=rt(e),o=[];for(let s of t){if(s.type==="subtable")continue;let r=ne(s.code),a=ne(Ne("idx",e,s.code,s.index));switch(s.index){case"btree":o.push(`CREATE INDEX IF NOT EXISTS ${a} ON ${n} (${r})`);break;case"btree-snapshot-expressions":{let i=ne(Ne("idx",e,s.code,"snapshot-value")),c=ne(Ne("idx",e,s.code,"snapshot-label"));o.push(`CREATE INDEX IF NOT EXISTS ${i} ON ${n} ((${r} ->> 'value'))`,`CREATE INDEX IF NOT EXISTS ${c} 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 i=Jt.has(s.type)?`((${r} ->> 'label')) gin_trgm_ops`:`${r} gin_trgm_ops`;o.push(`CREATE INDEX IF NOT EXISTS ${a} ON ${n} USING GIN (${i})`);break}case"none":break}if(s.type==="serial-number"){let i=ne(Ne("uidx",e,s.code,"serial"));o.push(`CREATE UNIQUE INDEX IF NOT EXISTS ${i} ON ${n} (${r})`)}}return o}function Is(e,t,n,o){let s=rt(e),r=rt(t),a=ne(Ne("uidx",e,"environment_id","subtable-parent")),i=ne(Ne("idx",t,n,o,"subtable-child")),c=ne(Ne("fk",t,n,e)),_=ne(n),p=ne(o);return[`CREATE UNIQUE INDEX IF NOT EXISTS ${a} ON ${s} ("tenant_id", "app_code", "environment_key", "id")`,`CREATE INDEX IF NOT EXISTS ${i} ON ${r} ("tenant_id", "app_code", "environment_key", ${_}, ${p}, "id")`,`DO $native_subtable$ BEGIN
|
|
2
|
-
ALTER TABLE ${
|
|
1
|
+
"use strict";var ho=Object.create;var qe=Object.defineProperty;var yo=Object.getOwnPropertyDescriptor;var So=Object.getOwnPropertyNames;var Do=Object.getPrototypeOf,Vo=Object.prototype.hasOwnProperty;var wo=(e,t)=>{for(var n in t)qe(e,n,{get:t[n],enumerable:!0})},_n=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of So(t))!Vo.call(e,s)&&s!==n&&qe(e,s,{get:()=>t[s],enumerable:!(o=yo(t,s))||o.enumerable});return e};var Fo=(e,t,n)=>(n=e!=null?ho(Do(e)):{},_n(t||!e||!e.__esModule?qe(n,"default",{value:e,enumerable:!0}):n,e)),Po=e=>_n(qe({},"__esModule",{value:!0}),e);var lr={};wo(lr,{DATA_AUDIT_METADATA_FIELDS:()=>Vt,DATA_EVENT_TYPES_V2:()=>Et,DATA_SYSTEM_SORT_FIELD_CODES:()=>Cn,NATIVE_CONFIGURATION_VALIDATOR_DIGEST:()=>dr,NATIVE_CONTRACT_CAPACITY_V2:()=>q,NATIVE_DATA_POLICY_EXPRESSION_MAX_CLAUSES:()=>Wr,NATIVE_DATA_POLICY_EXPRESSION_MAX_DEPTH:()=>jr,NATIVE_DATA_POLICY_EXPRESSION_MAX_GROUP_ITEMS:()=>Br,NATIVE_DATA_POLICY_EXPRESSION_MAX_LEAVES:()=>Jr,NATIVE_DATA_POLICY_EXPRESSION_MAX_OCCURRENCES:()=>zr,NATIVE_DATA_QUERY_OPERATORS_V2:()=>$n,NATIVE_UNIQUE_KEY_MAX_BYTES:()=>Pr,NATIVE_UNIQUE_KEY_NORMALIZERS:()=>Xt,NativeConfigurationCompilerError:()=>It,NativeDataFieldContractV2Error:()=>de,NativeDataPolicyExpressionV2Error:()=>ve,NativeDecimalLifecycleContractError:()=>$e,NativeEventActionContractError:()=>_t,NativeScopeSourceFieldPathV2Error:()=>lt,NativeUniqueKeyContractError:()=>Pe,OPENXIANGDA_NATIVE_DATA_FIELD_TYPES_V2:()=>gn,OPENXIANGDA_NATIVE_DATA_SURFACE_KEYS_V2:()=>Ne,OPENXIANGDA_NATIVE_DRAFT_STATE_KEYS_V2:()=>nt,OPENXIANGDA_NATIVE_SYSTEM_FIELDS_V2:()=>Xe,OPENXIANGDA_NATIVE_SYSTEM_FIELD_MAP_V2:()=>ko,WORKFLOW_EVENT_TYPES_V2:()=>At,compileNativeApplicationConfiguration:()=>Ii,compileNativeEventAction:()=>Zt,compileNativeEventCapturePlansV2:()=>_o,compileRequiredPlatformCapabilitiesV3:()=>po,hasDataAuditReadPolicy:()=>wt,isDataAuditMetadataField:()=>Se,isDataSystemSortField:()=>Ft,isNativeDataQueryOperatorV2:()=>qo,isNativeMultiValueFieldV2:()=>Ue,materializeNativeDataQueryPathTypesV2:()=>js,nativeDataPolicyExpressionLeavesV2:()=>We,nativeDataPolicyExpressionToCnfV2:()=>on,nativeDataQueryPathPlanV2:()=>Bs,nativeFieldAggregatePlanV2:()=>ns,nativeFieldColumnDefinitionV2:()=>Is,nativeFieldDefaultSqlV2:()=>ms,nativeFieldHasDefaultV2:()=>gs,nativeFieldIndexStatementsV2:()=>Os,nativeFieldRequiresCreateInputV2:()=>Me,nativeFieldSequenceGrantStatementsV2:()=>bs,nativeFieldSequenceOwnershipStatementsV2:()=>Cs,nativeFieldSequenceStatementsV2:()=>Ts,nativeFieldSupportsFilterV2:()=>xt,nativeFieldSupportsOperatorV2:()=>Zo,nativeFieldSupportsSearchV2:()=>et,nativeFieldSupportsSortV2:()=>Ve,nativeOperatorsForFieldV2:()=>kt,nativePhysicalFieldV2:()=>vn,nativePhysicalFieldsV2:()=>As,nativePhysicalObjectNameV2:()=>Te,nativeScopeSourceFieldValueV2:()=>Vs,nativeScopeSourceGrantPathSupportedV2:()=>qt,nativeScopeSourceSubjectPathSupportedV2:()=>ut,nativeSubtableConstraintStatementsV2:()=>$s,nativeUniqueKeysJsonSchema:()=>Ws,parseDecimalReservationLifecycle:()=>at,parseNativeDataFieldsV2:()=>Qe,parseNativeDataResourceInvariantsV2:()=>Dt,parseNativeUniqueKeys:()=>Qt,projectNativeDataResourceViewV2:()=>st,quoteNativeIdentifierV2:()=>ne,resolveNativeScopeSourceFieldPathV2:()=>Fe,validateDecimalReservationLifecycles:()=>Gt,validateNativeDataDraftStateV2:()=>Mt,validateNativeDataResourceReferencesV2:()=>St,validateNativeDataResourceSurfaceV2:()=>ot,validateWorkflowInstanceCommandPolicies:()=>tn,workflowInstanceCommandDeadlineError:()=>Gs,workflowInstanceTerminateCapabilityAllowed:()=>zs,workflowPolicyTimestamp:()=>en});module.exports=Po(lr);var En=require("node:crypto");function vo(e){if(!e||typeof e!="object")return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function $t(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,s)=>$t(o,`${t}[${s}]`)).join(",")}]`;if(vo(e))return`{${Object.keys(e).filter(s=>e[s]!==void 0).sort((s,i)=>s===i?0:s<i?-1:1).map(s=>`${JSON.stringify(s)}:${$t(e[s],`${t}.${s}`)}`).join(",")}}`;let n=e instanceof Date?"Date":e?.constructor?.name||typeof e;throw new TypeError(`Value is not JSON serializable: ${t} (${n})`)}function Q(e){return $t(e,"$")}function ee(e){return(0,En.createHash)("sha256").update(Q(e)).digest("hex")}var Nn=/^[A-Za-z][A-Za-z0-9_]{0,62}$/,yt=/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/,gn=["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"],Lo=new Set(gn),Tn=new Set(["option.multiple","cascade.multiple","user.multiple","department.multiple","resource-ref.multiple","file","image","subtable"]),An=new Set(["option.single","option.multiple","cascade.single","cascade.multiple"]),In=new Set(["resource-ref.single","resource-ref.multiple"]),Xe=[{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}],ko=new Map(Xe.map(e=>[e.code,e])),de=class extends Error{constructor(n,o){super(n);this.code=n;this.pointer=o;this.name="NativeDataFieldContractV2Error"}code;pointer};function Ue(e){return Tn.has(e)}function Me(e,t={}){return e.type!=="serial-number"&&t.system!==!0&&e.nullable===!1&&(!Ue(e.type)||t.requiredHint===!0)}function Qe(e,t,n=500){Array.isArray(e)||y("NATIVE_ARRAY_REQUIRED",t),e.length===0&&y("NATIVE_DATA_FIELDS_REQUIRED",t),e.length>n&&y("NATIVE_ARRAY_LIMIT_EXCEEDED",t);let o=new Set;return e.map((s,i)=>{let a=`${t}/${i}`,r=re(s,a);ce(r,["code","type","nullable","indexed","options","source","maxLength","precision","scale","exactDecimal","min","max","rangeBoundary","timePrecision","file","serial","subtable"],a);let c=le(r.code,`${a}/code`,63);Nn.test(c)||y("NATIVE_FIELD_CODE_INVALID",`${a}/code`),o.has(c)&&y("NATIVE_DATA_FIELD_DUPLICATE",`${a}/code`),o.add(c);let p=le(r.type,`${a}/type`,32);Lo.has(p)||y("NATIVE_DATA_FIELD_TYPE_INVALID",`${a}/type`);let _=p,l=ht(r.nullable,`${a}/nullable`),u=ht(r.indexed,`${a}/indexed`);l===!0&&Tn.has(_)&&y("NATIVE_DATA_MULTI_FIELD_NULLABLE_INVALID",`${a}/nullable`);let E=Mo(r.options,_,a),d=jo(r.source,_,a),A=Jo(r,_,a),N=ht(r.exactDecimal,`${a}/exactDecimal`);N!==void 0&&_!=="number.decimal"&&y("NATIVE_DATA_FIELD_EXACT_DECIMAL_TYPE_INVALID",`${a}/exactDecimal`);let I=xo(r.rangeBoundary,_,a),g=Wo(r.file,_,a),b=zo(r.serial,_,a),O=Go(r.subtable,_,a);return{code:c,type:_,...l===void 0?{}:{nullable:l},...u===void 0?{}:{indexed:u},...E?{options:E}:{},...d?{source:d}:{},...A,...N===void 0?{}:{exactDecimal:N},...I?{rangeBoundary:I}:{},...g?{file:g}:{},...b?{serial:b}:{},...O?{subtable:O}:{}}})}function xo(e,t,n){let o=`${n}/rangeBoundary`;if(!(t==="date-range"||t==="datetime-range")){e!==void 0&&y("NATIVE_DATA_FIELD_RANGE_BOUNDARY_TYPE_INVALID",o);return}return e!=="closed"&&e!=="half-open"&&y("NATIVE_DATA_FIELD_RANGE_BOUNDARY_REQUIRED",o),e}function St(e,t){Array.isArray(e)||y("NATIVE_ARRAY_REQUIRED",t);let n=new Map;e.forEach((o,s)=>{let i=`${t}/${s}`,a=re(o,i),r=le(a.code,`${i}/code`,64);(!yt.test(r)||n.has(r))&&y("NATIVE_RESOURCE_CODE_INVALID",`${i}/code`);let c=re(a.schema,`${i}/schema`);n.set(r,{pointer:i,fields:Qe(c.fields,`${i}/schema/fields`)})});for(let[o,s]of n){let i=new Map(s.fields.map(r=>[r.code,r]));s.fields.filter(r=>r.type==="subtable").reduce((r,c)=>r+(c.subtable?.maxRows??20),0)>49&&y("NATIVE_DATA_FIELD_SUBTABLE_AGGREGATE_MAX_ROWS_EXCEEDED",`${s.pointer}/schema/fields`),s.fields.forEach((r,c)=>{let p=`${s.pointer}/schema/fields/${c}`;if(r.source&&Uo(r.source,i,n,`${p}/source`),r.subtable){let _=n.get(r.subtable.resourceCode);(!_||r.subtable.resourceCode===o)&&y("NATIVE_DATA_FIELD_SUBTABLE_TARGET_MISSING",`${p}/subtable/resourceCode`);let l=_.fields.find(E=>E.code===r.subtable?.foreignKey);(!l||l.type!=="uuid"||l.nullable!==!1)&&y("NATIVE_DATA_FIELD_SUBTABLE_FOREIGN_KEY_INVALID",`${p}/subtable/foreignKey`);let u=_.fields.find(E=>E.code===r.subtable?.orderField);(!u||u.type!=="number.integer"||u.nullable!==!1)&&y("NATIVE_DATA_FIELD_SUBTABLE_ORDER_FIELD_INVALID",`${p}/subtable/orderField`)}})}}function Dt(e,t,n){if(e===void 0)return[];(!Array.isArray(e)||e.length>20)&&y("NATIVE_DATA_RESOURCE_INVARIANTS_INVALID",n);let o=new Map(t.map(i=>[i.code,i])),s=new Set;return e.map((i,a)=>{let r=`${n}/${a}`,c=re(i,r);ce(c,["code","message","expression"],r);let p=le(c.code,`${r}/code`,128);(!/^[a-z][a-z0-9]*(?:[._-][a-z0-9]+)*$/.test(p)||s.has(p))&&y("NATIVE_DATA_RESOURCE_INVARIANT_CODE_INVALID",`${r}/code`),s.add(p);let _=He(c.message,`${r}/message`,500);_!==void 0&&_.length===0&&y("NATIVE_DATA_RESOURCE_INVARIANT_MESSAGE_INVALID",`${r}/message`);let l=re(c.expression,`${r}/expression`);if(l.kind==="nonBlankTextWhenOption"){ce(l,["kind","optionField","optionValue","textField"],`${r}/expression`);let g=_e(l.optionField,`${r}/expression/optionField`),b=_e(l.textField,`${r}/expression/textField`),O=le(l.optionValue,`${r}/expression/optionValue`,128),T=o.get(g),C=o.get(b);return(!T||!C)&&y("NATIVE_DATA_RESOURCE_INVARIANT_FIELD_UNKNOWN",`${r}/expression`),(T.type!=="option.single"||!["text.short","text.long"].includes(C.type)||!T.options?.some(S=>S.value===O))&&y("NATIVE_DATA_RESOURCE_INVARIANT_FIELD_TYPES_INVALID",`${r}/expression`),{code:p,..._===void 0?{}:{message:_},expression:{kind:"nonBlankTextWhenOption",optionField:g,optionValue:O,textField:b}}}ce(l,["leftField","operator","rightField"],`${r}/expression`);let u=_e(l.leftField,`${r}/expression/leftField`),E=_e(l.rightField,`${r}/expression/rightField`),d=o.get(u),A=o.get(E);(!d||!A)&&y("NATIVE_DATA_RESOURCE_INVARIANT_FIELD_UNKNOWN",`${r}/expression`),d.type===A.type||["number.integer","number.decimal"].includes(d.type)&&["number.integer","number.decimal"].includes(A.type)||y("NATIVE_DATA_RESOURCE_INVARIANT_FIELD_TYPES_INVALID",`${r}/expression`);let I=String(l.operator);return["eq","neq","gt","gte","lt","lte"].includes(I)||y("NATIVE_DATA_RESOURCE_INVARIANT_OPERATOR_INVALID",`${r}/expression/operator`),!["eq","neq"].includes(I)&&!["number.integer","number.decimal","date","time","datetime","text.short","text.long","text.rich","serial-number","uuid"].includes(d.type)&&y("NATIVE_DATA_RESOURCE_INVARIANT_FIELD_TYPES_INVALID",`${r}/expression`),{code:p,..._===void 0?{}:{message:_},expression:{leftField:u,operator:I,rightField:E}}})}function Uo(e,t,n,o){let s=n.get(e.resourceCode);s||y("NATIVE_DATA_FIELD_SOURCE_TARGET_MISSING",`${o}/resourceCode`);let i=new Map(s.fields.map(r=>[r.code,r])),a=i.get(e.labelField);(!a||!["text.short","text.long"].includes(a.type))&&y("NATIVE_DATA_FIELD_SOURCE_LABEL_INVALID",`${o}/labelField`);for(let r of["searchFields","descriptionFields","snapshotFields"])for(let c of e[r]||[])i.has(c)||y("NATIVE_DATA_FIELD_SOURCE_FIELD_MISSING",`${o}/${r}`);for(let[r,c]of(e.filters||[]).entries())i.has(c.field)||y("NATIVE_DATA_FIELD_SOURCE_FILTER_FIELD_MISSING",`${o}/filters/${r}/field`),"binding"in c&&!t.has(c.binding.field)&&y("NATIVE_DATA_FIELD_SOURCE_BINDING_FIELD_MISSING",`${o}/filters/${r}/binding/field`)}function Mo(e,t,n){let o=`${n}/options`;if(e===void 0){An.has(t)&&y("NATIVE_DATA_FIELD_OPTIONS_REQUIRED",o);return}(!An.has(t)||!Array.isArray(e))&&y("NATIVE_DATA_FIELD_OPTIONS_TYPE_INVALID",o),(e.length<1||e.length>100)&&y("NATIVE_DATA_FIELD_OPTIONS_INVALID",o);let s=0,i=(a,r,c)=>{c>5&&y("NATIVE_DATA_FIELD_OPTIONS_DEPTH_EXCEEDED",r);let p=new Set;return a.map((_,l)=>{s+=1,s>1e3&&y("NATIVE_DATA_FIELD_OPTIONS_COUNT_EXCEEDED",o);let u=`${r}/${l}`,E=re(_,u);ce(E,["label","value","description","color","children"],u);let d=le(E.label,`${u}/label`,500),A=le(E.value,`${u}/value`,500);p.has(A)&&y("NATIVE_DATA_FIELD_OPTION_VALUE_DUPLICATE",`${u}/value`),p.add(A);let N=He(E.description,`${u}/description`,2e3),I=He(E.color,`${u}/color`,64),g;return E.children!==void 0&&((!t.startsWith("cascade.")||!Array.isArray(E.children))&&y("NATIVE_DATA_FIELD_OPTION_CHILDREN_INVALID",`${u}/children`),(E.children.length<1||E.children.length>100)&&y("NATIVE_DATA_FIELD_OPTION_CHILDREN_INVALID",`${u}/children`),g=i(E.children,`${u}/children`,c+1)),{label:d,value:A,...N===void 0?{}:{description:N},...I===void 0?{}:{color:I},...g?{children:g}:{}}})};return i(e,o,1)}function jo(e,t,n){let o=`${n}/source`;if(e===void 0){In.has(t)&&y("NATIVE_DATA_FIELD_SOURCE_REQUIRED",o);return}In.has(t)||y("NATIVE_DATA_FIELD_SOURCE_TYPE_INVALID",o);let s=re(e,o);ce(s,["kind","resourceCode","labelField","searchFields","descriptionFields","snapshotFields","filters","pageSize","loadMode"],o),s.kind!=="resource"&&y("NATIVE_DATA_FIELD_SOURCE_KIND_INVALID",`${o}/kind`);let i=le(s.resourceCode,`${o}/resourceCode`,64);yt.test(i)||y("NATIVE_RESOURCE_CODE_INVALID",`${o}/resourceCode`);let a=_e(s.labelField,`${o}/labelField`),r=Rt(s.searchFields,`${o}/searchFields`,10),c=Rt(s.descriptionFields,`${o}/descriptionFields`,10),p=Rt(s.snapshotFields,`${o}/snapshotFields`,50),_=ye(s.pageSize,`${o}/pageSize`,1,100),l;s.loadMode!==void 0&&(["search","all"].includes(String(s.loadMode))||y("NATIVE_DATA_FIELD_SOURCE_LOAD_MODE_INVALID",`${o}/loadMode`),l=s.loadMode);let u=Bo(s.filters,`${o}/filters`);return{kind:"resource",resourceCode:i,labelField:a,...r?{searchFields:r}:{},...c?{descriptionFields:c}:{},...p?{snapshotFields:p}:{},...u?{filters:u}:{},..._===void 0?{}:{pageSize:_},...l?{loadMode:l}:{}}}function Bo(e,t){if(e!==void 0)return(!Array.isArray(e)||e.length>20)&&y("NATIVE_DATA_FIELD_SOURCE_FILTERS_INVALID",t),e.map((n,o)=>{let s=`${t}/${o}`,i=re(n,s),a=Object.prototype.hasOwnProperty.call(i,"value"),r=Object.prototype.hasOwnProperty.call(i,"binding");ce(i,a?["field","operator","value"]:["field","operator","binding"],s),a===r&&y("NATIVE_DATA_FIELD_SOURCE_FILTER_VALUE_INVALID",s);let c=_e(i.field,`${s}/field`);["eq","in"].includes(String(i.operator))||y("NATIVE_DATA_FIELD_SOURCE_FILTER_OPERATOR_INVALID",`${s}/operator`);let p=i.operator;if(a)return{field:c,operator:p,value:i.value};let _=re(i.binding,`${s}/binding`);return ce(_,["kind","field"],`${s}/binding`),_.kind!=="field"&&y("NATIVE_DATA_FIELD_SOURCE_BINDING_KIND_INVALID",`${s}/binding/kind`),{field:c,operator:p,binding:{kind:"field",field:_e(_.field,`${s}/binding/field`)}}})}function Jo(e,t,n){let o={};if(e.maxLength!==void 0&&(["text.short","text.long","text.rich"].includes(t)||y("NATIVE_DATA_FIELD_MAX_LENGTH_TYPE_INVALID",`${n}/maxLength`),o.maxLength=Ke(e.maxLength,`${n}/maxLength`,1,1e6)),(e.precision!==void 0||e.scale!==void 0)&&((t!=="number.decimal"||e.precision===void 0)&&y("NATIVE_DATA_FIELD_DECIMAL_CONFIG_INVALID",n),o.precision=Ke(e.precision,`${n}/precision`,1,1e3),o.scale=e.scale===void 0?0:Ke(e.scale,`${n}/scale`,0,o.precision)),e.min!==void 0||e.max!==void 0){["number.integer","number.decimal"].includes(t)||y("NATIVE_DATA_FIELD_NUMERIC_BOUNDS_TYPE_INVALID",n);let s=mn(e.min,`${n}/min`),i=mn(e.max,`${n}/max`);t==="number.integer"&&[s,i].some(a=>a!==void 0&&!Number.isSafeInteger(a))&&y("NATIVE_DATA_FIELD_NUMERIC_BOUNDS_INVALID",n),s!==void 0&&i!==void 0&&s>i&&y("NATIVE_DATA_FIELD_NUMERIC_BOUNDS_INVALID",n),s!==void 0&&(o.min=s),i!==void 0&&(o.max=i)}return e.timePrecision!==void 0&&((t!=="time"||!["minute","second"].includes(e.timePrecision))&&y("NATIVE_DATA_FIELD_TIME_PRECISION_INVALID",`${n}/timePrecision`),o.timePrecision=e.timePrecision),o}function Wo(e,t,n){if(e===void 0)return;let o=`${n}/file`;["file","image","signature"].includes(t)||y("NATIVE_DATA_FIELD_FILE_TYPE_INVALID",o);let s=re(e,o);ce(s,["maxCount","maxSizeMb","accept"],o);let i=ye(s.maxCount,`${o}/maxCount`,1,100);t==="signature"&&i!==void 0&&i!==1&&y("NATIVE_DATA_FIELD_SIGNATURE_COUNT_INVALID",`${o}/maxCount`);let a=ye(s.maxSizeMb,`${o}/maxSizeMb`,1,1024),r;return s.accept!==void 0&&((!Array.isArray(s.accept)||s.accept.length>50)&&y("NATIVE_DATA_FIELD_FILE_ACCEPT_INVALID",`${o}/accept`),r=s.accept.map((c,p)=>le(c,`${o}/accept/${p}`,255)),new Set(r).size!==r.length&&y("NATIVE_DATA_FIELD_FILE_ACCEPT_INVALID",`${o}/accept`)),{...i===void 0?{}:{maxCount:i},...a===void 0?{}:{maxSizeMb:a},...r===void 0?{}:{accept:r}}}function zo(e,t,n){let o=`${n}/serial`;if(e===void 0){t==="serial-number"&&y("NATIVE_DATA_FIELD_SERIAL_REQUIRED",o);return}t!=="serial-number"&&y("NATIVE_DATA_FIELD_SERIAL_TYPE_INVALID",o);let s=re(e,o);ce(s,["prefix","digits","start"],o);let i=He(s.prefix,`${o}/prefix`,64),a=ye(s.digits,`${o}/digits`,1,32),r=ye(s.start,`${o}/start`,0,Number.MAX_SAFE_INTEGER);return{...i===void 0?{}:{prefix:i},...a===void 0?{}:{digits:a},...r===void 0?{}:{start:r}}}function Go(e,t,n){let o=`${n}/subtable`;if(e===void 0){t==="subtable"&&y("NATIVE_DATA_FIELD_SUBTABLE_REQUIRED",o);return}t!=="subtable"&&y("NATIVE_DATA_FIELD_SUBTABLE_TYPE_INVALID",o);let s=re(e,o);ce(s,["resourceCode","foreignKey","orderField","maxRows"],o);let i=le(s.resourceCode,`${o}/resourceCode`,64);yt.test(i)||y("NATIVE_RESOURCE_CODE_INVALID",`${o}/resourceCode`);let a=_e(s.foreignKey,`${o}/foreignKey`),r=_e(s.orderField,`${o}/orderField`);r===a&&y("NATIVE_DATA_FIELD_SUBTABLE_ORDER_FIELD_INVALID",`${o}/orderField`);let c=ye(s.maxRows,`${o}/maxRows`,1,49);return{resourceCode:i,foreignKey:a,orderField:r,...c===void 0?{}:{maxRows:c}}}function Rt(e,t,n){if(e===void 0)return;(!Array.isArray(e)||e.length>n)&&y("NATIVE_DATA_FIELD_SOURCE_FIELDS_INVALID",t);let o=e.map((s,i)=>_e(s,`${t}/${i}`));return new Set(o).size!==o.length&&y("NATIVE_DATA_FIELD_SOURCE_FIELDS_INVALID",t),o}function _e(e,t){let n=le(e,t,63);return Nn.test(n)||y("NATIVE_FIELD_CODE_INVALID",t),n}function re(e,t){return(!e||typeof e!="object"||Array.isArray(e))&&y("NATIVE_OBJECT_REQUIRED",t),e}function ce(e,t,n){let o=new Set(t);for(let s of Object.keys(e))o.has(s)||y("NATIVE_PROPERTY_UNKNOWN",`${n}/${s}`)}function le(e,t,n){return(typeof e!="string"||e.length===0||e.length>n)&&y("NATIVE_STRING_INVALID",t),e}function He(e,t,n){if(e!==void 0)return(typeof e!="string"||e.length>n)&&y("NATIVE_STRING_INVALID",t),e}function ht(e,t){if(e!==void 0)return typeof e!="boolean"&&y("NATIVE_BOOLEAN_REQUIRED",t),e}function ye(e,t,n,o){if(e!==void 0)return Ke(e,t,n,o)}function mn(e,t){if(e!==void 0)return(typeof e!="number"||!Number.isFinite(e))&&y("NATIVE_NUMBER_REQUIRED",t),e}function Ke(e,t,n,o){return(!Number.isSafeInteger(e)||Number(e)<n||Number(e)>o)&&y("NATIVE_INTEGER_OUT_OF_RANGE",t),Number(e)}function y(e,t){throw new de(e,t)}var Vt=["created_by","updated_by","created_at","updated_at"];function Se(e){return Vt.includes(e)}function wt(e){return Vt.some(t=>Object.prototype.hasOwnProperty.call(e.fieldPolicies||{},t))}var Cn=Xe.map(e=>e.code);function Ft(e){return Cn.includes(e)}var $n=["eq","neq","gt","gte","lt","lte","contains","startsWith","endsWith","in","between","has","hasAny","hasAll","overlaps","containedBy","jsonContains","isEmpty","isNotEmpty"],Yo=new Set($n);function qo(e){return Yo.has(String(e))}var Pt=["eq","neq","contains","startsWith","endsWith","in","isEmpty","isNotEmpty"],je=["eq","neq","gt","gte","lt","lte","between","in","isEmpty"],Ko=["eq","neq","in","isEmpty"],Ze=["eq","neq","in","isEmpty","isNotEmpty"],De=["has","hasAny","hasAll","isEmpty","isNotEmpty"],bn=["overlaps","contains","containedBy","isEmpty"],vt=["jsonContains","isEmpty","isNotEmpty"],Lt=["isEmpty","isNotEmpty"],Ho={"text.short":Pt,"text.long":Pt,"text.rich":Pt,"number.integer":je,"number.decimal":je,boolean:Ko,date:je,time:je,datetime:je,"date-range":bn,"datetime-range":bn,"option.single":Ze,"option.multiple":De,"cascade.single":De,"cascade.multiple":De,"user.single":Ze,"user.multiple":De,"department.single":Ze,"department.multiple":De,"resource-ref.single":Ze,"resource-ref.multiple":De,file:Lt,image:Lt,signature:Lt,address:vt,location:vt,uuid:["eq","neq","in","isEmpty"],json:vt,"serial-number":["eq","neq","in","contains","startsWith"],subtable:[]},Xo=new Set(["text.short","text.long","text.rich","option.single","user.single","department.single","resource-ref.single","serial-number"]),Qo=new Set(["option.multiple","cascade.single","cascade.multiple","user.multiple","department.multiple","resource-ref.multiple","file","image","signature","address","location","json","subtable"]);function kt(e){return Ho[e]}function Zo(e,t){return kt(e).includes(t)}function et(e){return Xo.has(e)}function Ve(e){return!Qo.has(e)}function xt(e){return kt(e).length>0}var On=new Set(["number.integer","number.decimal"]),Rn=new Set(["text.short","text.long","number.integer","number.decimal","date","time","datetime","serial-number"]),es=new Set([...Rn,"boolean","uuid"]),ts=new Set(["option.single","user.single","department.single","resource-ref.single"]);function ns(e,t){return t==="sum"||t==="avg"?On.has(e)?{valueExpression:"column",numericResult:!0}:null:t==="min"||t==="max"?Rn.has(e)?{valueExpression:"column",numericResult:On.has(e)}:null:ts.has(e)?{valueExpression:"snapshot-value",numericResult:!0}:es.has(e)?{valueExpression:"column",numericResult:!0}:null}var nt=["version","maxBytes","fields"];function Mt(e,t){if(e===void 0)return;let n=Ut(e,t);hn(n,nt,t);let o=tt(n.version,`${t}/version`,1,1e6),s=tt(n.maxBytes,`${t}/maxBytes`,2,196608);(!o||!s)&&se("NATIVE_DATA_DRAFT_STATE_SCHEMA_INVALID",t);let i=Ut(n.fields,`${t}/fields`),a=Object.entries(i);(!a.length||a.length>50)&&se("NATIVE_DATA_DRAFT_STATE_FIELDS_INVALID",`${t}/fields`);for(let[r,c]of a){let p=`${t}/fields/${r}`;/^[A-Za-z][A-Za-z0-9_]{0,62}$/.test(r)||se("NATIVE_DATA_DRAFT_STATE_FIELD_CODE_INVALID",p);let _=Ut(c,p),l=yn(_.type,`${p}/type`,32),u=l==="string"?["type","required","maxLength","enum"]:l==="json.object"?["type","required","maxBytes"]:["type","required"];if(["string","number","integer","boolean","json.object"].includes(l)||se("NATIVE_DATA_DRAFT_STATE_FIELD_TYPE_INVALID",`${p}/type`),hn(_,u,p),ss(_.required,`${p}/required`),l==="string"){let E=tt(_.maxLength,`${p}/maxLength`,1,196608);E||se("NATIVE_DATA_DRAFT_STATE_FIELD_INVALID",p),_.enum!==void 0&&os(_.enum,`${p}/enum`,100,!1).some(A=>A.length>E)&&se("NATIVE_DATA_DRAFT_STATE_FIELD_INVALID",`${p}/enum`)}else if(l==="json.object"){let E=tt(_.maxBytes,`${p}/maxBytes`,2,65536);(!E||E>s)&&se("NATIVE_DATA_DRAFT_STATE_FIELD_INVALID",p)}}}function os(e,t,n,o){(!Array.isArray(e)||!o&&e.length===0||e.length>n)&&se("NATIVE_DATA_SURFACE_STRING_ARRAY_INVALID",t);let s=e.map((i,a)=>yn(i,`${t}/${a}`,255));return new Set(s).size!==s.length&&se("NATIVE_DATA_SURFACE_STRING_ARRAY_INVALID",t),s}function Ut(e,t){return(!e||typeof e!="object"||Array.isArray(e))&&se("NATIVE_OBJECT_REQUIRED",t),e}function hn(e,t,n){let o=new Set(t);for(let s of Object.keys(e))o.has(s)||se("NATIVE_PROPERTY_UNKNOWN",`${n}/${s}`)}function yn(e,t,n){return(typeof e!="string"||e.length===0||e.length>n)&&se("NATIVE_STRING_INVALID",t),e}function ss(e,t){e!==void 0&&typeof e!="boolean"&&se("NATIVE_BOOLEAN_REQUIRED",t)}function tt(e,t,n,o){return(!Number.isSafeInteger(e)||Number(e)<n||Number(e)>o)&&se("NATIVE_INTEGER_INVALID",t),Number(e)}function se(e,t){throw new de(e,t)}var is=500,Ne={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","exactDecimal","min","max","rangeBoundary","maxCount","maxSizeMb","accept","options","list","searchable","sortable","source","timePrecision","serial","subtable"],list:["actions","fieldOrder","defaultPageSize","searchableFields","filterFields","defaultSort"],defaultSort:["field","order"],form:["layout","fieldOrder","draftState"],detail:["layout","fieldOrder"],layout:["layout","fieldOrder","draftState"],draftState:nt,mobile:["enabled"]},rs={"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 ot(e,t,n){if(e===void 0)return;let o=te(e,n);Ee(o,Ne.surface,n);let s=o.mutationOwner===void 0?"native":ge(o.mutationOwner,`${n}/mutationOwner`,16);["native","action","readonly","workflow"].includes(s)||v("NATIVE_DATA_SURFACE_MUTATION_OWNER_INVALID",`${n}/mutationOwner`);let i=o.generated===void 0?{}:te(o.generated,`${n}/generated`);Ee(i,Ne.generated,`${n}/generated`);for(let c of Ne.generated)Bt(i[c],`${n}/generated/${c}`);if(s!=="native")for(let c of["create","update","delete"])i[c]===!0&&v("NATIVE_DATA_SURFACE_MUTATION_OWNER_CONFLICT",`${n}/generated/${c}`);let a=new Map(t.map(c=>[c.code,c])),r=te(o.fields,`${n}/fields`);for(let c of Object.keys(r))a.has(c)||v("NATIVE_DATA_SURFACE_FIELD_MISSING",`${n}/fields/${c}`);for(let c of t)Object.prototype.hasOwnProperty.call(r,c.code)||v("NATIVE_DATA_SURFACE_FIELD_REQUIRED",`${n}/fields/${c.code}`),cs(r[c.code],c,`${n}/fields/${c.code}`);for(let c of["create","update"]){let p=i[c]??s==="native",_=t.some(l=>{let u=te(r[l.code],`${n}/fields/${l.code}`);return Dn(l,u,c)});p&&!_&&v("NATIVE_DATA_SURFACE_WRITABLE_FIELDS_REQUIRED",`${n}/generated/${c}`)}if(ds(o.list,a,`${n}/list`),Sn(o.form,a,`${n}/form`,"form"),Sn(o.detail,a,`${n}/detail`,"detail"),o.mobile!==void 0){let c=te(o.mobile,`${n}/mobile`);Ee(c,Ne.mobile,`${n}/mobile`),Bt(c.enabled,`${n}/mobile/enabled`)}as(o,t,n)}function st(e,t){let n=e.views?.find(s=>s.code===t);n||v("NATIVE_DATA_VIEW_NOT_FOUND",`/surface/views/${t}`);let o=new Map((n.sections||[]).flatMap(s=>s.fields.map(i=>[i,s.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(([s,i])=>{let a={...i};delete a.section;let r=o.get(s);return[s,{...a,...r?{section:r}:{},list:n.list.fieldOrder.includes(s)}]}))}}function as(e,t,n){if(e.views===void 0)return;(!Array.isArray(e.views)||e.views.length>20)&&v("NATIVE_DATA_VIEWS_LIMIT_INVALID",`${n}/views`);let o=new Set;e.views.forEach((s,i)=>{let a=`${n}/views/${i}`,r=te(s,a);Ee(r,["code","name","generated","list","form","detail","mobile","sections"],a);let c=ge(r.code,`${a}/code`,64);(!/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/.test(c)||o.has(c))&&v("NATIVE_DATA_VIEW_CODE_INVALID",`${a}/code`),o.add(c),ge(r.name,`${a}/name`,255),te(r.generated,`${a}/generated`),te(r.mobile,`${a}/mobile`);for(let _ of["list","detail","create","update","delete"])typeof r.generated[_]!="boolean"&&v("NATIVE_DATA_VIEW_OPERATION_INVALID",`${a}/generated/${_}`);typeof r.mobile.enabled!="boolean"&&v("NATIVE_DATA_VIEW_MOBILE_INVALID",`${a}/mobile/enabled`);for(let _ of["list","form","detail"]){let l=te(r[_],`${a}/${_}`),u=we(l.fieldOrder,`${a}/${_}/fieldOrder`,500,!0);for(let E of u){let d=e.fields[E];(!d||(d.hidden??d.system)===!0)&&v("NATIVE_DATA_VIEW_FIELD_INVALID",`${a}/${_}/fieldOrder`)}}if(r.sections!==void 0){(!Array.isArray(r.sections)||r.sections.length>100)&&v("NATIVE_DATA_VIEW_SECTIONS_INVALID",`${a}/sections`);let _=new Set;r.sections.forEach((l,u)=>{let E=`${a}/sections/${u}`,d=te(l,E);Ee(d,["title","fields"],E),ge(d.title,`${E}/title`,255);for(let A of we(d.fields,`${E}/fields`,100,!0)){let N=e.fields[A];(!N||(N.hidden??N.system)===!0||_.has(A))&&v("NATIVE_DATA_VIEW_FIELD_INVALID",`${E}/fields`),_.add(A)}})}let p=st(e,c);if(ot(p,t,a),r.generated.create!==!1&&(e.mutationOwner||"native")==="native")for(let _ of t)Me(_,e.fields[_.code])&&Dn(_,e.fields[_.code],"create")&&!r.form.fieldOrder.includes(_.code)&&v("NATIVE_DATA_VIEW_CREATE_REQUIRED_FIELD_MISSING",`${a}/form/fieldOrder`)})}function Dn(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 cs(e,t,n){let o=te(e,n);Ee(o,Ne.field,n),ge(o.label,`${n}/label`,500),o.type!==t.type&&v("NATIVE_DATA_SURFACE_FIELD_TYPE_MISMATCH",`${n}/type`);let s=ge(o.widget,`${n}/widget`,64);rs[t.type].includes(s)||v("NATIVE_DATA_SURFACE_WIDGET_INCOMPATIBLE",`${n}/widget`),fs(o.section,`${n}/section`,255);for(let i of["requiredHint","system","hidden","list","searchable","sortable"])Bt(o[i],`${n}/${i}`);o.searchable===!0&&!et(t.type)&&v("NATIVE_DATA_SURFACE_SEARCH_UNSUPPORTED",`${n}/searchable`),o.sortable===!0&&!Ve(t.type)&&v("NATIVE_DATA_SURFACE_SORT_UNSUPPORTED",`${n}/sortable`);for(let i of["readCapabilities","createCapabilities","updateCapabilities"])we(o[i],`${n}/${i}`,100,!0);if(o.maxCount!==void 0&&(!Number.isSafeInteger(o.maxCount)||Number(o.maxCount)<1||Number(o.maxCount)>100)&&v("NATIVE_DATA_SURFACE_MAX_COUNT_INVALID",`${n}/maxCount`),o.maxSizeMb!==void 0&&(!Number.isSafeInteger(o.maxSizeMb)||Number(o.maxSizeMb)<1||Number(o.maxSizeMb)>1024)&&v("NATIVE_DATA_SURFACE_MAX_SIZE_INVALID",`${n}/maxSizeMb`),o.accept!==void 0){let i=Array.isArray(o.accept)?o.accept:[o.accept];we(i,`${n}/accept`,50,!1)}for(let i of["maxLength","precision","scale","exactDecimal","min","max","rangeBoundary","options","source","timePrecision","serial","subtable"])ls(o,t,i,n);us(o,t,n)}function ds(e,t,n){if(e===void 0)return;let o=te(e,n);if(Ee(o,Ne.list,n),o.actions!==void 0){let s=te(o.actions,`${n}/actions`);Ee(s,["import","export"],`${n}/actions`);for(let i of["import","export"])s[i]!==void 0&&typeof s[i]!="boolean"&&v("NATIVE_DATA_SURFACE_LIST_ACTION_INVALID",`${n}/actions/${i}`)}if(o.fieldOrder!==void 0)for(let s of we(o.fieldOrder,`${n}/fieldOrder`,500,!0))t.has(s)||v("NATIVE_DATA_SURFACE_LIST_FIELD_INVALID",`${n}/fieldOrder`);o.defaultPageSize!==void 0&&(!Number.isSafeInteger(o.defaultPageSize)||Number(o.defaultPageSize)<1||Number(o.defaultPageSize)>200)&&v("NATIVE_DATA_SURFACE_PAGE_SIZE_INVALID",`${n}/defaultPageSize`);for(let[s,i]of[["searchableFields",et],["filterFields",xt]]){if(o[s]===void 0)continue;let a=we(o[s],`${n}/${s}`,100,!0);for(let r of a){let c=t.get(r);(!c||!i(c.type))&&v("NATIVE_DATA_SURFACE_LIST_FIELD_INVALID",`${n}/${s}`)}}if(o.defaultSort!==void 0){let s=te(o.defaultSort,`${n}/defaultSort`);Ee(s,Ne.defaultSort,`${n}/defaultSort`);let i=ge(s.field,`${n}/defaultSort/field`,63),a=t.get(i);!Ft(i)&&(!a||!Ve(a.type))&&v("NATIVE_DATA_SURFACE_SORT_UNSUPPORTED",`${n}/defaultSort/field`),s.order!==void 0&&!["asc","desc"].includes(s.order)&&v("NATIVE_DATA_SURFACE_SORT_ORDER_INVALID",`${n}/defaultSort/order`)}}function Sn(e,t,n,o){if(e===void 0)return;let s=te(e,n);if(Ee(s,Ne[o],n),s.layout!==void 0&&!["flat","sections"].includes(s.layout)&&v("NATIVE_DATA_SURFACE_LAYOUT_INVALID",`${n}/layout`),s.fieldOrder!==void 0){let i=`${n}/fieldOrder`;(!Array.isArray(s.fieldOrder)||s.fieldOrder.length>t.size||s.fieldOrder.length>is)&&v("NATIVE_DATA_SURFACE_FIELD_ORDER_INVALID",i);let a=s.fieldOrder.map((r,c)=>ge(r,`${i}/${c}`,63));new Set(a).size!==a.length&&v("NATIVE_DATA_SURFACE_FIELD_ORDER_INVALID",i),a.forEach((r,c)=>{t.has(r)||v("NATIVE_DATA_SURFACE_FIELD_ORDER_FIELD_MISSING",`${i}/${c}`)})}o==="form"&&Mt(s.draftState,`${n}/draftState`)}function ls(e,t,n,o){e[n]===void 0&&t[n]===void 0||((e[n]===void 0||t[n]===void 0)&&v("NATIVE_DATA_SURFACE_FIELD_PROJECTION_MISMATCH",`${o}/${n}`),Q(e[n])!==Q(t[n])&&v("NATIVE_DATA_SURFACE_FIELD_PROJECTION_MISMATCH",`${o}/${n}`))}function us(e,t,n){let o=t.file||{},s={...e.maxCount===void 0?{}:{maxCount:e.maxCount},...e.maxSizeMb===void 0?{}:{maxSizeMb:e.maxSizeMb},...e.accept===void 0?{}:{accept:jt(e.accept)}};for(let i of["maxCount","maxSizeMb","accept"]){if(s[i]===void 0&&o[i]===void 0)continue;(s[i]===void 0||o[i]===void 0)&&v("NATIVE_DATA_SURFACE_FIELD_PROJECTION_MISMATCH",`${n}/${i}`);let a=i==="accept"?jt(s[i]):s[i],r=i==="accept"?jt(o[i]):o[i];Q(a)!==Q(r)&&v("NATIVE_DATA_SURFACE_FIELD_PROJECTION_MISMATCH",`${n}/${i}`)}}function jt(e){return(Array.isArray(e)?[...e]:[e]).sort((t,n)=>{let o=String(t),s=String(n);return o===s?0:o<s?-1:1})}function we(e,t,n,o){(!Array.isArray(e)||!o&&e.length===0||e.length>n)&&v("NATIVE_DATA_SURFACE_STRING_ARRAY_INVALID",t);let s=e.map((i,a)=>ge(i,`${t}/${a}`,255));return new Set(s).size!==s.length&&v("NATIVE_DATA_SURFACE_STRING_ARRAY_INVALID",t),s}function te(e,t){return(!e||typeof e!="object"||Array.isArray(e))&&v("NATIVE_OBJECT_REQUIRED",t),e}function Ee(e,t,n){let o=new Set(t);for(let s of Object.keys(e))o.has(s)||v("NATIVE_PROPERTY_UNKNOWN",`${n}/${s}`)}function ge(e,t,n){return(typeof e!="string"||e.length===0||e.length>n)&&v("NATIVE_STRING_INVALID",t),e}function fs(e,t,n){e!==void 0&&(typeof e!="string"||e.length>n)&&v("NATIVE_STRING_INVALID",t)}function Bt(e,t){e!==void 0&&typeof e!="boolean"&&v("NATIVE_BOOLEAN_REQUIRED",t)}function v(e,t){throw new de(e,t)}var $e=class extends Error{constructor(n,o){super(`\u91D1\u989D\u751F\u547D\u5468\u671F\u58F0\u660E\u65E0\u6548\uFF1A${o}\uFF08${n}\uFF09`);this.pointer=n;this.reason=o}pointer;reason;code="NATIVE_DECIMAL_LIFECYCLE_INVALID"},zt=["parentTransitions","childTransitions","fulfilledChildStatuses","lockedParentStatuses"],Vn=["amountFieldCode","currencyFieldCode","relationFieldCode","parentFieldCode","rootFieldCode","statusFieldCode","parentRelationValue","childRelationValue"],rt=e=>!!(e&&typeof e=="object"&&!Array.isArray(e)),it=e=>Array.isArray(e)?e.filter(rt):[],Ae=(e,t)=>{throw new $e(e,t)},Jt=e=>typeof e=="string"&&/^[A-Za-z0-9._:-]{1,128}$/.test(e),Wt=(e,t)=>e<t?-1:e>t?1:0;function at(e,t="/decimalReservationLifecycle"){if(e===void 0)return;if(!rt(e)||Object.keys(e).some(s=>!zt.includes(s))||zt.some(s=>!Object.prototype.hasOwnProperty.call(e,s)))return Ae(t,"\u5FC5\u987B\u5B8C\u6574\u58F0\u660E\u56DB\u9879\u89C4\u5219\uFF0C\u4E0D\u80FD\u5305\u542B\u672A\u77E5\u5C5E\u6027");let n=s=>{let i=e[s];if(!Array.isArray(i)||i.length>64)return Ae(`${t}/${s}`,"\u72B6\u6001\u8FB9\u6700\u591A 64 \u6761");let a=new Set;return i.map((r,c)=>{let p=`${t}/${s}/${c}`;if(!rt(r)||Object.keys(r).some(l=>l!=="from"&&l!=="to")||!Jt(r.from)||!Jt(r.to)||r.from===r.to)return Ae(p,"\u72B6\u6001\u8FB9\u5FC5\u987B\u5305\u542B\u4E0D\u540C\u7684\u6709\u6548 from/to");let _=JSON.stringify([r.from,r.to]);return a.has(_)?Ae(p,"\u72B6\u6001\u8FB9\u4E0D\u80FD\u91CD\u590D"):(a.add(_),{from:r.from,to:r.to})}).sort((r,c)=>Wt(r.from,c.from)||Wt(r.to,c.to))},o=s=>{let i=e[s];return!Array.isArray(i)||i.length<1||i.length>16||i.some(a=>!Jt(a))||new Set(i).size!==i.length?Ae(`${t}/${s}`,"\u72B6\u6001\u96C6\u5408\u5FC5\u987B\u5305\u542B 1 \u5230 16 \u4E2A\u4E0D\u91CD\u590D\u7684\u6709\u6548\u72B6\u6001"):[...i].sort(Wt)};return{parentTransitions:n("parentTransitions"),childTransitions:n("childTransitions"),fulfilledChildStatuses:o("fulfilledChildStatuses"),lockedParentStatuses:o("lockedParentStatuses")}}function Gt(e,t,n="/config/data/resources"){it(e).forEach((o,s)=>{let i=`${n}/${s}/decimalReservationLifecycle`,a=at(o.decimalReservationLifecycle,i);if(!a)return;let r=it(t).map(l=>l.platformAccess?.decimalReservation).filter(l=>rt(l)&&l.resourceCode===o.code),c=r.find(l=>l.mode==="reserve");if(!c)return Ae(i,"\u9700\u8981\u540C\u8D44\u6E90\u5DF2\u58F0\u660E\u7684 reserve \u52A8\u4F5C\u6620\u5C04");if(Vn.some(l=>typeof c[l]!="string")||r.some(l=>Vn.some(u=>l[u]!==c[u])))return Ae(i,"\u540C\u8D44\u6E90\u989D\u5EA6\u52A8\u4F5C\u7684\u5B57\u6BB5\u6620\u5C04\u5FC5\u987B\u4E00\u81F4");let p=it(o.schema?.fields).find(l=>l.code===c.statusFieldCode);if(p?.type!=="option.single")return Ae(i,"\u989D\u5EA6\u72B6\u6001\u5B57\u6BB5\u5FC5\u987B\u4E3A option.single");let _=new Set(it(p.options).map(l=>l.value));for(let l of zt)if((l==="parentTransitions"||l==="childTransitions"?a[l].flatMap(E=>[E.from,E.to]):a[l]).some(E=>!_.has(E)))return Ae(`${i}/${l}`,"\u72B6\u6001\u5FC5\u987B\u6765\u81EA\u989D\u5EA6\u72B6\u6001\u5B57\u6BB5\u7684\u9009\u9879");if(r.some(l=>l.mode==="reserve"&&Array.isArray(l.eligibleParentStatuses)&&l.eligibleParentStatuses.some(u=>a.lockedParentStatuses.includes(String(u)))))return Ae(`${i}/lockedParentStatuses`,"\u9501\u5B9A\u7236\u72B6\u6001\u4E0D\u80FD\u5141\u8BB8\u65B0\u9884\u7559")})}var Fn=require("crypto");var Yt=new Set(["option.single","user.single","department.single","resource-ref.single"]),ps=new Set(["option.multiple","cascade.single","cascade.multiple","user.multiple","department.multiple","resource-ref.multiple","address","location","json"]),Pn=new Set(["option.multiple","cascade.single","cascade.multiple","user.multiple","department.multiple","resource-ref.multiple","file","image"]),_s=new Set(["option.single","user.single","department.single","resource-ref.single","signature","address","location"]),Es=new Set([...Yt,...Pn,"signature","address","location","json"]);function As(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=>vn(o,n.has(o.code))).sort((o,s)=>o.code.localeCompare(s.code))}function vn(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:hs(e),index:Rs(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 Is(e,t){if(t.type==="subtable")return null;let n=ne(t.code),o=Ln(e,t),s=[o?` DEFAULT ${o}`:"",ys(n,t),Ns(n,t)].join("");return`${n} ${t.storage}${s}`}function ms(e,t){return Ln(e,t)}function Ns(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 gs(e){return e.type==="serial-number"||Ue(e.type)&&e.type!=="subtable"}function Ts(e,t){return t.filter(n=>n.type==="serial-number").map(n=>{let o=dt(e,n.code),s=n.serial?.start??1;return`CREATE SEQUENCE IF NOT EXISTS ${o} AS bigint MINVALUE ${s} START WITH ${s} CACHE 1`})}function Cs(e,t){let n=ct(e);return t.filter(o=>o.type==="serial-number").map(o=>`ALTER SEQUENCE ${dt(e,o.code)} OWNED BY ${n}.${ne(o.code)}`)}function bs(e,t){return t.filter(n=>n.type==="serial-number").map(n=>`GRANT USAGE, SELECT ON SEQUENCE ${dt(e,n.code)} TO "openxiangda_data_api"`)}function Os(e,t){let n=ct(e),o=[];for(let s of t){if(s.type==="subtable")continue;let i=ne(s.code),a=ne(Te("idx",e,s.code,s.index));switch(s.index){case"btree":o.push(`CREATE INDEX IF NOT EXISTS ${a} ON ${n} (${i})`);break;case"btree-snapshot-expressions":{let r=ne(Te("idx",e,s.code,"snapshot-value")),c=ne(Te("idx",e,s.code,"snapshot-label"));o.push(`CREATE INDEX IF NOT EXISTS ${r} ON ${n} ((${i} ->> 'value'))`,`CREATE INDEX IF NOT EXISTS ${c} ON ${n} ((${i} ->> 'label'))`);break}case"gin-jsonb-path":o.push(`CREATE INDEX IF NOT EXISTS ${a} ON ${n} USING GIN (${i} jsonb_path_ops)`);break;case"gist-range":o.push(`CREATE INDEX IF NOT EXISTS ${a} ON ${n} USING GIST (${i})`);break;case"gin-trigram":{let r=Yt.has(s.type)?`((${i} ->> 'label')) gin_trgm_ops`:`${i} gin_trgm_ops`;o.push(`CREATE INDEX IF NOT EXISTS ${a} ON ${n} USING GIN (${r})`);break}case"none":break}if(s.type==="serial-number"){let r=ne(Te("uidx",e,s.code,"serial"));o.push(`CREATE UNIQUE INDEX IF NOT EXISTS ${r} ON ${n} (${i})`)}}return o}function $s(e,t,n,o){let s=ct(e),i=ct(t),a=ne(Te("uidx",e,"environment_id","subtable-parent")),r=ne(Te("idx",t,n,o,"subtable-child")),c=ne(Te("fk",t,n,e)),p=ne(n),_=ne(o);return[`CREATE UNIQUE INDEX IF NOT EXISTS ${a} ON ${s} ("tenant_id", "app_code", "environment_key", "id")`,`CREATE INDEX IF NOT EXISTS ${r} ON ${i} ("tenant_id", "app_code", "environment_key", ${p}, ${_}, "id")`,`DO $native_subtable$ BEGIN
|
|
2
|
+
ALTER TABLE ${i}
|
|
3
3
|
ADD CONSTRAINT ${c}
|
|
4
|
-
FOREIGN KEY ("tenant_id", "app_code", "environment_key", ${
|
|
4
|
+
FOREIGN KEY ("tenant_id", "app_code", "environment_key", ${p})
|
|
5
5
|
REFERENCES ${s} ("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 Ne(e,...t){return`${e}_${(0,Rn.createHash)("sha256").update(t.join(":")).digest("hex").slice(0,32)}`}function ne(e){if(!/^[A-Za-z_][A-Za-z0-9_]{0,62}$/.test(e))throw new Error("OPENXIANGDA_NATIVE_IDENTIFIER_INVALID");return`"${e}"`}function ms(e,t){return e.type==="subtable"?"none":t?"gin-trigram":e.indexed?["date-range","datetime-range"].includes(e.type)?"gist-range":Jt.has(e.type)?"btree-snapshot-expressions":is.has(e.type)?"gin-jsonb-path":"btree":"none"}function Ts(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 as.has(e.type),"jsonb"}}function Sn(e,t){if(ke(t.type)&&t.type!=="subtable")return"'[]'::jsonb";if(t.type!=="serial-number")return"";let n=On(t.serial?.prefix||""),o=t.serial?.digits??6;return`(${n} || lpad(nextval(${On(at(e,t.code))})::text, ${o}, '0'))`}function Ns(e,t){return $n.has(t.type)?` CHECK (${e} IS NULL OR jsonb_typeof(${e}) = 'array')`:rs.has(t.type)?` CHECK (${e} IS NULL OR jsonb_typeof(${e}) = 'object')`:""}function rt(e){return`"app_data".${ne(e)}`}function at(e,t){let n=Ne("seq",e,t);return`"app_data".${ne(n)}`}function On(e){return`'${e.replace(/'/g,"''")}'`}var Dn=new Set(["option.single","option.multiple","user.single","user.multiple","department.single","department.multiple","resource-ref.single","resource-ref.multiple"]),gs=new Set([...Dn,"cascade.single","cascade.multiple","file","image","signature","address","location","json"]),yn=/^[A-Za-z][A-Za-z0-9_]{0,62}$/,Cs=new Set(["__proto__","prototype","constructor"]),ct=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 we(e,t){let n=Vn(e);if(!n)return null;let o=t.get(n[0]);if(!o)return null;let s=n.slice(1).join(".")||void 0;return{field:o,...s?{valuePath:s}:{}}}function dt(e){return!!(e&&e.field.type==="user.single"&&e.valuePath==="value")}function Wt(e,t,n){if(!e||!t||!Os(e))return!1;let{field:o,valuePath:s}=e;if(!s)return t.valueType==="uuid"?o.type==="uuid":["text.short","text.long","serial-number"].includes(o.type);if(s==="value")return!(t.valueSourceResourceCode&&o.type.startsWith("resource-ref.")&&o.source?.resourceCode!==t.valueSourceResourceCode);let r=s.slice(9),i=n.get(o.source?.resourceCode||"")?.get(r)?.type;return t.valueType==="uuid"?i==="uuid":["text.short","text.long","serial-number"].includes(i||"")}function bs(e,t){let n=Vn(t);if(!n)throw new ct(String(t||""));let o=e;for(let s of n){if(!o||typeof o!="object"||!Object.prototype.hasOwnProperty.call(o,s))return;o=o[s]}return o}function Os(e){let{field:t,valuePath:n}=e;if(!n)return!gs.has(t.type);if(n==="value")return Dn.has(t.type);if(!n.startsWith("snapshot."))return!1;let o=n.slice(9);return yn.test(o)&&t.type.startsWith("resource-ref.")&&!!t.source?.snapshotFields?.includes(o)}function Vn(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=>!yn.test(n)||Cs.has(n))||t.length===2&&t[1]!=="value"||t.length===3&&t[1]!=="snapshot"?null:t}var Rs=new Set(["option.single","user.single","department.single","resource-ref.single"]),$s=new Set(["text.short","text.long","text.rich","number.integer","number.decimal","boolean","date","time","datetime","uuid","serial-number"]),hs=new Set(["value","label","description","color"]),Ss=new Set(["avatarUrl","employeeNo","title","mobile","email"]),Ds=new Set(["fullPath","parent.value","parent.label"]),ys=new Set(["country.value","country.label","province.value","province.label","city.value","city.label","district.value","district.label","street.value","street.label","detail","fullAddress"]),Vs=new Set(["longitude","latitude","accuracy"]),ws=new Set(["address","name","province","city","district","source"]);function Fs(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 s=vs(o,t);if(!Object.keys(s).length)return o;let r={...o};return Object.defineProperty(r,"queryPathTypes",{configurable:!1,enumerable:!1,writable:!1,value:Object.freeze(s)}),r})}}))}function Ps(e,t){if(Rs.has(e.type)&&hs.has(t)||e.type==="user.single"&&Ss.has(t)||e.type==="department.single"&&Ds.has(t))return Me(t);if(e.type==="resource-ref.single"){let n=e.queryPathTypes?.[t];return n?{parts:t.split("."),type:n}:null}if(e.type==="address"&&ys.has(t))return Me(t);if(e.type==="location"){if(Vs.has(t))return{parts:[t],type:"number.decimal"};if(ws.has(t))return Me(t);if(t==="capturedAt")return{parts:[t],type:"datetime"}}return null}function vs(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 s=n.get(o);return s?[[`snapshot.${o}`,$s.has(s.type)?s.type:"json"]]:[]})):{}}function Me(e){return{parts:e.split("."),type:"text.short"}}var wn={"openxiangda.workflow.instance.completed.v2":"commit","openxiangda.workflow.instance.rejected.v2":"release","openxiangda.workflow.instance.withdrawn.v2":"release"};function Fn(e,t){let n=()=>{throw new Error("NATIVE_EVENT_DECIMAL_RESERVATION_INVALID")},o=u=>!u||typeof u!="object"||Array.isArray(u)?n():u,s=o(e);if(Object.keys(s).some(u=>!["resourceCode","workflowCode","outcomes"].includes(u))||typeof s.resourceCode!="string"||!/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/.test(s.resourceCode)||typeof s.workflowCode!="string"||!/^[A-Za-z0-9._:-]{1,128}$/.test(s.workflowCode)||t.execution!==void 0||!Array.isArray(s.outcomes)||!s.outcomes.length||s.outcomes.length>3)return n();let r=t.resources.find(u=>u.code===s.resourceCode),a=t.reservations.find(u=>u.mode==="reserve"&&u.resourceCode===s.resourceCode),i=t.workflows.find(u=>u.code===s.workflowCode);if(!r||!a||!i||i.resourceCode!==r.code)return n();let c=r.fields.find(u=>u.code===a.statusFieldCode);if(c?.type!=="option.single")return n();let _=new Set(c.options?.map(u=>u.value)),p=new Set,d=s.outcomes.map(u=>{let E=o(u),l=E.eventType;return Object.keys(E).some(A=>!["eventType","mode","eligibleChildStatuses"].includes(A))||typeof l!="string"||!Object.prototype.hasOwnProperty.call(wn,l)||!t.eventTypes.includes(l)||p.has(l)||E.mode!==wn[l]||!Array.isArray(E.eligibleChildStatuses)||!E.eligibleChildStatuses.length||E.eligibleChildStatuses.length>16||new Set(E.eligibleChildStatuses).size!==E.eligibleChildStatuses.length||E.eligibleChildStatuses.some(A=>typeof A!="string"||!/^[A-Za-z0-9._:-]{1,128}$/.test(A)||!_.has(A))?n():(p.add(l),{eventType:l,mode:E.mode,eligibleChildStatuses:[...E.eligibleChildStatuses].sort()})}).sort((u,E)=>u.eventType.localeCompare(E.eventType));return{resourceCode:s.resourceCode,workflowCode:s.workflowCode,outcomes:d}}function Pn(e,t){let n=o=>Array.isArray(o)?o.filter(s=>s&&typeof s=="object"&&!Array.isArray(s)):[];return{eventTypes:Array.isArray(t.eventTypes)?t.eventTypes:[],execution:t.execution,resources:n(e.data?.resources).map(o=>({code:o.code,fields:n(o.schema?.fields).map(s=>({code:s.code,type:s.type,options:n(s.options).map(r=>({value:r.value}))}))})),reservations:n(e.backend?.operations).flatMap(o=>o.platformAccess?.decimalReservation?[o.platformAccess.decimalReservation]:[]),workflows:n(e.workflows?.definitions).map(o=>({code:o.definition?.code,resourceCode:o.definition?.subject?.resourceCode}))}}var lt=class extends Error{constructor(n,o){super(o);this.pointer=n}pointer;code="NATIVE_EVENT_ACTION_INVALID"};function Gt(e,t,n="/events/subscriptions"){if(e.execution===void 0)return;let o=(A,T)=>{throw new lt(`${n}${A}`,T)},s=(A,T,m)=>((!A||typeof A!="object"||Array.isArray(A)||Object.keys(A).some(N=>!m.includes(N)))&&o(T,"Invalid action object or unsupported property"),A),r=s(e.execution,"/execution",["kind","version","operations"]);(r.kind!=="native-data"||r.version!==1)&&o("/execution","Expected native-data version 1"),e.platformAccess&&o("/platformAccess","Native actions do not use application runtime capabilities"),(!Array.isArray(e.eventTypes)||!e.eventTypes.length||e.eventTypes.some(A=>!/^openxiangda\.data\.record\.(created|updated|deleted)\.v2$/.test(A)))&&o("/eventTypes","Native data actions require declared data events");let a=e.filter?.resourceCodes;(!Array.isArray(a)||!a.length||a.length>20)&&o("/filter/resourceCodes","Native actions require explicit source resources");let i=new Map(t.map(A=>[A.code,A])),c=a.map(A=>{let T=i.get(A);return T||o("/filter/resourceCodes","Unknown source resource"),new Set((T.schema?.fields||[]).map(m=>m.code))}),_=new Set(e.payload?.fields||[]),p=e.payload?.includeChanges===!0,d=(A,T)=>{let m=s(A,T,["source","path","value"]);if(m.source==="literal"){(!Object.hasOwn(m,"value")||Object.hasOwn(m,"path"))&&o(T,"Literal binding requires only value");let g;try{g=JSON.stringify(m.value)}catch{o(T,"Literal must be JSON")}return(g===void 0||Buffer.byteLength(g)>65536)&&o(T,"Literal is too large or not JSON"),{source:"literal",value:JSON.parse(g)}}(m.source!=="event"||typeof m.path!="string"||Object.hasOwn(m,"value"))&&o(T,"Expected a literal or event binding");let N=m.path.split(".");(N.length>8||N.some(g=>!/^[A-Za-z0-9_-]+$/.test(g)||["__proto__","prototype","constructor"].includes(g)))&&o(T,"Invalid event path");let b=/^data\.projection\.([A-Za-z][A-Za-z0-9_]{0,62})$/.exec(m.path),R=/^data\.changes\.([A-Za-z][A-Za-z0-9_]{0,62})\.(before|after)$/.exec(m.path);if(b||R){let g=(b||R)[1];c.some(C=>!C.has(g))&&o(T,"Source field must exist on every filtered resource"),_.add(g),R&&(p=!0)}else["id","time","type","subject","data.recordId","data.revision","data.operation","data.resourceCode"].includes(m.path)||o(T,"Event path is not part of the data event contract");return{source:"event",path:m.path}};(!Array.isArray(r.operations)||r.operations.length<1||r.operations.length>16)&&o("/execution/operations","Expected 1 to 16 operations");let u={},E=r.operations.map((A,T)=>{let m=`/execution/operations/${T}`,N=s(A,m,["operation","resourceCode","data","id","expectedRevision"]);["create","update","delete"].includes(N.operation)||o(m,"Unsupported Native operation");let b=i.get(N.resourceCode);b||o(m,"Unknown action target resource");let R=new Map((b.schema?.fields||[]).map(C=>[C.code,C])),g=N.data===void 0?{}:s(N.data,`${m}/data`,[...R.keys()]);return Object.keys(g).length>32&&o(m,"Maximum 32 mapped fields per operation"),N.operation==="create"&&(N.id!==void 0||N.expectedRevision!==void 0)&&o(m,"Create does not accept id or expectedRevision"),N.operation==="delete"&&N.data!==void 0&&o(m,"Delete does not accept data"),Object.keys(g).some(C=>R.get(C)?.type==="serial-number")&&o(m,"Generated fields cannot be assigned"),u[N.resourceCode]=ee(b),{operation:N.operation,resourceCode:N.resourceCode,...N.operation==="create"?{}:{id:d(N.id,`${m}/id`),expectedRevision:d(N.expectedRevision,`${m}/expectedRevision`)},...N.operation==="delete"?{}:{data:Object.fromEntries(Object.entries(g).map(([C,D])=>[C,d(D,`${m}/data/${C}`)]))}}});(_.size>32||[..._].some(A=>c.some(T=>!T.has(A))))&&o("/payload/fields","Payload must contain at most 32 declared source fields");let l={kind:"native-data",version:1,operations:E,resourceDigests:u};return Buffer.byteLength(JSON.stringify(l))>65536&&o("/execution","Action plan exceeds 64 KiB"),{execution:{...l,digest:ee(l)},payload:{includeChanges:p,fields:[..._].sort()}}}function Ce(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)?e:void 0}function Yt(e,t){if(e?.instanceCommands===void 0)return[];let n=Ce(e.instanceCommands);if(!n||!Object.keys(n).length||Object.keys(n).some(s=>!["withdraw","terminate"].includes(s)))return["WORKFLOW_INSTANCE_COMMAND_POLICIES_INVALID"];let o=[];for(let[s,r]of Object.entries(n)){let a=Ce(r),i=s==="withdraw"?["beforeFact"]:["beforeFact","capability"];if(!a||Object.keys(a).some(c=>!i.includes(c))){o.push(`WORKFLOW_INSTANCE_COMMAND_POLICY_INVALID:${s}`);continue}if(s==="terminate"){let c=a.capability;(typeof c!="string"||c.length>255||!/^app:[a-z][a-z0-9]*(?:-[a-z0-9]+)*:[A-Za-z0-9:._-]+$/.test(c)||t&&(!c.startsWith(`app:${t.appCode}:`)||!t.capabilities.includes(c)))&&o.push("WORKFLOW_INSTANCE_TERMINATE_CAPABILITY_INVALID")}if(s==="withdraw"||a.beforeFact!==void 0){let c=a.beforeFact,_=Ce(e.inputSchema),p=Ce(Ce(_?.properties)?.[c]),d=Ce(Ce(e.subject)?.factProjection)?.[c],u=t?.fields.get(d);(typeof c!="string"||!/^[A-Za-z][A-Za-z0-9_]{0,62}$/.test(c)||!Array.isArray(_?.required)||!_.required.includes(c)||p?.type!=="string"||p?.format!=="date-time"||typeof d!="string"||t&&(u?.type!=="datetime"||u.nullable===!0))&&o.push(`WORKFLOW_INSTANCE_COMMAND_DEADLINE_FACT_INVALID:${s}`)}}return o}function Ls(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 zt(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,s,r,a,i]=t,c=t[8],_=new Date(Date.UTC(Number(n),Number(o),0)).getUTCDate();if(Number(o)<1||Number(o)>12||Number(s)<1||Number(s)>_||Number(r)>23||Number(a)>59||Number(i)>59||c!=="Z"&&(Number(c.slice(1,3))>23||Number(c.slice(4))>59))return null;let p=Date.parse(e);return Number.isFinite(p)?p:null}function ks(e,t,n,o){let s=e?.[t];if(!s||t==="terminate"&&s.beforeFact===void 0)return null;let r=s.beforeFact,a=Ce(n),i=r&&a&&Object.hasOwn(a,r)?zt(a[r]):null,c=o instanceof Date?o.getTime():zt(o);return i===null||c===null||!Number.isFinite(c)?"WORKFLOW_V2_CANCELLATION_DEADLINE_INVALID":c<i?null:"WORKFLOW_V2_CANCELLATION_DEADLINE_PASSED"}var At=Ro(require("crypto"),1);var vn="native-4",Ln={"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","data.decimal-reservations":"1.1.0","data.decimal-reservation-lifecycle":"1.0.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 yr=5,Vr=20,wr=50,Fr=50,Pr=100,Fe=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=(s,r,a)=>{a>5&&je("NATIVE_DATA_POLICY_EXPRESSION_DEPTH_EXCEEDED",r);let i=kn(s,r),c=["allOf","anyOf"].filter(d=>d in i);if(c.length===0){n.push({rule:i,pointer:r}),n.length>50&&je("NATIVE_DATA_POLICY_EXPRESSION_LEAVES_EXCEEDED",r);return}let _=c[0],p=i[_];(c.length!==1||Object.keys(i).length!==1||!Array.isArray(p)||p.length<1||p.length>20)&&je("NATIVE_DATA_POLICY_EXPRESSION_GROUP_INVALID",r),p.forEach((d,u)=>o(d,`${r}/${_}/${u}`,a+1))};return o(e,t,1),n}function Kt(e,t){Be(e,t);let n=(o,s)=>{let r=kn(o,s);if(Array.isArray(r.allOf))return qt(r.allOf.flatMap((a,i)=>n(a,`${s}/allOf/${i}`)),s);if(Array.isArray(r.anyOf)){let a=[[]];return r.anyOf.forEach((i,c)=>{let _=n(i,`${s}/anyOf/${c}`);a=qt(a.flatMap(p=>_.map(d=>[...p,...d])),s)}),a}return[[r]]};return qt(n(e,t),t)}function qt(e,t){let n=e.reduce((o,s)=>o+s.length,0);return(e.length>50||n>100)&&je("NATIVE_DATA_POLICY_EXPRESSION_EXPANSION_EXCEEDED",t),e}function kn(e,t){return(!e||typeof e!="object"||Array.isArray(e))&&je("NATIVE_DATA_POLICY_EXPRESSION_NODE_INVALID",t),e}function je(e,t){throw new Fe(e,t)}var xs="openxiangda.config-bundle/v3",to="openxiangda.contract-bundle/v3",xn="openxiangda.native-configuration-projection/v1",We=vn,Us=/^[a-f0-9]{64}$/,Ms=/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/,js=/^app:[a-z][a-z0-9]*(?:-[a-z0-9]+)*:[A-Za-z0-9:._*-]+$/,Bs=/^[a-z][a-z0-9]*(?:[-_.][a-z0-9]+)*$/,Js=/^[a-z][a-z0-9]*(?:[-.][a-z0-9]+)*$/,Ws=/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/,Gs=/^[A-Za-z][A-Za-z0-9_]{0,62}$/,Un=/^[A-Za-z][A-Za-z0-9_]{0,127}$/,zs=/^[a-z][a-z0-9]*(?:[-_][a-z0-9]+)*$/,Ys=/^[A-Z][A-Z0-9_]*$/,qs=/^[a-z][a-z0-9-]{2,63}$/,Ks=/^[A-Za-z][A-Za-z0-9_-]{0,127}$/,Hs=/^[A-Za-z][A-Za-z0-9_.]{0,127}$/,Xs=16,Qs=2*1024,Zs=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"]),ei=new Set(["overview","database","operations","workflow","members","calendar","document","folder","settings"]),ti=new Set(["approve","reject","return","transfer","delegate","add_assignee","resubmit","withdraw","terminate","admin_reassign","admin_override","retry_resolution"]),ni=4*1024*1024,oi=8*1024*1024,si=40,ii=1e5,Xt=1024*1024,ri="openxiangda.event-handler-manifest/v2",no="openxiangda.application-route-manifest/v3",Mn=64,oo=new Set(["id","revision","created_by","updated_by","created_at","updated_at"]),q=Object.freeze({perspectives:100,resources:100,subjectReadSurfaces:50,capabilities:2e3,operations:500,eventConsumers:100,eventProducers:1e3,eventSchemas:100,eventTypes:500,workflows:100,routes:500,adminPages:500,adminNavigationGroups:100,adminNavigationItems:500}),ut=["openxiangda.data.record.created.v2","openxiangda.data.record.updated.v2","openxiangda.data.record.deleted.v2"],ft=["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(ft),_t=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(([s,r])=>[s,String(r).slice(0,128)]))}};function ci(e){let t=h(e.appCode,"/appCode",128);Ms.test(t)||f("NATIVE_CONFIG_APP_CODE_INVALID","/appCode");let n=Zt(e.expectedConfigDigest,"/expectedConfigDigest"),o=Zt(e.expectedContractDigest,"/expectedContractDigest"),s=Qn(e.configBytes,ni,"/configBytes","NATIVE_CONFIG_ARTIFACT_TOO_LARGE"),r=Qn(e.contractBytes,oi,"/contractBytes","NATIVE_CONTRACT_ARTIFACT_TOO_LARGE");Zn(s,n,"/configBytes","NATIVE_CONFIG_DIGEST_MISMATCH"),Zn(r,o,"/contractBytes","NATIVE_CONTRACT_DIGEST_MISMATCH");let a=Hn(s,"/configBytes","NATIVE_CONFIG_JSON_INVALID","NATIVE_CONFIG_NOT_CANONICAL"),i=Hn(r,"/contractBytes","NATIVE_CONTRACT_JSON_INVALID","NATIVE_CONTRACT_NOT_CANONICAL");Xn(a,"/config"),Xn(i,"/contracts");let c=a,_=i;li(c,t),ui(_,t,n);let p=fi(c,n,_.generatorVersion);Qi(p,_,c),Q(p)!==Q(_)&&f("NATIVE_CONTRACT_CLOSURE_MISMATCH",en(p,_,"/contracts"));let d={authz:{appCode:t,...c.authz,perspectives:c.perspectives,capabilityCatalog:p.capabilities},data:{appCode:t,resources:c.data.resources,resourceContracts:p.resources,...p.subjectReadSurfaces?{subjectReadSurfaces:p.subjectReadSurfaces}:{}},events:{appCode:t,...c.events,consumers:p.eventConsumers,producers:p.eventProducers,handlerManifest:p.eventHandlerManifest,eventTypes:p.eventTypes,capturePlans:io({resources:c.data.resources,dataPolicies:c.authz.dataPolicies,subscriptions:p.eventConsumers,capturePolicies:c.events.capturePolicies})},workflows:{appCode:t,...c.workflows,contracts:p.workflows},runtime:{appCode:t,requirements:c.runtime,backend:c.backend,frontend:c.frontend},contracts:p},u={authz:Pe(d.authz),data:Pe(d.data),events:Pe(d.events),workflows:Pe(d.workflows),runtime:Pe(d.runtime),contracts:Pe(d.contracts)},E={configDigest:n,contractDigest:o,generatorVersion:_.generatorVersion},l=so(c),A={schemaVersion:xn,compilerContractVersion:We,appCode:t,source:E,projections:u,requiredPlatformCapabilities:l,aggregateDigest:ee({schemaVersion:xn,compilerContractVersion:We,appCode:t,source:E,requiredPlatformCapabilities:l,projectionDigests:Object.fromEntries(Object.entries(u).map(([T,m])=>[T,m.digest]))})};return mo(A)}function so(e){let t=e.authz.roles,n=e.data.resources,o=e.backend.operations,s=t.some(l=>l.capabilities.some(A=>A.endsWith(":directory:read")))||n.some(l=>l.schema.fields.some(A=>["user.single","user.multiple","department.single","department.multiple"].includes(A.type)))||o.some(l=>l.platformAccess?.directory),r=!!(e.events.subscriptions.length||e.events.timers.length||e.events.dateTriggers.length||e.events.schemas.length),a=o.some(l=>l.platformAccess?.managedFiles||l.platformAccess?.managedFileCopies)||e.events.subscriptions.some(l=>l.platformAccess?.managedFileCopies),i=o.some(l=>l.platformAccess?.notification)||e.events.subscriptions.some(l=>l.platformAccess?.notification),c=e.workflows.definitions.filter(l=>l.launch.mode==="standalone"||l.launch.mode==="hidden-handoff"),_=o.some(l=>l.platformAccess?.workflow)||c.length>0,p={resources:n},d={perspectives:e.perspectives,authz:e.authz},u={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(l=>({code:l.code,method:l.method,path:l.path,capability:l.capability,platformAccess:l.platformAccess||null,...l.browser?{browser:l.browser}:{},ai:l.ai||null}))}};return[...n.some(l=>l.decimalReservationLifecycle)?[{code:"data.decimal-reservation-lifecycle",declaration:n.filter(l=>l.decimalReservationLifecycle).map(l=>({code:l.code,decimalReservationLifecycle:l.decimalReservationLifecycle}))}]:[],...o.some(l=>l.platformAccess?.decimalReservation)||e.events.subscriptions.some(l=>l.platformAccess?.decimalReservation)?[{code:"data.decimal-reservations",declaration:[...o.filter(l=>l.platformAccess?.decimalReservation).map(l=>({code:l.code,decimalReservation:l.platformAccess.decimalReservation})),...e.events.subscriptions.filter(l=>l.platformAccess?.decimalReservation).map(l=>({subscriptionCode:l.code,decimalReservation:l.platformAccess.decimalReservation}))]}]:[],{code:"application-native-2",declaration:u},{code:"authz.native-batch-explain",declaration:d},{code:"authz.native-management",declaration:d},{code:"deployment.durable-runs",declaration:u.backend},{code:"deployment.platform-executor",declaration:u.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:p},{code:"data.native-golden-crud",declaration:p}]:[],...n.some(St)?[{code:"data.audit-read-access",declaration:p}]:[],...s?[{code:"directory-v2",declaration:{roles:t.map(l=>({code:l.code,capabilities:l.capabilities.filter(A=>A.endsWith(":directory:read"))})),resources:n.map(l=>({code:l.code,fields:l.schema.fields.filter(A=>["user.single","user.multiple","department.single","department.multiple"].includes(A.type))})),operations:o.filter(l=>l.platformAccess?.directory).map(l=>({code:l.code,directory:l.platformAccess.directory}))}}]:[],...a?[{code:"data.managed-files",declaration:{operations:o.filter(l=>l.platformAccess?.managedFiles||l.platformAccess?.managedFileCopies).map(l=>({code:l.code,...l.platformAccess?.managedFiles?{managedFiles:l.platformAccess.managedFiles}:{},...l.platformAccess?.managedFileCopies?{managedFileCopies:l.platformAccess.managedFileCopies}:{}})),subscriptions:e.events.subscriptions.filter(l=>l.platformAccess?.managedFileCopies).map(l=>({code:l.code,managedFileCopies:l.platformAccess.managedFileCopies}))}}]:[],...e.events.subscriptions.some(l=>l.execution)?[{code:"events.native-data-actions",declaration:e.events.subscriptions.filter(l=>l.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(l=>l.definition.instanceCommands!==void 0)?[{code:"workflow.instance-cancellation-policy",declaration:e.workflows.definitions.filter(l=>l.definition.instanceCommands!==void 0)}]:[],..._?[{code:"business-process.durable-command",declaration:{operations:o.filter(l=>l.platformAccess?.workflow).map(l=>({code:l.code,workflow:l.platformAccess.workflow})),definitions:c,activations:e.workflows.activations.filter(l=>c.some(A=>A.definition.code===l.workflowCode))}}]:[],...i?[{code:"notification-hub-v2",declaration:{operations:o.filter(l=>l.platformAccess?.notification).map(l=>({code:l.code,notification:l.platformAccess.notification})),subscriptions:e.events.subscriptions.filter(l=>l.platformAccess?.notification).map(l=>({code:l.code,notification:l.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:l,declaration:A})=>({code:l,contractVersion:Ln[l],usageDigest:`sha256:${ee(A)}`})).sort((l,A)=>l.code===A.code?0:l.code<A.code?-1:1)}function io(e){let t=new Map,n=new Set(e.resources.map(r=>String(r.code)));for(let[r,a]of $(e.capturePolicies===void 0?[]:e.capturePolicies,"/capturePlan/capturePolicies",100).entries()){let i=`/capturePlan/capturePolicies/${r}`,c=I(a,i);O(c,["resourceCode","mode"],i);let _=G(c.resourceCode,`${i}/resourceCode`);n.has(_)||f("NATIVE_EVENT_CAPTURE_RESOURCE_NOT_FOUND",i,{resourceCode:_}),t.has(_)&&f("NATIVE_EVENT_CAPTURE_POLICY_DUPLICATE",i,{resourceCode:_}),c.mode!=="all"&&c.mode!=="subscribed"&&f("NATIVE_EVENT_CAPTURE_MODE_INVALID",`${i}/mode`),t.set(_,c.mode)}let o=new Map(e.dataPolicies.map((r,a)=>{let i=I(r,`/capturePlan/dataPolicies/${a}`);return[String(i.code),i]})),s=e.subscriptions.map((r,a)=>I(r,`/capturePlan/subscriptions/${a}`));return e.resources.map((r,a)=>{let i=`/capturePlan/resources/${a}`,c=I(r,i),_=G(c.code,`${i}/code`),p=c.schema?I(c.schema,`${i}/schema`):c,d=new Set($(p.fields||[],`${i}/schema/fields`,500).map((C,D)=>B(I(C,`${i}/schema/fields/${D}`).code,`${i}/schema/fields/${D}/code`))),u=c.dataPolicyCode?w(c.dataPolicyCode,`${i}/dataPolicyCode`):null,E=u?o.get(u):void 0;u&&!E&&f("NATIVE_EVENT_CAPTURE_AUTHZ_POLICY_NOT_FOUND",i,{resourceCode:_,dataPolicyCode:u});let l=new Set;for(let C of E?.rules||[])l.add(String(C.field));if(E?.readExpression)for(let C of Be(E.readExpression,`${i}/readExpression`))l.add(String(C.rule.field));let A=new Set,T=new Set,m=new Set;for(let[C,D]of s.entries()){let y=$(D.eventTypes,`/capturePlan/subscriptions/${C}/eventTypes`,20).map(String);if(!y.some(M=>M.startsWith("openxiangda.data.")))continue;let U=I(D.filter||{},`/capturePlan/subscriptions/${C}/filter`),k=Array.isArray(U.resourceCodes)?U.resourceCodes.map(String):[];if(k.length&&!k.includes(_))continue;for(let M of y)ut.includes(M)&&m.add(M);for(let M of di(U,`/capturePlan/subscriptions/${C}/filter`))A.add(M);let Y=I(D.payload||{},`/capturePlan/subscriptions/${C}/payload`);for(let M of $(Y.fields||[],`/capturePlan/subscriptions/${C}/payload/fields`,32))T.add(B(M,`/capturePlan/subscriptions/${C}/payload/fields`))}let N=new Set([...A,...T]),b=new Set([...N,...l]);b.size>Mn&&f("NATIVE_EVENT_CAPTURE_FIELDS_LIMIT",i,{resourceCode:_,maximum:Mn});for(let C of b)!d.has(C)&&!(l.has(C)&&oo.has(C))&&f("NATIVE_EVENT_CAPTURE_FIELD_NOT_FOUND",i,{resourceCode:_,field:C});let R=I(c.fieldPolicies||{},`${i}/fieldPolicies`);for(let C of N)R[C]?.mask==="omit"&&f("NATIVE_EVENT_CAPTURE_FIELD_SENSITIVE",i,{resourceCode:_,field:C});let g={resourceCode:_,...t.get(_)==="subscribed"?{capturedEventTypes:[...m].sort()}:{},filterFields:[...A].sort(),projectionFields:[...T].sort(),authorizationFields:[...l].sort(),captureFields:[...b].sort()};return{...g,digest:ee(g)}}).sort((r,a)=>r.resourceCode.localeCompare(a.resourceCode))}function di(e,t){let n=new Set;for(let[a,i]of $(e.changes||[],`${t}/changes`,16).entries()){let c=I(i,`${t}/changes/${a}`);n.add(B(c.field,`${t}/changes/${a}/field`))}let o=I(e.changedFields||{},`${t}/changedFields`);for(let a of["anyOf","allOf","noneOf"])for(let[i,c]of $(o[a]||[],`${t}/changedFields/${a}`,32).entries())n.add(B(c,`${t}/changedFields/${a}/${i}`));let s=0,r=(a,i,c)=>{c>3&&f("NATIVE_EVENT_FILTER_DEPTH_LIMIT",i);let _=I(a,i);if(_.change){let d=I(_.change,`${i}/change`);n.add(B(d.field,`${i}/change/field`)),s+=1;return}if(_.not){r(_.not,`${i}/not`,c+1);return}let p=_.all?"all":_.any?"any":null;p||f("NATIVE_EVENT_FILTER_CONDITION_INVALID",i);for(let[d,u]of $(_[p],`${i}/${p}`,16).entries())r(u,`${i}/${p}/${d}`,c+1)};return e.where&&r(e.where,`${t}/where`,1),s+=Array.isArray(e.changes)?e.changes.length:0,s>16&&f("NATIVE_EVENT_FILTER_ATOM_LIMIT",t),[...n].sort()}function li(e,t){O(e,["schemaVersion","compilerContractVersion","appCode","perspectives","authz","backend","data","events","workflows","frontend","runtime"],"/config"),L(e.schemaVersion,xs,"/config/schemaVersion"),L(e.compilerContractVersion,We,"/config/compilerContractVersion"),L(e.appCode,t,"/config/appCode"),$(e.perspectives,"/config/perspectives",100);let n=I(e.authz,"/config/authz");O(n,["capabilities","roles","scopeDimensions","scopeSources","roleMembershipSources","relationshipGrantSources","dataPolicies","authorizationTransitions"],"/config/authz",["authenticatedUserRoleCode"]),$(n.capabilities,"/config/authz/capabilities",2e3),$(n.roles,"/config/authz/roles",100),$(n.scopeDimensions,"/config/authz/scopeDimensions",100),$(n.scopeSources,"/config/authz/scopeSources",100),$(n.roleMembershipSources,"/config/authz/roleMembershipSources",100),$(n.relationshipGrantSources,"/config/authz/relationshipGrantSources",100),$(n.dataPolicies,"/config/authz/dataPolicies",100),$(n.authorizationTransitions,"/config/authz/authorizationTransitions",100);let o=I(e.backend,"/config/backend");O(o,["secrets","operations"],"/config/backend"),$(o.secrets,"/config/backend/secrets",100),$(o.operations,"/config/backend/operations",500),zi(o.secrets);let s=I(e.data,"/config/data");O(s,["resources"],"/config/data",["resourceDetailRoutes","subjectReadSurfaces"]),$(s.resources,"/config/data/resources",100),s.subjectReadSurfaces!==void 0&&$(s.subjectReadSurfaces,"/config/data/subjectReadSurfaces",q.subjectReadSurfaces),s.resourceDetailRoutes!==void 0&&$(s.resourceDetailRoutes,"/config/data/resourceDetailRoutes",100);let r=I(e.events,"/config/events");O(r,["schemas","subscriptions","timers","dateTriggers"],"/config/events",["capturePolicies"]),$(r.schemas,"/config/events/schemas",100),$(r.subscriptions,"/config/events/subscriptions",100),$(r.timers,"/config/events/timers",100),$(r.dateTriggers,"/config/events/dateTriggers",100);let a=I(e.workflows,"/config/workflows");O(a,["definitions","bindings","activations","providers","editableParameters"],"/config/workflows"),$(a.definitions,"/config/workflows/definitions",100),$(a.bindings,"/config/workflows/bindings",100),$(a.activations,"/config/workflows/activations",100),$(a.providers,"/config/workflows/providers",100),$(a.editableParameters,"/config/workflows/editableParameters",100);let i=I(e.frontend,"/config/frontend");O(i,["routes","user","admin","devicePolicy"],"/config/frontend",["authentication","publicAccess"]),$(i.routes,"/config/frontend/routes",500);let c=I(i.user,"/config/frontend/user");O(c,["applicationTodoCenter"],"/config/frontend/user"),Le(c.applicationTodoCenter,"/config/frontend/user/applicationTodoCenter"),tn(i.devicePolicy,"/config/frontend/devicePolicy"),Object.prototype.hasOwnProperty.call(i,"authentication")&&ao(i.authentication,i.routes,e,"/config/frontend/authentication"),Object.prototype.hasOwnProperty.call(i,"publicAccess")&&hi(i.publicAccess,e,"/config/frontend/publicAccess");let _=I(i.admin,"/config/frontend/admin");O(_,["navigation"],"/config/frontend/admin",["access"]),_.access!==void 0&&mt(_.access,"/config/frontend/admin/access",e.appCode),Vi(_.navigation,"/config/frontend/admin/navigation");let p=I(e.runtime,"/config/runtime");O(p,["protocolCapabilities","health"],"/config/runtime"),F(p.protocolCapabilities,"/config/runtime/protocolCapabilities",100),O(I(p.health,"/config/runtime/health"),["livePath","readyPath","versionPath"],"/config/runtime/health"),L(p.health.livePath,"/__platform/health","/config/runtime/health/livePath"),L(p.health.readyPath,"/__platform/ready","/config/runtime/health/readyPath"),L(p.health.versionPath,"/__platform/version","/config/runtime/health/versionPath")}function ui(e,t,n){O(e,["schemaVersion","compilerContractVersion","generatorVersion","appCode","configDigest","perspectives","resources","capabilities","operations","eventConsumers","eventProducers","eventSchemas","eventHandlerManifest","eventTypes","workflows","routes","routeManifest","adminPages","adminNavigation"],"/contracts",["authentication","publicAccess","adminAccess","subjectReadSurfaces"]),L(e.schemaVersion,to,"/contracts/schemaVersion"),L(e.compilerContractVersion,We,"/contracts/compilerContractVersion"),h(e.generatorVersion,"/contracts/generatorVersion",128),L(e.appCode,t,"/contracts/appCode"),L(e.configDigest,n,"/contracts/configDigest"),$(e.perspectives,"/contracts/perspectives",q.perspectives),$(e.resources,"/contracts/resources",q.resources),e.subjectReadSurfaces!==void 0&&$(e.subjectReadSurfaces,"/contracts/subjectReadSurfaces",q.subjectReadSurfaces),$(e.capabilities,"/contracts/capabilities",q.capabilities),$(e.operations,"/contracts/operations",q.operations),$(e.eventConsumers,"/contracts/eventConsumers",q.eventConsumers),$(e.eventProducers,"/contracts/eventProducers",q.eventProducers),$(e.eventSchemas,"/contracts/eventSchemas",q.eventSchemas),I(e.eventHandlerManifest,"/contracts/eventHandlerManifest"),F(e.eventTypes,"/contracts/eventTypes",q.eventTypes),$(e.workflows,"/contracts/workflows",q.workflows),$(e.routes,"/contracts/routes",q.routes),Object.prototype.hasOwnProperty.call(e,"authentication")&&Oi(e.authentication,"/contracts/authentication"),Object.prototype.hasOwnProperty.call(e,"publicAccess")&&Si(e.publicAccess,"/contracts/publicAccess"),Object.prototype.hasOwnProperty.call(e,"adminAccess")&&mt(e.adminAccess,"/contracts/adminAccess",t),ki(e.routeManifest,"/contracts/routeManifest",t),Pi(e.adminPages,"/contracts/adminPages"),vi(e.adminNavigation,"/contracts/adminNavigation")}function fi(e,t,n){let o=Ei(e);Bi(e,o),Wi(e),Ji(e),Yi(e);let s=e.events.schemas.map((l,A)=>{let T=`/config/events/schemas/${A}`,m=I(l,T),N=h(m.eventType,`${T}/eventType`,255);return N.startsWith("openxiangda.")&&f("NATIVE_EVENT_SCHEMA_RESERVED",`${T}/eventType`,{eventType:N}),L(m.schemaDigest,ee(I(m.jsonSchema,`${T}/jsonSchema`)),`${T}/schemaDigest`),m}),r=new Set([...ut,...ft,...s.map(l=>String(l.eventType))]),a=new Map(e.data.resources.map(l=>[String(l.code),new Map(l.schema.fields.map(A=>[String(A.code),String(A.type)]))])),i=X(e.events.subscriptions.map((l,A)=>{let T=`/config/events/subscriptions/${A}`,m=I(l,T),N=F(m.eventTypes,`${T}/eventTypes`,20);N.forEach((C,D)=>{r.has(C)||f("NATIVE_EVENT_TYPE_NOT_REGISTERED",`${T}/eventTypes/${D}`,{eventType:C})});let b=Gt(m,e.data.resources,T),R=pi(m.delivery,N,`${T}/delivery`),g=_i(m.platformAccess,`${T}/platformAccess`,a,e,m);return{code:w(m.code,`${T}/code`),endpointPath:le(m.endpointPath,`${T}/endpointPath`),eventTypes:N,filter:I(m.filter,`${T}/filter`),payload:b?.payload||I(m.payload,`${T}/payload`),...b?{execution:b.execution}:{},...g?{platformAccess:g}:{},delivery:R}}),l=>l.code),c=new Map(s.map(l=>[String(l.eventType),String(l.dataSchemaVersion)])),_=X([...e.data.resources.flatMap(l=>ut.map(A=>({code:`data:${l.code}:${A}`,source:"data",eventType:A,dataSchemaVersion:"2.0.0",resourceCode:l.code}))),...s.map(l=>({code:`app:${l.eventType}`,source:"app",eventType:l.eventType,dataSchemaVersion:l.dataSchemaVersion})),...e.events.timers.map(l=>({code:l.code,source:"timer",eventType:l.eventType,dataSchemaVersion:c.get(String(l.eventType))||"2.0.0"})),...e.events.dateTriggers.map(l=>({code:l.code,source:"date",eventType:l.eventType,dataSchemaVersion:c.get(String(l.eventType))||"2.0.0",resourceCode:l.resourceCode,field:l.field})),...e.workflows.activations.length?ft.map(l=>({code:`workflow:${l}`,source:"workflow",eventType:l,dataSchemaVersion:"2.0.0"})):[]],l=>`${l.source}:${l.code}:${l.eventType}`),p=j([...i.flatMap(l=>l.eventTypes),..._.map(l=>String(l.eventType))]);Fi(e);let d=uo(e),u=Ii(e,o),E=ro(e);try{Bt(e.data.resources,E)}catch(l){throw l instanceof Oe&&f(l.code,l.pointer,{reason:l.reason}),l}return{schemaVersion:to,compilerContractVersion:We,generatorVersion:n,appCode:e.appCode,configDigest:t,perspectives:e.perspectives,resources:Ai(e),...u.length?{subjectReadSurfaces:u}:{},capabilities:X(o,l=>l.code),operations:E,eventConsumers:i,eventProducers:_,eventSchemas:s,eventHandlerManifest:{schemaVersion:ri,appCode:e.appCode,handlers:i.filter(l=>!l.execution).map(l=>({code:l.code,endpointPath:l.endpointPath,eventTypes:l.eventTypes,dataSchemaVersions:j(l.eventTypes.map(A=>A.startsWith("openxiangda.")?"2.0.0":c.get(A)||"2.0.0")),maxBodyBytes:65536,receiptProtocolVersion:2}))},eventTypes:p,workflows:po(e),routes:It(e),...Object.prototype.hasOwnProperty.call(e.frontend,"authentication")?{authentication:Ri(e)}:{},...Object.prototype.hasOwnProperty.call(e.frontend,"publicAccess")?{publicAccess:Di(e)}:{},...e.frontend.admin.access?{adminAccess:e.frontend.admin.access}:{},routeManifest:Mi(e),adminPages:d,adminNavigation:yi(e)}}function _i(e,t,n,o,s){if(e===void 0)return;let r=I(e,t);O(r,["notification","managedFileCopies","decimalReservation"],t,!0);let a={};if(r.decimalReservation!==void 0)try{a.decimalReservation=Fn(r.decimalReservation,Pn(o,s))}catch{f("NATIVE_EVENT_DECIMAL_RESERVATION_INVALID",`${t}/decimalReservation`)}if(r.notification!==void 0){let i=I(r.notification,`${t}/notification`);O(i,["mode"],`${t}/notification`),L(i.mode,"business-standard",`${t}/notification/mode`),a.notification={mode:"business-standard"}}if(r.managedFileCopies!==void 0){let i=$(r.managedFileCopies,`${t}/managedFileCopies`,16);i.length||f("NATIVE_EVENT_MANAGED_FILE_COPIES_REQUIRED",`${t}/managedFileCopies`);let c=new Set;a.managedFileCopies=X(i.map((_,p)=>{let d=`${t}/managedFileCopies/${p}`,u=I(_,d);O(u,["mode","sourceResourceCode","sourceFieldCodes","targetResourceCode","targetFieldCodes"],d),L(u.mode,"copy",`${d}/mode`);let E=G(u.sourceResourceCode,`${d}/sourceResourceCode`),l=G(u.targetResourceCode,`${d}/targetResourceCode`),A=n.get(E),T=n.get(l);(!A||!T)&&f("NATIVE_EVENT_MANAGED_FILE_COPY_RESOURCE_INVALID",d);let m=F(u.sourceFieldCodes,`${d}/sourceFieldCodes`,16),N=F(u.targetFieldCodes,`${d}/targetFieldCodes`,16);(!m.length||m.length!==N.length)&&f("NATIVE_EVENT_MANAGED_FILE_COPY_FIELDS_INVALID",d),m.forEach((R,g)=>{let C=A.get(R),D=T.get(N[g]);(!["file","image"].includes(String(C))||C!==D)&&f("NATIVE_EVENT_MANAGED_FILE_COPY_FIELD_INVALID",`${d}/sourceFieldCodes/${g}`)});let b=`${E}:${m.join(",")}=>${l}:${N.join(",")}`;return c.has(b)&&f("NATIVE_EVENT_MANAGED_FILE_COPY_DUPLICATE",d),c.add(b),{mode:"copy",sourceResourceCode:E,sourceFieldCodes:j(m),targetResourceCode:l,targetFieldCodes:j(N)}}),_=>`${_.sourceResourceCode}:${_.sourceFieldCodes.join(",")}=>${_.targetResourceCode}:${_.targetFieldCodes.join(",")}`)}return Object.keys(a).length||f("NATIVE_EVENT_PLATFORM_ACCESS_EMPTY",t),a}function pi(e,t,n){let o=I(e,n);O(o,["timeoutMs","maxAttempts","initialBackoffMs","maxBackoffMs","ordering","concurrency"],n),Z(o.timeoutMs,`${n}/timeoutMs`,1e3,3e4),Z(o.maxAttempts,`${n}/maxAttempts`,1,12);let s=Z(o.initialBackoffMs,`${n}/initialBackoffMs`,1e3,3e5);Z(o.maxBackoffMs,`${n}/maxBackoffMs`,s,18e5),Z(o.concurrency,`${n}/concurrency`,1,50);let r=h(o.ordering,`${n}/ordering`,32);return["none","record","workflow-instance"].includes(r)||f("NATIVE_EVENT_DELIVERY_ORDERING_INVALID",`${n}/ordering`),r==="workflow-instance"&&t.some(a=>!ai.has(a))&&f("NATIVE_EVENT_WORKFLOW_ORDERING_REQUIRES_WORKFLOW_FACTS",`${n}/ordering`),o}function Ei(e){let t=new Map;for(let n of Io(e.appCode))t.set(n.code,n);for(let[n,o]of e.authz.capabilities.entries()){let s=`/config/authz/capabilities/${n}`,r=I(o,s);O(r,["code","kind","name","description"],s,!0);let a=ge(r.code,`${s}/code`,e.appCode);t.has(a)&&f("NATIVE_CAPABILITY_DUPLICATE",`${s}/code`),["backend","ui"].includes(r.kind)||f("NATIVE_CAPABILITY_KIND_INVALID",`${s}/kind`);let i={code:a,kind:r.kind,name:h(r.name,`${s}/name`,255),source:"explicit",...r.description===void 0?{}:{description:on(r.description,`${s}/description`,2e3)}};t.set(a,i)}for(let[n,o]of e.data.resources.entries()){let s=`/config/data/resources/${n}`,r=Re(o,s,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 i of["read","create","update","delete"]){let c=ge(r.capabilities[i],`${s}/capabilities/${i}`,e.appCode);t.has(c)&&f("NATIVE_CAPABILITY_DUPLICATE",`${s}/capabilities/${i}`),t.set(c,{code:c,kind:"data",name:a[i],source:"data"})}for(let[i,c]of Object.entries(r.fieldPolicies)){if(Se(i))continue;let _=I(c,`${s}/fieldPolicies/${i}`);for(let p of["read","create","update"])if(Array.isArray(_[p]))for(let d of F(_[p],`${s}/fieldPolicies/${i}/${p}`,2e3))ge(d,`${s}/fieldPolicies/${i}/${p}`,e.appCode),!t.has(d)&&t.set(d,{code:d,kind:"data",name:`${r.name}.${i}.${p}`,source:"data"})}}return[...t.values()]}function Ai(e){let t=mi(e);return X(e.data.resources.map((n,o)=>{let s=Re(n,`/config/data/resources/${o}`,e.appCode),r=t.get(s.code);return{code:s.code,schemaDigest:ee(s.schema),fields:X(s.schema.fields.map(a=>({code:a.code,type:a.type})),a=>a.code),...r?{detailRouteCode:r}:{}}}),n=>n.code)}function Ii(e,t){if(e.data.subjectReadSurfaces===void 0)return[];let n=$(e.data.subjectReadSurfaces,"/config/data/subjectReadSurfaces",q.subjectReadSurfaces),o=new Set(t.map(a=>String(a.code))),s=new Map(e.data.resources.map((a,i)=>{let c=`/config/data/resources/${i}`,_=Re(a,c,e.appCode);return[String(_.code),{resource:_,fields:new Map($(I(_.schema,`${c}/schema`).fields,`${c}/schema/fields`,500).map(p=>{let d=I(p,`${c}/schema/fields`);return[String(d.code),d]}))}]})),r=new Set;return X(n.map((a,i)=>{let c=`/config/data/subjectReadSurfaces/${i}`,_=I(a,c);O(_,["code","name","capability","subject","relations"],c);let p=w(_.code,`${c}/code`);r.has(p)&&f("NATIVE_SUBJECT_READ_SURFACE_CODE_DUPLICATE",`${c}/code`),r.add(p);let d=ge(_.capability,`${c}/capability`,e.appCode);o.has(d)||f("NATIVE_SUBJECT_READ_SURFACE_CAPABILITY_NOT_DECLARED",`${c}/capability`);let u=I(_.subject,`${c}/subject`);O(u,["resourceCode","fields"],`${c}/subject`);let E=G(u.resourceCode,`${c}/subject/resourceCode`),l=s.get(E);l||f("NATIVE_SUBJECT_READ_SURFACE_RESOURCE_NOT_DECLARED",`${c}/subject/resourceCode`);let A=F(u.fields,`${c}/subject/fields`,100).map((R,g)=>B(R,`${c}/subject/fields/${g}`));A.length||f("NATIVE_SUBJECT_READ_SURFACE_FIELDS_REQUIRED",`${c}/subject/fields`);for(let[R,g]of A.entries()){let C=l.fields.get(g);(!C||C.type==="subtable")&&f("NATIVE_SUBJECT_READ_SURFACE_FIELD_INVALID",`${c}/subject/fields/${R}`)}let T=$(_.relations,`${c}/relations`,8);T.length||f("NATIVE_SUBJECT_READ_SURFACE_RELATIONS_REQUIRED",`${c}/relations`);let m=new Set,N=0,b=X(T.map((R,g)=>{let C=`${c}/relations/${g}`,D=I(R,C);O(D,["code","resourceCode","foreignKeyField","fields","limit"],C,["order"]);let y=w(D.code,`${C}/code`);m.has(y)&&f("NATIVE_SUBJECT_READ_SURFACE_RELATION_CODE_DUPLICATE",`${C}/code`),m.add(y);let U=G(D.resourceCode,`${C}/resourceCode`),k=s.get(U);k||f("NATIVE_SUBJECT_READ_SURFACE_RESOURCE_NOT_DECLARED",`${C}/resourceCode`);let Y=B(D.foreignKeyField,`${C}/foreignKeyField`),M=k.fields.get(Y),ue=I(M?.source||{},`${C}/foreignKeyField/source`);(!M||!["uuid","resource-ref.single"].includes(String(M.type))||M.type==="resource-ref.single"&&(ue.kind!=="resource"||ue.resourceCode!==E))&&f("NATIVE_SUBJECT_READ_SURFACE_RELATION_INVALID",`${C}/foreignKeyField`);let fe=F(D.fields,`${C}/fields`,100).map((se,V)=>B(se,`${C}/fields/${V}`));fe.length||f("NATIVE_SUBJECT_READ_SURFACE_FIELDS_REQUIRED",`${C}/fields`);for(let[se,V]of fe.entries()){let x=k.fields.get(V);(!x||x.type==="subtable")&&f("NATIVE_SUBJECT_READ_SURFACE_FIELD_INVALID",`${C}/fields/${se}`)}let K=$(D.order||[],`${C}/order`,10).map((se,V)=>{let x=`${C}/order/${V}`,P=I(se,x);O(P,["field","direction"],x);let J=B(P.field,`${x}/field`),W=k.fields.get(J);return(!oo.has(J)&&!W||W?.type==="subtable"||W&&!ye(W.type))&&f("NATIVE_SUBJECT_READ_SURFACE_ORDER_FIELD_INVALID",`${x}/field`),["asc","desc"].includes(String(P.direction))||f("NATIVE_SUBJECT_READ_SURFACE_ORDER_DIRECTION_INVALID",`${x}/direction`),{field:J,direction:P.direction}}),Ae=Z(D.limit,`${C}/limit`,1,100);return N+=Ae,{code:y,resourceCode:U,foreignKeyField:Y,fields:j(fe),...K.length?{order:K}:{},limit:Ae}}),R=>R.code);return N>400&&f("NATIVE_SUBJECT_READ_SURFACE_ROW_LIMIT_EXCEEDED",`${c}/relations`),{code:p,name:h(_.name,`${c}/name`,255),capability:d,subject:{resourceCode:E,fields:j(A)},relations:b}}),a=>a.code)}function mi(e){let t=e.data.resourceDetailRoutes===void 0?[]:$(e.data.resourceDetailRoutes,"/config/data/resourceDetailRoutes",100),n=new Map(e.data.resources.map((r,a)=>{let i=`/config/data/resources/${a}`,c=Re(r,i,e.appCode);return[c.code,c]})),o=new Map(It(e).map(r=>[String(r.code),r])),s=new Map;for(let[r,a]of t.entries()){let i=`/config/data/resourceDetailRoutes/${r}`,c=I(a,i);O(c,["resourceCode","desktop","mobile"],i);let _=G(c.resourceCode,`${i}/resourceCode`);s.has(_)&&f("NATIVE_DATA_RESOURCE_DETAIL_ROUTE_DUPLICATE",`${i}/resourceCode`);let p=n.get(_);p||f("NATIVE_DATA_RESOURCE_DETAIL_ROUTE_RESOURCE_MISSING",`${i}/resourceCode`);let d=w(c.desktop,`${i}/desktop`),u=w(c.mobile,`${i}/mobile`);d===u&&f("NATIVE_DATA_RESOURCE_DETAIL_ROUTE_INVALID",i);let E=String(p.capabilities.read);for(let[l,A]of[["desktop",d],["mobile",u]]){let T=`${i}/${l}`,m=o.get(A);m||f("NATIVE_DATA_RESOURCE_DETAIL_ROUTE_REFERENCE_MISSING",T),m.surface!=="user"&&f("NATIVE_DATA_RESOURCE_DETAIL_ROUTE_SURFACE_INVALID",T);let N=le(m.path,`${T}/path`),b=[...N.matchAll(/:([A-Za-z][A-Za-z0-9_]*)/g)],R=l==="mobile"?!N.startsWith("/m/"):N==="/m"||N.startsWith("/m/");(N.includes("*")||N.includes("?")||N.includes("#")||N.split("/").includes("..")||b.length!==1||R)&&f("NATIVE_DATA_RESOURCE_DETAIL_ROUTE_PATH_INVALID",T);let g=Array.isArray(m.access?.allOf)?m.access.allOf:[];m.capability!==E&&!g.includes(E)&&f("NATIVE_DATA_RESOURCE_DETAIL_ROUTE_CAPABILITY_INVALID",T)}s.set(_,{desktop:d,mobile:u})}return s}function ro(e){let t=new Map(e.data.resources.map((a,i)=>{let c=`/config/data/resources/${i}`,_=Re(a,c,e.appCode);return[_.code,new Map(_.schema.fields.map(p=>[String(p.code),p]))]})),n=new Map(e.data.resources.map((a,i)=>{let c=`/config/data/resources/${i}`,_=Re(a,c,e.appCode);return[_.code,new Map(_.schema.fields.map(p=>[String(p.code),String(p.type)]))]})),o=new Set(n.keys()),s=new Set(e.workflows.activations.map((a,i)=>Tt(I(a,`/config/workflows/activations/${i}`).workflowCode,`/config/workflows/activations/${i}/workflowCode`))),r=new Map;return X(e.backend.operations.map((a,i)=>{let c=`/config/backend/operations/${i}`,_=I(a,c);O(_,["code","method","path","capability","requestSchema","responseSchema","description","platformAccess","browser","ai"],c,!0);let p=h(_.method,`${c}/method`,16);["GET","POST","PUT","PATCH","DELETE"].includes(p)||f("NATIVE_OPERATION_METHOD_INVALID",`${c}/method`);let d=w(_.code,`${c}/code`);Ci(_.ai,c,d,p,o);let u=gi(_.platformAccess,`${c}/platformAccess`,n,t,s,new Set(e.authz.roles.map(l=>String(l.code))));if(u?.decimalReservation){let l=u.decimalReservation,A=String(l.resourceCode),T=JSON.stringify([l.amountFieldCode,l.currencyFieldCode,l.relationFieldCode,l.parentFieldCode,l.rootFieldCode,l.statusFieldCode,l.parentRelationValue,l.childRelationValue]),m=r.get(A);m&&m!==T&&f("NATIVE_DECIMAL_RESERVATION_MAPPING_CONFLICT",`${c}/platformAccess/decimalReservation`),r.set(A,T)}let E=Ti(_.browser,`${c}/browser`,p,_.requestSchema,_.responseSchema,n,t,e.data.subjectReadSurfaces||[]);return{code:d,method:p,path:le(_.path,`${c}/path`),requiredCapability:ge(_.capability,`${c}/capability`,e.appCode),requestSchemaDigest:ee(I(_.requestSchema,`${c}/requestSchema`)),responseSchemaDigest:ee(I(_.responseSchema,`${c}/responseSchema`)),..._.description===void 0?{}:{description:on(_.description,`${c}/description`,2e3)},...u?{platformAccess:u}:{},...E?{browser:E}:{}}}),a=>a.code)}function Ti(e,t,n,o,s,r,a,i){if(e===void 0)return null;let c=I(e,t);O(c,["exposure","behavior","idempotency","subject"],t,["refreshTargets","fileIntent"]),L(c.exposure,"authenticated",`${t}/exposure`);let _=h(c.behavior,`${t}/behavior`,32);["read","controlled"].includes(_)||f("NATIVE_OPERATION_BROWSER_BEHAVIOR_INVALID",`${t}/behavior`);let p=h(c.idempotency,`${t}/idempotency`,32);(!["none","required"].includes(p)||_==="controlled"&&p!=="required"||_==="read"&&p!=="none")&&f("NATIVE_OPERATION_BROWSER_IDEMPOTENCY_INVALID",`${t}/idempotency`);let d=I(c.subject,`${t}/subject`);O(d,["resourceCode","inputField"],`${t}/subject`);let u=G(d.resourceCode,`${t}/subject/resourceCode`);r.has(u)||f("NATIVE_OPERATION_BROWSER_SUBJECT_RESOURCE_NOT_DECLARED",`${t}/subject/resourceCode`);let E=B(d.inputField,`${t}/subject/inputField`),l=I(o,`${t}/requestSchema`),A=I(s,`${t}/responseSchema`);(l.type!=="object"||l.additionalProperties!==!1||A.type!=="object"||A.additionalProperties!==!1)&&f("NATIVE_OPERATION_BROWSER_SCHEMA_ROOT_INVALID",`${t}/requestSchema`);let T=I(l.properties,`${t}/requestSchema/properties`),m=new Set(l.required===void 0?[]:F(l.required,`${t}/requestSchema/required`,200));(!(E in T)||!m.has(E))&&f("NATIVE_OPERATION_BROWSER_SUBJECT_INPUT_INVALID",`${t}/subject/inputField`);let N=I(T[E],`${t}/requestSchema/properties/${E}`);(N.type!=="string"||N.format!=="uuid")&&f("NATIVE_OPERATION_BROWSER_SUBJECT_INPUT_INVALID",`${t}/subject/inputField`);let b=new Map((Array.isArray(i)?i:[]).map((y,U)=>{let k=I(y,`/config/data/subjectReadSurfaces/${U}`);return[String(k.code),String(I(k.subject,`/config/data/subjectReadSurfaces/${U}/subject`).resourceCode)]})),R=c.refreshTargets===void 0?[]:$(c.refreshTargets,`${t}/refreshTargets`,16),g=new Set,C=X(R.map((y,U)=>{let k=`${t}/refreshTargets/${U}`,Y=I(y,k);O(Y,["kind","code"],k),L(Y.kind,"subject-surface",`${k}/kind`);let M=w(Y.code,`${k}/code`);return(g.has(M)||!b.has(M)||b.get(M)!==u)&&f("NATIVE_OPERATION_BROWSER_REFRESH_TARGET_INVALID",`${k}/code`),g.add(M),{kind:"subject-surface",code:M}}),y=>`${y.kind}:${y.code}`),D=Ni(c.fileIntent,`${t}/fileIntent`,n,_,p,u,T,m,a);return{exposure:"authenticated",behavior:_,idempotency:p,subject:{resourceCode:u,inputField:E},...C.length?{refreshTargets:C}:{},...D?{fileIntent:D}:{}}}function Ni(e,t,n,o,s,r,a,i,c){if(e===void 0)return null;let _=I(e,t);O(_,["recordResourceCode","recordIdInputField","relationField","fileNameField","contentTypeField","sizeField","purposes","maxTtlSeconds","maxBytes"],t),(n!=="GET"||o!=="read"||s!=="none")&&f("NATIVE_OPERATION_FILE_INTENT_BEHAVIOR_INVALID",t);let p=G(_.recordResourceCode,`${t}/recordResourceCode`),d=c.get(p);d||f("NATIVE_OPERATION_FILE_INTENT_RESOURCE_NOT_DECLARED",`${t}/recordResourceCode`);let u=B(_.recordIdInputField,`${t}/recordIdInputField`),E=I(a[u],`${t}/recordIdInputField`);(!i.has(u)||E.type!=="string"||E.format!=="uuid")&&f("NATIVE_OPERATION_FILE_INTENT_RECORD_INPUT_INVALID",`${t}/recordIdInputField`);let l=B(_.relationField,`${t}/relationField`),A=d.get(l);(!A||!["uuid","resource-ref.single"].includes(String(A.type))||String(A.type)==="resource-ref.single"&&(String(I(A.source,`${t}/relationField`).kind||"")!=="resource"||String(I(A.source,`${t}/relationField`).resourceCode||"")!==r))&&f("NATIVE_OPERATION_FILE_INTENT_RELATION_INVALID",`${t}/relationField`);let T=[["fileNameField",["text.short","text.long"]],["contentTypeField",["text.short","text.long"]],["sizeField",["number.integer"]]],m={};for(let[g,C]of T){let D=B(_[g],`${t}/${g}`);C.includes(String(d.get(D)?.type))||f("NATIVE_OPERATION_FILE_INTENT_METADATA_INVALID",`${t}/${g}`),m[g]=D}let N=X(F(_.purposes,`${t}/purposes`,2),g=>g);(!N.length||N.some(g=>!["preview","download"].includes(g)))&&f("NATIVE_OPERATION_FILE_INTENT_PURPOSE_INVALID",`${t}/purposes`);let b=Number(_.maxTtlSeconds);(!Number.isSafeInteger(b)||b<1||b>300)&&f("NATIVE_OPERATION_FILE_INTENT_TTL_INVALID",`${t}/maxTtlSeconds`);let R=Number(_.maxBytes);return(!Number.isSafeInteger(R)||R<1||R>104857600)&&f("NATIVE_OPERATION_FILE_INTENT_SIZE_INVALID",`${t}/maxBytes`),{recordResourceCode:p,recordIdInputField:u,relationField:l,fileNameField:m.fileNameField,contentTypeField:m.contentTypeField,sizeField:m.sizeField,purposes:N,maxTtlSeconds:b,maxBytes:R}}function gi(e,t,n,o,s,r){if(e===void 0)return null;let a=I(e,t);O(a,["directory","managedFiles","managedFileCopies","notification","workflow","roleAssertions","decimalReservation"],t,!0),Object.keys(a).length===0&&f("NATIVE_OPERATION_PLATFORM_ACCESS_EMPTY",t);let i={};if(a.roleAssertions!==void 0){let c=I(a.roleAssertions,`${t}/roleAssertions`);O(c,["roleCodes"],`${t}/roleAssertions`);let _=F(c.roleCodes,`${t}/roleAssertions/roleCodes`,20);_.length||f("NATIVE_OPERATION_ROLE_ASSERTIONS_REQUIRED",`${t}/roleAssertions/roleCodes`),_.forEach((p,d)=>{r.has(p)||f("NATIVE_ROLE_REFERENCE_MISSING",`${t}/roleAssertions/roleCodes/${d}`)}),i.roleAssertions={roleCodes:j(_)}}if(a.directory!==void 0){let c=I(a.directory,`${t}/directory`);O(c,["mode","fields"],`${t}/directory`),c.mode!=="current-initiator"&&f("NATIVE_OPERATION_DIRECTORY_MODE_INVALID",`${t}/directory/mode`);let _=new Set(["displayName","employeeNumber","primaryDepartment","departments"]),p=F(c.fields,`${t}/directory/fields`,4);(!p.length||p.some(d=>!_.has(d)))&&f("NATIVE_OPERATION_DIRECTORY_FIELDS_INVALID",`${t}/directory/fields`),i.directory={mode:"current-initiator",fields:j(p)}}if(a.managedFiles!==void 0){let c=$(a.managedFiles,`${t}/managedFiles`,16);c.length||f("NATIVE_OPERATION_MANAGED_FILES_REQUIRED",`${t}/managedFiles`);let _=new Set;i.managedFiles=X(c.map((p,d)=>{let u=`${t}/managedFiles/${d}`,E=I(p,u);O(E,["resourceCode","fieldCodes","intents"],u);let l=G(E.resourceCode,`${u}/resourceCode`);(_.has(l)||!n.has(l))&&f("NATIVE_OPERATION_MANAGED_FILE_RESOURCE_INVALID",`${u}/resourceCode`),_.add(l);let A=F(E.fieldCodes,`${u}/fieldCodes`,16);(!A.length||A.some(m=>!["file","image","signature"].includes(String(n.get(l)?.get(m)||""))))&&f("NATIVE_OPERATION_MANAGED_FILE_FIELD_INVALID",`${u}/fieldCodes`);let T=F(E.intents,`${u}/intents`,2);return(!T.length||T.some(m=>!["create","update"].includes(m)))&&f("NATIVE_OPERATION_MANAGED_FILE_INTENT_INVALID",`${u}/intents`),{resourceCode:l,fieldCodes:j(A),intents:j(T)}}),p=>p.resourceCode)}if(a.managedFileCopies!==void 0){let c=$(a.managedFileCopies,`${t}/managedFileCopies`,16);c.length||f("NATIVE_OPERATION_MANAGED_FILE_COPIES_REQUIRED",`${t}/managedFileCopies`);let _=new Set;i.managedFileCopies=X(c.map((p,d)=>{let u=`${t}/managedFileCopies/${d}`,E=I(p,u);O(E,["mode","sourceResourceCode","sourceFieldCodes","targetResourceCode","targetFieldCodes"],u),L(E.mode,"copy",`${u}/mode`);let l=G(E.sourceResourceCode,`${u}/sourceResourceCode`),A=G(E.targetResourceCode,`${u}/targetResourceCode`),T=n.get(l),m=n.get(A);(!T||!m)&&f("NATIVE_OPERATION_MANAGED_FILE_COPY_RESOURCE_INVALID",u);let N=F(E.sourceFieldCodes,`${u}/sourceFieldCodes`,16),b=F(E.targetFieldCodes,`${u}/targetFieldCodes`,16);(!N.length||N.length!==b.length)&&f("NATIVE_OPERATION_MANAGED_FILE_COPY_FIELDS_INVALID",u),N.forEach((g,C)=>{let D=T.get(g),y=m.get(b[C]);(!["file","image"].includes(String(D))||D!==y)&&f("NATIVE_OPERATION_MANAGED_FILE_COPY_FIELD_INVALID",`${u}/sourceFieldCodes/${C}`)});let R=`${l}:${N.join(",")}=>${A}:${b.join(",")}`;return _.has(R)&&f("NATIVE_OPERATION_MANAGED_FILE_COPY_DUPLICATE",u),_.add(R),{mode:"copy",sourceResourceCode:l,sourceFieldCodes:j(N),targetResourceCode:A,targetFieldCodes:j(b)}}),p=>`${p.sourceResourceCode}:${p.sourceFieldCodes.join(",")}=>${p.targetResourceCode}:${p.targetFieldCodes.join(",")}`)}if(a.notification!==void 0){let c=I(a.notification,`${t}/notification`);O(c,["mode"],`${t}/notification`),c.mode!=="business-standard"&&f("NATIVE_OPERATION_NOTIFICATION_MODE_INVALID",`${t}/notification/mode`),i.notification={mode:"business-standard"}}if(a.workflow!==void 0){let c=I(a.workflow,`${t}/workflow`);O(c,["codes"],`${t}/workflow`);let _=F(c.codes,`${t}/workflow/codes`,16);(!_.length||_.some(p=>!s.has(p)))&&f("NATIVE_OPERATION_WORKFLOW_CODE_INVALID",`${t}/workflow/codes`),i.workflow={codes:j(_)}}if(a.decimalReservation!==void 0){let c=`${t}/decimalReservation`,_=I(a.decimalReservation,c);O(_,["mode","resourceCode","amountFieldCode","currencyFieldCode","relationFieldCode","parentFieldCode","rootFieldCode","statusFieldCode","parentRelationValue","childRelationValue","eligibleParentStatuses","eligibleChildStatuses"],c);let p=h(_.mode,`${c}/mode`,16);["reserve","commit","release"].includes(p)||f("NATIVE_DECIMAL_RESERVATION_MODE_INVALID",`${c}/mode`);let d=G(_.resourceCode,`${c}/resourceCode`),u=o.get(d);u||f("NATIVE_DECIMAL_RESERVATION_RESOURCE_MISSING",`${c}/resourceCode`);let l=Object.fromEntries(["amountFieldCode","currencyFieldCode","relationFieldCode","parentFieldCode","rootFieldCode","statusFieldCode"].map(g=>[g,B(_[g],`${c}/${g}`)])),A=g=>u.get(l[g]),T=g=>new Set((A(g)?.options||[]).map(C=>String(C.value))),m=w(_.parentRelationValue,`${c}/parentRelationValue`),N=w(_.childRelationValue,`${c}/childRelationValue`),b=F(_.eligibleParentStatuses,`${c}/eligibleParentStatuses`,16),R=F(_.eligibleChildStatuses,`${c}/eligibleChildStatuses`,16);(A("amountFieldCode")?.type!=="number.decimal"||A("amountFieldCode")?.exactDecimal!==!0||A("amountFieldCode")?.precision!==18||A("amountFieldCode")?.scale!==2||A("currencyFieldCode")?.type!=="option.single"||A("relationFieldCode")?.type!=="option.single"||A("parentFieldCode")?.type!=="resource-ref.single"||A("parentFieldCode")?.source?.resourceCode!==d||A("rootFieldCode")?.type!=="uuid"||A("statusFieldCode")?.type!=="option.single"||m===N||!T("relationFieldCode").has(m)||!T("relationFieldCode").has(N)||!b.length||!R.length||b.some(g=>!T("statusFieldCode").has(g))||R.some(g=>!T("statusFieldCode").has(g)))&&f("NATIVE_DECIMAL_RESERVATION_FIELD_INVALID",c),i.decimalReservation={mode:p,resourceCode:d,...l,parentRelationValue:m,childRelationValue:N,eligibleParentStatuses:j(b),eligibleChildStatuses:j(R)}}return i}function Ci(e,t,n,o,s){if(e===void 0)return;let r=`${t}/ai`,a=I(e,r);Js.test(n)||f("NATIVE_OPERATION_AI_CODE_INVALID",`${t}/code`),O(a,["name","description","risk","resources","sideEffects","concurrency","timeoutMs"],r,!0),h(a.name,`${r}/name`,Xt),h(a.description,`${r}/description`,Xt);let i=h(a.risk,`${r}/risk`,16);["read","write","destructive","external"].includes(i)||f("NATIVE_OPERATION_AI_RISK_INVALID",`${r}/risk`),i==="read"!=(o==="GET")&&f("NATIVE_OPERATION_AI_METHOD_RISK_MISMATCH",`${r}/risk`),o==="DELETE"&&!["destructive","external"].includes(i)&&f("NATIVE_OPERATION_AI_METHOD_RISK_MISMATCH",`${r}/risk`);let c=F(a.resources,`${r}/resources`,16);c.length===0&&f("NATIVE_OPERATION_AI_RESOURCE_REQUIRED",`${r}/resources`),c.forEach((p,d)=>{let u=G(p,`${r}/resources/${d}`);s.has(u)||f("NATIVE_OPERATION_AI_RESOURCE_MISSING",`${r}/resources/${d}`)});let _=F(a.sideEffects,`${r}/sideEffects`,20);(i==="read"&&_.length!==0||i!=="read"&&_.length===0)&&f("NATIVE_OPERATION_AI_SIDE_EFFECT_INVALID",`${r}/sideEffects`),a.concurrency!==void 0&&!["none","revision"].includes(h(a.concurrency,`${r}/concurrency`,16))&&f("NATIVE_OPERATION_AI_CONCURRENCY_INVALID",`${r}/concurrency`),a.timeoutMs!==void 0&&Z(a.timeoutMs,`${r}/timeoutMs`,100,3e4)}function pt(e){return(e.replace(/\/{2,}/g,"/").replace(/\/$/,"")||"/").split("/").map(n=>n.startsWith(":")?":":n.includes("*")?"*":n).join("/")}function bi(e,t){let n=I(e,t),o=h(n.type,`${t}/type`,32),s=["code","type","label","presentation","required"],r=o==="sso"?[...s,"provider"]:o==="dingtalk"?[...s,"flow"]:s;O(n,r,t);let a=w(n.code,`${t}/code`),i=h(n.label,`${t}/label`,255),c=h(n.presentation,`${t}/presentation`,16);["primary","secondary"].includes(c)||f("NATIVE_APPLICATION_AUTH_METHOD_PRESENTATION_INVALID",`${t}/presentation`);let _=Le(n.required,`${t}/required`);return["sso","password","dingtalk"].includes(o)||f("NATIVE_APPLICATION_AUTH_METHOD_TYPE_INVALID",`${t}/type`),o==="sso"&&n.provider!=="tenant-default"&&f("NATIVE_APPLICATION_AUTH_SSO_PROVIDER_INVALID",`${t}/provider`),o==="dingtalk"&&!["auto","jsapi","oauth"].includes(h(n.flow,`${t}/flow`,16))&&f("NATIVE_APPLICATION_AUTH_DINGTALK_FLOW_INVALID",`${t}/flow`),{code:a,type:o,label:i,presentation:c,required:_,...o==="sso"?{provider:"tenant-default"}:{},...o==="dingtalk"?{flow:n.flow}:{}}}function jn(e,t,n){let o=I(e,n);O(o,["routeCode","path","defaultRouteCode"],n);let s=w(o.routeCode,`${n}/routeCode`),r=le(o.path,`${n}/path`),a=t==="desktop"?"/login":"/m/login";return(r!==a||/[:*?#\\]/.test(r))&&f("NATIVE_APPLICATION_AUTH_SURFACE_PATH_INVALID",`${n}/path`,{device:t,expectedPath:a}),{routeCode:s,path:r,defaultRouteCode:w(o.defaultRouteCode,`${n}/defaultRouteCode`)}}function ao(e,t,n,o){if(e===null)return;let s=I(e,o);O(s,["accountMode","registration","methods","surfaces"],o),L(s.accountMode,"existing-platform-users-only",`${o}/accountMode`);let r=I(s.registration,`${o}/registration`);O(r,["mode"],`${o}/registration`),L(r.mode,"reject",`${o}/registration/mode`);let a=$(s.methods,`${o}/methods`,8);a.length===0&&f("NATIVE_APPLICATION_AUTH_METHOD_REQUIRED",`${o}/methods`);let i=a.map((m,N)=>bi(m,`${o}/methods/${N}`)),c=new Set,_=new Set;for(let[m,N]of i.entries())c.has(N.code)&&f("NATIVE_APPLICATION_AUTH_METHOD_CODE_DUPLICATE",`${o}/methods/${m}/code`),_.has(N.type)&&f("NATIVE_APPLICATION_AUTH_METHOD_TYPE_DUPLICATE",`${o}/methods/${m}/type`),c.add(N.code),_.add(N.type);i.filter(m=>m.presentation==="primary").length!==1&&f("NATIVE_APPLICATION_AUTH_PRIMARY_METHOD_INVALID",`${o}/methods`);let p=I(s.surfaces,`${o}/surfaces`);O(p,["desktop","mobile"],`${o}/surfaces`);let d=jn(p.desktop,"desktop",`${o}/surfaces/desktop`),u=jn(p.mobile,"mobile",`${o}/surfaces/mobile`);d.routeCode===u.routeCode&&f("NATIVE_APPLICATION_AUTH_SURFACE_CODE_DUPLICATE",`${o}/surfaces/mobile/routeCode`);let E=$(t,"/config/frontend/routes",500),l=new Map;for(let[m,N]of E.entries()){let b=I(N,`/config/frontend/routes/${m}`);l.set(String(b.code||""),b)}let A=new Set((Array.isArray(n.data?.resources)?n.data.resources:[]).map(m=>String(m.code||"")).filter(m=>/^[a-z][a-z0-9-]{0,62}$/.test(m)));for(let[m,N]of[["desktop",d],["mobile",u]]){l.has(N.routeCode)&&f("NATIVE_APPLICATION_AUTH_SURFACE_CODE_CONFLICT",`${o}/surfaces/${m}/routeCode`);let b=/^user\.([a-z][a-z0-9-]{0,62})\.(records|submit)$/.exec(String(N.defaultRouteCode||"")),R=l.get(N.defaultRouteCode),g=String(R?.path||"");if(b&&A.has(b[1])){let D=b[2]==="records"?`/my/${b[1]}`:`/my/${b[1]}/submit`;R={surface:"user",path:m==="mobile"?`/m${D}`:D},g=String(R.path)}let C=m==="desktop"?g==="/m"||g.startsWith("/m/"):!(g==="/m"||g.startsWith("/m/"));(!R||R.surface!=="user"||/[:*]/.test(g)||C)&&f("NATIVE_APPLICATION_AUTH_DEFAULT_ROUTE_INVALID",`${o}/surfaces/${m}/defaultRouteCode`)}let T=co(n).filter(m=>!m.owner.startsWith("authentication:"));for(let[m,N]of[["desktop",d],["mobile",u]]){let b=T.find(R=>pt(R.path)===pt(N.path));b&&f("NATIVE_APPLICATION_AUTH_SURFACE_PATH_CONFLICT",`${o}/surfaces/${m}/path`,{owner:b.owner})}}function Oi(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),s=I(o.surfaces,`${t}/surfaces`),r={...o,surfaces:{...s,desktop:{...I(s.desktop,`${t}/surfaces/desktop`),defaultRouteCode:"auth-desktop-default"},mobile:{...I(s.mobile,`${t}/surfaces/mobile`),defaultRouteCode:"auth-mobile-default"}}};ao(r,n.frontend.routes,{...n,frontend:{...n.frontend,authentication:r}},t)}function Ri(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 $i=new Set(["draft.read","draft.update","validate","create","own.list","own.read","public.list","public.read"]);function hi(e,t,n){let o=I(e,n);O(o,["policies"],n);let s=$(o.policies,`${n}/policies`,16);s.length<1&&f("NATIVE_PUBLIC_POLICY_REQUIRED",n);let r=new Map(t.frontend.routes.map(_=>[_.code,_])),a=new Map(t.data.resources.map(_=>[_.code,_])),i=new Set,c=new Set(s.map(_=>String(_?.code||"")));s.forEach((_,p)=>{let d=`${n}/policies/${p}`,u=I(_,d);O(u,["code","routeCode","mode","resourceCode","operations","fields"],d,["requiredFields","ownRecordFields","publicRecordFields","publicFilters","serverGeneratedFields","schedule","publicSubtableFields","draft","validations"]);let E=w(u.code,`${d}/code`);i.has(E)&&f("NATIVE_PUBLIC_POLICY_DUPLICATE",`${d}/code`);let l=w(u.routeCode,`${d}/routeCode`),A=r.get(l);(!A||A.surface!=="user"||A.capability!==void 0||A.access!==void 0||/[:*]/.test(String(A.path)))&&f("NATIVE_PUBLIC_ROUTE_INVALID",`${d}/routeCode`),L(u.mode,"anonymous",`${d}/mode`);let T=G(u.resourceCode,`${d}/resourceCode`),m=a.get(T);m||f("NATIVE_PUBLIC_RESOURCE_MISSING",`${d}/resourceCode`);let N=new Map(m.schema.fields.map(V=>[String(V.code),String(V.type)])),b=F(u.operations,`${d}/operations`,8);(b.length<1||b.some(V=>!$i.has(V)))&&f("NATIVE_PUBLIC_OPERATION_INVALID",`${d}/operations`),b.includes("draft.read")!==b.includes("draft.update")&&f("NATIVE_PUBLIC_DRAFT_OPERATION_INCOMPLETE",`${d}/operations`);let R=F(u.fields,`${d}/fields`,64);(R.length<1||R.some(V=>!N.has(V)))&&f("NATIVE_PUBLIC_FIELD_INVALID",`${d}/fields`);for(let V of["requiredFields","ownRecordFields","publicRecordFields"]){if(!Object.prototype.hasOwnProperty.call(u,V))continue;F(u[V],`${d}/${V}`,64).some(P=>!R.includes(P))&&f("NATIVE_PUBLIC_FIELD_SCOPE_INVALID",`${d}/${V}`)}let g=Object.prototype.hasOwnProperty.call(u,"serverGeneratedFields")?$(u.serverGeneratedFields,`${d}/serverGeneratedFields`,16):[],C=new Set;g.forEach((V,x)=>{let P=`${d}/serverGeneratedFields/${x}`,J=I(V,P);O(J,["field","kind"],P);let W=B(J.field,`${P}/field`);(C.has(W)||!N.has(W)||R.includes(W)||N.get(W)!=="text.short"&&N.get(W)!=="text.long")&&f("NATIVE_PUBLIC_SERVER_GENERATED_FIELD_INVALID",`${P}/field`),L(J.kind,"random-token",`${P}/kind`),C.add(W)});let D=Object.prototype.hasOwnProperty.call(u,"schedule")?I(u.schedule,`${d}/schedule`):null;if(D){let V=["campusPolicyCode","rulePolicyCode","campusField","ruleCampusField","ruleWeekdaysField","ruleOpenAtField","ruleCloseAtField","ruleSlotMinutesField","ruleAdvanceHoursField","ruleAdvanceDaysField","campusEnabledField","ruleEnabledField","dateField","timeField"];O(D,V,`${d}/schedule`);for(let x of["campusPolicyCode","rulePolicyCode"])w(D[x],`${d}/schedule/${x}`);for(let x of V.filter(P=>!["campusPolicyCode","rulePolicyCode"].includes(P)))B(D[x],`${d}/schedule/${x}`);for(let x of[D.campusField,D.dateField,D.timeField])R.includes(String(x))||f("NATIVE_PUBLIC_SCHEDULE_FIELD_INVALID",`${d}/schedule`);(!c.has(String(D.campusPolicyCode))||!c.has(String(D.rulePolicyCode)))&&f("NATIVE_PUBLIC_SCHEDULE_POLICY_INVALID",`${d}/schedule`)}let y=Object.prototype.hasOwnProperty.call(u,"publicFilters")?$(u.publicFilters,`${d}/publicFilters`,16):[],U=new Set;y.forEach((V,x)=>{let P=`${d}/publicFilters/${x}`,J=I(V,P);O(J,["field","operator","value"],P);let W=B(J.field,`${P}/field`);U.has(W)&&f("NATIVE_PUBLIC_FILTER_DUPLICATE",`${P}/field`),R.includes(W)||f("NATIVE_PUBLIC_FILTER_FIELD_INVALID",`${P}/field`),L(J.operator,"eq",`${P}/operator`),["boolean","text.short","text.long","number.integer","number.decimal","date","time"].includes(N.get(W)||"")||f("NATIVE_PUBLIC_FILTER_FIELD_INVALID",`${P}/field`),J.value!==null&&typeof J.value!="string"&&typeof J.value!="number"&&typeof J.value!="boolean"&&f("NATIVE_PUBLIC_FILTER_VALUE_INVALID",`${P}/value`),U.add(W)});let k=Object.prototype.hasOwnProperty.call(u,"publicSubtableFields")?I(u.publicSubtableFields,`${d}/publicSubtableFields`):null;if(k){Object.keys(k).length>64&&f("NATIVE_PUBLIC_SUBTABLE_FIELDS_INVALID",`${d}/publicSubtableFields`);for(let[V,x]of Object.entries(k)){let P=m.schema.fields.find(H=>String(H.code)===V),J=String(P?.subtable?.resourceCode||""),W=a.get(J),Ie=new Map((W?.schema?.fields||[]).map(H=>[String(H.code),String(H.type)])),z=F(x,`${d}/publicSubtableFields/${V}`,64);(!R.includes(V)||N.get(V)!=="subtable"||!W||z.length<1||z.some(H=>!Ie.has(H))||z.some(H=>Ie.get(H)==="subtable")||z.some(H=>Ie.get(H)==="signature"))&&f("NATIVE_PUBLIC_SUBTABLE_FIELDS_INVALID",`${d}/publicSubtableFields/${V}`)}}if(b.some(V=>V.startsWith("public."))){Object.prototype.hasOwnProperty.call(u,"publicRecordFields")||f("NATIVE_PUBLIC_RECORD_FIELDS_REQUIRED",`${d}/publicRecordFields`);let V=F(u.publicRecordFields,`${d}/publicRecordFields`,64);(V.length<1||V.some(x=>!R.includes(x))||V.some(x=>N.get(x)==="signature"||N.get(x)==="subtable"&&!k?.[x]))&&f("NATIVE_PUBLIC_RECORD_FIELDS_INVALID",`${d}/publicRecordFields`)}let Y=Object.prototype.hasOwnProperty.call(u,"requiredFields")?F(u.requiredFields,`${d}/requiredFields`,64):[],M=m.surface||{},ue=M.fields||{},fe=String(M.mutationOwner||"native")==="native"&&M.generated?.create!==!1,K=m.schema.fields.filter(V=>xe(V,ue[V.code])).map(V=>String(V.code));if(b.includes("create")&&!fe&&f("NATIVE_PUBLIC_CREATE_FIELDS_INCOMPLETE",`${d}/fields`),b.includes("create")&&!Object.prototype.hasOwnProperty.call(u,"draft")&&f("NATIVE_PUBLIC_DRAFT_REQUIRED",`${d}/draft`),b.includes("create"))for(let V of K){let x=R.includes(V)?Y.includes(V)?null:"requiredFields":"fields";x&&f("NATIVE_PUBLIC_CREATE_FIELDS_INCOMPLETE",`${d}/${x}`,{resourceCode:G,fieldCode:V})}if(Object.prototype.hasOwnProperty.call(u,"draft")){let V=I(u.draft,`${d}/draft`);O(V,["enabled","inactivityTtlSeconds","maxBytes"],`${d}/draft`),L(V.enabled,!0,`${d}/draft/enabled`),Z(V.inactivityTtlSeconds,`${d}/draft/inactivityTtlSeconds`,3600,7776e3),Z(V.maxBytes,`${d}/draft/maxBytes`,4096,262144)}else b.includes("draft.read")&&f("NATIVE_PUBLIC_DRAFT_REQUIRED",`${d}/draft`);let Ae=Object.prototype.hasOwnProperty.call(u,"validations")?$(u.validations,`${d}/validations`,16):[],se=new Set;Ae.forEach((V,x)=>{let P=`${d}/validations/${x}`,J=I(V,P);O(J,["code","kind","fields","result"],P);let W=w(J.code,`${P}/code`);se.has(W)&&f("NATIVE_PUBLIC_VALIDATION_DUPLICATE",`${P}/code`),L(J.kind,"duplicate",`${P}/kind`),L(J.result,"availability",`${P}/result`);let Ie=F(J.fields,`${P}/fields`,8);(Ie.length<1||Ie.some(z=>!R.includes(z))||Ie.some(z=>["file","subtable"].includes(N.get(z)||"")))&&f("NATIVE_PUBLIC_VALIDATION_FIELD_INVALID",`${P}/fields`),se.add(W)}),i.add(E)})}function Si(e,t){let n=I(e,t);O(n,["policies"],t),$(n.policies,`${t}/policies`,16).length<1&&f("NATIVE_PUBLIC_POLICY_REQUIRED",t)}function Di(e){return{policies:X(e.frontend.publicAccess.policies.map(t=>({code:t.code,routeCode:t.routeCode,mode:t.mode,resourceCode:t.resourceCode,operations:j(t.operations),fields:j(t.fields),...t.requiredFields?{requiredFields:j(t.requiredFields)}:{},...t.ownRecordFields?{ownRecordFields:j(t.ownRecordFields)}:{},...t.publicRecordFields?{publicRecordFields:j(t.publicRecordFields)}:{},...t.publicFilters?{publicFilters:t.publicFilters.map(n=>({field:n.field,operator:n.operator,value:n.value})).sort((n,o)=>re(n.field,o.field))}:{},...t.publicSubtableFields?{publicSubtableFields:Object.fromEntries(Object.entries(t.publicSubtableFields).sort(([n],[o])=>n.localeCompare(o)).map(([n,o])=>[n,j(Array.isArray(o)?o.map(String):[])]))}:{},...t.serverGeneratedFields?{serverGeneratedFields:t.serverGeneratedFields.map(n=>({field:n.field,kind:n.kind})).sort((n,o)=>re(n.field,o.field))}:{},...t.schedule?{schedule:{campusPolicyCode:t.schedule.campusPolicyCode,rulePolicyCode:t.schedule.rulePolicyCode,campusField:t.schedule.campusField,ruleCampusField:t.schedule.ruleCampusField,ruleWeekdaysField:t.schedule.ruleWeekdaysField,ruleOpenAtField:t.schedule.ruleOpenAtField,ruleCloseAtField:t.schedule.ruleCloseAtField,ruleSlotMinutesField:t.schedule.ruleSlotMinutesField,ruleAdvanceHoursField:t.schedule.ruleAdvanceHoursField,ruleAdvanceDaysField:t.schedule.ruleAdvanceDaysField,campusEnabledField:t.schedule.campusEnabledField,ruleEnabledField:t.schedule.ruleEnabledField,dateField:t.schedule.dateField,timeField:t.schedule.timeField}}:{},...t.draft?{draft:{...t.draft}}:{},...t.validations?{validations:X(t.validations.map(n=>({code:n.code,kind:n.kind,fields:j(n.fields),result:n.result})),n=>n.code)}:{}})),t=>t.code)}}function co(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=lo(n),s=`/admin/resources/${n.code}`,r=[["list",s],["detail",`${s}/:id`],["create",`${s}/new`],["update",`${s}/:id/edit`]];for(let[a,i]of r)o[a]&&t.push({owner:`resource:${n.code}:${a}`,path:i},{owner:`resource:${n.code}:${a}:mobile`,path:`/m${i}`})}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 It(e){let t=new Map(co(e).map(n=>[pt(n.path),n]));return X(e.frontend.routes.map((n,o)=>{let s=`/config/frontend/routes/${o}`,r=I(n,s);O(r,["code","path","label","surface","parentCode","capability","access","pinned","tabPersistence","keepAlive"],s,!0),["admin","user"].includes(r.surface)||f("NATIVE_ROUTE_SURFACE_INVALID",`${s}/surface`);let a=le(r.path,`${s}/path`);r.surface==="admin"&&a!=="/admin"&&!a.startsWith("/admin/")&&f("NATIVE_ADMIN_ROUTE_PATH_INVALID",`${s}/path`),r.surface==="user"&&(a==="/admin"||a.startsWith("/admin/"))&&f("NATIVE_USER_ROUTE_PATH_RESERVED",`${s}/path`);let i=pt(a),c=t.get(i);c&&f("NATIVE_ROUTE_PATH_CONFLICT",`${s}/path`,{path:a,owner:c.owner}),t.set(i,{owner:`frontend:${String(r.code||o)}`,path:a});let _=/[:*]/.test(a),p=nn(r,s,e.appCode),d=r.pinned===void 0?void 0:Le(r.pinned,`${s}/pinned`),u=r.tabPersistence===void 0?_?"none":"session":h(r.tabPersistence,`${s}/tabPersistence`,16),E=r.keepAlive===void 0?"none":h(r.keepAlive,`${s}/keepAlive`,16);return["session","none"].includes(u)||f("NATIVE_ROUTE_TAB_PERSISTENCE_INVALID",`${s}/tabPersistence`),["none","memory"].includes(E)||f("NATIVE_ROUTE_KEEP_ALIVE_INVALID",`${s}/keepAlive`),_&&d===!0&&f("NATIVE_DYNAMIC_ROUTE_PINNED_FORBIDDEN",`${s}/pinned`),_&&u==="session"&&f("NATIVE_DYNAMIC_ROUTE_TAB_PERSISTENCE_FORBIDDEN",`${s}/tabPersistence`),_&&E==="memory"&&f("NATIVE_DYNAMIC_ROUTE_KEEP_ALIVE_FORBIDDEN",`${s}/keepAlive`),{code:w(r.code,`${s}/code`),path:a,label:h(r.label,`${s}/label`,255),surface:r.surface,...r.parentCode===void 0?{}:{parentCode:w(r.parentCode,`${s}/parentCode`)},...p,...d===void 0?{}:{pinned:d},tabPersistence:u,keepAlive:E}}),n=>n.code)}function lo(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"),s=n==="native";return{list:o.list??!0,detail:o.detail??!0,create:o.create??s,update:o.update??s,delete:o.delete??s}}function uo(e){let t=[];for(let n of X(e.data.resources,o=>o.code).flatMap(o=>[{resource:o,viewCode:void 0},...(o.surface?.views||[]).map(s=>({viewCode:s.code,resource:{...o,name:s.name,surface:nt(o.surface,s.code)}}))])){let{resource:o,viewCode:s}=n,r=`/admin/resources/${o.code}${s?`/views/${s}`:""}`,a=lo(o),i=[{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 c of i)a[c.operation]&&t.push({code:`resource:${o.code}${s?`:view:${s}`:""}:${c.operation}`,kind:c.kind,path:c.path,label:c.label,navigationEligible:c.navigationEligible,capability:c.capability,resourceCode:o.code,...s?{viewCode:s}:{}})}for(let n of It(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)=>re(n.code,o.code))}function fo(e){return e.kind==="resource"?`resource:${e.resourceCode}${e.viewCode?`:view:${e.viewCode}`:""}:list`:`operation:${e.routeCode}`}function yi(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,s)=>({pageCode:fo(o.page),...o.label===void 0?{}:{label:o.label},...o.icon===void 0?{}:{icon:o.icon},order:o.order??s})).sort((o,s)=>o.order-s.order||re(o.pageCode,s.pageCode))})).sort((t,n)=>t.order-n.order||re(t.code,n.code))}function Vi(e,t){let n=$(e,t,q.adminNavigationGroups),o=0;n.forEach((s,r)=>{let a=`${t}/${r}`,i=I(s,a);O(i,["code","label","icon","order","items"],a,!0),w(i.code,`${a}/code`),h(i.label,`${a}/label`,255),Et(i.icon,`${a}/icon`),zn(i.order,`${a}/order`);let c=$(i.items,`${a}/items`,500);c.length===0&&f("NATIVE_ADMIN_GROUP_ORPHANED",`${a}/items`),o+=c.length,o>q.adminNavigationItems&&f("NATIVE_ARRAY_LIMIT_EXCEEDED",t),c.forEach((_,p)=>{let d=`${a}/items/${p}`,u=I(_,d);O(u,["page","label","icon","order"],d,!0),wi(u.page,`${d}/page`),u.label!==void 0&&h(u.label,`${d}/label`,255),Et(u.icon,`${d}/icon`),zn(u.order,`${d}/order`)})})}function wi(e,t){let n=I(e,t),o=h(n.kind,`${t}/kind`,64);if(o==="resource"){O(n,["kind","resourceCode"],t,["viewCode"]),n.viewCode!==void 0&&w(n.viewCode,`${t}/viewCode`),G(n.resourceCode,`${t}/resourceCode`);return}if(o==="operation"){O(n,["kind","routeCode"],t),w(n.routeCode,`${t}/routeCode`);return}f("NATIVE_ADMIN_PAGE_REFERENCE_KIND_INVALID",`${t}/kind`)}function Fi(e){let t=new Map(uo(e).map(s=>[String(s.code),s])),n=new Set,o=new Set;e.frontend.admin.navigation.forEach((s,r)=>{let a=`/config/frontend/admin/navigation/${r}`;n.has(s.code)&&f("NATIVE_ADMIN_GROUP_DUPLICATE",`${a}/code`),n.add(s.code),s.label===s.code&&f("NATIVE_ADMIN_USER_LABEL_REQUIRED",`${a}/label`),s.items.forEach((i,c)=>{let _=`${a}/items/${c}`,p=fo(i.page),d=t.get(p);(!d||d.navigationEligible!==!0)&&f("NATIVE_ADMIN_PAGE_NOT_FOUND",`${_}/page`),o.has(p)&&f("NATIVE_ADMIN_PAGE_DUPLICATE",`${_}/page`),o.add(p);let u=i.page.resourceCode||i.page.routeCode||i.page.workflowCode||p,E=i.label||d.label;(!E||E===u||E===p)&&f("NATIVE_ADMIN_USER_LABEL_REQUIRED",`${_}/label`)})})}function Pi(e,t){let n=$(e,t,q.adminPages),o=new Set;n.forEach((s,r)=>{let a=`${t}/${r}`,i=I(s,a);O(i,["code","kind","path","label","navigationEligible","capability","access","resourceCode","viewCode","routeCode"],a,!0);let c=h(i.code,`${a}/code`,255);o.has(c)&&f("NATIVE_ADMIN_PAGE_DUPLICATE",`${a}/code`),o.add(c);let _=h(i.kind,`${a}/kind`,64);if(["resource-list","resource-detail","resource-create","resource-update","operation"].includes(_)||f("NATIVE_ADMIN_PAGE_KIND_INVALID",`${a}/kind`),le(i.path,`${a}/path`),h(i.label,`${a}/label`,255),Le(i.navigationEligible,`${a}/navigationEligible`),i.capability!==void 0&&i.access!==void 0&&f("NATIVE_ROUTE_ACCESS_CONFLICT",`${a}/access`),i.capability!==void 0&&h(i.capability,`${a}/capability`,255),i.access!==void 0){let p=I(i.access,`${a}/access`);O(p,["allOf","anyOf"],`${a}/access`,!0);for(let d of["allOf","anyOf"])p[d]!==void 0&&F(p[d],`${a}/access/${d}`,50)}for(let p of["resourceCode","viewCode","routeCode"])i[p]!==void 0&&w(i[p],`${a}/${p}`)})}function vi(e,t){let n=$(e,t,q.adminNavigationGroups),o=0;n.forEach((s,r)=>{let a=`${t}/${r}`,i=I(s,a);O(i,["code","label","icon","order","items"],a,!0),w(i.code,`${a}/code`),h(i.label,`${a}/label`,255),Et(i.icon,`${a}/icon`),Z(i.order,`${a}/order`,-1e4,1e4);let c=$(i.items,`${a}/items`,500);c.length===0&&f("NATIVE_ADMIN_GROUP_ORPHANED",`${a}/items`),o+=c.length,o>q.adminNavigationItems&&f("NATIVE_ARRAY_LIMIT_EXCEEDED",t),c.forEach((_,p)=>{let d=`${a}/items/${p}`,u=I(_,d);O(u,["pageCode","label","icon","order"],d,!0),h(u.pageCode,`${d}/pageCode`,255),u.label!==void 0&&h(u.label,`${d}/label`,255),Et(u.icon,`${d}/icon`),Z(u.order,`${d}/order`,-1e4,1e4)})})}var Li=new Set(["application-todo-center","workflow-work-center","workflow-launch","workflow-task","workflow-instance","resource-records","resource-submit"]);function ki(e,t,n){let o=I(e,t);O(o,["schemaVersion","appCode","devicePolicy","rootEntry","authentication","routes","digest"],t),L(o.schemaVersion,no,`${t}/schemaVersion`),L(o.appCode,n,`${t}/appCode`),tn(o.devicePolicy,`${t}/devicePolicy`),xi(o.rootEntry,`${t}/rootEntry`),Ui(o.authentication,`${t}/authentication`),Zt(o.digest,`${t}/digest`);let s=$(o.routes,`${t}/routes`,q.routes),r=new Set;s.forEach((a,i)=>{let c=`${t}/routes/${i}`,_=I(a,c),p=_.kind==="resource-records"||_.kind==="resource-submit";O(_,["code","kind","desktop","mobile"],c,["workflowCode",...p?["resourceCode"]:[]]);let d=h(_.code,`${c}/code`,255);r.has(d)&&f("NATIVE_ROUTE_MANIFEST_DUPLICATE",`${c}/code`),r.add(d);let u=h(_.kind,`${c}/kind`,64);if(Li.has(u)||f("NATIVE_ROUTE_MANIFEST_KIND_INVALID",`${c}/kind`),_.workflowCode!==void 0&&w(_.workflowCode,`${c}/workflowCode`),p){let A=G(_.resourceCode,`${c}/resourceCode`);L(d,`user.${A}.${_.kind==="resource-records"?"records":"submit"}`,`${c}/code`)}else _.resourceCode!==void 0&&f("NATIVE_PROPERTY_UNKNOWN",`${c}/resourceCode`);let E=Jn(_.desktop,`${c}/desktop`,n),l=Jn(_.mobile,`${c}/mobile`,n);E.surface!=="user"&&f("NATIVE_ROUTE_MANIFEST_DESKTOP_SURFACE_INVALID",`${c}/desktop/surface`),l.surface!=="user"&&f("NATIVE_ROUTE_MANIFEST_MOBILE_SURFACE_INVALID",`${c}/mobile/surface`),E.routeCode===l.routeCode&&f("NATIVE_ROUTE_MANIFEST_PAIR_DUPLICATE",c)}),L(o.digest,ee({schemaVersion:o.schemaVersion,appCode:o.appCode,devicePolicy:o.devicePolicy,rootEntry:o.rootEntry,authentication:o.authentication,routes:o.routes}),`${t}/digest`)}function tn(e,t){let n=I(e,t);O(n,["kind","mobileMaxWidthPx","desktopMinWidthPx"],t),L(n.kind,"viewport-family",`${t}/kind`);let o=Z(n.mobileMaxWidthPx,`${t}/mobileMaxWidthPx`,320,1600),s=Z(n.desktopMinWidthPx,`${t}/desktopMinWidthPx`,320,1600);return s!==o+1&&f("NATIVE_FRONTEND_DEVICE_POLICY_INVALID",t),{kind:"viewport-family",mobileMaxWidthPx:o,desktopMinWidthPx:s}}function xi(e,t){let n=I(e,t);O(n,["code","desktop","mobile"],t);let o=w(n.code,`${t}/code`),s=Qt(n.desktop,`${t}/desktop`),r=Qt(n.mobile,`${t}/mobile`);return(s===r||r==="/"||!r.startsWith("/m/"))&&f("NATIVE_ROUTE_MANIFEST_ROOT_ENTRY_INVALID",t),s.startsWith("/m/")&&f("NATIVE_ROUTE_MANIFEST_ROOT_ENTRY_INVALID",`${t}/desktop`),{code:o,desktop:s,mobile:r}}function Ui(e,t){let n=I(e,t);O(n,["desktop","mobile"],t);let o=Bn(n.desktop,`${t}/desktop`,!1),s=Bn(n.mobile,`${t}/mobile`,!0);return(o.routeCode===s.routeCode||o.path===s.path)&&f("NATIVE_ROUTE_MANIFEST_AUTHENTICATION_DUPLICATE",t),{desktop:o,mobile:s}}function Bn(e,t,n){let o=I(e,t);O(o,["routeCode","path"],t);let s=w(o.routeCode,`${t}/routeCode`),r=Qt(o.path,`${t}/path`);return(n?!r.startsWith("/m/"):r.startsWith("/m/"))&&f("NATIVE_ROUTE_MANIFEST_AUTHENTICATION_PATH_INVALID",`${t}/path`),{routeCode:s,path:r}}function Qt(e,t){let n=le(e,t);return/[:*?#\\\\]/.test(n)&&f("NATIVE_ROUTE_MANIFEST_STATIC_PATH_INVALID",t),n}function Jn(e,t,n){let o=I(e,t);O(o,["routeCode","path","surface","pathParams","requiresAuthentication"],t,["capability","access"]),w(o.routeCode,`${t}/routeCode`);let s=le(o.path,`${t}/path`),r=h(o.surface,`${t}/surface`,16);["admin","user"].includes(r)||f("NATIVE_ROUTE_SURFACE_INVALID",`${t}/surface`);let a=F(o.pathParams,`${t}/pathParams`,8);return a.forEach((i,c)=>{(!/^[A-Za-z][A-Za-z0-9_]*$/.test(i)||i.length>64)&&f("NATIVE_ROUTE_PATH_PARAM_INVALID",`${t}/pathParams/${c}`)}),Q(a)!==Q(_o(s))&&f("NATIVE_ROUTE_PATH_PARAMS_MISMATCH",`${t}/pathParams`),nn(o,t,n),o.requiresAuthentication!==!0&&f("NATIVE_ROUTE_AUTHENTICATION_REQUIRED",`${t}/requiresAuthentication`),o}function _o(e){return j([...e.matchAll(/:([A-Za-z][A-Za-z0-9_]*)/g)].map(t=>t[1]))}function Wn(e,t,n,o){return{routeCode:e,path:t,surface:n,pathParams:_o(t),...o?.capability?{capability:o.capability}:{},...o?.access?{access:o.access}:{},requiresAuthentication:!0}}function Gn(e,t,n,o){return e==="workflow-launch"?`workflow.${n}.launch.${t}`:e==="application-todo-center"?`application.todo-center.${t}`:e==="resource-records"?`user.${o}.records.${t}`:e==="resource-submit"?`user.${o}.submit.${t}`:`${e.replace(/-/g,".")}.${t}`}function Mi(e){let t=e.appCode,n=[],o=(E,l,A,T,m,N,b)=>{n.push({code:E,kind:l,...m?{workflowCode:m}:{},...b?{resourceCode:b}:{},desktop:Wn(Gn(l,"desktop",m,b),A,"user",N),mobile:Wn(Gn(l,"mobile",m,b),T,"user",N)})};e.frontend.user.applicationTodoCenter===!0&&o("application:todo-center","application-todo-center","/todos","/m/todos");let s=po(e);s.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 E of s){if(!["standalone","hidden-handoff"].includes(E.launch.mode))continue;let l=j([E.launch.submission?.create?.requiredCapability,E.launch.submission?.existing?.requiredCapability].filter(A=>!!A));o(`workflow:${E.code}:launch`,"workflow-launch","/workflows/:workflowCode/start","/m/workflows/:workflowCode/start",E.code,l.length===1?{capability:l[0]}:l.length>1?{access:{anyOf:l}}:void 0)}let r=n.sort((E,l)=>re(String(E.code),String(l.code))),a=It(e),i=E=>{let l=E==="mobile"?"/m/":"/",A=a.filter(m=>m.surface==="user"&&!/[:*?#\\\\]/.test(m.path)&&m.path===l).sort((m,N)=>re(m.code,N.code))[0];if(A)return{code:A.code,path:A.path};let T=a.filter(m=>m.surface==="user"&&!/[:*?#\\\\]/.test(m.path)&&(E==="mobile"?m.path.startsWith("/m/"):!m.path.startsWith("/m/"))).sort((m,N)=>re(m.code,N.code))[0];return T?{code:T.code,path:T.path}:{code:E==="mobile"?"application-root-mobile":"application-root",path:l}},c=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"}},_=tn(e.frontend.devicePolicy,"/config/frontend/devicePolicy"),p=i("desktop"),d=i("mobile"),u={schemaVersion:no,appCode:t,devicePolicy:_,rootEntry:{code:p.code,desktop:p.path,mobile:d.path},authentication:c,routes:r};return{...u,digest:ee(u)}}function Et(e,t){if(e===void 0)return;let n=h(e,t,32);ei.has(n)||f("NATIVE_ADMIN_ICON_INVALID",t)}function zn(e,t){e!==void 0&&Z(e,t,-1e4,1e4)}function nn(e,t,n){return e.capability!==void 0&&e.access!==void 0&&f("NATIVE_ROUTE_ACCESS_CONFLICT",`${t}/access`),e.capability!==void 0?{capability:ge(e.capability,`${t}/capability`,n)}:e.access===void 0?{}:{access:mt(e.access,`${t}/access`,n)}}function mt(e,t,n){let o=I(e,t);O(o,["allOf","anyOf"],t,!0);let s=o.allOf===void 0?void 0:j(F(o.allOf,`${t}/allOf`,50).map((a,i)=>ge(a,`${t}/allOf/${i}`,n))),r=o.anyOf===void 0?void 0:j(F(o.anyOf,`${t}/anyOf`,50).map((a,i)=>ge(a,`${t}/anyOf/${i}`,n)));return(s?.length||0)+(r?.length||0)===0&&f("NATIVE_ROUTE_ACCESS_EMPTY",t),{...s===void 0?{}:{allOf:s},...r===void 0?{}:{anyOf:r}}}function po(e){let t=new Map(ro(e).map(s=>[String(s.code),s])),n=e.workflows.definitions.map((s,r)=>{let a=`/config/workflows/definitions/${r}`,i=I(s,a);O(i,["version","definition","launch"],a,["detailRouteCode"]);let c=I(i.definition,`${a}/definition`),_=i.detailRouteCode===void 0?void 0:Ao(i.detailRouteCode,`${a}/detailRouteCode`);return{code:w(c.code,`${a}/definition/code`),title:h(c.title,`${a}/definition/title`,255),version:ve(i.version,`${a}/version`),launch:ji(e,c,i.launch,`${a}/launch`,t),..._?{detailRouteCode:_}:{},definition:c}});return j(n.map(s=>s.code)).map(s=>{let r=n.filter(_=>_.code===s),a=e.workflows.activations.find(_=>_.workflowCode===s)?.definitionVersion,i=r.find(_=>_.version===a)||[...r].sort((_,p)=>p.version-_.version)[0],c=new Set;for(let _ of r){let p=I(_.definition.nodes,"/config/workflows/definitions/nodes");for(let d of Object.values(p)){let u=I(d,"/config/workflows/definitions/nodes/*");if(u.kind==="approval")for(let E of F(u.allowedOperations||[],"/config/workflows/definitions/nodes/*/allowedOperations",20))c.add(E)}}return{code:s,title:i.title,acceptedCommandDeactivationPolicy:i.definition.acceptedCommandDeactivationPolicy,subject:i.definition.subject,launch:i.launch,...["standalone","hidden-handoff"].includes(i.launch.mode)&&!i.launch.submission?{processOperationCode:`openxiangda.workflow.${s}.submit`}:{},...i.detailRouteCode?{detailRouteCode:i.detailRouteCode}:{},definitionVersions:eo(r.map(_=>_.version)),bindingVersions:eo(e.workflows.bindings.map((_,p)=>{let d=`/config/workflows/bindings/${p}`,u=I(_,d),E=I(u.binding,`${d}/binding`);return{code:w(E.workflowCode,`${d}/binding/workflowCode`),version:ve(u.version,`${d}/version`)}}).filter(_=>_.code===s).map(_=>_.version)),providerCodes:j(e.workflows.providers.map((_,p)=>w(I(_,`/config/workflows/providers/${p}`).code,`/config/workflows/providers/${p}/code`))),allowedOperations:[...c].sort(re),editableParameterCodes:j(e.workflows.editableParameters.map((_,p)=>{let d=`/config/workflows/editableParameters/${p}`,u=I(_,d);return{code:w(u.code,`${d}/code`),workflowCode:w(u.workflowCode,`${d}/workflowCode`)}}).filter(_=>_.workflowCode===s).map(_=>_.code))}})}function Eo(e,t){let n=I(e,t);O(n,["mode"],t,["submission"]);let o=h(n.mode,`${t}/mode`,32);return["standalone","custom-page","hidden-handoff","work-center-only"].includes(o)||f("NATIVE_WORKFLOW_LAUNCH_MODE_INVALID",`${t}/mode`),{mode:o,...n.submission===void 0?{}:{submission:I(n.submission,`${t}/submission`)}}}function ji(e,t,n,o,s){let r=Eo(n,o);if(!r.submission)return{mode:r.mode};["standalone","hidden-handoff"].includes(r.mode)||f("NATIVE_WORKFLOW_NAMED_OPERATION_SUBMISSION_INVALID",`${o}/submission`);let a=I(r.submission,`${o}/submission`);O(a,["kind"],`${o}/submission`,["create","existing","context"]),L(a.kind,"named-operation",`${o}/submission/kind`);let i=o.endsWith("/launch")?o.slice(0,-7):o,c=I(t.subject,`${i}/definition/subject`),_=G(c.resourceCode,`${i}/definition/subject/resourceCode`),p=e.data.resources.findIndex(C=>C.code===_),d=e.data.resources[p];(p<0||!d)&&f("NATIVE_WORKFLOW_SUBJECT_RESOURCE_MISSING",`${i}/definition/subject/resourceCode`);let u=new Set(I(d.schema,`/config/data/resources/${p}/schema`).fields.map(C=>String(C.code))),E=new Map(e.backend.operations.map(C=>[String(C.code),C])),l=(C,D)=>{let y=`${o}/submission/${D}`,U=I(C,y);O(U,["operationCode","inputs","output"],y);let k=w(U.operationCode,`${y}/operationCode`),Y=E.get(k),M=s.get(k),ue=M?.platformAccess?.workflow?.codes;(!Y||!M||M.method!=="POST"||!Array.isArray(ue)||!ue.includes(t.code))&&f("NATIVE_WORKFLOW_NAMED_OPERATION_INVALID",y);let fe=I(Y.requestSchema,`${y}/operation/requestSchema`),K=I(fe.properties,`${y}/operation/requestSchema/properties`),Ae=new Set(fe.required===void 0?[]:F(fe.required,`${y}/operation/requestSchema/required`,64)),se=I(U.inputs,`${y}/inputs`),V=Object.entries(se);(!V.length||V.length>64)&&f("NATIVE_WORKFLOW_NAMED_OPERATION_INPUT_INVALID",`${y}/inputs`);let x=new Set,P=new Map,J={};for(let[z,H]of V){(!Un.test(z)||!Object.prototype.hasOwnProperty.call(K,z))&&f("NATIVE_WORKFLOW_NAMED_OPERATION_INPUT_INVALID",`${y}/inputs/${z}`);let $e=`${y}/inputs/${z}`,Nt=I(H,$e),be=h(Nt.source,`${$e}/source`,32);if(["field","idempotency-key","current-user-reference","subject-id","subject-revision","requested-at"].includes(be)||f("NATIVE_WORKFLOW_NAMED_OPERATION_INPUT_INVALID",$e),O(Nt,["source"],$e,be==="field"?["fieldCode"]:!1),P.set(be,(P.get(be)||0)+1),be==="field"){let Ge=B(Nt.fieldCode,`${$e}/fieldCode`);(x.has(Ge)||!u.has(Ge))&&f("NATIVE_WORKFLOW_NAMED_OPERATION_INPUT_INVALID",`${$e}/fieldCode`),x.add(Ge),J[z]={source:be,fieldCode:Ge}}else J[z]={source:be}}([...Ae].some(z=>!(z in se))||(P.get("idempotency-key")||0)!==1||!V.some(([z,H])=>I(H,`${y}/inputs/${z}`).source==="idempotency-key"&&Ae.has(z))||D==="create"&&((P.get("subject-id")||0)>0||(P.get("subject-revision")||0)>0)||D==="existing"&&((P.get("subject-id")||0)!==1||(P.get("subject-revision")||0)!==1))&&f("NATIVE_WORKFLOW_NAMED_OPERATION_INPUT_INVALID",`${y}/inputs`);let W=I(U.output,`${y}/output`);O(W,["subjectId"],`${y}/output`,["subjectRevision","processCommand"]);let Ie=I(I(Y.responseSchema,`${y}/operation/responseSchema`).properties,`${y}/operation/responseSchema/properties`);for(let z of["subjectId","subjectRevision","processCommand"]){if(W[z]===void 0)continue;let H=h(W[z],`${y}/output/${z}`,128);(!Un.test(H)||!Object.prototype.hasOwnProperty.call(Ie,H))&&f("NATIVE_WORKFLOW_NAMED_OPERATION_OUTPUT_INVALID",`${y}/output/${z}`)}return{operationCode:k,method:"POST",path:M.path,requiredCapability:M.requiredCapability,requestSchemaDigest:M.requestSchemaDigest,responseSchemaDigest:M.responseSchemaDigest,inputs:J,output:{...W},fieldCodes:x}},A=a.create===void 0?void 0:l(a.create,"create"),T=a.existing===void 0?void 0:l(a.existing,"existing");!A&&!T&&f("NATIVE_WORKFLOW_NAMED_OPERATION_SUBMISSION_INVALID",`${o}/submission`);let m=new Set([...A?.fieldCodes||[],...T?.fieldCodes||[]]),N=a.context===void 0?[]:$(a.context,`${o}/submission/context`,16),b=new Set,R=N.map((C,D)=>{let y=`${o}/submission/context/${D}`,U=I(C,y);O(U,["queryParameter","fieldCode"],y);let k=h(U.queryParameter,`${y}/queryParameter`,64),Y=B(U.fieldCode,`${y}/fieldCode`);return(!/^[A-Za-z][A-Za-z0-9]{0,63}$/.test(k)||b.has(k)||!m.has(Y))&&f("NATIVE_WORKFLOW_LAUNCH_CONTEXT_INVALID",y),b.add(k),{queryParameter:k,fieldCode:Y}}),g=C=>{let{fieldCodes:D,...y}=C;return y};return{mode:r.mode,submission:{kind:"named-operation",...A?{create:g(A)}:{},...T?{existing:g(T)}:{},context:R}}}function Ao(e,t){let n=I(e,t);O(n,["desktop","mobile"],t);let o=w(n.desktop,`${t}/desktop`),s=w(n.mobile,`${t}/mobile`);return o===s&&f("NATIVE_WORKFLOW_DETAIL_ROUTE_DUPLICATE",t),{desktop:o,mobile:s}}function Bi(e,t){let n=new Set(t.map(p=>p.code)),o=new Map;e.data.resources.forEach((p,d)=>{let u=`/config/data/resources/${d}`,E=I(p,u);for(let[T,m]of Object.entries(E.fieldPolicies||{})){if(!Se(T))continue;let N=`${u}/fieldPolicies/${T}/read`,b=I(m,`${u}/fieldPolicies/${T}`);for(let R of F(b.read||[],N,2e3))n.has(R)||f("NATIVE_CAPABILITY_REFERENCE_MISSING",N)}if(((E.surface===void 0?{}:I(E.surface,`${u}/surface`)).mutationOwner||"native")==="native")return;let A=I(E.capabilities,`${u}/capabilities`);for(let T of["create","update","delete"])o.set(String(A[T]),T)});let s=new Set;for(let[p,d]of e.authz.roles.entries()){let u=`/config/authz/roles/${p}`,E=I(d,u);O(E,["code","name","description","capabilities"],u,!0);let l=w(E.code,`${u}/code`);s.has(l)&&f("NATIVE_ROLE_DUPLICATE",`${u}/code`),s.add(l),h(E.name,`${u}/name`,255);let A=F(E.capabilities,`${u}/capabilities`,2e3);for(let[T,m]of A.entries())o.has(m)&&f("NATIVE_DATA_SURFACE_MUTATION_GRANT_FORBIDDEN",`${u}/capabilities/${T}`,{operation:o.get(m)}),n.has(m)||f("NATIVE_CAPABILITY_REFERENCE_MISSING",`${u}/capabilities`)}let r=e.authz.authenticatedUserRoleCode===void 0?"":w(e.authz.authenticatedUserRoleCode,"/config/authz/authenticatedUserRoleCode");r&&!s.has(r)&&f("NATIVE_AUTHENTICATED_USER_ROLE_REFERENCE_MISSING","/config/authz/authenticatedUserRoleCode");let a=new Set,i=0;for(let[p,d]of e.perspectives.entries()){let u=`/config/perspectives/${p}`,E=I(d,u);O(E,["code","name","description","roleCodes","capabilityCodes","default"],u,!0);let l=w(E.code,`${u}/code`);a.has(l)&&f("NATIVE_PERSPECTIVE_DUPLICATE",`${u}/code`),a.add(l),h(E.name,`${u}/name`,255);let A=F(E.roleCodes,`${u}/roleCodes`,20);A.length<1&&f("NATIVE_PERSPECTIVE_ROLE_REQUIRED",`${u}/roleCodes`),A.forEach((N,b)=>{s.has(N)||f("NATIVE_PERSPECTIVE_ROLE_MISSING",`${u}/roleCodes/${b}`)});let T=j(e.authz.roles.filter(N=>A.includes(N.code)).flatMap(N=>N.capabilities)),m=F(E.capabilityCodes,`${u}/capabilityCodes`,2e3);Q(T)!==Q(m)&&f("NATIVE_PERSPECTIVE_CAPABILITY_PROJECTION_MISMATCH",`${u}/capabilityCodes`),E.default===!0?i+=1:E.default!==void 0&&f("NATIVE_PERSPECTIVE_DEFAULT_INVALID",`${u}/default`)}i>1&&f("NATIVE_PERSPECTIVE_DEFAULT_DUPLICATE","/config/perspectives");for(let[p,d]of e.backend.operations.entries()){let u=I(d,`/config/backend/operations/${p}`);n.has(u.capability)||f("NATIVE_CAPABILITY_REFERENCE_MISSING",`/config/backend/operations/${p}/capability`)}let c=new Set,_=new Set;for(let[p,d]of e.frontend.routes.entries()){let u=`/config/frontend/routes/${p}`,E=I(d,u),l=w(E.code,`${u}/code`);c.has(l)&&f("NATIVE_ROUTE_DUPLICATE",`${u}/code`),c.add(l);let A=le(E.path,`${u}/path`);_.has(A)&&f("NATIVE_ROUTE_PATH_DUPLICATE",`${u}/path`),_.add(A);let T=nn(E,u,e.appCode);T.capability&&!n.has(T.capability)&&f("NATIVE_CAPABILITY_REFERENCE_MISSING",`${u}/capability`);let m=E.access===void 0?void 0:I(E.access,`${u}/access`);for(let N of["allOf","anyOf"]){let b=m?.[N]===void 0?[]:$(m[N],`${u}/access/${N}`,50);for(let[R,g]of b.entries()){let C=ge(g,`${u}/access/${N}/${R}`,e.appCode);n.has(C)||f("NATIVE_CAPABILITY_REFERENCE_MISSING",`${u}/access/${N}/${R}`)}}}if(e.frontend.admin.access!==void 0){let p=mt(e.frontend.admin.access,"/config/frontend/admin/access",e.appCode);for(let d of["allOf","anyOf"])for(let[u,E]of(p[d]||[]).entries())n.has(E)||f("NATIVE_CAPABILITY_REFERENCE_MISSING",`/config/frontend/admin/access/${d}/${u}`)}for(let[p,d]of e.frontend.routes.entries()){let u=I(d,`/config/frontend/routes/${p}`);u.parentCode&&!c.has(u.parentCode)&&f("NATIVE_ROUTE_PARENT_MISSING",`/config/frontend/routes/${p}/parentCode`)}}function Ji(e){let t=new Set(e.authz.roles.map(_=>String(_.code))),n=e.authz.authenticatedUserRoleCode===void 0?"":w(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)}:{}}])),s=new Set(o.keys()),r=new Map(e.data.resources.map((_,p)=>{let d=Re(_,`/config/data/resources/${p}`,e.appCode);return[d.code,new Map(d.schema.fields.map(u=>[String(u.code),u]))]}));for(let[_,p]of e.authz.scopeDimensions.entries()){let d=`/config/authz/scopeDimensions/${_}`,u=I(p,d);if(O(u,["code","name","resourceCode","valueType","hierarchyMode","valueSource"],d,!0),u.valueSource===void 0)continue;let E=I(u.valueSource,`${d}/valueSource`);O(E,["kind","resourceCode","labelField","enabledField"],`${d}/valueSource`,!0),E.kind!=="native_resource"&&f("NATIVE_SCOPE_VALUE_SOURCE_KIND_INVALID",`${d}/valueSource/kind`),u.valueType!=="uuid"&&f("NATIVE_SCOPE_VALUE_SOURCE_TYPE_INVALID",`${d}/valueType`);let l=G(E.resourceCode,`${d}/valueSource/resourceCode`),A=r.get(l);A||f("NATIVE_SCOPE_VALUE_SOURCE_RESOURCE_MISSING",`${d}/valueSource/resourceCode`);let T=B(E.labelField,`${d}/valueSource/labelField`);if(["text.short","text.long"].includes(String(A.get(T)?.type||""))||f("NATIVE_SCOPE_VALUE_SOURCE_LABEL_FIELD_INVALID",`${d}/valueSource/labelField`),E.enabledField!==void 0){let m=B(E.enabledField,`${d}/valueSource/enabledField`);A.get(m)?.type!=="boolean"&&f("NATIVE_SCOPE_VALUE_SOURCE_ENABLED_FIELD_INVALID",`${d}/valueSource/enabledField`)}}let a=new Set,i=new Set;for(let[_,p]of e.authz.scopeSources.entries()){let d=`/config/authz/scopeSources/${_}`,u=I(p,d);O(u,["code","name","resourceCode","subject","grants","operationField","enabledField","effectiveFromField","effectiveToField","failureMode"],d,!0);let E=w(u.code,`${d}/code`);a.has(E)&&f("NATIVE_SCOPE_SOURCE_DUPLICATE",`${d}/code`),a.add(E),h(u.name,`${d}/name`,255);let l=G(u.resourceCode,`${d}/resourceCode`),A=r.get(l);A||f("NATIVE_SCOPE_SOURCE_RESOURCE_MISSING",`${d}/resourceCode`);let T=I(u.subject,`${d}/subject`),m=h(T.type,`${d}/subject/type`,32);O(T,m==="role_membership"?["type","userIdField","roleCode"]:["type","userIdField"],`${d}/subject`),["user","role_membership"].includes(m)||f("NATIVE_SCOPE_SOURCE_SUBJECT_INVALID",`${d}/subject/type`);let N=we(T.userIdField,A);dt(N)||f("NATIVE_SCOPE_SOURCE_SUBJECT_PATH_INVALID",`${d}/subject/userIdField`),m==="role_membership"&&!t.has(String(T.roleCode))&&f("NATIVE_ROLE_REFERENCE_MISSING",`${d}/subject/roleCode`);let b=new Set;for(let[R,g]of $(u.grants,`${d}/grants`,100).entries()){let C=`${d}/grants/${R}`,D=I(g,C);O(D,["dimensionCode","valueField","parentValueField"],C,!0);let y=w(D.dimensionCode,`${C}/dimensionCode`);(!s.has(y)||b.has(y))&&f("NATIVE_SCOPE_SOURCE_DIMENSION_INVALID",`${C}/dimensionCode`),b.add(y),u.failureMode==="last_known_good"&&i.add(y);for(let U of["valueField","parentValueField"]){if(D[U]===void 0)continue;let k=we(D[U],A);Wt(k,o.get(y),r)||f("NATIVE_SCOPE_SOURCE_GRANT_PATH_INVALID",`${C}/${U}`)}}b.size===0&&f("NATIVE_SCOPE_SOURCE_GRANT_REQUIRED",`${d}/grants`),["strict","last_known_good"].includes(u.failureMode)||f("NATIVE_SCOPE_SOURCE_FAILURE_MODE_INVALID",`${d}/failureMode`);for(let R of["operationField","enabledField","effectiveFromField","effectiveToField"]){if(u[R]===void 0)continue;let g=B(u[R],`${d}/${R}`);A.has(g)||f("NATIVE_SCOPE_SOURCE_FIELD_MISSING",`${d}/${R}`)}}Gi(e,t,r,n);let c=new Set;for(let[_,p]of e.authz.dataPolicies.entries()){let d=`/config/authz/dataPolicies/${_}`,u=I(p,d);O(u,["code","name","resourceCode","unrestrictedRoleCodes","operations","matchMode","rules","readExpression","writeBoundary"],d,!0);let E=w(u.code,`${d}/code`);c.has(E)&&f("NATIVE_DATA_POLICY_DUPLICATE",`${d}/code`),c.add(E);let l=u.readExpression!==void 0,A=F(u.operations||[],`${d}/operations`,4);u.operations!==void 0&&(A.length===0||A.some(g=>!["read","create","update","delete"].includes(g)))&&f("NATIVE_DATA_POLICY_OPERATIONS_INVALID",`${d}/operations`),["AND","OR"].includes(u.matchMode)||f("NATIVE_DATA_POLICY_MATCH_MODE_INVALID",`${d}/matchMode`),l&&u.operations!==void 0&&f("NATIVE_DATA_POLICY_READ_EXPRESSION_OPERATIONS_FORBIDDEN",`${d}/operations`);let T=e.data.resources.find(g=>g.dataPolicyCode===E),m=u.resourceCode||T?.code,N=m?r.get(G(m,`${d}/resourceCode`)):void 0;l&&!N&&f("NATIVE_DATA_POLICY_RESOURCE_MISSING",`${d}/resourceCode`);let b=F(u.unrestrictedRoleCodes||[],`${d}/unrestrictedRoleCodes`,100);u.unrestrictedRoleCodes!==void 0&&b.length===0&&f("NATIVE_DATA_POLICY_UNRESTRICTED_ROLES_INVALID",`${d}/unrestrictedRoleCodes`);for(let g of b)t.has(g)||f("NATIVE_ROLE_REFERENCE_MISSING",`${d}/unrestrictedRoleCodes`);let R;try{let g=$(u.rules,`${d}/rules`,100).map((C,D)=>({rule:I(C,`${d}/rules/${D}`),pointer:`${d}/rules/${D}`}));g.length===0?(!l||u.matchMode!=="AND"||u.writeBoundary!=="capability_only")&&f("NATIVE_DATA_POLICY_WRITE_BOUNDARY_REQUIRED",d):u.writeBoundary!==void 0&&f("NATIVE_DATA_POLICY_WRITE_BOUNDARY_INVALID",`${d}/writeBoundary`),R=[...g],l&&(R.push(...Be(u.readExpression,`${d}/readExpression`)),Kt(u.readExpression,`${d}/readExpression`))}catch(g){throw g instanceof Fe&&f(g.code,g.pointer),g}for(let{rule:g,pointer:C}of R){O(g,["subject","dimensionCode","relationCode","resourceCode","field","roleCodes","operation","valuePath","emptyMatchesAll","operator","value","operand"],C,!0);let D=B(g.field,`${C}/field`),y=N?.get(D);l&&!y&&f("NATIVE_DATA_POLICY_FIELD_MISSING",`${C}/field`);for(let K of F(g.roleCodes||[],`${C}/roleCodes`,100))t.has(K)||f("NATIVE_ROLE_REFERENCE_MISSING",`${C}/roleCodes`);let U=String(g.operator||""),k=g.operand==="db_now",Y=["is_null","is_not_null"].includes(U),M=["eq","not_eq","in","not_in"].includes(U),ue=!k&&(g.operator!==void 0||g.value!==void 0);if([g.subject==="current_user"?"current_user":"",typeof g.dimensionCode=="string"?"dimension":"",typeof g.relationCode=="string"?"relationship":"",ue?"constant":"",k?"db_now":""].filter(Boolean).length!==1&&f("NATIVE_DATA_POLICY_RULE_SOURCE_INVALID",C),g.subject!==void 0&&g.subject!=="current_user"&&f("NATIVE_DATA_POLICY_SUBJECT_INVALID",`${C}/subject`),ue){if(!M&&!Y&&f("NATIVE_DATA_POLICY_OPERATOR_INVALID",`${C}/operator`),["in","not_in"].includes(U)){let K=$(g.value,`${C}/value`,100).map((Ae,se)=>h(Ae,`${C}/value/${se}`,2048));(K.length===0||new Set(K).size!==K.length)&&f("NATIVE_DATA_POLICY_VALUE_INVALID",`${C}/value`)}else["eq","not_eq"].includes(U)?h(g.value,`${C}/value`,2048):(g.value!==void 0||g.operand!==void 0)&&f("NATIVE_DATA_POLICY_VALUE_INVALID",`${C}/value`);for(let K of["operation","valuePath","emptyMatchesAll","resourceCode","operand"])g[K]!==void 0&&f("NATIVE_DATA_POLICY_CONSTANT_RULE_INVALID",`${C}/${K}`)}if(k){(!["lt","lte","gt","gte"].includes(U)||g.value!==void 0||y?.type!=="datetime")&&f("NATIVE_DATA_POLICY_DB_NOW_INVALID",C);for(let K of["operation","valuePath","emptyMatchesAll","resourceCode","value"])g[K]!==void 0&&f("NATIVE_DATA_POLICY_DB_NOW_INVALID",`${C}/${K}`)}g.dimensionCode&&!s.has(g.dimensionCode)&&f("NATIVE_SCOPE_DIMENSION_MISSING",`${C}/dimensionCode`),i.has(String(g.dimensionCode||""))&&g.operation!=="read"&&f("NATIVE_SCOPE_SOURCE_LAST_KNOWN_GOOD_UNSAFE",`${C}/operation`)}}for(let[_,p]of e.data.resources.entries()){let d=I(p,`/config/data/resources/${_}`);d.dataPolicyCode&&!c.has(d.dataPolicyCode)&&f("NATIVE_DATA_POLICY_REFERENCE_MISSING",`/config/data/resources/${_}/dataPolicyCode`)}}function Wi(e){try{Rt(e.data.resources,"/config/data/resources")}catch(t){throw t instanceof ce&&f(t.code,t.pointer),t}}function Gi(e,t,n,o){let s=new Set;for(let[r,a]of e.authz.roleMembershipSources.entries()){let i=`/config/authz/roleMembershipSources/${r}`,c=I(a,i);O(c,["code","name","resourceCode","userIdField","roleCode","enabledField","effectiveFromField","effectiveToField","failureMode"],i,!0);let _=w(c.code,`${i}/code`);_.length>100&&f("NATIVE_AUTHORIZATION_PROJECTION_SOURCE_CODE_INVALID",`${i}/code`),s.has(_)&&f("NATIVE_AUTHORIZATION_PROJECTION_SOURCE_DUPLICATE",`${i}/code`),s.add(_),h(c.name,`${i}/name`,255);let p=Yn(c.resourceCode,`${i}/resourceCode`,n);qn(c.userIdField,`${i}/userIdField`,p),t.has(String(c.roleCode||""))||f("NATIVE_ROLE_REFERENCE_MISSING",`${i}/roleCode`),o&&c.roleCode===o&&f("NATIVE_AUTHENTICATED_USER_ROLE_SOURCE_CONFLICT",`${i}/roleCode`),Kn(c,i,p)}for(let[r,a]of e.authz.relationshipGrantSources.entries()){let i=`/config/authz/relationshipGrantSources/${r}`,c=I(a,i);O(c,["code","name","resourceCode","subject","relationCode","targetResourceCode","resourceIdField","operations","enabledField","effectiveFromField","effectiveToField","failureMode"],i,!0);let _=w(c.code,`${i}/code`);_.length>100&&f("NATIVE_AUTHORIZATION_PROJECTION_SOURCE_CODE_INVALID",`${i}/code`),s.has(_)&&f("NATIVE_AUTHORIZATION_PROJECTION_SOURCE_DUPLICATE",`${i}/code`),s.add(_),h(c.name,`${i}/name`,255);let p=Yn(c.resourceCode,`${i}/resourceCode`,n),d=I(c.subject,`${i}/subject`),u=h(d.type,`${i}/subject/type`,32);O(d,u==="role_membership"?["type","userIdField","roleCode"]:["type","userIdField"],`${i}/subject`),["user","role_membership"].includes(u)||f("NATIVE_AUTHORIZATION_PROJECTION_SUBJECT_INVALID",`${i}/subject/type`),qn(d.userIdField,`${i}/subject/userIdField`,p),u==="role_membership"&&!t.has(String(d.roleCode||""))&&f("NATIVE_ROLE_REFERENCE_MISSING",`${i}/subject/roleCode`),w(c.relationCode,`${i}/relationCode`);let E=G(c.targetResourceCode,`${i}/targetResourceCode`);n.has(E)||f("NATIVE_AUTHORIZATION_PROJECTION_TARGET_RESOURCE_MISSING",`${i}/targetResourceCode`);let l=we(c.resourceIdField,p),A=l?.field.type==="resource-ref.single"&&l.valuePath==="value"&&l.field.source?.resourceCode===E;(c.resourceIdField==="id"?E!==String(c.resourceCode):!A)&&f("NATIVE_AUTHORIZATION_PROJECTION_RESOURCE_ID_FIELD_INVALID",`${i}/resourceIdField`);let T=F(c.operations,`${i}/operations`,20);(T.length===0||T.some(m=>m.length>64||!/^[A-Za-z0-9][A-Za-z0-9:._*-]{0,63}$/.test(m)))&&f("NATIVE_AUTHORIZATION_PROJECTION_OPERATIONS_INVALID",`${i}/operations`),Kn(c,i,p)}}function Yn(e,t,n){let o=G(e,t),s=n.get(o);return s||f("NATIVE_AUTHORIZATION_PROJECTION_RESOURCE_MISSING",t),s}function qn(e,t,n){let o=we(e,n);dt(o)||f("NATIVE_AUTHORIZATION_PROJECTION_USER_FIELD_INVALID",t)}function Kn(e,t,n){if(e.failureMode!=="strict"&&f("NATIVE_AUTHORIZATION_PROJECTION_FAILURE_MODE_INVALID",`${t}/failureMode`),e.enabledField!==void 0){let o=B(e.enabledField,`${t}/enabledField`);n.get(o)?.type!=="boolean"&&f("NATIVE_AUTHORIZATION_PROJECTION_ENABLED_FIELD_INVALID",`${t}/enabledField`)}for(let o of["effectiveFromField","effectiveToField"]){if(e[o]===void 0)continue;let s=B(e[o],`${t}/${o}`);["date","datetime"].includes(String(n.get(s)?.type))||f("NATIVE_AUTHORIZATION_PROJECTION_EFFECTIVE_FIELD_INVALID",`${t}/${o}`)}}function zi(e){let t=new Set,n=new Set;e.forEach((o,s)=>{let r=`/config/backend/secrets/${s}`,a=I(o,r);O(a,["name","env","description","required","exposure"],r,!0);let i=h(a.name,`${r}/name`,128),c=h(a.env,`${r}/env`,128);zs.test(i)||f("NATIVE_SECRET_NAME_INVALID",`${r}/name`),(!Ys.test(c)||c.startsWith("OPENXIANGDA_")||["NODE_ENV","PORT"].includes(c))&&f("NATIVE_SECRET_ENV_INVALID",`${r}/env`),t.has(i)&&f("NATIVE_SECRET_NAME_DUPLICATE",`${r}/name`),n.has(c)&&f("NATIVE_SECRET_ENV_DUPLICATE",`${r}/env`),t.add(i),n.add(c),L(a.exposure,"active_only",`${r}/exposure`),a.required!==void 0&&Le(a.required,`${r}/required`),a.description!==void 0&&on(a.description,`${r}/description`,2e3)})}function Yi(e){let t=new Set,n=new Map,o=new Map(e.data.resources.map(u=>[String(u.code),u])),s=new Map(e.frontend.routes.map((u,E)=>{let l=I(u,`/config/frontend/routes/${E}`);return[w(l.code,`/config/frontend/routes/${E}/code`),l]}));for(let[u,E]of e.workflows.definitions.entries()){let l=`/config/workflows/definitions/${u}`,A=I(E,l);if(O(A,["version","definition","launch"],l,["detailRouteCode"]),Eo(A.launch,`${l}/launch`),A.detailRouteCode!==void 0){let b=Ao(A.detailRouteCode,`${l}/detailRouteCode`);for(let[R,g,C]of[["desktop",b.desktop,["admin","user"]],["mobile",b.mobile,["user"]]]){let D=`${l}/detailRouteCode/${R}`,y=s.get(g);y||f("NATIVE_WORKFLOW_DETAIL_ROUTE_MISSING",D),C.some(Y=>Y===y.surface)||f("NATIVE_WORKFLOW_DETAIL_ROUTE_SURFACE_INVALID",D);let U=le(y.path,D),k=[...U.matchAll(/:([A-Za-z][A-Za-z0-9_]*)/g)].map(Y=>Y[1]);(U.includes("*")||k.length!==1||k[0]!=="instanceId")&&f("NATIVE_WORKFLOW_DETAIL_ROUTE_PATH_INVALID",D)}}let T=I(A.definition,`${l}/definition`),m=`${T.code}:${ve(A.version,`${l}/version`)}`;t.has(m)&&f("NATIVE_WORKFLOW_DEFINITION_DUPLICATE",l),t.add(m),Ki(T,`${l}/definition`),qi(T.subject,o,`${l}/definition/subject`);let N=Yt(T,{appCode:e.appCode,capabilities:e.authz.capabilities.map(b=>b.code),fields:new Map((o.get(T.subject.resourceCode)?.schema.fields||[]).map(b=>[b.code,b]))});N.length&&f("NATIVE_WORKFLOW_INSTANCE_COMMAND_POLICY_INVALID",`${l}/definition/instanceCommands`,{errors:N}),T.title===T.code&&f("NATIVE_WORKFLOW_USER_TITLE_REQUIRED",`${l}/definition/title`),n.set(m,T)}let r=new Set,a=new Map;for(let[u,E]of e.workflows.bindings.entries()){let l=I(E,`/config/workflows/bindings/${u}`),A=I(l.binding,`/config/workflows/bindings/${u}/binding`),T=`${A.workflowCode}:${ve(l.version,`/config/workflows/bindings/${u}/version`)}`;r.has(T)&&f("NATIVE_WORKFLOW_BINDING_DUPLICATE",`/config/workflows/bindings/${u}`),r.add(T),Hi(A,`/config/workflows/bindings/${u}/binding`),a.set(T,A)}let i=new Set,c=new Map;for(let[u,E]of e.workflows.activations.entries()){let l=`/config/workflows/activations/${u}`,A=I(E,l);O(A,["workflowCode","definitionVersion","bindingVersion","acceptedCommandDeactivationPolicy"],l,["environmentKey"]);let T=w(A.workflowCode,`${l}/workflowCode`);i.has(T)&&f("NATIVE_WORKFLOW_ACTIVATION_DUPLICATE",l),i.add(T);let m=`${T}:${ve(A.definitionVersion,`${l}/definitionVersion`)}`,N=`${T}:${ve(A.bindingVersion,`${l}/bindingVersion`)}`;t.has(m)||f("NATIVE_WORKFLOW_DEFINITION_REFERENCE_MISSING",`${l}/definitionVersion`),r.has(N)||f("NATIVE_WORKFLOW_BINDING_REFERENCE_MISSING",`${l}/bindingVersion`);let b=n.get(m),R=a.get(N);(!["finish-pinned","cancel-on-deactivate"].includes(A.acceptedCommandDeactivationPolicy)||A.acceptedCommandDeactivationPolicy!==b.acceptedCommandDeactivationPolicy)&&f("NATIVE_WORKFLOW_COMMAND_DEACTIVATION_POLICY_MISMATCH",`${l}/acceptedCommandDeactivationPolicy`),Xi(b,R,`/config/workflows/activations/${u}`),c.set(T,R)}let _=new Set;e.workflows.providers.forEach((u,E)=>{let l=`/config/workflows/providers/${E}`,A=I(u,l);O(A,["code","endpointPath","timeoutMs"],l,!0);let T=w(A.code,`${l}/code`);_.has(T)&&f("NATIVE_WORKFLOW_PROVIDER_DUPLICATE",`${l}/code`),_.add(T),le(A.endpointPath,`${l}/endpointPath`),A.timeoutMs!==void 0&&Z(A.timeoutMs,`${l}/timeoutMs`,100,1e4)});for(let[u,E]of c.entries())for(let[l,A]of Object.entries(I(E.bindings,"/config/workflows/bindings/*/binding/bindings"))){let T=I(A,`/config/workflows/${u}/bindings/${l}`);T.provider==="application_provider"&&!_.has(T.providerCode)&&f("NATIVE_WORKFLOW_PROVIDER_REFERENCE_MISSING",`/config/workflows/${u}/bindings/${l}/providerCode`)}let p=new Set(e.authz.roles.map(u=>u.code)),d=new Set;e.workflows.editableParameters.forEach((u,E)=>{let l=`/config/workflows/editableParameters/${E}`,A=I(u,l);O(A,["code","workflowCode","bindingKey","label","valueType","required","allowedRoleCodes","allowedProviderCodes","maxItems"],l,!0);let T=w(A.code,`${l}/code`);d.has(T)&&f("NATIVE_WORKFLOW_EDITABLE_PARAMETER_DUPLICATE",`${l}/code`),d.add(T);let m=Tt(A.workflowCode,`${l}/workflowCode`),N=sn(A.bindingKey,`${l}/bindingKey`),b=c.get(m);(!b||!I(b.bindings,`${l}/bindingKey`)[N])&&f("NATIVE_WORKFLOW_EDITABLE_BINDING_MISSING",`${l}/bindingKey`),h(A.label,`${l}/label`,255),["role_code","user_ids","provider_code"].includes(A.valueType)||f("NATIVE_WORKFLOW_EDITABLE_VALUE_TYPE_INVALID",`${l}/valueType`);for(let R of F(A.allowedRoleCodes||[],`${l}/allowedRoleCodes`,100))p.has(R)||f("NATIVE_ROLE_REFERENCE_MISSING",`${l}/allowedRoleCodes`);for(let R of F(A.allowedProviderCodes||[],`${l}/allowedProviderCodes`,100))_.has(R)||f("NATIVE_WORKFLOW_PROVIDER_REFERENCE_MISSING",`${l}/allowedProviderCodes`);A.required!==void 0&&Le(A.required,`${l}/required`),A.maxItems!==void 0&&Z(A.maxItems,`${l}/maxItems`,1,200)})}function qi(e,t,n){let o=I(e,n);O(o,["resourceCode","factProjection"],n,["summaryFields"]);let s=G(o.resourceCode,`${n}/resourceCode`),r=t.get(s);r||f("NATIVE_WORKFLOW_SUBJECT_RESOURCE_MISSING",`${n}/resourceCode`);let a=new Set($(I(r.schema,`${n}/resourceCode`).fields,`${n}/resourceCode`,500).map((_,p)=>B(I(_,`${n}/resourceCode/${p}`).code,`${n}/resourceCode/${p}`))),i=I(o.factProjection,`${n}/factProjection`),c=Object.entries(i);(c.length<1||c.length>64)&&f("NATIVE_WORKFLOW_SUBJECT_FACT_PROJECTION_INVALID",`${n}/factProjection`);for(let[_,p]of c){Hs.test(_)||f("NATIVE_WORKFLOW_SUBJECT_FACT_KEY_INVALID",`${n}/factProjection/${_}`);let d=B(p,`${n}/factProjection/${_}`);a.has(d)||f("NATIVE_WORKFLOW_SUBJECT_FIELD_MISSING",`${n}/factProjection/${_}`)}if(o.summaryFields!==void 0){let _=F(o.summaryFields,`${n}/summaryFields`,Xs).map((l,A)=>B(l,`${n}/summaryFields/${A}`)),p=t.get(s),d=p.surface&&typeof p.surface=="object"&&!Array.isArray(p.surface)?p.surface:{},u=d.fields&&typeof d.fields=="object"&&!Array.isArray(d.fields)?d.fields:{},E=new Map($(I(p.schema,`${n}/resourceCode`).fields,`${n}/resourceCode`,500).map((l,A)=>{let T=I(l,`${n}/resourceCode/${A}`);return[String(T.code),T]}));for(let[l,A]of _.entries()){let T=E.get(A),m=u[A],N=String(T?.type||""),b=T?.maxLength;(!T||T.system===!0||m&&typeof m=="object"&&!Array.isArray(m)&&m.system===!0||["id","revision","created_by","updated_by","created_at","updated_at"].includes(A)||!Zs.has(N)||N==="text.long"&&typeof b=="number"&&Number.isFinite(b)&&b>Qs)&&f("NATIVE_WORKFLOW_SUBJECT_SUMMARY_FIELDS_INVALID",`${n}/summaryFields/${l}`)}}}function Ki(e,t){O(e,["schemaVersion","code","title","subject","acceptedCommandDeactivationPolicy","startAt","inputSchema","nodes"],t,["organizationContext","instanceCommands"]),L(e.schemaVersion,"openxiangda.workflow-definition/v2",`${t}/schemaVersion`),Tt(e.code,`${t}/code`),h(e.title,`${t}/title`,255),["finish-pinned","cancel-on-deactivate"].includes(e.acceptedCommandDeactivationPolicy)||f("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)&&f("NATIVE_WORKFLOW_NODE_COUNT_INVALID",`${t}/nodes`);let s=h(e.startAt,`${t}/startAt`,128);n[s]||f("NATIVE_WORKFLOW_START_NODE_MISSING",`${t}/startAt`);let r=new Map;for(let[_,p]of Object.entries(n)){let d=`${t}/nodes/${_}`,u=I(p,d);L(u.id,_,`${d}/id`),["approval","condition","end"].includes(u.kind)||f("NATIVE_WORKFLOW_NODE_KIND_INVALID",`${d}/kind`);let E=[];if(u.kind==="approval"){h(u.title,`${d}/title`,255),sn(u.binding,`${d}/binding`),["single","any","all","sequence"].includes(u.mode)||f("NATIVE_WORKFLOW_APPROVAL_MODE_INVALID",`${d}/mode`),E.push(h(u.onApprove,`${d}/onApprove`,128),h(u.onReject,`${d}/onReject`,128));for(let l of F(u.returnTargets||[],`${d}/returnTargets`,200))n[l]||f("NATIVE_WORKFLOW_TARGET_MISSING",`${d}/returnTargets`);for(let l of F(u.allowedOperations||[],`${d}/allowedOperations`,20))ti.has(l)||f("NATIVE_WORKFLOW_OPERATION_INVALID",`${d}/allowedOperations`)}else if(u.kind==="condition"){let l=$(u.branches,`${d}/branches`,100);l.length===0&&f("NATIVE_WORKFLOW_BRANCH_REQUIRED",`${d}/branches`),l.forEach((A,T)=>{let m=I(A,`${d}/branches/${T}`);Je(m.when,`${d}/branches/${T}/when`,0),E.push(h(m.target,`${d}/branches/${T}/target`,128))}),E.push(h(u.otherwise,`${d}/otherwise`,128))}else h(u.title,`${d}/title`,255),h(u.outcome,`${d}/outcome`,128);for(let l of E)n[l]||f("NATIVE_WORKFLOW_TARGET_MISSING",d);r.set(_,E)}let a=new Set,i=new Set,c=_=>{if(i.has(_)&&f("NATIVE_WORKFLOW_CYCLE_FORBIDDEN",`${t}/nodes/${_}`),!a.has(_)){a.add(_),i.add(_);for(let p of r.get(_)||[])c(p);i.delete(_)}};c(s),a.size!==o.length&&f("NATIVE_WORKFLOW_NODE_UNREACHABLE",`${t}/nodes`)}function Je(e,t,n){n>20&&f("NATIVE_WORKFLOW_EXPRESSION_DEPTH_EXCEEDED",t);let o=I(e,t),s=h(o.op,`${t}/op`,16);if(s!=="literal"){if(s==="path"){let r=h(o.path,`${t}/path`,255);/^[A-Za-z][A-Za-z0-9_.]{0,254}$/.test(r)||f("NATIVE_WORKFLOW_EXPRESSION_PATH_INVALID",`${t}/path`);return}if(["eq","neq","gt","gte","lt","lte","in","contains"].includes(s)){Je(o.left,`${t}/left`,n+1),Je(o.right,`${t}/right`,n+1);return}if(["and","or"].includes(s)){let r=$(o.values,`${t}/values`,100);r.length===0&&f("NATIVE_WORKFLOW_EXPRESSION_EMPTY",`${t}/values`),r.forEach((a,i)=>Je(a,`${t}/values/${i}`,n+1));return}if(["not","exists"].includes(s)){Je(o.value,`${t}/value`,n+1);return}f("NATIVE_WORKFLOW_EXPRESSION_OPERATOR_INVALID",`${t}/op`)}}function Hi(e,t){L(e.schemaVersion,"openxiangda.workflow-binding/v2",`${t}/schemaVersion`),Tt(e.workflowCode,`${t}/workflowCode`);let n=I(e.bindings,`${t}/bindings`);Object.keys(n).length>200&&f("NATIVE_WORKFLOW_BINDING_LIMIT_EXCEEDED",`${t}/bindings`);for(let[o,s]of Object.entries(n)){sn(o,`${t}/bindings/${o}`);let r=I(s,`${t}/bindings/${o}`),a=h(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)||f("NATIVE_WORKFLOW_BINDING_PROVIDER_INVALID",`${t}/bindings/${o}/provider`),a==="fixed_users"&&$(r.users,`${t}/bindings/${o}/users`,200).length===0&&f("NATIVE_WORKFLOW_BINDING_USERS_REQUIRED",`${t}/bindings/${o}/users`),["input_users","form_field_users"].includes(a)&&h(r.inputPath,`${t}/bindings/${o}/inputPath`,255),["app_role","app_role_in_scope","initiator_select"].includes(a)&&w(r.roleCode,`${t}/bindings/${o}/roleCode`),a==="department_supervisor"&&h(r.departmentIdFrom,`${t}/bindings/${o}/departmentIdFrom`,255),a==="application_provider"&&w(r.providerCode,`${t}/bindings/${o}/providerCode`)}}function Xi(e,t,n){L(t.workflowCode,e.code,`${n}/workflowCode`);let o=I(t.bindings,`${n}/bindings`);for(let[s,r]of Object.entries(I(e.nodes,`${n}/nodes`))){let a=I(r,`${n}/nodes/${s}`);a.kind==="approval"&&!o[a.binding]&&f("NATIVE_WORKFLOW_BINDING_REFERENCE_MISSING",`${n}/nodes/${s}/binding`)}}function Qi(e,t,n){let o=I(t.routeManifest,"/contracts/routeManifest"),s=I(e.routeManifest,"/contracts/routeManifest"),r=new Map;for(let p of $(n.data?.resources,"/config/data/resources",100)){let d=I(p,"/config/data/resources");r.set(String(d.code||""),d)}let a=new Set($(s.routes,"/contracts/routeManifest/routes",1e3).map(p=>String(I(p,"/contracts/routeManifest/routes").code||""))),i=[];for(let p of $(o.routes,"/contracts/routeManifest/routes",1e3)){let d=I(p,"/contracts/routeManifest/routes"),u=String(d.kind||"");if(u!=="resource-records"&&u!=="resource-submit")continue;let E=String(d.resourceCode||""),l=r.get(E);l||f("NATIVE_ROUTE_MANIFEST_RESOURCE_UNKNOWN","/contracts/routeManifest/routes");let T=`user.${E}.${u==="resource-records"?"records":"submit"}`;L(String(d.code||""),T,"/contracts/routeManifest/routes/code");let m=u==="resource-records"?"read":"create",N=String(I(l.capabilities,"/config/data/resources/capabilities")[m]||"");for(let b of["desktop","mobile"]){let R=I(d[b],`/contracts/routeManifest/routes/${b}`),g=b==="mobile"?"/m/my/":"/my/",C=u==="resource-records"?`${g}${E}`:`${g}${E}/submit`;L(String(R.path||""),C,`/contracts/routeManifest/routes/${b}/path`),L(String(R.capability||""),N,`/contracts/routeManifest/routes/${b}/capability`),L(String(R.routeCode||""),`${T}.${b}`,`/contracts/routeManifest/routes/${b}/routeCode`)}(a.has(T)||i.some(b=>String(b.code)===T))&&f("NATIVE_ROUTE_MANIFEST_DUPLICATE","/contracts/routeManifest/routes/code"),i.push(d)}if(!i.length)return;s.routes=$([...s.routes,...i],"/contracts/routeManifest/routes",1e3).sort((p,d)=>re(String(I(p,"x").code||""),String(I(d,"x").code||"")));let c=String(I(o.rootEntry,"x").code||"");if(i.find(p=>String(p.code)===c&&p.kind==="resource-records")){let p=I(o.rootEntry,"x");s.rootEntry={code:c,desktop:String(p.desktop||""),mobile:String(p.mobile||"")}}s.digest=ee({schemaVersion:s.schemaVersion,appCode:s.appCode,devicePolicy:s.devicePolicy,rootEntry:s.rootEntry,authentication:s.authentication,routes:s.routes})}function Re(e,t,n){let o=I(e,t);O(o,["schemaVersion","appCode","code","name","schema","surface","invariants","decimalReservationLifecycle","capabilities","dataPolicyCode","fieldPolicies"],t,!0),L(o.schemaVersion,"openxiangda.data-resource/v2",`${t}/schemaVersion`),L(o.appCode,n,`${t}/appCode`);let s=G(o.code,`${t}/code`),r=h(o.name,`${t}/name`,255),a=I(o.schema,`${t}/schema`);O(a,["fields"],`${t}/schema`);let i,c,_;try{_=it(o.decimalReservationLifecycle,`${t}/decimalReservationLifecycle`),i=He(a.fields,`${t}/schema/fields`),c=$t(o.invariants,i,`${t}/invariants`),tt(o.surface,i,`${t}/surface`)}catch(E){throw(E instanceof ce||E instanceof Oe)&&f(E.code,E.pointer),E}let p=new Set(i.map(E=>E.code)),d=I(o.capabilities,`${t}/capabilities`);O(d,["read","create","update","delete"],`${t}/capabilities`);let u=I(o.fieldPolicies,`${t}/fieldPolicies`);for(let[E,l]of Object.entries(u)){!p.has(E)&&!Se(E)&&f("NATIVE_DATA_FIELD_POLICY_FIELD_MISSING",`${t}/fieldPolicies/${E}`);let A=`${t}/fieldPolicies/${E}`,T=I(l,A);Se(E)&&(O(T,["read"],A,!0),(!Array.isArray(T.read)||T.read.length>20||T.read.some(m=>typeof m!="string"||!m.trim())||new Set(T.read).size!==T.read.length)&&f("NATIVE_DATA_AUDIT_READ_POLICY_INVALID",`${A}/read`)),O(T,["read","create","update","mask"],A,!0),T.mask!==void 0&&!["omit","null"].includes(T.mask)&&f("NATIVE_DATA_FIELD_POLICY_MASK_INVALID",`${A}/mask`)}return{...o,code:s,name:r,schema:{fields:i},...o.invariants===void 0?{}:{invariants:c},..._?{decimalReservationLifecycle:_}:{},capabilities:d,fieldPolicies:u}}function Io(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 Hn(e,t,n,o){let s=e.toString("utf8"),r;try{r=JSON.parse(s)}catch{f(n,t)}let a=I(r,t);return Q(a)!==s&&f(o,t),a}function Xn(e,t){let n=0,o=(s,r,a)=>{if(n+=1,n>ii&&f("NATIVE_ARTIFACT_NODE_LIMIT_EXCEEDED",r),a>si&&f("NATIVE_ARTIFACT_DEPTH_LIMIT_EXCEEDED",r),typeof s=="string"){Buffer.byteLength(s)>Xt&&f("NATIVE_ARTIFACT_STRING_LIMIT_EXCEEDED",r);return}if(Array.isArray(s)){s.forEach((i,c)=>o(i,`${r}/${c}`,a+1));return}if(!(!s||typeof s!="object"))for(let[i,c]of Object.entries(s))["__proto__","prototype","constructor"].includes(i)&&f("NATIVE_ARTIFACT_DANGEROUS_KEY",`${r}/${i}`),Zi(i)&&f("NATIVE_ARTIFACT_RUNTIME_FIELD_FORBIDDEN",`${r}/${i}`),o(c,`${r}/${i}`,a+1)};o(e,t,0)}function Zi(e){return["environmentKey","environmentId","secretValue","ciphertext","oauthClient","oauthClientId","oauthClientSecret","signingSecret","kubernetesNamespace","nodePort","productionUrl"].includes(e)}function Pe(e){return{value:e,digest:ee(e)}}function Qn(e,t,n,o){typeof e!="string"&&!Buffer.isBuffer(e)&&!(e instanceof Uint8Array)&&f("NATIVE_ARTIFACT_BYTES_REQUIRED",n);let s=Buffer.isBuffer(e)?e:Buffer.from(e);return s.byteLength===0&&f("NATIVE_ARTIFACT_EMPTY",n),s.byteLength>t&&f(o,n),s}function Zn(e,t,n,o){let s=At.createHash("sha256").update(e).digest("hex");At.timingSafeEqual(Buffer.from(s),Buffer.from(t))||f(o,n)}function I(e,t){return(!e||typeof e!="object"||Array.isArray(e))&&f("NATIVE_OBJECT_REQUIRED",t),e}function $(e,t,n){return Array.isArray(e)||f("NATIVE_ARRAY_REQUIRED",t),e.length>n&&f("NATIVE_ARRAY_LIMIT_EXCEEDED",t),e}function F(e,t,n){let o=$(e,t,n).map((s,r)=>h(s,`${t}/${r}`,255));return new Set(o).size!==o.length&&f("NATIVE_ARRAY_DUPLICATE",t),o}function h(e,t,n){return(typeof e!="string"||e.length===0||e.length>n)&&f("NATIVE_STRING_INVALID",t),e}function on(e,t,n){return(typeof e!="string"||e.length>n)&&f("NATIVE_STRING_INVALID",t),e}function w(e,t){let n=h(e,t,128);return Bs.test(n)||f("NATIVE_CODE_INVALID",t),n}function G(e,t){let n=h(e,t,64);return Ws.test(n)||f("NATIVE_RESOURCE_CODE_INVALID",t),n}function B(e,t){let n=h(e,t,63);return Gs.test(n)||f("NATIVE_FIELD_CODE_INVALID",t),n}function Tt(e,t){let n=h(e,t,128);return qs.test(n)||f("NATIVE_WORKFLOW_CODE_INVALID",t),n}function sn(e,t){let n=h(e,t,128);return Ks.test(n)||f("NATIVE_WORKFLOW_BINDING_CODE_INVALID",t),n}function ge(e,t,n){let o=h(e,t,255);return js.test(o)||f("NATIVE_CAPABILITY_CODE_INVALID",t),!o.startsWith(`app:${n}:`)&&!Io(n).some(s=>s.code===o)&&f("NATIVE_CAPABILITY_APP_MISMATCH",t),o}function le(e,t){let n=h(e,t,2048);return(!n.startsWith("/")||n.startsWith("//")||n.includes("..")||n.includes("?")||n.includes("#"))&&f("NATIVE_ABSOLUTE_PATH_INVALID",t),n}function ve(e,t){return(!Number.isInteger(e)||Number(e)<1)&&f("NATIVE_POSITIVE_INTEGER_REQUIRED",t),Number(e)}function Z(e,t,n,o){return(!Number.isInteger(e)||Number(e)<n||Number(e)>o)&&f("NATIVE_INTEGER_OUT_OF_RANGE",t),Number(e)}function Le(e,t){return typeof e!="boolean"&&f("NATIVE_BOOLEAN_REQUIRED",t),e}function Zt(e,t){let n=h(e,t,64).toLowerCase();return Us.test(n)||f("NATIVE_DIGEST_INVALID",t),n}function L(e,t,n){e!==t&&f("NATIVE_VALUE_MISMATCH",n)}function O(e,t,n,o=!1){let s=new Set([...t,...Array.isArray(o)?o:[]]);for(let r of Object.keys(e))s.has(r)||f("NATIVE_PROPERTY_UNKNOWN",`${n}/${r}`);if(o!==!0)for(let r of t)Object.prototype.hasOwnProperty.call(e,r)||f("NATIVE_PROPERTY_REQUIRED",`${n}/${r}`)}function X(e,t){return[...e].sort((n,o)=>re(t(n),t(o)))}function j(e){return[...new Set(e)].sort(re)}function eo(e){return[...new Set(e)].sort((t,n)=>t-n)}function re(e,t){return e===t?0:e<t?-1:1}function mo(e){return!e||typeof e!="object"||Object.isFrozen(e)||(Object.freeze(e),Object.values(e).forEach(t=>mo(t))),e}function en(e,t,n){if(Ht(e,t))return n;if(Array.isArray(e)&&Array.isArray(t)){let o=Math.max(e.length,t.length);for(let s=0;s<o;s+=1)if(!Ht(e[s],t[s]))return en(e[s],t[s],`${n}/${s}`)}if(e&&t&&typeof e=="object"&&typeof t=="object"&&!Array.isArray(e)&&!Array.isArray(t)){let o=j([...Object.keys(e),...Object.keys(t)]);for(let s of o){let r=e[s],a=t[s];if(!Ht(r,a))return en(r,a,`${n}/${s}`)}}return n}function Ht(e,t){return e===void 0||t===void 0?e===t:Q(e)===Q(t)}function f(e,t,n={}){throw new _t(e,t,n)}var er="36faf8533590277affdd3db8582a251e242ca9aa4a4451067060e171127f0abe";0&&(module.exports={DATA_AUDIT_METADATA_FIELDS,DATA_EVENT_TYPES_V2,DATA_SYSTEM_SORT_FIELD_CODES,NATIVE_CONFIGURATION_VALIDATOR_DIGEST,NATIVE_CONTRACT_CAPACITY_V2,NATIVE_DATA_POLICY_EXPRESSION_MAX_CLAUSES,NATIVE_DATA_POLICY_EXPRESSION_MAX_DEPTH,NATIVE_DATA_POLICY_EXPRESSION_MAX_GROUP_ITEMS,NATIVE_DATA_POLICY_EXPRESSION_MAX_LEAVES,NATIVE_DATA_POLICY_EXPRESSION_MAX_OCCURRENCES,NATIVE_DATA_QUERY_OPERATORS_V2,NativeConfigurationCompilerError,NativeDataFieldContractV2Error,NativeDataPolicyExpressionV2Error,NativeDecimalLifecycleContractError,NativeEventActionContractError,NativeScopeSourceFieldPathV2Error,OPENXIANGDA_NATIVE_DATA_FIELD_TYPES_V2,OPENXIANGDA_NATIVE_DATA_SURFACE_KEYS_V2,OPENXIANGDA_NATIVE_DRAFT_STATE_KEYS_V2,OPENXIANGDA_NATIVE_SYSTEM_FIELDS_V2,OPENXIANGDA_NATIVE_SYSTEM_FIELD_MAP_V2,WORKFLOW_EVENT_TYPES_V2,compileNativeApplicationConfiguration,compileNativeEventAction,compileNativeEventCapturePlansV2,compileRequiredPlatformCapabilitiesV3,hasDataAuditReadPolicy,isDataAuditMetadataField,isDataSystemSortField,isNativeDataQueryOperatorV2,isNativeMultiValueFieldV2,materializeNativeDataQueryPathTypesV2,nativeDataPolicyExpressionLeavesV2,nativeDataPolicyExpressionToCnfV2,nativeDataQueryPathPlanV2,nativeFieldAggregatePlanV2,nativeFieldColumnDefinitionV2,nativeFieldDefaultSqlV2,nativeFieldHasDefaultV2,nativeFieldIndexStatementsV2,nativeFieldRequiresCreateInputV2,nativeFieldSequenceGrantStatementsV2,nativeFieldSequenceOwnershipStatementsV2,nativeFieldSequenceStatementsV2,nativeFieldSupportsFilterV2,nativeFieldSupportsOperatorV2,nativeFieldSupportsSearchV2,nativeFieldSupportsSortV2,nativeOperatorsForFieldV2,nativePhysicalFieldV2,nativePhysicalFieldsV2,nativePhysicalObjectNameV2,nativeScopeSourceFieldValueV2,nativeScopeSourceGrantPathSupportedV2,nativeScopeSourceSubjectPathSupportedV2,nativeSubtableConstraintStatementsV2,parseDecimalReservationLifecycle,parseNativeDataFieldsV2,parseNativeDataResourceInvariantsV2,projectNativeDataResourceViewV2,quoteNativeIdentifierV2,resolveNativeScopeSourceFieldPathV2,validateDecimalReservationLifecycles,validateNativeDataDraftStateV2,validateNativeDataResourceReferencesV2,validateNativeDataResourceSurfaceV2,validateWorkflowInstanceCommandPolicies,workflowInstanceCommandDeadlineError,workflowInstanceTerminateCapabilityAllowed,workflowPolicyTimestamp});
|
|
8
|
+
END $native_subtable$`]}function Te(e,...t){return`${e}_${(0,Fn.createHash)("sha256").update(t.join(":")).digest("hex").slice(0,32)}`}function ne(e){if(!/^[A-Za-z_][A-Za-z0-9_]{0,62}$/.test(e))throw new Error("OPENXIANGDA_NATIVE_IDENTIFIER_INVALID");return`"${e}"`}function Rs(e,t){return e.type==="subtable"?"none":t?"gin-trigram":e.indexed?["date-range","datetime-range"].includes(e.type)?"gist-range":Yt.has(e.type)?"btree-snapshot-expressions":ps.has(e.type)?"gin-jsonb-path":"btree":"none"}function hs(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 Es.has(e.type),"jsonb"}}function Ln(e,t){if(Ue(t.type)&&t.type!=="subtable")return"'[]'::jsonb";if(t.type!=="serial-number")return"";let n=wn(t.serial?.prefix||""),o=t.serial?.digits??6;return`(${n} || lpad(nextval(${wn(dt(e,t.code))})::text, ${o}, '0'))`}function ys(e,t){return Pn.has(t.type)?` CHECK (${e} IS NULL OR jsonb_typeof(${e}) = 'array')`:_s.has(t.type)?` CHECK (${e} IS NULL OR jsonb_typeof(${e}) = 'object')`:""}function ct(e){return`"app_data".${ne(e)}`}function dt(e,t){let n=Te("seq",e,t);return`"app_data".${ne(n)}`}function wn(e){return`'${e.replace(/'/g,"''")}'`}var kn=new Set(["option.single","option.multiple","user.single","user.multiple","department.single","department.multiple","resource-ref.single","resource-ref.multiple"]),Ss=new Set([...kn,"cascade.single","cascade.multiple","file","image","signature","address","location","json"]),xn=/^[A-Za-z][A-Za-z0-9_]{0,62}$/,Ds=new Set(["__proto__","prototype","constructor"]),lt=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 Fe(e,t){let n=Un(e);if(!n)return null;let o=t.get(n[0]);if(!o)return null;let s=n.slice(1).join(".")||void 0;return{field:o,...s?{valuePath:s}:{}}}function ut(e){return!!(e&&e.field.type==="user.single"&&e.valuePath==="value")}function qt(e,t,n){if(!e||!t||!ws(e))return!1;let{field:o,valuePath:s}=e;if(!s)return t.valueType==="uuid"?o.type==="uuid":["text.short","text.long","serial-number"].includes(o.type);if(s==="value")return!(t.valueSourceResourceCode&&o.type.startsWith("resource-ref.")&&o.source?.resourceCode!==t.valueSourceResourceCode);let i=s.slice(9),r=n.get(o.source?.resourceCode||"")?.get(i)?.type;return t.valueType==="uuid"?r==="uuid":["text.short","text.long","serial-number"].includes(r||"")}function Vs(e,t){let n=Un(t);if(!n)throw new lt(String(t||""));let o=e;for(let s of n){if(!o||typeof o!="object"||!Object.prototype.hasOwnProperty.call(o,s))return;o=o[s]}return o}function ws(e){let{field:t,valuePath:n}=e;if(!n)return!Ss.has(t.type);if(n==="value")return kn.has(t.type);if(!n.startsWith("snapshot."))return!1;let o=n.slice(9);return xn.test(o)&&t.type.startsWith("resource-ref.")&&!!t.source?.snapshotFields?.includes(o)}function Un(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=>!xn.test(n)||Ds.has(n))||t.length===2&&t[1]!=="value"||t.length===3&&t[1]!=="snapshot"?null:t}var Fs=new Set(["option.single","user.single","department.single","resource-ref.single"]),Ps=new Set(["text.short","text.long","text.rich","number.integer","number.decimal","boolean","date","time","datetime","uuid","serial-number"]),vs=new Set(["value","label","description","color"]),Ls=new Set(["avatarUrl","employeeNo","title","mobile","email"]),ks=new Set(["fullPath","parent.value","parent.label"]),xs=new Set(["country.value","country.label","province.value","province.label","city.value","city.label","district.value","district.label","street.value","street.label","detail","fullAddress"]),Us=new Set(["longitude","latitude","accuracy"]),Ms=new Set(["address","name","province","city","district","source"]);function js(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 s=Js(o,t);if(!Object.keys(s).length)return o;let i={...o};return Object.defineProperty(i,"queryPathTypes",{configurable:!1,enumerable:!1,writable:!1,value:Object.freeze(s)}),i})}}))}function Bs(e,t){if(Fs.has(e.type)&&vs.has(t)||e.type==="user.single"&&Ls.has(t)||e.type==="department.single"&&ks.has(t))return Be(t);if(e.type==="resource-ref.single"){let n=e.queryPathTypes?.[t];return n?{parts:t.split("."),type:n}:null}if(e.type==="address"&&xs.has(t))return Be(t);if(e.type==="location"){if(Us.has(t))return{parts:[t],type:"number.decimal"};if(Ms.has(t))return Be(t);if(t==="capturedAt")return{parts:[t],type:"datetime"}}return null}function Js(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 s=n.get(o);return s?[[`snapshot.${o}`,Ps.has(s.type)?s.type:"json"]]:[]})):{}}function Be(e){return{parts:e.split("."),type:"text.short"}}var Xt=["exact-v1","nfkc-space-v1","nfkc-upper-ascii-v1"],Pr=256,Pe=class extends Error{constructor(n,o){super(`\u6761\u4EF6\u552F\u4E00\u952E\u58F0\u660E\u65E0\u6548\uFF1A${o}\uFF08${n}\uFF09`);this.pointer=n;this.reason=o}pointer;reason;code="NATIVE_UNIQUE_KEY_INVALID"},Kt=e=>!!(e&&typeof e=="object"&&!Array.isArray(e)),oe=(e,t)=>{throw new Pe(e,t)},ft=(e,t)=>e<t?-1:e>t?1:0,pt=(e,t,n)=>{Object.keys(e).some(o=>!t.includes(o))&&oe(n,"\u4E0D\u652F\u6301\u672A\u77E5\u5C5E\u6027")};function Qt(e,t,n="/uniqueKeys"){if(e===void 0)return;if(!Array.isArray(e)||e.length>8)return oe(n,"\u6BCF\u8D44\u6E90\u6700\u591A 8 \u6761\u89C4\u5219");let o=new Map(t.map(i=>[i.code,i])),s=new Set;return e.map((i,a)=>{let r=`${n}/${a}`;if(!Kt(i))return oe(r,"\u89C4\u5219\u5FC5\u987B\u662F\u5BF9\u8C61");if(pt(i,["code","fields","when"],r),typeof i.code!="string"||!/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/.test(i.code)||i.code.length>20||s.has(i.code))return oe(`${r}/code`,"\u9700\u8981\u4E0D\u91CD\u590D\u4E14\u4E0D\u8D85\u8FC7 20 \u5B57\u7B26\u7684 lower-kebab-case \u6807\u8BC6");if(s.add(i.code),!Array.isArray(i.fields)||i.fields.length<1||i.fields.length>4)return oe(`${r}/fields`,"\u5FC5\u987B\u9009\u62E9 1 \u5230 4 \u4E2A\u5B57\u6BB5");let c=new Set,p=i.fields.map((E,d)=>{let A=`${r}/fields/${d}`;if(!Kt(E))return oe(A,"\u5B57\u6BB5\u5FC5\u987B\u662F\u5BF9\u8C61");pt(E,["fieldCode","normalizer"],A);let N=o.get(E.fieldCode);if(!N||!["text.short","uuid","option.single","resource-ref.single"].includes(N.type)||c.has(E.fieldCode))return oe(`${A}/fieldCode`,"\u9700\u8981\u4E0D\u91CD\u590D\u7684\u77ED\u6587\u672C\u3001UUID\u3001\u5355\u9009\u6216\u5355\u8BB0\u5F55\u5F15\u7528\u5B57\u6BB5");c.add(E.fieldCode);let I=E.normalizer===void 0?"exact-v1":E.normalizer;return!Xt.includes(I)||N.type!=="text.short"&&I!=="exact-v1"?oe(`${A}/normalizer`,"\u5F52\u4E00\u5316\u65B9\u5F0F\u4E0D\u652F\u6301\u6216\u4E0E\u5B57\u6BB5\u7C7B\u578B\u4E0D\u7B26"):{fieldCode:N.code,normalizer:I}}).sort((E,d)=>ft(E.fieldCode,d.fieldCode)),_=i.when===void 0?[]:i.when;if(!Array.isArray(_)||_.length>4)return oe(`${r}/when`,"\u6700\u591A 4 \u4E2A\u5408\u53D6\u6761\u4EF6");let l=new Set,u=_.map((E,d)=>{let A=`${r}/when/${d}`;if(!Kt(E))return oe(A,"\u6761\u4EF6\u5FC5\u987B\u662F\u5BF9\u8C61");let N=o.get(E.fieldCode);if(!N)return oe(`${A}/fieldCode`,"\u5B57\u6BB5\u4E0D\u5B58\u5728");let I;if(E.operator==="empty"||E.operator==="nonempty"){if(pt(E,["fieldCode","operator"],A),N.type!=="text.short")return oe(A,"\u7A7A\u503C\u6761\u4EF6\u4EC5\u652F\u6301\u77ED\u6587\u672C");I={fieldCode:N.code,operator:E.operator}}else if(E.operator==="in"||E.operator==="notIn"){pt(E,["fieldCode","operator","values"],A);let b=new Set((N.options??[]).map(O=>O.value));if(N.type!=="option.single"||!Array.isArray(E.values)||E.values.length<1||E.values.length>16||E.values.some(O=>typeof O!="string"||O.length<1||O.length>128||!b.has(O))||new Set(E.values).size!==E.values.length)return oe(A,"\u96C6\u5408\u6761\u4EF6\u9700\u8981 1 \u5230 16 \u4E2A\u4E0D\u91CD\u590D\u7684\u5DF2\u58F0\u660E\u5355\u9009\u503C");I={fieldCode:N.code,operator:E.operator,values:[...E.values].sort(ft)}}else return oe(`${A}/operator`,"\u53EA\u652F\u6301 empty\u3001nonempty\u3001in \u548C notIn");let g=JSON.stringify(I);return l.has(g)?oe(A,"\u6761\u4EF6\u4E0D\u80FD\u91CD\u590D"):(l.add(g),I)}).sort((E,d)=>ft(JSON.stringify(E),JSON.stringify(d)));return{code:i.code,fields:p,when:u}}).sort((i,a)=>ft(i.code,a.code))}var Ht={type:"string",pattern:"^[A-Za-z_][A-Za-z0-9_]{0,62}$"},Ws={type:"array",maxItems:8,items:{type:"object",additionalProperties:!1,required:["code","fields"],properties:{code:{type:"string",maxLength:20,pattern:"^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$"},fields:{type:"array",minItems:1,maxItems:4,uniqueItems:!0,items:{type:"object",additionalProperties:!1,required:["fieldCode"],properties:{fieldCode:Ht,normalizer:{enum:[...Xt]}}}},when:{type:"array",maxItems:4,uniqueItems:!0,items:{oneOf:[{type:"object",additionalProperties:!1,required:["fieldCode","operator"],properties:{fieldCode:Ht,operator:{enum:["empty","nonempty"]}}},{type:"object",additionalProperties:!1,required:["fieldCode","operator","values"],properties:{fieldCode:Ht,operator:{enum:["in","notIn"]},values:{type:"array",minItems:1,maxItems:16,uniqueItems:!0,items:{type:"string",minLength:1,maxLength:128}}}}]}}}}};var Mn={"openxiangda.workflow.instance.completed.v2":"commit","openxiangda.workflow.instance.rejected.v2":"release","openxiangda.workflow.instance.withdrawn.v2":"release"};function jn(e,t){let n=()=>{throw new Error("NATIVE_EVENT_DECIMAL_RESERVATION_INVALID")},o=u=>!u||typeof u!="object"||Array.isArray(u)?n():u,s=o(e);if(Object.keys(s).some(u=>!["resourceCode","workflowCode","outcomes"].includes(u))||typeof s.resourceCode!="string"||!/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/.test(s.resourceCode)||typeof s.workflowCode!="string"||!/^[A-Za-z0-9._:-]{1,128}$/.test(s.workflowCode)||t.execution!==void 0||!Array.isArray(s.outcomes)||!s.outcomes.length||s.outcomes.length>3)return n();let i=t.resources.find(u=>u.code===s.resourceCode),a=t.reservations.find(u=>u.mode==="reserve"&&u.resourceCode===s.resourceCode),r=t.workflows.find(u=>u.code===s.workflowCode);if(!i||!a||!r||r.resourceCode!==i.code)return n();let c=i.fields.find(u=>u.code===a.statusFieldCode);if(c?.type!=="option.single")return n();let p=new Set(c.options?.map(u=>u.value)),_=new Set,l=s.outcomes.map(u=>{let E=o(u),d=E.eventType;return Object.keys(E).some(A=>!["eventType","mode","eligibleChildStatuses"].includes(A))||typeof d!="string"||!Object.prototype.hasOwnProperty.call(Mn,d)||!t.eventTypes.includes(d)||_.has(d)||E.mode!==Mn[d]||!Array.isArray(E.eligibleChildStatuses)||!E.eligibleChildStatuses.length||E.eligibleChildStatuses.length>16||new Set(E.eligibleChildStatuses).size!==E.eligibleChildStatuses.length||E.eligibleChildStatuses.some(A=>typeof A!="string"||!/^[A-Za-z0-9._:-]{1,128}$/.test(A)||!p.has(A))?n():(_.add(d),{eventType:d,mode:E.mode,eligibleChildStatuses:[...E.eligibleChildStatuses].sort()})}).sort((u,E)=>u.eventType.localeCompare(E.eventType));return{resourceCode:s.resourceCode,workflowCode:s.workflowCode,outcomes:l}}function Bn(e,t){let n=o=>Array.isArray(o)?o.filter(s=>s&&typeof s=="object"&&!Array.isArray(s)):[];return{eventTypes:Array.isArray(t.eventTypes)?t.eventTypes:[],execution:t.execution,resources:n(e.data?.resources).map(o=>({code:o.code,fields:n(o.schema?.fields).map(s=>({code:s.code,type:s.type,options:n(s.options).map(i=>({value:i.value}))}))})),reservations:n(e.backend?.operations).flatMap(o=>o.platformAccess?.decimalReservation?[o.platformAccess.decimalReservation]:[]),workflows:n(e.workflows?.definitions).map(o=>({code:o.definition?.code,resourceCode:o.definition?.subject?.resourceCode}))}}var _t=class extends Error{constructor(n,o){super(o);this.pointer=n}pointer;code="NATIVE_EVENT_ACTION_INVALID"};function Zt(e,t,n="/events/subscriptions"){if(e.execution===void 0)return;let o=(A,N)=>{throw new _t(`${n}${A}`,N)},s=(A,N,I)=>((!A||typeof A!="object"||Array.isArray(A)||Object.keys(A).some(g=>!I.includes(g)))&&o(N,"Invalid action object or unsupported property"),A),i=s(e.execution,"/execution",["kind","version","operations"]);(i.kind!=="native-data"||i.version!==1)&&o("/execution","Expected native-data version 1"),e.platformAccess&&o("/platformAccess","Native actions do not use application runtime capabilities"),(!Array.isArray(e.eventTypes)||!e.eventTypes.length||e.eventTypes.some(A=>!/^openxiangda\.data\.record\.(created|updated|deleted)\.v2$/.test(A)))&&o("/eventTypes","Native data actions require declared data events");let a=e.filter?.resourceCodes;(!Array.isArray(a)||!a.length||a.length>20)&&o("/filter/resourceCodes","Native actions require explicit source resources");let r=new Map(t.map(A=>[A.code,A])),c=a.map(A=>{let N=r.get(A);return N||o("/filter/resourceCodes","Unknown source resource"),new Set((N.schema?.fields||[]).map(I=>I.code))}),p=new Set(e.payload?.fields||[]),_=e.payload?.includeChanges===!0,l=(A,N)=>{let I=s(A,N,["source","path","value"]);if(I.source==="literal"){(!Object.hasOwn(I,"value")||Object.hasOwn(I,"path"))&&o(N,"Literal binding requires only value");let T;try{T=JSON.stringify(I.value)}catch{o(N,"Literal must be JSON")}return(T===void 0||Buffer.byteLength(T)>65536)&&o(N,"Literal is too large or not JSON"),{source:"literal",value:JSON.parse(T)}}(I.source!=="event"||typeof I.path!="string"||Object.hasOwn(I,"value"))&&o(N,"Expected a literal or event binding");let g=I.path.split(".");(g.length>8||g.some(T=>!/^[A-Za-z0-9_-]+$/.test(T)||["__proto__","prototype","constructor"].includes(T)))&&o(N,"Invalid event path");let b=/^data\.projection\.([A-Za-z][A-Za-z0-9_]{0,62})$/.exec(I.path),O=/^data\.changes\.([A-Za-z][A-Za-z0-9_]{0,62})\.(before|after)$/.exec(I.path);if(b||O){let T=(b||O)[1];c.some(C=>!C.has(T))&&o(N,"Source field must exist on every filtered resource"),p.add(T),O&&(_=!0)}else["id","time","type","subject","data.recordId","data.revision","data.operation","data.resourceCode"].includes(I.path)||o(N,"Event path is not part of the data event contract");return{source:"event",path:I.path}};(!Array.isArray(i.operations)||i.operations.length<1||i.operations.length>16)&&o("/execution/operations","Expected 1 to 16 operations");let u={},E=i.operations.map((A,N)=>{let I=`/execution/operations/${N}`,g=s(A,I,["operation","resourceCode","data","id","expectedRevision"]);["create","update","delete"].includes(g.operation)||o(I,"Unsupported Native operation");let b=r.get(g.resourceCode);b||o(I,"Unknown action target resource");let O=new Map((b.schema?.fields||[]).map(C=>[C.code,C])),T=g.data===void 0?{}:s(g.data,`${I}/data`,[...O.keys()]);return Object.keys(T).length>32&&o(I,"Maximum 32 mapped fields per operation"),g.operation==="create"&&(g.id!==void 0||g.expectedRevision!==void 0)&&o(I,"Create does not accept id or expectedRevision"),g.operation==="delete"&&g.data!==void 0&&o(I,"Delete does not accept data"),Object.keys(T).some(C=>O.get(C)?.type==="serial-number")&&o(I,"Generated fields cannot be assigned"),u[g.resourceCode]=ee(b),{operation:g.operation,resourceCode:g.resourceCode,...g.operation==="create"?{}:{id:l(g.id,`${I}/id`),expectedRevision:l(g.expectedRevision,`${I}/expectedRevision`)},...g.operation==="delete"?{}:{data:Object.fromEntries(Object.entries(T).map(([C,S])=>[C,l(S,`${I}/data/${C}`)]))}}});(p.size>32||[...p].some(A=>c.some(N=>!N.has(A))))&&o("/payload/fields","Payload must contain at most 32 declared source fields");let d={kind:"native-data",version:1,operations:E,resourceDigests:u};return Buffer.byteLength(JSON.stringify(d))>65536&&o("/execution","Action plan exceeds 64 KiB"),{execution:{...d,digest:ee(d)},payload:{includeChanges:_,fields:[...p].sort()}}}function be(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)?e:void 0}function tn(e,t){if(e?.instanceCommands===void 0)return[];let n=be(e.instanceCommands);if(!n||!Object.keys(n).length||Object.keys(n).some(s=>!["withdraw","terminate"].includes(s)))return["WORKFLOW_INSTANCE_COMMAND_POLICIES_INVALID"];let o=[];for(let[s,i]of Object.entries(n)){let a=be(i),r=s==="withdraw"?["beforeFact"]:["beforeFact","capability"];if(!a||Object.keys(a).some(c=>!r.includes(c))){o.push(`WORKFLOW_INSTANCE_COMMAND_POLICY_INVALID:${s}`);continue}if(s==="terminate"){let c=a.capability;(typeof c!="string"||c.length>255||!/^app:[a-z][a-z0-9]*(?:-[a-z0-9]+)*:[A-Za-z0-9:._-]+$/.test(c)||t&&(!c.startsWith(`app:${t.appCode}:`)||!t.capabilities.includes(c)))&&o.push("WORKFLOW_INSTANCE_TERMINATE_CAPABILITY_INVALID")}if(s==="withdraw"||a.beforeFact!==void 0){let c=a.beforeFact,p=be(e.inputSchema),_=be(be(p?.properties)?.[c]),l=be(be(e.subject)?.factProjection)?.[c],u=t?.fields.get(l);(typeof c!="string"||!/^[A-Za-z][A-Za-z0-9_]{0,62}$/.test(c)||!Array.isArray(p?.required)||!p.required.includes(c)||_?.type!=="string"||_?.format!=="date-time"||typeof l!="string"||t&&(u?.type!=="datetime"||u.nullable===!0))&&o.push(`WORKFLOW_INSTANCE_COMMAND_DEADLINE_FACT_INVALID:${s}`)}}return o}function zs(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 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[,n,o,s,i,a,r]=t,c=t[8],p=new Date(Date.UTC(Number(n),Number(o),0)).getUTCDate();if(Number(o)<1||Number(o)>12||Number(s)<1||Number(s)>p||Number(i)>23||Number(a)>59||Number(r)>59||c!=="Z"&&(Number(c.slice(1,3))>23||Number(c.slice(4))>59))return null;let _=Date.parse(e);return Number.isFinite(_)?_:null}function Gs(e,t,n,o){let s=e?.[t];if(!s||t==="terminate"&&s.beforeFact===void 0)return null;let i=s.beforeFact,a=be(n),r=i&&a&&Object.hasOwn(a,i)?en(a[i]):null,c=o instanceof Date?o.getTime():en(o);return r===null||c===null||!Number.isFinite(c)?"WORKFLOW_V2_CANCELLATION_DEADLINE_INVALID":c<r?null:"WORKFLOW_V2_CANCELLATION_DEADLINE_PASSED"}var gt=Fo(require("crypto"),1);var Jn="native-4",Wn={"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","data.decimal-reservations":"1.1.0","data.decimal-reservation-lifecycle":"1.0.0","data.unique-keys":"1.0.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 jr=5,Br=20,Jr=50,Wr=50,zr=100,ve=class extends Error{constructor(n,o){super(n);this.code=n;this.pointer=o;this.name="NativeDataPolicyExpressionV2Error"}code;pointer};function We(e,t){let n=[],o=(s,i,a)=>{a>5&&Je("NATIVE_DATA_POLICY_EXPRESSION_DEPTH_EXCEEDED",i);let r=zn(s,i),c=["allOf","anyOf"].filter(l=>l in r);if(c.length===0){n.push({rule:r,pointer:i}),n.length>50&&Je("NATIVE_DATA_POLICY_EXPRESSION_LEAVES_EXCEEDED",i);return}let p=c[0],_=r[p];(c.length!==1||Object.keys(r).length!==1||!Array.isArray(_)||_.length<1||_.length>20)&&Je("NATIVE_DATA_POLICY_EXPRESSION_GROUP_INVALID",i),_.forEach((l,u)=>o(l,`${i}/${p}/${u}`,a+1))};return o(e,t,1),n}function on(e,t){We(e,t);let n=(o,s)=>{let i=zn(o,s);if(Array.isArray(i.allOf))return nn(i.allOf.flatMap((a,r)=>n(a,`${s}/allOf/${r}`)),s);if(Array.isArray(i.anyOf)){let a=[[]];return i.anyOf.forEach((r,c)=>{let p=n(r,`${s}/anyOf/${c}`);a=nn(a.flatMap(_=>p.map(l=>[..._,...l])),s)}),a}return[[i]]};return nn(n(e,t),t)}function nn(e,t){let n=e.reduce((o,s)=>o+s.length,0);return(e.length>50||n>100)&&Je("NATIVE_DATA_POLICY_EXPRESSION_EXPANSION_EXCEEDED",t),e}function zn(e,t){return(!e||typeof e!="object"||Array.isArray(e))&&Je("NATIVE_DATA_POLICY_EXPRESSION_NODE_INVALID",t),e}function Je(e,t){throw new ve(e,t)}var Ys="openxiangda.config-bundle/v3",lo="openxiangda.contract-bundle/v3",Gn="openxiangda.native-configuration-projection/v1",Ge=Jn,qs=/^[a-f0-9]{64}$/,Ks=/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/,Hs=/^app:[a-z][a-z0-9]*(?:-[a-z0-9]+)*:[A-Za-z0-9:._*-]+$/,Xs=/^[a-z][a-z0-9]*(?:[-_.][a-z0-9]+)*$/,Qs=/^[a-z][a-z0-9]*(?:[-.][a-z0-9]+)*$/,Zs=/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/,ei=/^[A-Za-z][A-Za-z0-9_]{0,62}$/,Yn=/^[A-Za-z][A-Za-z0-9_]{0,127}$/,ti=/^[a-z][a-z0-9]*(?:[-_][a-z0-9]+)*$/,ni=/^[A-Z][A-Z0-9_]*$/,oi=/^[a-z][a-z0-9-]{2,63}$/,si=/^[A-Za-z][A-Za-z0-9_-]{0,127}$/,ii=/^[A-Za-z][A-Za-z0-9_.]{0,127}$/,ri=16,ai=2*1024,ci=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"]),di=new Set(["overview","database","operations","workflow","members","calendar","document","folder","settings"]),li=new Set(["approve","reject","return","transfer","delegate","add_assignee","resubmit","withdraw","terminate","admin_reassign","admin_override","retry_resolution"]),ui=4*1024*1024,fi=8*1024*1024,pi=40,_i=1e5,rn=1024*1024,Ei="openxiangda.event-handler-manifest/v2",uo="openxiangda.application-route-manifest/v3",qn=64,fo=new Set(["id","revision","created_by","updated_by","created_at","updated_at"]),q=Object.freeze({perspectives:100,resources:100,subjectReadSurfaces:50,capabilities:2e3,operations:500,eventConsumers:100,eventProducers:1e3,eventSchemas:100,eventTypes:500,workflows:100,routes:500,adminPages:500,adminNavigationGroups:100,adminNavigationItems:500}),Et=["openxiangda.data.record.created.v2","openxiangda.data.record.updated.v2","openxiangda.data.record.deleted.v2"],At=["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(At),It=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(([s,i])=>[s,String(i).slice(0,128)]))}};function Ii(e){let t=h(e.appCode,"/appCode",128);Ks.test(t)||f("NATIVE_CONFIG_APP_CODE_INVALID","/appCode");let n=cn(e.expectedConfigDigest,"/expectedConfigDigest"),o=cn(e.expectedContractDigest,"/expectedContractDigest"),s=ro(e.configBytes,ui,"/configBytes","NATIVE_CONFIG_ARTIFACT_TOO_LARGE"),i=ro(e.contractBytes,fi,"/contractBytes","NATIVE_CONTRACT_ARTIFACT_TOO_LARGE");ao(s,n,"/configBytes","NATIVE_CONFIG_DIGEST_MISMATCH"),ao(i,o,"/contractBytes","NATIVE_CONTRACT_DIGEST_MISMATCH");let a=so(s,"/configBytes","NATIVE_CONFIG_JSON_INVALID","NATIVE_CONFIG_NOT_CANONICAL"),r=so(i,"/contractBytes","NATIVE_CONTRACT_JSON_INVALID","NATIVE_CONTRACT_NOT_CANONICAL");io(a,"/config"),io(r,"/contracts");let c=a,p=r;Ni(c,t),gi(p,t,n);let _=Ti(c,n,p.generatorVersion);ar(_,p,c),Q(_)!==Q(p)&&f("NATIVE_CONTRACT_CLOSURE_MISMATCH",dn(_,p,"/contracts"));let l={authz:{appCode:t,...c.authz,perspectives:c.perspectives,capabilityCatalog:_.capabilities},data:{appCode:t,resources:c.data.resources,resourceContracts:_.resources,..._.subjectReadSurfaces?{subjectReadSurfaces:_.subjectReadSurfaces}:{}},events:{appCode:t,...c.events,consumers:_.eventConsumers,producers:_.eventProducers,handlerManifest:_.eventHandlerManifest,eventTypes:_.eventTypes,capturePlans:_o({resources:c.data.resources,dataPolicies:c.authz.dataPolicies,subscriptions:_.eventConsumers,capturePolicies:c.events.capturePolicies})},workflows:{appCode:t,...c.workflows,contracts:_.workflows},runtime:{appCode:t,requirements:c.runtime,backend:c.backend,frontend:c.frontend},contracts:_},u={authz:Le(l.authz),data:Le(l.data),events:Le(l.events),workflows:Le(l.workflows),runtime:Le(l.runtime),contracts:Le(l.contracts)},E={configDigest:n,contractDigest:o,generatorVersion:p.generatorVersion},d=po(c),A={schemaVersion:Gn,compilerContractVersion:Ge,appCode:t,source:E,projections:u,requiredPlatformCapabilities:d,aggregateDigest:ee({schemaVersion:Gn,compilerContractVersion:Ge,appCode:t,source:E,requiredPlatformCapabilities:d,projectionDigests:Object.fromEntries(Object.entries(u).map(([N,I])=>[N,I.digest]))})};return Ro(A)}function po(e){let t=e.authz.roles,n=e.data.resources,o=e.backend.operations,s=t.some(d=>d.capabilities.some(A=>A.endsWith(":directory:read")))||n.some(d=>d.schema.fields.some(A=>["user.single","user.multiple","department.single","department.multiple"].includes(A.type)))||o.some(d=>d.platformAccess?.directory),i=!!(e.events.subscriptions.length||e.events.timers.length||e.events.dateTriggers.length||e.events.schemas.length),a=o.some(d=>d.platformAccess?.managedFiles||d.platformAccess?.managedFileCopies)||e.events.subscriptions.some(d=>d.platformAccess?.managedFileCopies),r=o.some(d=>d.platformAccess?.notification)||e.events.subscriptions.some(d=>d.platformAccess?.notification),c=e.workflows.definitions.filter(d=>d.launch.mode==="standalone"||d.launch.mode==="hidden-handoff"),p=o.some(d=>d.platformAccess?.workflow)||c.length>0,_={resources:n},l={perspectives:e.perspectives,authz:e.authz},u={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(d=>({code:d.code,method:d.method,path:d.path,capability:d.capability,platformAccess:d.platformAccess||null,...d.browser?{browser:d.browser}:{},ai:d.ai||null}))}};return[...n.some(d=>d.uniqueKeys?.length)?[{code:"data.unique-keys",declaration:n.filter(d=>d.uniqueKeys?.length).map(d=>({code:d.code,uniqueKeys:d.uniqueKeys}))}]:[],...n.some(d=>d.decimalReservationLifecycle)?[{code:"data.decimal-reservation-lifecycle",declaration:n.filter(d=>d.decimalReservationLifecycle).map(d=>({code:d.code,decimalReservationLifecycle:d.decimalReservationLifecycle}))}]:[],...o.some(d=>d.platformAccess?.decimalReservation)||e.events.subscriptions.some(d=>d.platformAccess?.decimalReservation)?[{code:"data.decimal-reservations",declaration:[...o.filter(d=>d.platformAccess?.decimalReservation).map(d=>({code:d.code,decimalReservation:d.platformAccess.decimalReservation})),...e.events.subscriptions.filter(d=>d.platformAccess?.decimalReservation).map(d=>({subscriptionCode:d.code,decimalReservation:d.platformAccess.decimalReservation}))]}]:[],{code:"application-native-2",declaration:u},{code:"authz.native-batch-explain",declaration:l},{code:"authz.native-management",declaration:l},{code:"deployment.durable-runs",declaration:u.backend},{code:"deployment.platform-executor",declaration:u.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:_},{code:"data.native-golden-crud",declaration:_}]:[],...n.some(wt)?[{code:"data.audit-read-access",declaration:_}]:[],...s?[{code:"directory-v2",declaration:{roles:t.map(d=>({code:d.code,capabilities:d.capabilities.filter(A=>A.endsWith(":directory:read"))})),resources:n.map(d=>({code:d.code,fields:d.schema.fields.filter(A=>["user.single","user.multiple","department.single","department.multiple"].includes(A.type))})),operations:o.filter(d=>d.platformAccess?.directory).map(d=>({code:d.code,directory:d.platformAccess.directory}))}}]:[],...a?[{code:"data.managed-files",declaration:{operations:o.filter(d=>d.platformAccess?.managedFiles||d.platformAccess?.managedFileCopies).map(d=>({code:d.code,...d.platformAccess?.managedFiles?{managedFiles:d.platformAccess.managedFiles}:{},...d.platformAccess?.managedFileCopies?{managedFileCopies:d.platformAccess.managedFileCopies}:{}})),subscriptions:e.events.subscriptions.filter(d=>d.platformAccess?.managedFileCopies).map(d=>({code:d.code,managedFileCopies:d.platformAccess.managedFileCopies}))}}]:[],...e.events.subscriptions.some(d=>d.execution)?[{code:"events.native-data-actions",declaration:e.events.subscriptions.filter(d=>d.execution)}]:[],...e.events.capturePolicies?.length?[{code:"events.capture-policy",declaration:e.events.capturePolicies}]:[],...i?[{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(d=>d.definition.instanceCommands!==void 0)?[{code:"workflow.instance-cancellation-policy",declaration:e.workflows.definitions.filter(d=>d.definition.instanceCommands!==void 0)}]:[],...p?[{code:"business-process.durable-command",declaration:{operations:o.filter(d=>d.platformAccess?.workflow).map(d=>({code:d.code,workflow:d.platformAccess.workflow})),definitions:c,activations:e.workflows.activations.filter(d=>c.some(A=>A.definition.code===d.workflowCode))}}]:[],...r?[{code:"notification-hub-v2",declaration:{operations:o.filter(d=>d.platformAccess?.notification).map(d=>({code:d.code,notification:d.platformAccess.notification})),subscriptions:e.events.subscriptions.filter(d=>d.platformAccess?.notification).map(d=>({code:d.code,notification:d.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:d,declaration:A})=>({code:d,contractVersion:Wn[d],usageDigest:`sha256:${ee(A)}`})).sort((d,A)=>d.code===A.code?0:d.code<A.code?-1:1)}function _o(e){let t=new Map,n=new Set(e.resources.map(i=>String(i.code)));for(let[i,a]of R(e.capturePolicies===void 0?[]:e.capturePolicies,"/capturePlan/capturePolicies",100).entries()){let r=`/capturePlan/capturePolicies/${i}`,c=m(a,r);$(c,["resourceCode","mode"],r);let p=z(c.resourceCode,`${r}/resourceCode`);n.has(p)||f("NATIVE_EVENT_CAPTURE_RESOURCE_NOT_FOUND",r,{resourceCode:p}),t.has(p)&&f("NATIVE_EVENT_CAPTURE_POLICY_DUPLICATE",r,{resourceCode:p}),c.mode!=="all"&&c.mode!=="subscribed"&&f("NATIVE_EVENT_CAPTURE_MODE_INVALID",`${r}/mode`),t.set(p,c.mode)}let o=new Map(e.dataPolicies.map((i,a)=>{let r=m(i,`/capturePlan/dataPolicies/${a}`);return[String(r.code),r]})),s=e.subscriptions.map((i,a)=>m(i,`/capturePlan/subscriptions/${a}`));return e.resources.map((i,a)=>{let r=`/capturePlan/resources/${a}`,c=m(i,r),p=z(c.code,`${r}/code`),_=c.schema?m(c.schema,`${r}/schema`):c,l=new Set(R(_.fields||[],`${r}/schema/fields`,500).map((C,S)=>B(m(C,`${r}/schema/fields/${S}`).code,`${r}/schema/fields/${S}/code`))),u=c.dataPolicyCode?w(c.dataPolicyCode,`${r}/dataPolicyCode`):null,E=u?o.get(u):void 0;u&&!E&&f("NATIVE_EVENT_CAPTURE_AUTHZ_POLICY_NOT_FOUND",r,{resourceCode:p,dataPolicyCode:u});let d=new Set;for(let C of E?.rules||[])d.add(String(C.field));if(E?.readExpression)for(let C of We(E.readExpression,`${r}/readExpression`))d.add(String(C.rule.field));let A=new Set,N=new Set,I=new Set;for(let[C,S]of s.entries()){let D=R(S.eventTypes,`/capturePlan/subscriptions/${C}/eventTypes`,20).map(String);if(!D.some(M=>M.startsWith("openxiangda.data.")))continue;let U=m(S.filter||{},`/capturePlan/subscriptions/${C}/filter`),k=Array.isArray(U.resourceCodes)?U.resourceCodes.map(String):[];if(k.length&&!k.includes(p))continue;for(let M of D)Et.includes(M)&&I.add(M);for(let M of mi(U,`/capturePlan/subscriptions/${C}/filter`))A.add(M);let Y=m(S.payload||{},`/capturePlan/subscriptions/${C}/payload`);for(let M of R(Y.fields||[],`/capturePlan/subscriptions/${C}/payload/fields`,32))N.add(B(M,`/capturePlan/subscriptions/${C}/payload/fields`))}let g=new Set([...A,...N]),b=new Set([...g,...d]);b.size>qn&&f("NATIVE_EVENT_CAPTURE_FIELDS_LIMIT",r,{resourceCode:p,maximum:qn});for(let C of b)!l.has(C)&&!(d.has(C)&&fo.has(C))&&f("NATIVE_EVENT_CAPTURE_FIELD_NOT_FOUND",r,{resourceCode:p,field:C});let O=m(c.fieldPolicies||{},`${r}/fieldPolicies`);for(let C of g)O[C]?.mask==="omit"&&f("NATIVE_EVENT_CAPTURE_FIELD_SENSITIVE",r,{resourceCode:p,field:C});let T={resourceCode:p,...t.get(p)==="subscribed"?{capturedEventTypes:[...I].sort()}:{},filterFields:[...A].sort(),projectionFields:[...N].sort(),authorizationFields:[...d].sort(),captureFields:[...b].sort()};return{...T,digest:ee(T)}}).sort((i,a)=>i.resourceCode.localeCompare(a.resourceCode))}function mi(e,t){let n=new Set;for(let[a,r]of R(e.changes||[],`${t}/changes`,16).entries()){let c=m(r,`${t}/changes/${a}`);n.add(B(c.field,`${t}/changes/${a}/field`))}let o=m(e.changedFields||{},`${t}/changedFields`);for(let a of["anyOf","allOf","noneOf"])for(let[r,c]of R(o[a]||[],`${t}/changedFields/${a}`,32).entries())n.add(B(c,`${t}/changedFields/${a}/${r}`));let s=0,i=(a,r,c)=>{c>3&&f("NATIVE_EVENT_FILTER_DEPTH_LIMIT",r);let p=m(a,r);if(p.change){let l=m(p.change,`${r}/change`);n.add(B(l.field,`${r}/change/field`)),s+=1;return}if(p.not){i(p.not,`${r}/not`,c+1);return}let _=p.all?"all":p.any?"any":null;_||f("NATIVE_EVENT_FILTER_CONDITION_INVALID",r);for(let[l,u]of R(p[_],`${r}/${_}`,16).entries())i(u,`${r}/${_}/${l}`,c+1)};return e.where&&i(e.where,`${t}/where`,1),s+=Array.isArray(e.changes)?e.changes.length:0,s>16&&f("NATIVE_EVENT_FILTER_ATOM_LIMIT",t),[...n].sort()}function Ni(e,t){$(e,["schemaVersion","compilerContractVersion","appCode","perspectives","authz","backend","data","events","workflows","frontend","runtime"],"/config"),L(e.schemaVersion,Ys,"/config/schemaVersion"),L(e.compilerContractVersion,Ge,"/config/compilerContractVersion"),L(e.appCode,t,"/config/appCode"),R(e.perspectives,"/config/perspectives",100);let n=m(e.authz,"/config/authz");$(n,["capabilities","roles","scopeDimensions","scopeSources","roleMembershipSources","relationshipGrantSources","dataPolicies","authorizationTransitions"],"/config/authz",["authenticatedUserRoleCode"]),R(n.capabilities,"/config/authz/capabilities",2e3),R(n.roles,"/config/authz/roles",100),R(n.scopeDimensions,"/config/authz/scopeDimensions",100),R(n.scopeSources,"/config/authz/scopeSources",100),R(n.roleMembershipSources,"/config/authz/roleMembershipSources",100),R(n.relationshipGrantSources,"/config/authz/relationshipGrantSources",100),R(n.dataPolicies,"/config/authz/dataPolicies",100),R(n.authorizationTransitions,"/config/authz/authorizationTransitions",100);let o=m(e.backend,"/config/backend");$(o,["secrets","operations"],"/config/backend"),R(o.secrets,"/config/backend/secrets",100),R(o.operations,"/config/backend/operations",500),tr(o.secrets);let s=m(e.data,"/config/data");$(s,["resources"],"/config/data",["resourceDetailRoutes","subjectReadSurfaces"]),R(s.resources,"/config/data/resources",100),s.subjectReadSurfaces!==void 0&&R(s.subjectReadSurfaces,"/config/data/subjectReadSurfaces",q.subjectReadSurfaces),s.resourceDetailRoutes!==void 0&&R(s.resourceDetailRoutes,"/config/data/resourceDetailRoutes",100);let i=m(e.events,"/config/events");$(i,["schemas","subscriptions","timers","dateTriggers"],"/config/events",["capturePolicies"]),R(i.schemas,"/config/events/schemas",100),R(i.subscriptions,"/config/events/subscriptions",100),R(i.timers,"/config/events/timers",100),R(i.dateTriggers,"/config/events/dateTriggers",100);let a=m(e.workflows,"/config/workflows");$(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 r=m(e.frontend,"/config/frontend");$(r,["routes","user","admin","devicePolicy"],"/config/frontend",["authentication","publicAccess"]),R(r.routes,"/config/frontend/routes",500);let c=m(r.user,"/config/frontend/user");$(c,["applicationTodoCenter"],"/config/frontend/user"),xe(c.applicationTodoCenter,"/config/frontend/user/applicationTodoCenter"),ln(r.devicePolicy,"/config/frontend/devicePolicy"),Object.prototype.hasOwnProperty.call(r,"authentication")&&Ao(r.authentication,r.routes,e,"/config/frontend/authentication"),Object.prototype.hasOwnProperty.call(r,"publicAccess")&&Li(r.publicAccess,e,"/config/frontend/publicAccess");let p=m(r.admin,"/config/frontend/admin");$(p,["navigation"],"/config/frontend/admin",["access"]),p.access!==void 0&&Ct(p.access,"/config/frontend/admin/access",e.appCode),Mi(p.navigation,"/config/frontend/admin/navigation");let _=m(e.runtime,"/config/runtime");$(_,["protocolCapabilities","health"],"/config/runtime"),F(_.protocolCapabilities,"/config/runtime/protocolCapabilities",100),$(m(_.health,"/config/runtime/health"),["livePath","readyPath","versionPath"],"/config/runtime/health"),L(_.health.livePath,"/__platform/health","/config/runtime/health/livePath"),L(_.health.readyPath,"/__platform/ready","/config/runtime/health/readyPath"),L(_.health.versionPath,"/__platform/version","/config/runtime/health/versionPath")}function gi(e,t,n){$(e,["schemaVersion","compilerContractVersion","generatorVersion","appCode","configDigest","perspectives","resources","capabilities","operations","eventConsumers","eventProducers","eventSchemas","eventHandlerManifest","eventTypes","workflows","routes","routeManifest","adminPages","adminNavigation"],"/contracts",["authentication","publicAccess","adminAccess","subjectReadSurfaces"]),L(e.schemaVersion,lo,"/contracts/schemaVersion"),L(e.compilerContractVersion,Ge,"/contracts/compilerContractVersion"),h(e.generatorVersion,"/contracts/generatorVersion",128),L(e.appCode,t,"/contracts/appCode"),L(e.configDigest,n,"/contracts/configDigest"),R(e.perspectives,"/contracts/perspectives",q.perspectives),R(e.resources,"/contracts/resources",q.resources),e.subjectReadSurfaces!==void 0&&R(e.subjectReadSurfaces,"/contracts/subjectReadSurfaces",q.subjectReadSurfaces),R(e.capabilities,"/contracts/capabilities",q.capabilities),R(e.operations,"/contracts/operations",q.operations),R(e.eventConsumers,"/contracts/eventConsumers",q.eventConsumers),R(e.eventProducers,"/contracts/eventProducers",q.eventProducers),R(e.eventSchemas,"/contracts/eventSchemas",q.eventSchemas),m(e.eventHandlerManifest,"/contracts/eventHandlerManifest"),F(e.eventTypes,"/contracts/eventTypes",q.eventTypes),R(e.workflows,"/contracts/workflows",q.workflows),R(e.routes,"/contracts/routes",q.routes),Object.prototype.hasOwnProperty.call(e,"authentication")&&Fi(e.authentication,"/contracts/authentication"),Object.prototype.hasOwnProperty.call(e,"publicAccess")&&ki(e.publicAccess,"/contracts/publicAccess"),Object.prototype.hasOwnProperty.call(e,"adminAccess")&&Ct(e.adminAccess,"/contracts/adminAccess",t),Gi(e.routeManifest,"/contracts/routeManifest",t),Ji(e.adminPages,"/contracts/adminPages"),Wi(e.adminNavigation,"/contracts/adminNavigation")}function Ti(e,t,n){let o=Oi(e);Xi(e,o),Zi(e),Qi(e),nr(e);let s=e.events.schemas.map((d,A)=>{let N=`/config/events/schemas/${A}`,I=m(d,N),g=h(I.eventType,`${N}/eventType`,255);return g.startsWith("openxiangda.")&&f("NATIVE_EVENT_SCHEMA_RESERVED",`${N}/eventType`,{eventType:g}),L(I.schemaDigest,ee(m(I.jsonSchema,`${N}/jsonSchema`)),`${N}/schemaDigest`),I}),i=new Set([...Et,...At,...s.map(d=>String(d.eventType))]),a=new Map(e.data.resources.map(d=>[String(d.code),new Map(d.schema.fields.map(A=>[String(A.code),String(A.type)]))])),r=X(e.events.subscriptions.map((d,A)=>{let N=`/config/events/subscriptions/${A}`,I=m(d,N),g=F(I.eventTypes,`${N}/eventTypes`,20);g.forEach((C,S)=>{i.has(C)||f("NATIVE_EVENT_TYPE_NOT_REGISTERED",`${N}/eventTypes/${S}`,{eventType:C})});let b=Zt(I,e.data.resources,N),O=bi(I.delivery,g,`${N}/delivery`),T=Ci(I.platformAccess,`${N}/platformAccess`,a,e,I);return{code:w(I.code,`${N}/code`),endpointPath:ue(I.endpointPath,`${N}/endpointPath`),eventTypes:g,filter:m(I.filter,`${N}/filter`),payload:b?.payload||m(I.payload,`${N}/payload`),...b?{execution:b.execution}:{},...T?{platformAccess:T}:{},delivery:O}}),d=>d.code),c=new Map(s.map(d=>[String(d.eventType),String(d.dataSchemaVersion)])),p=X([...e.data.resources.flatMap(d=>Et.map(A=>({code:`data:${d.code}:${A}`,source:"data",eventType:A,dataSchemaVersion:"2.0.0",resourceCode:d.code}))),...s.map(d=>({code:`app:${d.eventType}`,source:"app",eventType:d.eventType,dataSchemaVersion:d.dataSchemaVersion})),...e.events.timers.map(d=>({code:d.code,source:"timer",eventType:d.eventType,dataSchemaVersion:c.get(String(d.eventType))||"2.0.0"})),...e.events.dateTriggers.map(d=>({code:d.code,source:"date",eventType:d.eventType,dataSchemaVersion:c.get(String(d.eventType))||"2.0.0",resourceCode:d.resourceCode,field:d.field})),...e.workflows.activations.length?At.map(d=>({code:`workflow:${d}`,source:"workflow",eventType:d,dataSchemaVersion:"2.0.0"})):[]],d=>`${d.source}:${d.code}:${d.eventType}`),_=j([...r.flatMap(d=>d.eventTypes),...p.map(d=>String(d.eventType))]);Bi(e);let l=No(e),u=Ri(e,o),E=Eo(e);try{Gt(e.data.resources,E)}catch(d){throw d instanceof $e&&f(d.code,d.pointer,{reason:d.reason}),d}return{schemaVersion:lo,compilerContractVersion:Ge,generatorVersion:n,appCode:e.appCode,configDigest:t,perspectives:e.perspectives,resources:$i(e),...u.length?{subjectReadSurfaces:u}:{},capabilities:X(o,d=>d.code),operations:E,eventConsumers:r,eventProducers:p,eventSchemas:s,eventHandlerManifest:{schemaVersion:Ei,appCode:e.appCode,handlers:r.filter(d=>!d.execution).map(d=>({code:d.code,endpointPath:d.endpointPath,eventTypes:d.eventTypes,dataSchemaVersions:j(d.eventTypes.map(A=>A.startsWith("openxiangda.")?"2.0.0":c.get(A)||"2.0.0")),maxBodyBytes:65536,receiptProtocolVersion:2}))},eventTypes:_,workflows:Co(e),routes:Tt(e),...Object.prototype.hasOwnProperty.call(e.frontend,"authentication")?{authentication:Pi(e)}:{},...Object.prototype.hasOwnProperty.call(e.frontend,"publicAccess")?{publicAccess:xi(e)}:{},...e.frontend.admin.access?{adminAccess:e.frontend.admin.access}:{},routeManifest:Ki(e),adminPages:l,adminNavigation:Ui(e)}}function Ci(e,t,n,o,s){if(e===void 0)return;let i=m(e,t);$(i,["notification","managedFileCopies","decimalReservation"],t,!0);let a={};if(i.decimalReservation!==void 0)try{a.decimalReservation=jn(i.decimalReservation,Bn(o,s))}catch{f("NATIVE_EVENT_DECIMAL_RESERVATION_INVALID",`${t}/decimalReservation`)}if(i.notification!==void 0){let r=m(i.notification,`${t}/notification`);$(r,["mode"],`${t}/notification`),L(r.mode,"business-standard",`${t}/notification/mode`),a.notification={mode:"business-standard"}}if(i.managedFileCopies!==void 0){let r=R(i.managedFileCopies,`${t}/managedFileCopies`,16);r.length||f("NATIVE_EVENT_MANAGED_FILE_COPIES_REQUIRED",`${t}/managedFileCopies`);let c=new Set;a.managedFileCopies=X(r.map((p,_)=>{let l=`${t}/managedFileCopies/${_}`,u=m(p,l);$(u,["mode","sourceResourceCode","sourceFieldCodes","targetResourceCode","targetFieldCodes"],l),L(u.mode,"copy",`${l}/mode`);let E=z(u.sourceResourceCode,`${l}/sourceResourceCode`),d=z(u.targetResourceCode,`${l}/targetResourceCode`),A=n.get(E),N=n.get(d);(!A||!N)&&f("NATIVE_EVENT_MANAGED_FILE_COPY_RESOURCE_INVALID",l);let I=F(u.sourceFieldCodes,`${l}/sourceFieldCodes`,16),g=F(u.targetFieldCodes,`${l}/targetFieldCodes`,16);(!I.length||I.length!==g.length)&&f("NATIVE_EVENT_MANAGED_FILE_COPY_FIELDS_INVALID",l),I.forEach((O,T)=>{let C=A.get(O),S=N.get(g[T]);(!["file","image"].includes(String(C))||C!==S)&&f("NATIVE_EVENT_MANAGED_FILE_COPY_FIELD_INVALID",`${l}/sourceFieldCodes/${T}`)});let b=`${E}:${I.join(",")}=>${d}:${g.join(",")}`;return c.has(b)&&f("NATIVE_EVENT_MANAGED_FILE_COPY_DUPLICATE",l),c.add(b),{mode:"copy",sourceResourceCode:E,sourceFieldCodes:j(I),targetResourceCode:d,targetFieldCodes:j(g)}}),p=>`${p.sourceResourceCode}:${p.sourceFieldCodes.join(",")}=>${p.targetResourceCode}:${p.targetFieldCodes.join(",")}`)}return Object.keys(a).length||f("NATIVE_EVENT_PLATFORM_ACCESS_EMPTY",t),a}function bi(e,t,n){let o=m(e,n);$(o,["timeoutMs","maxAttempts","initialBackoffMs","maxBackoffMs","ordering","concurrency"],n),Z(o.timeoutMs,`${n}/timeoutMs`,1e3,3e4),Z(o.maxAttempts,`${n}/maxAttempts`,1,12);let s=Z(o.initialBackoffMs,`${n}/initialBackoffMs`,1e3,3e5);Z(o.maxBackoffMs,`${n}/maxBackoffMs`,s,18e5),Z(o.concurrency,`${n}/concurrency`,1,50);let i=h(o.ordering,`${n}/ordering`,32);return["none","record","workflow-instance"].includes(i)||f("NATIVE_EVENT_DELIVERY_ORDERING_INVALID",`${n}/ordering`),i==="workflow-instance"&&t.some(a=>!Ai.has(a))&&f("NATIVE_EVENT_WORKFLOW_ORDERING_REQUIRES_WORKFLOW_FACTS",`${n}/ordering`),o}function Oi(e){let t=new Map;for(let n of $o(e.appCode))t.set(n.code,n);for(let[n,o]of e.authz.capabilities.entries()){let s=`/config/authz/capabilities/${n}`,i=m(o,s);$(i,["code","kind","name","description"],s,!0);let a=Ce(i.code,`${s}/code`,e.appCode);t.has(a)&&f("NATIVE_CAPABILITY_DUPLICATE",`${s}/code`),["backend","ui"].includes(i.kind)||f("NATIVE_CAPABILITY_KIND_INVALID",`${s}/kind`);let r={code:a,kind:i.kind,name:h(i.name,`${s}/name`,255),source:"explicit",...i.description===void 0?{}:{description:fn(i.description,`${s}/description`,2e3)}};t.set(a,r)}for(let[n,o]of e.data.resources.entries()){let s=`/config/data/resources/${n}`,i=Re(o,s,e.appCode),a={read:`\u8BFB\u53D6${i.name}`,create:`\u65B0\u5EFA${i.name}`,update:`\u66F4\u65B0${i.name}`,delete:`\u5220\u9664${i.name}`};for(let r of["read","create","update","delete"]){let c=Ce(i.capabilities[r],`${s}/capabilities/${r}`,e.appCode);t.has(c)&&f("NATIVE_CAPABILITY_DUPLICATE",`${s}/capabilities/${r}`),t.set(c,{code:c,kind:"data",name:a[r],source:"data"})}for(let[r,c]of Object.entries(i.fieldPolicies)){if(Se(r))continue;let p=m(c,`${s}/fieldPolicies/${r}`);for(let _ of["read","create","update"])if(Array.isArray(p[_]))for(let l of F(p[_],`${s}/fieldPolicies/${r}/${_}`,2e3))Ce(l,`${s}/fieldPolicies/${r}/${_}`,e.appCode),!t.has(l)&&t.set(l,{code:l,kind:"data",name:`${i.name}.${r}.${_}`,source:"data"})}}return[...t.values()]}function $i(e){let t=hi(e);return X(e.data.resources.map((n,o)=>{let s=Re(n,`/config/data/resources/${o}`,e.appCode),i=t.get(s.code);return{code:s.code,schemaDigest:ee(s.schema),fields:X(s.schema.fields.map(a=>({code:a.code,type:a.type})),a=>a.code),...i?{detailRouteCode:i}:{}}}),n=>n.code)}function Ri(e,t){if(e.data.subjectReadSurfaces===void 0)return[];let n=R(e.data.subjectReadSurfaces,"/config/data/subjectReadSurfaces",q.subjectReadSurfaces),o=new Set(t.map(a=>String(a.code))),s=new Map(e.data.resources.map((a,r)=>{let c=`/config/data/resources/${r}`,p=Re(a,c,e.appCode);return[String(p.code),{resource:p,fields:new Map(R(m(p.schema,`${c}/schema`).fields,`${c}/schema/fields`,500).map(_=>{let l=m(_,`${c}/schema/fields`);return[String(l.code),l]}))}]})),i=new Set;return X(n.map((a,r)=>{let c=`/config/data/subjectReadSurfaces/${r}`,p=m(a,c);$(p,["code","name","capability","subject","relations"],c);let _=w(p.code,`${c}/code`);i.has(_)&&f("NATIVE_SUBJECT_READ_SURFACE_CODE_DUPLICATE",`${c}/code`),i.add(_);let l=Ce(p.capability,`${c}/capability`,e.appCode);o.has(l)||f("NATIVE_SUBJECT_READ_SURFACE_CAPABILITY_NOT_DECLARED",`${c}/capability`);let u=m(p.subject,`${c}/subject`);$(u,["resourceCode","fields"],`${c}/subject`);let E=z(u.resourceCode,`${c}/subject/resourceCode`),d=s.get(E);d||f("NATIVE_SUBJECT_READ_SURFACE_RESOURCE_NOT_DECLARED",`${c}/subject/resourceCode`);let A=F(u.fields,`${c}/subject/fields`,100).map((O,T)=>B(O,`${c}/subject/fields/${T}`));A.length||f("NATIVE_SUBJECT_READ_SURFACE_FIELDS_REQUIRED",`${c}/subject/fields`);for(let[O,T]of A.entries()){let C=d.fields.get(T);(!C||C.type==="subtable")&&f("NATIVE_SUBJECT_READ_SURFACE_FIELD_INVALID",`${c}/subject/fields/${O}`)}let N=R(p.relations,`${c}/relations`,8);N.length||f("NATIVE_SUBJECT_READ_SURFACE_RELATIONS_REQUIRED",`${c}/relations`);let I=new Set,g=0,b=X(N.map((O,T)=>{let C=`${c}/relations/${T}`,S=m(O,C);$(S,["code","resourceCode","foreignKeyField","fields","limit"],C,["order"]);let D=w(S.code,`${C}/code`);I.has(D)&&f("NATIVE_SUBJECT_READ_SURFACE_RELATION_CODE_DUPLICATE",`${C}/code`),I.add(D);let U=z(S.resourceCode,`${C}/resourceCode`),k=s.get(U);k||f("NATIVE_SUBJECT_READ_SURFACE_RESOURCE_NOT_DECLARED",`${C}/resourceCode`);let Y=B(S.foreignKeyField,`${C}/foreignKeyField`),M=k.fields.get(Y),fe=m(M?.source||{},`${C}/foreignKeyField/source`);(!M||!["uuid","resource-ref.single"].includes(String(M.type))||M.type==="resource-ref.single"&&(fe.kind!=="resource"||fe.resourceCode!==E))&&f("NATIVE_SUBJECT_READ_SURFACE_RELATION_INVALID",`${C}/foreignKeyField`);let pe=F(S.fields,`${C}/fields`,100).map((ie,V)=>B(ie,`${C}/fields/${V}`));pe.length||f("NATIVE_SUBJECT_READ_SURFACE_FIELDS_REQUIRED",`${C}/fields`);for(let[ie,V]of pe.entries()){let x=k.fields.get(V);(!x||x.type==="subtable")&&f("NATIVE_SUBJECT_READ_SURFACE_FIELD_INVALID",`${C}/fields/${ie}`)}let K=R(S.order||[],`${C}/order`,10).map((ie,V)=>{let x=`${C}/order/${V}`,P=m(ie,x);$(P,["field","direction"],x);let J=B(P.field,`${x}/field`),W=k.fields.get(J);return(!fo.has(J)&&!W||W?.type==="subtable"||W&&!Ve(W.type))&&f("NATIVE_SUBJECT_READ_SURFACE_ORDER_FIELD_INVALID",`${x}/field`),["asc","desc"].includes(String(P.direction))||f("NATIVE_SUBJECT_READ_SURFACE_ORDER_DIRECTION_INVALID",`${x}/direction`),{field:J,direction:P.direction}}),Ie=Z(S.limit,`${C}/limit`,1,100);return g+=Ie,{code:D,resourceCode:U,foreignKeyField:Y,fields:j(pe),...K.length?{order:K}:{},limit:Ie}}),O=>O.code);return g>400&&f("NATIVE_SUBJECT_READ_SURFACE_ROW_LIMIT_EXCEEDED",`${c}/relations`),{code:_,name:h(p.name,`${c}/name`,255),capability:l,subject:{resourceCode:E,fields:j(A)},relations:b}}),a=>a.code)}function hi(e){let t=e.data.resourceDetailRoutes===void 0?[]:R(e.data.resourceDetailRoutes,"/config/data/resourceDetailRoutes",100),n=new Map(e.data.resources.map((i,a)=>{let r=`/config/data/resources/${a}`,c=Re(i,r,e.appCode);return[c.code,c]})),o=new Map(Tt(e).map(i=>[String(i.code),i])),s=new Map;for(let[i,a]of t.entries()){let r=`/config/data/resourceDetailRoutes/${i}`,c=m(a,r);$(c,["resourceCode","desktop","mobile"],r);let p=z(c.resourceCode,`${r}/resourceCode`);s.has(p)&&f("NATIVE_DATA_RESOURCE_DETAIL_ROUTE_DUPLICATE",`${r}/resourceCode`);let _=n.get(p);_||f("NATIVE_DATA_RESOURCE_DETAIL_ROUTE_RESOURCE_MISSING",`${r}/resourceCode`);let l=w(c.desktop,`${r}/desktop`),u=w(c.mobile,`${r}/mobile`);l===u&&f("NATIVE_DATA_RESOURCE_DETAIL_ROUTE_INVALID",r);let E=String(_.capabilities.read);for(let[d,A]of[["desktop",l],["mobile",u]]){let N=`${r}/${d}`,I=o.get(A);I||f("NATIVE_DATA_RESOURCE_DETAIL_ROUTE_REFERENCE_MISSING",N),I.surface!=="user"&&f("NATIVE_DATA_RESOURCE_DETAIL_ROUTE_SURFACE_INVALID",N);let g=ue(I.path,`${N}/path`),b=[...g.matchAll(/:([A-Za-z][A-Za-z0-9_]*)/g)],O=d==="mobile"?!g.startsWith("/m/"):g==="/m"||g.startsWith("/m/");(g.includes("*")||g.includes("?")||g.includes("#")||g.split("/").includes("..")||b.length!==1||O)&&f("NATIVE_DATA_RESOURCE_DETAIL_ROUTE_PATH_INVALID",N);let T=Array.isArray(I.access?.allOf)?I.access.allOf:[];I.capability!==E&&!T.includes(E)&&f("NATIVE_DATA_RESOURCE_DETAIL_ROUTE_CAPABILITY_INVALID",N)}s.set(p,{desktop:l,mobile:u})}return s}function Eo(e){let t=new Map(e.data.resources.map((a,r)=>{let c=`/config/data/resources/${r}`,p=Re(a,c,e.appCode);return[p.code,new Map(p.schema.fields.map(_=>[String(_.code),_]))]})),n=new Map(e.data.resources.map((a,r)=>{let c=`/config/data/resources/${r}`,p=Re(a,c,e.appCode);return[p.code,new Map(p.schema.fields.map(_=>[String(_.code),String(_.type)]))]})),o=new Set(n.keys()),s=new Set(e.workflows.activations.map((a,r)=>bt(m(a,`/config/workflows/activations/${r}`).workflowCode,`/config/workflows/activations/${r}/workflowCode`))),i=new Map;return X(e.backend.operations.map((a,r)=>{let c=`/config/backend/operations/${r}`,p=m(a,c);$(p,["code","method","path","capability","requestSchema","responseSchema","description","platformAccess","browser","ai"],c,!0);let _=h(p.method,`${c}/method`,16);["GET","POST","PUT","PATCH","DELETE"].includes(_)||f("NATIVE_OPERATION_METHOD_INVALID",`${c}/method`);let l=w(p.code,`${c}/code`);Vi(p.ai,c,l,_,o);let u=Di(p.platformAccess,`${c}/platformAccess`,n,t,s,new Set(e.authz.roles.map(d=>String(d.code))));if(u?.decimalReservation){let d=u.decimalReservation,A=String(d.resourceCode),N=JSON.stringify([d.amountFieldCode,d.currencyFieldCode,d.relationFieldCode,d.parentFieldCode,d.rootFieldCode,d.statusFieldCode,d.parentRelationValue,d.childRelationValue]),I=i.get(A);I&&I!==N&&f("NATIVE_DECIMAL_RESERVATION_MAPPING_CONFLICT",`${c}/platformAccess/decimalReservation`),i.set(A,N)}let E=yi(p.browser,`${c}/browser`,_,p.requestSchema,p.responseSchema,n,t,e.data.subjectReadSurfaces||[]);return{code:l,method:_,path:ue(p.path,`${c}/path`),requiredCapability:Ce(p.capability,`${c}/capability`,e.appCode),requestSchemaDigest:ee(m(p.requestSchema,`${c}/requestSchema`)),responseSchemaDigest:ee(m(p.responseSchema,`${c}/responseSchema`)),...p.description===void 0?{}:{description:fn(p.description,`${c}/description`,2e3)},...u?{platformAccess:u}:{},...E?{browser:E}:{}}}),a=>a.code)}function yi(e,t,n,o,s,i,a,r){if(e===void 0)return null;let c=m(e,t);$(c,["exposure","behavior","idempotency","subject"],t,["refreshTargets","fileIntent"]),L(c.exposure,"authenticated",`${t}/exposure`);let p=h(c.behavior,`${t}/behavior`,32);["read","controlled"].includes(p)||f("NATIVE_OPERATION_BROWSER_BEHAVIOR_INVALID",`${t}/behavior`);let _=h(c.idempotency,`${t}/idempotency`,32);(!["none","required"].includes(_)||p==="controlled"&&_!=="required"||p==="read"&&_!=="none")&&f("NATIVE_OPERATION_BROWSER_IDEMPOTENCY_INVALID",`${t}/idempotency`);let l=m(c.subject,`${t}/subject`);$(l,["resourceCode","inputField"],`${t}/subject`);let u=z(l.resourceCode,`${t}/subject/resourceCode`);i.has(u)||f("NATIVE_OPERATION_BROWSER_SUBJECT_RESOURCE_NOT_DECLARED",`${t}/subject/resourceCode`);let E=B(l.inputField,`${t}/subject/inputField`),d=m(o,`${t}/requestSchema`),A=m(s,`${t}/responseSchema`);(d.type!=="object"||d.additionalProperties!==!1||A.type!=="object"||A.additionalProperties!==!1)&&f("NATIVE_OPERATION_BROWSER_SCHEMA_ROOT_INVALID",`${t}/requestSchema`);let N=m(d.properties,`${t}/requestSchema/properties`),I=new Set(d.required===void 0?[]:F(d.required,`${t}/requestSchema/required`,200));(!(E in N)||!I.has(E))&&f("NATIVE_OPERATION_BROWSER_SUBJECT_INPUT_INVALID",`${t}/subject/inputField`);let g=m(N[E],`${t}/requestSchema/properties/${E}`);(g.type!=="string"||g.format!=="uuid")&&f("NATIVE_OPERATION_BROWSER_SUBJECT_INPUT_INVALID",`${t}/subject/inputField`);let b=new Map((Array.isArray(r)?r:[]).map((D,U)=>{let k=m(D,`/config/data/subjectReadSurfaces/${U}`);return[String(k.code),String(m(k.subject,`/config/data/subjectReadSurfaces/${U}/subject`).resourceCode)]})),O=c.refreshTargets===void 0?[]:R(c.refreshTargets,`${t}/refreshTargets`,16),T=new Set,C=X(O.map((D,U)=>{let k=`${t}/refreshTargets/${U}`,Y=m(D,k);$(Y,["kind","code"],k),L(Y.kind,"subject-surface",`${k}/kind`);let M=w(Y.code,`${k}/code`);return(T.has(M)||!b.has(M)||b.get(M)!==u)&&f("NATIVE_OPERATION_BROWSER_REFRESH_TARGET_INVALID",`${k}/code`),T.add(M),{kind:"subject-surface",code:M}}),D=>`${D.kind}:${D.code}`),S=Si(c.fileIntent,`${t}/fileIntent`,n,p,_,u,N,I,a);return{exposure:"authenticated",behavior:p,idempotency:_,subject:{resourceCode:u,inputField:E},...C.length?{refreshTargets:C}:{},...S?{fileIntent:S}:{}}}function Si(e,t,n,o,s,i,a,r,c){if(e===void 0)return null;let p=m(e,t);$(p,["recordResourceCode","recordIdInputField","relationField","fileNameField","contentTypeField","sizeField","purposes","maxTtlSeconds","maxBytes"],t),(n!=="GET"||o!=="read"||s!=="none")&&f("NATIVE_OPERATION_FILE_INTENT_BEHAVIOR_INVALID",t);let _=z(p.recordResourceCode,`${t}/recordResourceCode`),l=c.get(_);l||f("NATIVE_OPERATION_FILE_INTENT_RESOURCE_NOT_DECLARED",`${t}/recordResourceCode`);let u=B(p.recordIdInputField,`${t}/recordIdInputField`),E=m(a[u],`${t}/recordIdInputField`);(!r.has(u)||E.type!=="string"||E.format!=="uuid")&&f("NATIVE_OPERATION_FILE_INTENT_RECORD_INPUT_INVALID",`${t}/recordIdInputField`);let d=B(p.relationField,`${t}/relationField`),A=l.get(d);(!A||!["uuid","resource-ref.single"].includes(String(A.type))||String(A.type)==="resource-ref.single"&&(String(m(A.source,`${t}/relationField`).kind||"")!=="resource"||String(m(A.source,`${t}/relationField`).resourceCode||"")!==i))&&f("NATIVE_OPERATION_FILE_INTENT_RELATION_INVALID",`${t}/relationField`);let N=[["fileNameField",["text.short","text.long"]],["contentTypeField",["text.short","text.long"]],["sizeField",["number.integer"]]],I={};for(let[T,C]of N){let S=B(p[T],`${t}/${T}`);C.includes(String(l.get(S)?.type))||f("NATIVE_OPERATION_FILE_INTENT_METADATA_INVALID",`${t}/${T}`),I[T]=S}let g=X(F(p.purposes,`${t}/purposes`,2),T=>T);(!g.length||g.some(T=>!["preview","download"].includes(T)))&&f("NATIVE_OPERATION_FILE_INTENT_PURPOSE_INVALID",`${t}/purposes`);let b=Number(p.maxTtlSeconds);(!Number.isSafeInteger(b)||b<1||b>300)&&f("NATIVE_OPERATION_FILE_INTENT_TTL_INVALID",`${t}/maxTtlSeconds`);let O=Number(p.maxBytes);return(!Number.isSafeInteger(O)||O<1||O>104857600)&&f("NATIVE_OPERATION_FILE_INTENT_SIZE_INVALID",`${t}/maxBytes`),{recordResourceCode:_,recordIdInputField:u,relationField:d,fileNameField:I.fileNameField,contentTypeField:I.contentTypeField,sizeField:I.sizeField,purposes:g,maxTtlSeconds:b,maxBytes:O}}function Di(e,t,n,o,s,i){if(e===void 0)return null;let a=m(e,t);$(a,["directory","managedFiles","managedFileCopies","notification","workflow","roleAssertions","decimalReservation"],t,!0),Object.keys(a).length===0&&f("NATIVE_OPERATION_PLATFORM_ACCESS_EMPTY",t);let r={};if(a.roleAssertions!==void 0){let c=m(a.roleAssertions,`${t}/roleAssertions`);$(c,["roleCodes"],`${t}/roleAssertions`);let p=F(c.roleCodes,`${t}/roleAssertions/roleCodes`,20);p.length||f("NATIVE_OPERATION_ROLE_ASSERTIONS_REQUIRED",`${t}/roleAssertions/roleCodes`),p.forEach((_,l)=>{i.has(_)||f("NATIVE_ROLE_REFERENCE_MISSING",`${t}/roleAssertions/roleCodes/${l}`)}),r.roleAssertions={roleCodes:j(p)}}if(a.directory!==void 0){let c=m(a.directory,`${t}/directory`);$(c,["mode","fields"],`${t}/directory`),c.mode!=="current-initiator"&&f("NATIVE_OPERATION_DIRECTORY_MODE_INVALID",`${t}/directory/mode`);let p=new Set(["displayName","employeeNumber","primaryDepartment","departments"]),_=F(c.fields,`${t}/directory/fields`,4);(!_.length||_.some(l=>!p.has(l)))&&f("NATIVE_OPERATION_DIRECTORY_FIELDS_INVALID",`${t}/directory/fields`),r.directory={mode:"current-initiator",fields:j(_)}}if(a.managedFiles!==void 0){let c=R(a.managedFiles,`${t}/managedFiles`,16);c.length||f("NATIVE_OPERATION_MANAGED_FILES_REQUIRED",`${t}/managedFiles`);let p=new Set;r.managedFiles=X(c.map((_,l)=>{let u=`${t}/managedFiles/${l}`,E=m(_,u);$(E,["resourceCode","fieldCodes","intents"],u);let d=z(E.resourceCode,`${u}/resourceCode`);(p.has(d)||!n.has(d))&&f("NATIVE_OPERATION_MANAGED_FILE_RESOURCE_INVALID",`${u}/resourceCode`),p.add(d);let A=F(E.fieldCodes,`${u}/fieldCodes`,16);(!A.length||A.some(I=>!["file","image","signature"].includes(String(n.get(d)?.get(I)||""))))&&f("NATIVE_OPERATION_MANAGED_FILE_FIELD_INVALID",`${u}/fieldCodes`);let N=F(E.intents,`${u}/intents`,2);return(!N.length||N.some(I=>!["create","update"].includes(I)))&&f("NATIVE_OPERATION_MANAGED_FILE_INTENT_INVALID",`${u}/intents`),{resourceCode:d,fieldCodes:j(A),intents:j(N)}}),_=>_.resourceCode)}if(a.managedFileCopies!==void 0){let c=R(a.managedFileCopies,`${t}/managedFileCopies`,16);c.length||f("NATIVE_OPERATION_MANAGED_FILE_COPIES_REQUIRED",`${t}/managedFileCopies`);let p=new Set;r.managedFileCopies=X(c.map((_,l)=>{let u=`${t}/managedFileCopies/${l}`,E=m(_,u);$(E,["mode","sourceResourceCode","sourceFieldCodes","targetResourceCode","targetFieldCodes"],u),L(E.mode,"copy",`${u}/mode`);let d=z(E.sourceResourceCode,`${u}/sourceResourceCode`),A=z(E.targetResourceCode,`${u}/targetResourceCode`),N=n.get(d),I=n.get(A);(!N||!I)&&f("NATIVE_OPERATION_MANAGED_FILE_COPY_RESOURCE_INVALID",u);let g=F(E.sourceFieldCodes,`${u}/sourceFieldCodes`,16),b=F(E.targetFieldCodes,`${u}/targetFieldCodes`,16);(!g.length||g.length!==b.length)&&f("NATIVE_OPERATION_MANAGED_FILE_COPY_FIELDS_INVALID",u),g.forEach((T,C)=>{let S=N.get(T),D=I.get(b[C]);(!["file","image"].includes(String(S))||S!==D)&&f("NATIVE_OPERATION_MANAGED_FILE_COPY_FIELD_INVALID",`${u}/sourceFieldCodes/${C}`)});let O=`${d}:${g.join(",")}=>${A}:${b.join(",")}`;return p.has(O)&&f("NATIVE_OPERATION_MANAGED_FILE_COPY_DUPLICATE",u),p.add(O),{mode:"copy",sourceResourceCode:d,sourceFieldCodes:j(g),targetResourceCode:A,targetFieldCodes:j(b)}}),_=>`${_.sourceResourceCode}:${_.sourceFieldCodes.join(",")}=>${_.targetResourceCode}:${_.targetFieldCodes.join(",")}`)}if(a.notification!==void 0){let c=m(a.notification,`${t}/notification`);$(c,["mode"],`${t}/notification`),c.mode!=="business-standard"&&f("NATIVE_OPERATION_NOTIFICATION_MODE_INVALID",`${t}/notification/mode`),r.notification={mode:"business-standard"}}if(a.workflow!==void 0){let c=m(a.workflow,`${t}/workflow`);$(c,["codes"],`${t}/workflow`);let p=F(c.codes,`${t}/workflow/codes`,16);(!p.length||p.some(_=>!s.has(_)))&&f("NATIVE_OPERATION_WORKFLOW_CODE_INVALID",`${t}/workflow/codes`),r.workflow={codes:j(p)}}if(a.decimalReservation!==void 0){let c=`${t}/decimalReservation`,p=m(a.decimalReservation,c);$(p,["mode","resourceCode","amountFieldCode","currencyFieldCode","relationFieldCode","parentFieldCode","rootFieldCode","statusFieldCode","parentRelationValue","childRelationValue","eligibleParentStatuses","eligibleChildStatuses"],c);let _=h(p.mode,`${c}/mode`,16);["reserve","commit","release"].includes(_)||f("NATIVE_DECIMAL_RESERVATION_MODE_INVALID",`${c}/mode`);let l=z(p.resourceCode,`${c}/resourceCode`),u=o.get(l);u||f("NATIVE_DECIMAL_RESERVATION_RESOURCE_MISSING",`${c}/resourceCode`);let d=Object.fromEntries(["amountFieldCode","currencyFieldCode","relationFieldCode","parentFieldCode","rootFieldCode","statusFieldCode"].map(T=>[T,B(p[T],`${c}/${T}`)])),A=T=>u.get(d[T]),N=T=>new Set((A(T)?.options||[]).map(C=>String(C.value))),I=w(p.parentRelationValue,`${c}/parentRelationValue`),g=w(p.childRelationValue,`${c}/childRelationValue`),b=F(p.eligibleParentStatuses,`${c}/eligibleParentStatuses`,16),O=F(p.eligibleChildStatuses,`${c}/eligibleChildStatuses`,16);(A("amountFieldCode")?.type!=="number.decimal"||A("amountFieldCode")?.exactDecimal!==!0||A("amountFieldCode")?.precision!==18||A("amountFieldCode")?.scale!==2||A("currencyFieldCode")?.type!=="option.single"||A("relationFieldCode")?.type!=="option.single"||A("parentFieldCode")?.type!=="resource-ref.single"||A("parentFieldCode")?.source?.resourceCode!==l||A("rootFieldCode")?.type!=="uuid"||A("statusFieldCode")?.type!=="option.single"||I===g||!N("relationFieldCode").has(I)||!N("relationFieldCode").has(g)||!b.length||!O.length||b.some(T=>!N("statusFieldCode").has(T))||O.some(T=>!N("statusFieldCode").has(T)))&&f("NATIVE_DECIMAL_RESERVATION_FIELD_INVALID",c),r.decimalReservation={mode:_,resourceCode:l,...d,parentRelationValue:I,childRelationValue:g,eligibleParentStatuses:j(b),eligibleChildStatuses:j(O)}}return r}function Vi(e,t,n,o,s){if(e===void 0)return;let i=`${t}/ai`,a=m(e,i);Qs.test(n)||f("NATIVE_OPERATION_AI_CODE_INVALID",`${t}/code`),$(a,["name","description","risk","resources","sideEffects","concurrency","timeoutMs"],i,!0),h(a.name,`${i}/name`,rn),h(a.description,`${i}/description`,rn);let r=h(a.risk,`${i}/risk`,16);["read","write","destructive","external"].includes(r)||f("NATIVE_OPERATION_AI_RISK_INVALID",`${i}/risk`),r==="read"!=(o==="GET")&&f("NATIVE_OPERATION_AI_METHOD_RISK_MISMATCH",`${i}/risk`),o==="DELETE"&&!["destructive","external"].includes(r)&&f("NATIVE_OPERATION_AI_METHOD_RISK_MISMATCH",`${i}/risk`);let c=F(a.resources,`${i}/resources`,16);c.length===0&&f("NATIVE_OPERATION_AI_RESOURCE_REQUIRED",`${i}/resources`),c.forEach((_,l)=>{let u=z(_,`${i}/resources/${l}`);s.has(u)||f("NATIVE_OPERATION_AI_RESOURCE_MISSING",`${i}/resources/${l}`)});let p=F(a.sideEffects,`${i}/sideEffects`,20);(r==="read"&&p.length!==0||r!=="read"&&p.length===0)&&f("NATIVE_OPERATION_AI_SIDE_EFFECT_INVALID",`${i}/sideEffects`),a.concurrency!==void 0&&!["none","revision"].includes(h(a.concurrency,`${i}/concurrency`,16))&&f("NATIVE_OPERATION_AI_CONCURRENCY_INVALID",`${i}/concurrency`),a.timeoutMs!==void 0&&Z(a.timeoutMs,`${i}/timeoutMs`,100,3e4)}function mt(e){return(e.replace(/\/{2,}/g,"/").replace(/\/$/,"")||"/").split("/").map(n=>n.startsWith(":")?":":n.includes("*")?"*":n).join("/")}function wi(e,t){let n=m(e,t),o=h(n.type,`${t}/type`,32),s=["code","type","label","presentation","required"],i=o==="sso"?[...s,"provider"]:o==="dingtalk"?[...s,"flow"]:s;$(n,i,t);let a=w(n.code,`${t}/code`),r=h(n.label,`${t}/label`,255),c=h(n.presentation,`${t}/presentation`,16);["primary","secondary"].includes(c)||f("NATIVE_APPLICATION_AUTH_METHOD_PRESENTATION_INVALID",`${t}/presentation`);let p=xe(n.required,`${t}/required`);return["sso","password","dingtalk"].includes(o)||f("NATIVE_APPLICATION_AUTH_METHOD_TYPE_INVALID",`${t}/type`),o==="sso"&&n.provider!=="tenant-default"&&f("NATIVE_APPLICATION_AUTH_SSO_PROVIDER_INVALID",`${t}/provider`),o==="dingtalk"&&!["auto","jsapi","oauth"].includes(h(n.flow,`${t}/flow`,16))&&f("NATIVE_APPLICATION_AUTH_DINGTALK_FLOW_INVALID",`${t}/flow`),{code:a,type:o,label:r,presentation:c,required:p,...o==="sso"?{provider:"tenant-default"}:{},...o==="dingtalk"?{flow:n.flow}:{}}}function Kn(e,t,n){let o=m(e,n);$(o,["routeCode","path","defaultRouteCode"],n);let s=w(o.routeCode,`${n}/routeCode`),i=ue(o.path,`${n}/path`),a=t==="desktop"?"/login":"/m/login";return(i!==a||/[:*?#\\]/.test(i))&&f("NATIVE_APPLICATION_AUTH_SURFACE_PATH_INVALID",`${n}/path`,{device:t,expectedPath:a}),{routeCode:s,path:i,defaultRouteCode:w(o.defaultRouteCode,`${n}/defaultRouteCode`)}}function Ao(e,t,n,o){if(e===null)return;let s=m(e,o);$(s,["accountMode","registration","methods","surfaces"],o),L(s.accountMode,"existing-platform-users-only",`${o}/accountMode`);let i=m(s.registration,`${o}/registration`);$(i,["mode"],`${o}/registration`),L(i.mode,"reject",`${o}/registration/mode`);let a=R(s.methods,`${o}/methods`,8);a.length===0&&f("NATIVE_APPLICATION_AUTH_METHOD_REQUIRED",`${o}/methods`);let r=a.map((I,g)=>wi(I,`${o}/methods/${g}`)),c=new Set,p=new Set;for(let[I,g]of r.entries())c.has(g.code)&&f("NATIVE_APPLICATION_AUTH_METHOD_CODE_DUPLICATE",`${o}/methods/${I}/code`),p.has(g.type)&&f("NATIVE_APPLICATION_AUTH_METHOD_TYPE_DUPLICATE",`${o}/methods/${I}/type`),c.add(g.code),p.add(g.type);r.filter(I=>I.presentation==="primary").length!==1&&f("NATIVE_APPLICATION_AUTH_PRIMARY_METHOD_INVALID",`${o}/methods`);let _=m(s.surfaces,`${o}/surfaces`);$(_,["desktop","mobile"],`${o}/surfaces`);let l=Kn(_.desktop,"desktop",`${o}/surfaces/desktop`),u=Kn(_.mobile,"mobile",`${o}/surfaces/mobile`);l.routeCode===u.routeCode&&f("NATIVE_APPLICATION_AUTH_SURFACE_CODE_DUPLICATE",`${o}/surfaces/mobile/routeCode`);let E=R(t,"/config/frontend/routes",500),d=new Map;for(let[I,g]of E.entries()){let b=m(g,`/config/frontend/routes/${I}`);d.set(String(b.code||""),b)}let A=new Set((Array.isArray(n.data?.resources)?n.data.resources:[]).map(I=>String(I.code||"")).filter(I=>/^[a-z][a-z0-9-]{0,62}$/.test(I)));for(let[I,g]of[["desktop",l],["mobile",u]]){d.has(g.routeCode)&&f("NATIVE_APPLICATION_AUTH_SURFACE_CODE_CONFLICT",`${o}/surfaces/${I}/routeCode`);let b=/^user\.([a-z][a-z0-9-]{0,62})\.(records|submit)$/.exec(String(g.defaultRouteCode||"")),O=d.get(g.defaultRouteCode),T=String(O?.path||"");if(b&&A.has(b[1])){let S=b[2]==="records"?`/my/${b[1]}`:`/my/${b[1]}/submit`;O={surface:"user",path:I==="mobile"?`/m${S}`:S},T=String(O.path)}let C=I==="desktop"?T==="/m"||T.startsWith("/m/"):!(T==="/m"||T.startsWith("/m/"));(!O||O.surface!=="user"||/[:*]/.test(T)||C)&&f("NATIVE_APPLICATION_AUTH_DEFAULT_ROUTE_INVALID",`${o}/surfaces/${I}/defaultRouteCode`)}let N=Io(n).filter(I=>!I.owner.startsWith("authentication:"));for(let[I,g]of[["desktop",l],["mobile",u]]){let b=N.find(O=>mt(O.path)===mt(g.path));b&&f("NATIVE_APPLICATION_AUTH_SURFACE_PATH_CONFLICT",`${o}/surfaces/${I}/path`,{owner:b.owner})}}function Fi(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=m(e,t),s=m(o.surfaces,`${t}/surfaces`),i={...o,surfaces:{...s,desktop:{...m(s.desktop,`${t}/surfaces/desktop`),defaultRouteCode:"auth-desktop-default"},mobile:{...m(s.mobile,`${t}/surfaces/mobile`),defaultRouteCode:"auth-mobile-default"}}};Ao(i,n.frontend.routes,{...n,frontend:{...n.frontend,authentication:i}},t)}function Pi(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 vi=new Set(["draft.read","draft.update","validate","create","own.list","own.read","public.list","public.read"]);function Li(e,t,n){let o=m(e,n);$(o,["policies"],n);let s=R(o.policies,`${n}/policies`,16);s.length<1&&f("NATIVE_PUBLIC_POLICY_REQUIRED",n);let i=new Map(t.frontend.routes.map(p=>[p.code,p])),a=new Map(t.data.resources.map(p=>[p.code,p])),r=new Set,c=new Set(s.map(p=>String(p?.code||"")));s.forEach((p,_)=>{let l=`${n}/policies/${_}`,u=m(p,l);$(u,["code","routeCode","mode","resourceCode","operations","fields"],l,["requiredFields","ownRecordFields","publicRecordFields","publicFilters","serverGeneratedFields","schedule","publicSubtableFields","draft","validations"]);let E=w(u.code,`${l}/code`);r.has(E)&&f("NATIVE_PUBLIC_POLICY_DUPLICATE",`${l}/code`);let d=w(u.routeCode,`${l}/routeCode`),A=i.get(d);(!A||A.surface!=="user"||A.capability!==void 0||A.access!==void 0||/[:*]/.test(String(A.path)))&&f("NATIVE_PUBLIC_ROUTE_INVALID",`${l}/routeCode`),L(u.mode,"anonymous",`${l}/mode`);let N=z(u.resourceCode,`${l}/resourceCode`),I=a.get(N);I||f("NATIVE_PUBLIC_RESOURCE_MISSING",`${l}/resourceCode`);let g=new Map(I.schema.fields.map(V=>[String(V.code),String(V.type)])),b=F(u.operations,`${l}/operations`,8);(b.length<1||b.some(V=>!vi.has(V)))&&f("NATIVE_PUBLIC_OPERATION_INVALID",`${l}/operations`),b.includes("draft.read")!==b.includes("draft.update")&&f("NATIVE_PUBLIC_DRAFT_OPERATION_INCOMPLETE",`${l}/operations`);let O=F(u.fields,`${l}/fields`,64);(O.length<1||O.some(V=>!g.has(V)))&&f("NATIVE_PUBLIC_FIELD_INVALID",`${l}/fields`);for(let V of["requiredFields","ownRecordFields","publicRecordFields"]){if(!Object.prototype.hasOwnProperty.call(u,V))continue;F(u[V],`${l}/${V}`,64).some(P=>!O.includes(P))&&f("NATIVE_PUBLIC_FIELD_SCOPE_INVALID",`${l}/${V}`)}let T=Object.prototype.hasOwnProperty.call(u,"serverGeneratedFields")?R(u.serverGeneratedFields,`${l}/serverGeneratedFields`,16):[],C=new Set;T.forEach((V,x)=>{let P=`${l}/serverGeneratedFields/${x}`,J=m(V,P);$(J,["field","kind"],P);let W=B(J.field,`${P}/field`);(C.has(W)||!g.has(W)||O.includes(W)||g.get(W)!=="text.short"&&g.get(W)!=="text.long")&&f("NATIVE_PUBLIC_SERVER_GENERATED_FIELD_INVALID",`${P}/field`),L(J.kind,"random-token",`${P}/kind`),C.add(W)});let S=Object.prototype.hasOwnProperty.call(u,"schedule")?m(u.schedule,`${l}/schedule`):null;if(S){let V=["campusPolicyCode","rulePolicyCode","campusField","ruleCampusField","ruleWeekdaysField","ruleOpenAtField","ruleCloseAtField","ruleSlotMinutesField","ruleAdvanceHoursField","ruleAdvanceDaysField","campusEnabledField","ruleEnabledField","dateField","timeField"];$(S,V,`${l}/schedule`);for(let x of["campusPolicyCode","rulePolicyCode"])w(S[x],`${l}/schedule/${x}`);for(let x of V.filter(P=>!["campusPolicyCode","rulePolicyCode"].includes(P)))B(S[x],`${l}/schedule/${x}`);for(let x of[S.campusField,S.dateField,S.timeField])O.includes(String(x))||f("NATIVE_PUBLIC_SCHEDULE_FIELD_INVALID",`${l}/schedule`);(!c.has(String(S.campusPolicyCode))||!c.has(String(S.rulePolicyCode)))&&f("NATIVE_PUBLIC_SCHEDULE_POLICY_INVALID",`${l}/schedule`)}let D=Object.prototype.hasOwnProperty.call(u,"publicFilters")?R(u.publicFilters,`${l}/publicFilters`,16):[],U=new Set;D.forEach((V,x)=>{let P=`${l}/publicFilters/${x}`,J=m(V,P);$(J,["field","operator","value"],P);let W=B(J.field,`${P}/field`);U.has(W)&&f("NATIVE_PUBLIC_FILTER_DUPLICATE",`${P}/field`),O.includes(W)||f("NATIVE_PUBLIC_FILTER_FIELD_INVALID",`${P}/field`),L(J.operator,"eq",`${P}/operator`),["boolean","text.short","text.long","number.integer","number.decimal","date","time"].includes(g.get(W)||"")||f("NATIVE_PUBLIC_FILTER_FIELD_INVALID",`${P}/field`),J.value!==null&&typeof J.value!="string"&&typeof J.value!="number"&&typeof J.value!="boolean"&&f("NATIVE_PUBLIC_FILTER_VALUE_INVALID",`${P}/value`),U.add(W)});let k=Object.prototype.hasOwnProperty.call(u,"publicSubtableFields")?m(u.publicSubtableFields,`${l}/publicSubtableFields`):null;if(k){Object.keys(k).length>64&&f("NATIVE_PUBLIC_SUBTABLE_FIELDS_INVALID",`${l}/publicSubtableFields`);for(let[V,x]of Object.entries(k)){let P=I.schema.fields.find(H=>String(H.code)===V),J=String(P?.subtable?.resourceCode||""),W=a.get(J),me=new Map((W?.schema?.fields||[]).map(H=>[String(H.code),String(H.type)])),G=F(x,`${l}/publicSubtableFields/${V}`,64);(!O.includes(V)||g.get(V)!=="subtable"||!W||G.length<1||G.some(H=>!me.has(H))||G.some(H=>me.get(H)==="subtable")||G.some(H=>me.get(H)==="signature"))&&f("NATIVE_PUBLIC_SUBTABLE_FIELDS_INVALID",`${l}/publicSubtableFields/${V}`)}}if(b.some(V=>V.startsWith("public."))){Object.prototype.hasOwnProperty.call(u,"publicRecordFields")||f("NATIVE_PUBLIC_RECORD_FIELDS_REQUIRED",`${l}/publicRecordFields`);let V=F(u.publicRecordFields,`${l}/publicRecordFields`,64);(V.length<1||V.some(x=>!O.includes(x))||V.some(x=>g.get(x)==="signature"||g.get(x)==="subtable"&&!k?.[x]))&&f("NATIVE_PUBLIC_RECORD_FIELDS_INVALID",`${l}/publicRecordFields`)}let Y=Object.prototype.hasOwnProperty.call(u,"requiredFields")?F(u.requiredFields,`${l}/requiredFields`,64):[],M=I.surface||{},fe=M.fields||{},pe=String(M.mutationOwner||"native")==="native"&&M.generated?.create!==!1,K=I.schema.fields.filter(V=>Me(V,fe[V.code])).map(V=>String(V.code));if(b.includes("create")&&!pe&&f("NATIVE_PUBLIC_CREATE_FIELDS_INCOMPLETE",`${l}/fields`),b.includes("create")&&!Object.prototype.hasOwnProperty.call(u,"draft")&&f("NATIVE_PUBLIC_DRAFT_REQUIRED",`${l}/draft`),b.includes("create"))for(let V of K){let x=O.includes(V)?Y.includes(V)?null:"requiredFields":"fields";x&&f("NATIVE_PUBLIC_CREATE_FIELDS_INCOMPLETE",`${l}/${x}`,{resourceCode:z,fieldCode:V})}if(Object.prototype.hasOwnProperty.call(u,"draft")){let V=m(u.draft,`${l}/draft`);$(V,["enabled","inactivityTtlSeconds","maxBytes"],`${l}/draft`),L(V.enabled,!0,`${l}/draft/enabled`),Z(V.inactivityTtlSeconds,`${l}/draft/inactivityTtlSeconds`,3600,7776e3),Z(V.maxBytes,`${l}/draft/maxBytes`,4096,262144)}else b.includes("draft.read")&&f("NATIVE_PUBLIC_DRAFT_REQUIRED",`${l}/draft`);let Ie=Object.prototype.hasOwnProperty.call(u,"validations")?R(u.validations,`${l}/validations`,16):[],ie=new Set;Ie.forEach((V,x)=>{let P=`${l}/validations/${x}`,J=m(V,P);$(J,["code","kind","fields","result"],P);let W=w(J.code,`${P}/code`);ie.has(W)&&f("NATIVE_PUBLIC_VALIDATION_DUPLICATE",`${P}/code`),L(J.kind,"duplicate",`${P}/kind`),L(J.result,"availability",`${P}/result`);let me=F(J.fields,`${P}/fields`,8);(me.length<1||me.some(G=>!O.includes(G))||me.some(G=>["file","subtable"].includes(g.get(G)||"")))&&f("NATIVE_PUBLIC_VALIDATION_FIELD_INVALID",`${P}/fields`),ie.add(W)}),r.add(E)})}function ki(e,t){let n=m(e,t);$(n,["policies"],t),R(n.policies,`${t}/policies`,16).length<1&&f("NATIVE_PUBLIC_POLICY_REQUIRED",t)}function xi(e){return{policies:X(e.frontend.publicAccess.policies.map(t=>({code:t.code,routeCode:t.routeCode,mode:t.mode,resourceCode:t.resourceCode,operations:j(t.operations),fields:j(t.fields),...t.requiredFields?{requiredFields:j(t.requiredFields)}:{},...t.ownRecordFields?{ownRecordFields:j(t.ownRecordFields)}:{},...t.publicRecordFields?{publicRecordFields:j(t.publicRecordFields)}:{},...t.publicFilters?{publicFilters:t.publicFilters.map(n=>({field:n.field,operator:n.operator,value:n.value})).sort((n,o)=>ae(n.field,o.field))}:{},...t.publicSubtableFields?{publicSubtableFields:Object.fromEntries(Object.entries(t.publicSubtableFields).sort(([n],[o])=>n.localeCompare(o)).map(([n,o])=>[n,j(Array.isArray(o)?o.map(String):[])]))}:{},...t.serverGeneratedFields?{serverGeneratedFields:t.serverGeneratedFields.map(n=>({field:n.field,kind:n.kind})).sort((n,o)=>ae(n.field,o.field))}:{},...t.schedule?{schedule:{campusPolicyCode:t.schedule.campusPolicyCode,rulePolicyCode:t.schedule.rulePolicyCode,campusField:t.schedule.campusField,ruleCampusField:t.schedule.ruleCampusField,ruleWeekdaysField:t.schedule.ruleWeekdaysField,ruleOpenAtField:t.schedule.ruleOpenAtField,ruleCloseAtField:t.schedule.ruleCloseAtField,ruleSlotMinutesField:t.schedule.ruleSlotMinutesField,ruleAdvanceHoursField:t.schedule.ruleAdvanceHoursField,ruleAdvanceDaysField:t.schedule.ruleAdvanceDaysField,campusEnabledField:t.schedule.campusEnabledField,ruleEnabledField:t.schedule.ruleEnabledField,dateField:t.schedule.dateField,timeField:t.schedule.timeField}}:{},...t.draft?{draft:{...t.draft}}:{},...t.validations?{validations:X(t.validations.map(n=>({code:n.code,kind:n.kind,fields:j(n.fields),result:n.result})),n=>n.code)}:{}})),t=>t.code)}}function Io(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=mo(n),s=`/admin/resources/${n.code}`,i=[["list",s],["detail",`${s}/:id`],["create",`${s}/new`],["update",`${s}/:id/edit`]];for(let[a,r]of i)o[a]&&t.push({owner:`resource:${n.code}:${a}`,path:r},{owner:`resource:${n.code}:${a}:mobile`,path:`/m${r}`})}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 Tt(e){let t=new Map(Io(e).map(n=>[mt(n.path),n]));return X(e.frontend.routes.map((n,o)=>{let s=`/config/frontend/routes/${o}`,i=m(n,s);$(i,["code","path","label","surface","parentCode","capability","access","pinned","tabPersistence","keepAlive"],s,!0),["admin","user"].includes(i.surface)||f("NATIVE_ROUTE_SURFACE_INVALID",`${s}/surface`);let a=ue(i.path,`${s}/path`);i.surface==="admin"&&a!=="/admin"&&!a.startsWith("/admin/")&&f("NATIVE_ADMIN_ROUTE_PATH_INVALID",`${s}/path`),i.surface==="user"&&(a==="/admin"||a.startsWith("/admin/"))&&f("NATIVE_USER_ROUTE_PATH_RESERVED",`${s}/path`);let r=mt(a),c=t.get(r);c&&f("NATIVE_ROUTE_PATH_CONFLICT",`${s}/path`,{path:a,owner:c.owner}),t.set(r,{owner:`frontend:${String(i.code||o)}`,path:a});let p=/[:*]/.test(a),_=un(i,s,e.appCode),l=i.pinned===void 0?void 0:xe(i.pinned,`${s}/pinned`),u=i.tabPersistence===void 0?p?"none":"session":h(i.tabPersistence,`${s}/tabPersistence`,16),E=i.keepAlive===void 0?"none":h(i.keepAlive,`${s}/keepAlive`,16);return["session","none"].includes(u)||f("NATIVE_ROUTE_TAB_PERSISTENCE_INVALID",`${s}/tabPersistence`),["none","memory"].includes(E)||f("NATIVE_ROUTE_KEEP_ALIVE_INVALID",`${s}/keepAlive`),p&&l===!0&&f("NATIVE_DYNAMIC_ROUTE_PINNED_FORBIDDEN",`${s}/pinned`),p&&u==="session"&&f("NATIVE_DYNAMIC_ROUTE_TAB_PERSISTENCE_FORBIDDEN",`${s}/tabPersistence`),p&&E==="memory"&&f("NATIVE_DYNAMIC_ROUTE_KEEP_ALIVE_FORBIDDEN",`${s}/keepAlive`),{code:w(i.code,`${s}/code`),path:a,label:h(i.label,`${s}/label`,255),surface:i.surface,...i.parentCode===void 0?{}:{parentCode:w(i.parentCode,`${s}/parentCode`)},..._,...l===void 0?{}:{pinned:l},tabPersistence:u,keepAlive:E}}),n=>n.code)}function mo(e){let t=e.surface===void 0?{}:m(e.surface,"/surface"),n=t.mutationOwner||"native",o=t.generated===void 0?{}:m(t.generated,"/surface/generated"),s=n==="native";return{list:o.list??!0,detail:o.detail??!0,create:o.create??s,update:o.update??s,delete:o.delete??s}}function No(e){let t=[];for(let n of X(e.data.resources,o=>o.code).flatMap(o=>[{resource:o,viewCode:void 0},...(o.surface?.views||[]).map(s=>({viewCode:s.code,resource:{...o,name:s.name,surface:st(o.surface,s.code)}}))])){let{resource:o,viewCode:s}=n,i=`/admin/resources/${o.code}${s?`/views/${s}`:""}`,a=mo(o),r=[{operation:"list",kind:"resource-list",path:`${i}`,label:o.name,capability:o.capabilities.read,navigationEligible:!0},{operation:"detail",kind:"resource-detail",path:`${i}/:id`,label:`${o.name}\u8BE6\u60C5`,capability:o.capabilities.read,navigationEligible:!1},{operation:"create",kind:"resource-create",path:`${i}/new`,label:`\u65B0\u589E${o.name}`,capability:o.capabilities.create,navigationEligible:!1},{operation:"update",kind:"resource-update",path:`${i}/:id/edit`,label:`\u7F16\u8F91${o.name}`,capability:o.capabilities.update,navigationEligible:!1}];for(let c of r)a[c.operation]&&t.push({code:`resource:${o.code}${s?`:view:${s}`:""}:${c.operation}`,kind:c.kind,path:c.path,label:c.label,navigationEligible:c.navigationEligible,capability:c.capability,resourceCode:o.code,...s?{viewCode:s}:{}})}for(let n of Tt(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)=>ae(n.code,o.code))}function go(e){return e.kind==="resource"?`resource:${e.resourceCode}${e.viewCode?`:view:${e.viewCode}`:""}:list`:`operation:${e.routeCode}`}function Ui(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,s)=>({pageCode:go(o.page),...o.label===void 0?{}:{label:o.label},...o.icon===void 0?{}:{icon:o.icon},order:o.order??s})).sort((o,s)=>o.order-s.order||ae(o.pageCode,s.pageCode))})).sort((t,n)=>t.order-n.order||ae(t.code,n.code))}function Mi(e,t){let n=R(e,t,q.adminNavigationGroups),o=0;n.forEach((s,i)=>{let a=`${t}/${i}`,r=m(s,a);$(r,["code","label","icon","order","items"],a,!0),w(r.code,`${a}/code`),h(r.label,`${a}/label`,255),Nt(r.icon,`${a}/icon`),eo(r.order,`${a}/order`);let c=R(r.items,`${a}/items`,500);c.length===0&&f("NATIVE_ADMIN_GROUP_ORPHANED",`${a}/items`),o+=c.length,o>q.adminNavigationItems&&f("NATIVE_ARRAY_LIMIT_EXCEEDED",t),c.forEach((p,_)=>{let l=`${a}/items/${_}`,u=m(p,l);$(u,["page","label","icon","order"],l,!0),ji(u.page,`${l}/page`),u.label!==void 0&&h(u.label,`${l}/label`,255),Nt(u.icon,`${l}/icon`),eo(u.order,`${l}/order`)})})}function ji(e,t){let n=m(e,t),o=h(n.kind,`${t}/kind`,64);if(o==="resource"){$(n,["kind","resourceCode"],t,["viewCode"]),n.viewCode!==void 0&&w(n.viewCode,`${t}/viewCode`),z(n.resourceCode,`${t}/resourceCode`);return}if(o==="operation"){$(n,["kind","routeCode"],t),w(n.routeCode,`${t}/routeCode`);return}f("NATIVE_ADMIN_PAGE_REFERENCE_KIND_INVALID",`${t}/kind`)}function Bi(e){let t=new Map(No(e).map(s=>[String(s.code),s])),n=new Set,o=new Set;e.frontend.admin.navigation.forEach((s,i)=>{let a=`/config/frontend/admin/navigation/${i}`;n.has(s.code)&&f("NATIVE_ADMIN_GROUP_DUPLICATE",`${a}/code`),n.add(s.code),s.label===s.code&&f("NATIVE_ADMIN_USER_LABEL_REQUIRED",`${a}/label`),s.items.forEach((r,c)=>{let p=`${a}/items/${c}`,_=go(r.page),l=t.get(_);(!l||l.navigationEligible!==!0)&&f("NATIVE_ADMIN_PAGE_NOT_FOUND",`${p}/page`),o.has(_)&&f("NATIVE_ADMIN_PAGE_DUPLICATE",`${p}/page`),o.add(_);let u=r.page.resourceCode||r.page.routeCode||r.page.workflowCode||_,E=r.label||l.label;(!E||E===u||E===_)&&f("NATIVE_ADMIN_USER_LABEL_REQUIRED",`${p}/label`)})})}function Ji(e,t){let n=R(e,t,q.adminPages),o=new Set;n.forEach((s,i)=>{let a=`${t}/${i}`,r=m(s,a);$(r,["code","kind","path","label","navigationEligible","capability","access","resourceCode","viewCode","routeCode"],a,!0);let c=h(r.code,`${a}/code`,255);o.has(c)&&f("NATIVE_ADMIN_PAGE_DUPLICATE",`${a}/code`),o.add(c);let p=h(r.kind,`${a}/kind`,64);if(["resource-list","resource-detail","resource-create","resource-update","operation"].includes(p)||f("NATIVE_ADMIN_PAGE_KIND_INVALID",`${a}/kind`),ue(r.path,`${a}/path`),h(r.label,`${a}/label`,255),xe(r.navigationEligible,`${a}/navigationEligible`),r.capability!==void 0&&r.access!==void 0&&f("NATIVE_ROUTE_ACCESS_CONFLICT",`${a}/access`),r.capability!==void 0&&h(r.capability,`${a}/capability`,255),r.access!==void 0){let _=m(r.access,`${a}/access`);$(_,["allOf","anyOf"],`${a}/access`,!0);for(let l of["allOf","anyOf"])_[l]!==void 0&&F(_[l],`${a}/access/${l}`,50)}for(let _ of["resourceCode","viewCode","routeCode"])r[_]!==void 0&&w(r[_],`${a}/${_}`)})}function Wi(e,t){let n=R(e,t,q.adminNavigationGroups),o=0;n.forEach((s,i)=>{let a=`${t}/${i}`,r=m(s,a);$(r,["code","label","icon","order","items"],a,!0),w(r.code,`${a}/code`),h(r.label,`${a}/label`,255),Nt(r.icon,`${a}/icon`),Z(r.order,`${a}/order`,-1e4,1e4);let c=R(r.items,`${a}/items`,500);c.length===0&&f("NATIVE_ADMIN_GROUP_ORPHANED",`${a}/items`),o+=c.length,o>q.adminNavigationItems&&f("NATIVE_ARRAY_LIMIT_EXCEEDED",t),c.forEach((p,_)=>{let l=`${a}/items/${_}`,u=m(p,l);$(u,["pageCode","label","icon","order"],l,!0),h(u.pageCode,`${l}/pageCode`,255),u.label!==void 0&&h(u.label,`${l}/label`,255),Nt(u.icon,`${l}/icon`),Z(u.order,`${l}/order`,-1e4,1e4)})})}var zi=new Set(["application-todo-center","workflow-work-center","workflow-launch","workflow-task","workflow-instance","resource-records","resource-submit"]);function Gi(e,t,n){let o=m(e,t);$(o,["schemaVersion","appCode","devicePolicy","rootEntry","authentication","routes","digest"],t),L(o.schemaVersion,uo,`${t}/schemaVersion`),L(o.appCode,n,`${t}/appCode`),ln(o.devicePolicy,`${t}/devicePolicy`),Yi(o.rootEntry,`${t}/rootEntry`),qi(o.authentication,`${t}/authentication`),cn(o.digest,`${t}/digest`);let s=R(o.routes,`${t}/routes`,q.routes),i=new Set;s.forEach((a,r)=>{let c=`${t}/routes/${r}`,p=m(a,c),_=p.kind==="resource-records"||p.kind==="resource-submit";$(p,["code","kind","desktop","mobile"],c,["workflowCode",..._?["resourceCode"]:[]]);let l=h(p.code,`${c}/code`,255);i.has(l)&&f("NATIVE_ROUTE_MANIFEST_DUPLICATE",`${c}/code`),i.add(l);let u=h(p.kind,`${c}/kind`,64);if(zi.has(u)||f("NATIVE_ROUTE_MANIFEST_KIND_INVALID",`${c}/kind`),p.workflowCode!==void 0&&w(p.workflowCode,`${c}/workflowCode`),_){let A=z(p.resourceCode,`${c}/resourceCode`);L(l,`user.${A}.${p.kind==="resource-records"?"records":"submit"}`,`${c}/code`)}else p.resourceCode!==void 0&&f("NATIVE_PROPERTY_UNKNOWN",`${c}/resourceCode`);let E=Xn(p.desktop,`${c}/desktop`,n),d=Xn(p.mobile,`${c}/mobile`,n);E.surface!=="user"&&f("NATIVE_ROUTE_MANIFEST_DESKTOP_SURFACE_INVALID",`${c}/desktop/surface`),d.surface!=="user"&&f("NATIVE_ROUTE_MANIFEST_MOBILE_SURFACE_INVALID",`${c}/mobile/surface`),E.routeCode===d.routeCode&&f("NATIVE_ROUTE_MANIFEST_PAIR_DUPLICATE",c)}),L(o.digest,ee({schemaVersion:o.schemaVersion,appCode:o.appCode,devicePolicy:o.devicePolicy,rootEntry:o.rootEntry,authentication:o.authentication,routes:o.routes}),`${t}/digest`)}function ln(e,t){let n=m(e,t);$(n,["kind","mobileMaxWidthPx","desktopMinWidthPx"],t),L(n.kind,"viewport-family",`${t}/kind`);let o=Z(n.mobileMaxWidthPx,`${t}/mobileMaxWidthPx`,320,1600),s=Z(n.desktopMinWidthPx,`${t}/desktopMinWidthPx`,320,1600);return s!==o+1&&f("NATIVE_FRONTEND_DEVICE_POLICY_INVALID",t),{kind:"viewport-family",mobileMaxWidthPx:o,desktopMinWidthPx:s}}function Yi(e,t){let n=m(e,t);$(n,["code","desktop","mobile"],t);let o=w(n.code,`${t}/code`),s=an(n.desktop,`${t}/desktop`),i=an(n.mobile,`${t}/mobile`);return(s===i||i==="/"||!i.startsWith("/m/"))&&f("NATIVE_ROUTE_MANIFEST_ROOT_ENTRY_INVALID",t),s.startsWith("/m/")&&f("NATIVE_ROUTE_MANIFEST_ROOT_ENTRY_INVALID",`${t}/desktop`),{code:o,desktop:s,mobile:i}}function qi(e,t){let n=m(e,t);$(n,["desktop","mobile"],t);let o=Hn(n.desktop,`${t}/desktop`,!1),s=Hn(n.mobile,`${t}/mobile`,!0);return(o.routeCode===s.routeCode||o.path===s.path)&&f("NATIVE_ROUTE_MANIFEST_AUTHENTICATION_DUPLICATE",t),{desktop:o,mobile:s}}function Hn(e,t,n){let o=m(e,t);$(o,["routeCode","path"],t);let s=w(o.routeCode,`${t}/routeCode`),i=an(o.path,`${t}/path`);return(n?!i.startsWith("/m/"):i.startsWith("/m/"))&&f("NATIVE_ROUTE_MANIFEST_AUTHENTICATION_PATH_INVALID",`${t}/path`),{routeCode:s,path:i}}function an(e,t){let n=ue(e,t);return/[:*?#\\\\]/.test(n)&&f("NATIVE_ROUTE_MANIFEST_STATIC_PATH_INVALID",t),n}function Xn(e,t,n){let o=m(e,t);$(o,["routeCode","path","surface","pathParams","requiresAuthentication"],t,["capability","access"]),w(o.routeCode,`${t}/routeCode`);let s=ue(o.path,`${t}/path`),i=h(o.surface,`${t}/surface`,16);["admin","user"].includes(i)||f("NATIVE_ROUTE_SURFACE_INVALID",`${t}/surface`);let a=F(o.pathParams,`${t}/pathParams`,8);return a.forEach((r,c)=>{(!/^[A-Za-z][A-Za-z0-9_]*$/.test(r)||r.length>64)&&f("NATIVE_ROUTE_PATH_PARAM_INVALID",`${t}/pathParams/${c}`)}),Q(a)!==Q(To(s))&&f("NATIVE_ROUTE_PATH_PARAMS_MISMATCH",`${t}/pathParams`),un(o,t,n),o.requiresAuthentication!==!0&&f("NATIVE_ROUTE_AUTHENTICATION_REQUIRED",`${t}/requiresAuthentication`),o}function To(e){return j([...e.matchAll(/:([A-Za-z][A-Za-z0-9_]*)/g)].map(t=>t[1]))}function Qn(e,t,n,o){return{routeCode:e,path:t,surface:n,pathParams:To(t),...o?.capability?{capability:o.capability}:{},...o?.access?{access:o.access}:{},requiresAuthentication:!0}}function Zn(e,t,n,o){return e==="workflow-launch"?`workflow.${n}.launch.${t}`:e==="application-todo-center"?`application.todo-center.${t}`:e==="resource-records"?`user.${o}.records.${t}`:e==="resource-submit"?`user.${o}.submit.${t}`:`${e.replace(/-/g,".")}.${t}`}function Ki(e){let t=e.appCode,n=[],o=(E,d,A,N,I,g,b)=>{n.push({code:E,kind:d,...I?{workflowCode:I}:{},...b?{resourceCode:b}:{},desktop:Qn(Zn(d,"desktop",I,b),A,"user",g),mobile:Qn(Zn(d,"mobile",I,b),N,"user",g)})};e.frontend.user.applicationTodoCenter===!0&&o("application:todo-center","application-todo-center","/todos","/m/todos");let s=Co(e);s.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 E of s){if(!["standalone","hidden-handoff"].includes(E.launch.mode))continue;let d=j([E.launch.submission?.create?.requiredCapability,E.launch.submission?.existing?.requiredCapability].filter(A=>!!A));o(`workflow:${E.code}:launch`,"workflow-launch","/workflows/:workflowCode/start","/m/workflows/:workflowCode/start",E.code,d.length===1?{capability:d[0]}:d.length>1?{access:{anyOf:d}}:void 0)}let i=n.sort((E,d)=>ae(String(E.code),String(d.code))),a=Tt(e),r=E=>{let d=E==="mobile"?"/m/":"/",A=a.filter(I=>I.surface==="user"&&!/[:*?#\\\\]/.test(I.path)&&I.path===d).sort((I,g)=>ae(I.code,g.code))[0];if(A)return{code:A.code,path:A.path};let N=a.filter(I=>I.surface==="user"&&!/[:*?#\\\\]/.test(I.path)&&(E==="mobile"?I.path.startsWith("/m/"):!I.path.startsWith("/m/"))).sort((I,g)=>ae(I.code,g.code))[0];return N?{code:N.code,path:N.path}:{code:E==="mobile"?"application-root-mobile":"application-root",path:d}},c=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"}},p=ln(e.frontend.devicePolicy,"/config/frontend/devicePolicy"),_=r("desktop"),l=r("mobile"),u={schemaVersion:uo,appCode:t,devicePolicy:p,rootEntry:{code:_.code,desktop:_.path,mobile:l.path},authentication:c,routes:i};return{...u,digest:ee(u)}}function Nt(e,t){if(e===void 0)return;let n=h(e,t,32);di.has(n)||f("NATIVE_ADMIN_ICON_INVALID",t)}function eo(e,t){e!==void 0&&Z(e,t,-1e4,1e4)}function un(e,t,n){return e.capability!==void 0&&e.access!==void 0&&f("NATIVE_ROUTE_ACCESS_CONFLICT",`${t}/access`),e.capability!==void 0?{capability:Ce(e.capability,`${t}/capability`,n)}:e.access===void 0?{}:{access:Ct(e.access,`${t}/access`,n)}}function Ct(e,t,n){let o=m(e,t);$(o,["allOf","anyOf"],t,!0);let s=o.allOf===void 0?void 0:j(F(o.allOf,`${t}/allOf`,50).map((a,r)=>Ce(a,`${t}/allOf/${r}`,n))),i=o.anyOf===void 0?void 0:j(F(o.anyOf,`${t}/anyOf`,50).map((a,r)=>Ce(a,`${t}/anyOf/${r}`,n)));return(s?.length||0)+(i?.length||0)===0&&f("NATIVE_ROUTE_ACCESS_EMPTY",t),{...s===void 0?{}:{allOf:s},...i===void 0?{}:{anyOf:i}}}function Co(e){let t=new Map(Eo(e).map(s=>[String(s.code),s])),n=e.workflows.definitions.map((s,i)=>{let a=`/config/workflows/definitions/${i}`,r=m(s,a);$(r,["version","definition","launch"],a,["detailRouteCode"]);let c=m(r.definition,`${a}/definition`),p=r.detailRouteCode===void 0?void 0:Oo(r.detailRouteCode,`${a}/detailRouteCode`);return{code:w(c.code,`${a}/definition/code`),title:h(c.title,`${a}/definition/title`,255),version:ke(r.version,`${a}/version`),launch:Hi(e,c,r.launch,`${a}/launch`,t),...p?{detailRouteCode:p}:{},definition:c}});return j(n.map(s=>s.code)).map(s=>{let i=n.filter(p=>p.code===s),a=e.workflows.activations.find(p=>p.workflowCode===s)?.definitionVersion,r=i.find(p=>p.version===a)||[...i].sort((p,_)=>_.version-p.version)[0],c=new Set;for(let p of i){let _=m(p.definition.nodes,"/config/workflows/definitions/nodes");for(let l of Object.values(_)){let u=m(l,"/config/workflows/definitions/nodes/*");if(u.kind==="approval")for(let E of F(u.allowedOperations||[],"/config/workflows/definitions/nodes/*/allowedOperations",20))c.add(E)}}return{code:s,title:r.title,acceptedCommandDeactivationPolicy:r.definition.acceptedCommandDeactivationPolicy,subject:r.definition.subject,launch:r.launch,...["standalone","hidden-handoff"].includes(r.launch.mode)&&!r.launch.submission?{processOperationCode:`openxiangda.workflow.${s}.submit`}:{},...r.detailRouteCode?{detailRouteCode:r.detailRouteCode}:{},definitionVersions:co(i.map(p=>p.version)),bindingVersions:co(e.workflows.bindings.map((p,_)=>{let l=`/config/workflows/bindings/${_}`,u=m(p,l),E=m(u.binding,`${l}/binding`);return{code:w(E.workflowCode,`${l}/binding/workflowCode`),version:ke(u.version,`${l}/version`)}}).filter(p=>p.code===s).map(p=>p.version)),providerCodes:j(e.workflows.providers.map((p,_)=>w(m(p,`/config/workflows/providers/${_}`).code,`/config/workflows/providers/${_}/code`))),allowedOperations:[...c].sort(ae),editableParameterCodes:j(e.workflows.editableParameters.map((p,_)=>{let l=`/config/workflows/editableParameters/${_}`,u=m(p,l);return{code:w(u.code,`${l}/code`),workflowCode:w(u.workflowCode,`${l}/workflowCode`)}}).filter(p=>p.workflowCode===s).map(p=>p.code))}})}function bo(e,t){let n=m(e,t);$(n,["mode"],t,["submission"]);let o=h(n.mode,`${t}/mode`,32);return["standalone","custom-page","hidden-handoff","work-center-only"].includes(o)||f("NATIVE_WORKFLOW_LAUNCH_MODE_INVALID",`${t}/mode`),{mode:o,...n.submission===void 0?{}:{submission:m(n.submission,`${t}/submission`)}}}function Hi(e,t,n,o,s){let i=bo(n,o);if(!i.submission)return{mode:i.mode};["standalone","hidden-handoff"].includes(i.mode)||f("NATIVE_WORKFLOW_NAMED_OPERATION_SUBMISSION_INVALID",`${o}/submission`);let a=m(i.submission,`${o}/submission`);$(a,["kind"],`${o}/submission`,["create","existing","context"]),L(a.kind,"named-operation",`${o}/submission/kind`);let r=o.endsWith("/launch")?o.slice(0,-7):o,c=m(t.subject,`${r}/definition/subject`),p=z(c.resourceCode,`${r}/definition/subject/resourceCode`),_=e.data.resources.findIndex(C=>C.code===p),l=e.data.resources[_];(_<0||!l)&&f("NATIVE_WORKFLOW_SUBJECT_RESOURCE_MISSING",`${r}/definition/subject/resourceCode`);let u=new Set(m(l.schema,`/config/data/resources/${_}/schema`).fields.map(C=>String(C.code))),E=new Map(e.backend.operations.map(C=>[String(C.code),C])),d=(C,S)=>{let D=`${o}/submission/${S}`,U=m(C,D);$(U,["operationCode","inputs","output"],D);let k=w(U.operationCode,`${D}/operationCode`),Y=E.get(k),M=s.get(k),fe=M?.platformAccess?.workflow?.codes;(!Y||!M||M.method!=="POST"||!Array.isArray(fe)||!fe.includes(t.code))&&f("NATIVE_WORKFLOW_NAMED_OPERATION_INVALID",D);let pe=m(Y.requestSchema,`${D}/operation/requestSchema`),K=m(pe.properties,`${D}/operation/requestSchema/properties`),Ie=new Set(pe.required===void 0?[]:F(pe.required,`${D}/operation/requestSchema/required`,64)),ie=m(U.inputs,`${D}/inputs`),V=Object.entries(ie);(!V.length||V.length>64)&&f("NATIVE_WORKFLOW_NAMED_OPERATION_INPUT_INVALID",`${D}/inputs`);let x=new Set,P=new Map,J={};for(let[G,H]of V){(!Yn.test(G)||!Object.prototype.hasOwnProperty.call(K,G))&&f("NATIVE_WORKFLOW_NAMED_OPERATION_INPUT_INVALID",`${D}/inputs/${G}`);let he=`${D}/inputs/${G}`,Ot=m(H,he),Oe=h(Ot.source,`${he}/source`,32);if(["field","idempotency-key","current-user-reference","subject-id","subject-revision","requested-at"].includes(Oe)||f("NATIVE_WORKFLOW_NAMED_OPERATION_INPUT_INVALID",he),$(Ot,["source"],he,Oe==="field"?["fieldCode"]:!1),P.set(Oe,(P.get(Oe)||0)+1),Oe==="field"){let Ye=B(Ot.fieldCode,`${he}/fieldCode`);(x.has(Ye)||!u.has(Ye))&&f("NATIVE_WORKFLOW_NAMED_OPERATION_INPUT_INVALID",`${he}/fieldCode`),x.add(Ye),J[G]={source:Oe,fieldCode:Ye}}else J[G]={source:Oe}}([...Ie].some(G=>!(G in ie))||(P.get("idempotency-key")||0)!==1||!V.some(([G,H])=>m(H,`${D}/inputs/${G}`).source==="idempotency-key"&&Ie.has(G))||S==="create"&&((P.get("subject-id")||0)>0||(P.get("subject-revision")||0)>0)||S==="existing"&&((P.get("subject-id")||0)!==1||(P.get("subject-revision")||0)!==1))&&f("NATIVE_WORKFLOW_NAMED_OPERATION_INPUT_INVALID",`${D}/inputs`);let W=m(U.output,`${D}/output`);$(W,["subjectId"],`${D}/output`,["subjectRevision","processCommand"]);let me=m(m(Y.responseSchema,`${D}/operation/responseSchema`).properties,`${D}/operation/responseSchema/properties`);for(let G of["subjectId","subjectRevision","processCommand"]){if(W[G]===void 0)continue;let H=h(W[G],`${D}/output/${G}`,128);(!Yn.test(H)||!Object.prototype.hasOwnProperty.call(me,H))&&f("NATIVE_WORKFLOW_NAMED_OPERATION_OUTPUT_INVALID",`${D}/output/${G}`)}return{operationCode:k,method:"POST",path:M.path,requiredCapability:M.requiredCapability,requestSchemaDigest:M.requestSchemaDigest,responseSchemaDigest:M.responseSchemaDigest,inputs:J,output:{...W},fieldCodes:x}},A=a.create===void 0?void 0:d(a.create,"create"),N=a.existing===void 0?void 0:d(a.existing,"existing");!A&&!N&&f("NATIVE_WORKFLOW_NAMED_OPERATION_SUBMISSION_INVALID",`${o}/submission`);let I=new Set([...A?.fieldCodes||[],...N?.fieldCodes||[]]),g=a.context===void 0?[]:R(a.context,`${o}/submission/context`,16),b=new Set,O=g.map((C,S)=>{let D=`${o}/submission/context/${S}`,U=m(C,D);$(U,["queryParameter","fieldCode"],D);let k=h(U.queryParameter,`${D}/queryParameter`,64),Y=B(U.fieldCode,`${D}/fieldCode`);return(!/^[A-Za-z][A-Za-z0-9]{0,63}$/.test(k)||b.has(k)||!I.has(Y))&&f("NATIVE_WORKFLOW_LAUNCH_CONTEXT_INVALID",D),b.add(k),{queryParameter:k,fieldCode:Y}}),T=C=>{let{fieldCodes:S,...D}=C;return D};return{mode:i.mode,submission:{kind:"named-operation",...A?{create:T(A)}:{},...N?{existing:T(N)}:{},context:O}}}function Oo(e,t){let n=m(e,t);$(n,["desktop","mobile"],t);let o=w(n.desktop,`${t}/desktop`),s=w(n.mobile,`${t}/mobile`);return o===s&&f("NATIVE_WORKFLOW_DETAIL_ROUTE_DUPLICATE",t),{desktop:o,mobile:s}}function Xi(e,t){let n=new Set(t.map(_=>_.code)),o=new Map;e.data.resources.forEach((_,l)=>{let u=`/config/data/resources/${l}`,E=m(_,u);for(let[N,I]of Object.entries(E.fieldPolicies||{})){if(!Se(N))continue;let g=`${u}/fieldPolicies/${N}/read`,b=m(I,`${u}/fieldPolicies/${N}`);for(let O of F(b.read||[],g,2e3))n.has(O)||f("NATIVE_CAPABILITY_REFERENCE_MISSING",g)}if(((E.surface===void 0?{}:m(E.surface,`${u}/surface`)).mutationOwner||"native")==="native")return;let A=m(E.capabilities,`${u}/capabilities`);for(let N of["create","update","delete"])o.set(String(A[N]),N)});let s=new Set;for(let[_,l]of e.authz.roles.entries()){let u=`/config/authz/roles/${_}`,E=m(l,u);$(E,["code","name","description","capabilities"],u,!0);let d=w(E.code,`${u}/code`);s.has(d)&&f("NATIVE_ROLE_DUPLICATE",`${u}/code`),s.add(d),h(E.name,`${u}/name`,255);let A=F(E.capabilities,`${u}/capabilities`,2e3);for(let[N,I]of A.entries())o.has(I)&&f("NATIVE_DATA_SURFACE_MUTATION_GRANT_FORBIDDEN",`${u}/capabilities/${N}`,{operation:o.get(I)}),n.has(I)||f("NATIVE_CAPABILITY_REFERENCE_MISSING",`${u}/capabilities`)}let i=e.authz.authenticatedUserRoleCode===void 0?"":w(e.authz.authenticatedUserRoleCode,"/config/authz/authenticatedUserRoleCode");i&&!s.has(i)&&f("NATIVE_AUTHENTICATED_USER_ROLE_REFERENCE_MISSING","/config/authz/authenticatedUserRoleCode");let a=new Set,r=0;for(let[_,l]of e.perspectives.entries()){let u=`/config/perspectives/${_}`,E=m(l,u);$(E,["code","name","description","roleCodes","capabilityCodes","default"],u,!0);let d=w(E.code,`${u}/code`);a.has(d)&&f("NATIVE_PERSPECTIVE_DUPLICATE",`${u}/code`),a.add(d),h(E.name,`${u}/name`,255);let A=F(E.roleCodes,`${u}/roleCodes`,20);A.length<1&&f("NATIVE_PERSPECTIVE_ROLE_REQUIRED",`${u}/roleCodes`),A.forEach((g,b)=>{s.has(g)||f("NATIVE_PERSPECTIVE_ROLE_MISSING",`${u}/roleCodes/${b}`)});let N=j(e.authz.roles.filter(g=>A.includes(g.code)).flatMap(g=>g.capabilities)),I=F(E.capabilityCodes,`${u}/capabilityCodes`,2e3);Q(N)!==Q(I)&&f("NATIVE_PERSPECTIVE_CAPABILITY_PROJECTION_MISMATCH",`${u}/capabilityCodes`),E.default===!0?r+=1:E.default!==void 0&&f("NATIVE_PERSPECTIVE_DEFAULT_INVALID",`${u}/default`)}r>1&&f("NATIVE_PERSPECTIVE_DEFAULT_DUPLICATE","/config/perspectives");for(let[_,l]of e.backend.operations.entries()){let u=m(l,`/config/backend/operations/${_}`);n.has(u.capability)||f("NATIVE_CAPABILITY_REFERENCE_MISSING",`/config/backend/operations/${_}/capability`)}let c=new Set,p=new Set;for(let[_,l]of e.frontend.routes.entries()){let u=`/config/frontend/routes/${_}`,E=m(l,u),d=w(E.code,`${u}/code`);c.has(d)&&f("NATIVE_ROUTE_DUPLICATE",`${u}/code`),c.add(d);let A=ue(E.path,`${u}/path`);p.has(A)&&f("NATIVE_ROUTE_PATH_DUPLICATE",`${u}/path`),p.add(A);let N=un(E,u,e.appCode);N.capability&&!n.has(N.capability)&&f("NATIVE_CAPABILITY_REFERENCE_MISSING",`${u}/capability`);let I=E.access===void 0?void 0:m(E.access,`${u}/access`);for(let g of["allOf","anyOf"]){let b=I?.[g]===void 0?[]:R(I[g],`${u}/access/${g}`,50);for(let[O,T]of b.entries()){let C=Ce(T,`${u}/access/${g}/${O}`,e.appCode);n.has(C)||f("NATIVE_CAPABILITY_REFERENCE_MISSING",`${u}/access/${g}/${O}`)}}}if(e.frontend.admin.access!==void 0){let _=Ct(e.frontend.admin.access,"/config/frontend/admin/access",e.appCode);for(let l of["allOf","anyOf"])for(let[u,E]of(_[l]||[]).entries())n.has(E)||f("NATIVE_CAPABILITY_REFERENCE_MISSING",`/config/frontend/admin/access/${l}/${u}`)}for(let[_,l]of e.frontend.routes.entries()){let u=m(l,`/config/frontend/routes/${_}`);u.parentCode&&!c.has(u.parentCode)&&f("NATIVE_ROUTE_PARENT_MISSING",`/config/frontend/routes/${_}/parentCode`)}}function Qi(e){let t=new Set(e.authz.roles.map(p=>String(p.code))),n=e.authz.authenticatedUserRoleCode===void 0?"":w(e.authz.authenticatedUserRoleCode,"/config/authz/authenticatedUserRoleCode"),o=new Map(e.authz.scopeDimensions.map(p=>[String(p.code),{valueType:p.valueType==="uuid"?"uuid":"string",...p.valueSource?.resourceCode?{valueSourceResourceCode:String(p.valueSource.resourceCode)}:{}}])),s=new Set(o.keys()),i=new Map(e.data.resources.map((p,_)=>{let l=Re(p,`/config/data/resources/${_}`,e.appCode);return[l.code,new Map(l.schema.fields.map(u=>[String(u.code),u]))]}));for(let[p,_]of e.authz.scopeDimensions.entries()){let l=`/config/authz/scopeDimensions/${p}`,u=m(_,l);if($(u,["code","name","resourceCode","valueType","hierarchyMode","valueSource"],l,!0),u.valueSource===void 0)continue;let E=m(u.valueSource,`${l}/valueSource`);$(E,["kind","resourceCode","labelField","enabledField"],`${l}/valueSource`,!0),E.kind!=="native_resource"&&f("NATIVE_SCOPE_VALUE_SOURCE_KIND_INVALID",`${l}/valueSource/kind`),u.valueType!=="uuid"&&f("NATIVE_SCOPE_VALUE_SOURCE_TYPE_INVALID",`${l}/valueType`);let d=z(E.resourceCode,`${l}/valueSource/resourceCode`),A=i.get(d);A||f("NATIVE_SCOPE_VALUE_SOURCE_RESOURCE_MISSING",`${l}/valueSource/resourceCode`);let N=B(E.labelField,`${l}/valueSource/labelField`);if(["text.short","text.long"].includes(String(A.get(N)?.type||""))||f("NATIVE_SCOPE_VALUE_SOURCE_LABEL_FIELD_INVALID",`${l}/valueSource/labelField`),E.enabledField!==void 0){let I=B(E.enabledField,`${l}/valueSource/enabledField`);A.get(I)?.type!=="boolean"&&f("NATIVE_SCOPE_VALUE_SOURCE_ENABLED_FIELD_INVALID",`${l}/valueSource/enabledField`)}}let a=new Set,r=new Set;for(let[p,_]of e.authz.scopeSources.entries()){let l=`/config/authz/scopeSources/${p}`,u=m(_,l);$(u,["code","name","resourceCode","subject","grants","operationField","enabledField","effectiveFromField","effectiveToField","failureMode"],l,!0);let E=w(u.code,`${l}/code`);a.has(E)&&f("NATIVE_SCOPE_SOURCE_DUPLICATE",`${l}/code`),a.add(E),h(u.name,`${l}/name`,255);let d=z(u.resourceCode,`${l}/resourceCode`),A=i.get(d);A||f("NATIVE_SCOPE_SOURCE_RESOURCE_MISSING",`${l}/resourceCode`);let N=m(u.subject,`${l}/subject`),I=h(N.type,`${l}/subject/type`,32);$(N,I==="role_membership"?["type","userIdField","roleCode"]:["type","userIdField"],`${l}/subject`),["user","role_membership"].includes(I)||f("NATIVE_SCOPE_SOURCE_SUBJECT_INVALID",`${l}/subject/type`);let g=Fe(N.userIdField,A);ut(g)||f("NATIVE_SCOPE_SOURCE_SUBJECT_PATH_INVALID",`${l}/subject/userIdField`),I==="role_membership"&&!t.has(String(N.roleCode))&&f("NATIVE_ROLE_REFERENCE_MISSING",`${l}/subject/roleCode`);let b=new Set;for(let[O,T]of R(u.grants,`${l}/grants`,100).entries()){let C=`${l}/grants/${O}`,S=m(T,C);$(S,["dimensionCode","valueField","parentValueField"],C,!0);let D=w(S.dimensionCode,`${C}/dimensionCode`);(!s.has(D)||b.has(D))&&f("NATIVE_SCOPE_SOURCE_DIMENSION_INVALID",`${C}/dimensionCode`),b.add(D),u.failureMode==="last_known_good"&&r.add(D);for(let U of["valueField","parentValueField"]){if(S[U]===void 0)continue;let k=Fe(S[U],A);qt(k,o.get(D),i)||f("NATIVE_SCOPE_SOURCE_GRANT_PATH_INVALID",`${C}/${U}`)}}b.size===0&&f("NATIVE_SCOPE_SOURCE_GRANT_REQUIRED",`${l}/grants`),["strict","last_known_good"].includes(u.failureMode)||f("NATIVE_SCOPE_SOURCE_FAILURE_MODE_INVALID",`${l}/failureMode`);for(let O of["operationField","enabledField","effectiveFromField","effectiveToField"]){if(u[O]===void 0)continue;let T=B(u[O],`${l}/${O}`);A.has(T)||f("NATIVE_SCOPE_SOURCE_FIELD_MISSING",`${l}/${O}`)}}er(e,t,i,n);let c=new Set;for(let[p,_]of e.authz.dataPolicies.entries()){let l=`/config/authz/dataPolicies/${p}`,u=m(_,l);$(u,["code","name","resourceCode","unrestrictedRoleCodes","operations","matchMode","rules","readExpression","writeBoundary"],l,!0);let E=w(u.code,`${l}/code`);c.has(E)&&f("NATIVE_DATA_POLICY_DUPLICATE",`${l}/code`),c.add(E);let d=u.readExpression!==void 0,A=F(u.operations||[],`${l}/operations`,4);u.operations!==void 0&&(A.length===0||A.some(T=>!["read","create","update","delete"].includes(T)))&&f("NATIVE_DATA_POLICY_OPERATIONS_INVALID",`${l}/operations`),["AND","OR"].includes(u.matchMode)||f("NATIVE_DATA_POLICY_MATCH_MODE_INVALID",`${l}/matchMode`),d&&u.operations!==void 0&&f("NATIVE_DATA_POLICY_READ_EXPRESSION_OPERATIONS_FORBIDDEN",`${l}/operations`);let N=e.data.resources.find(T=>T.dataPolicyCode===E),I=u.resourceCode||N?.code,g=I?i.get(z(I,`${l}/resourceCode`)):void 0;d&&!g&&f("NATIVE_DATA_POLICY_RESOURCE_MISSING",`${l}/resourceCode`);let b=F(u.unrestrictedRoleCodes||[],`${l}/unrestrictedRoleCodes`,100);u.unrestrictedRoleCodes!==void 0&&b.length===0&&f("NATIVE_DATA_POLICY_UNRESTRICTED_ROLES_INVALID",`${l}/unrestrictedRoleCodes`);for(let T of b)t.has(T)||f("NATIVE_ROLE_REFERENCE_MISSING",`${l}/unrestrictedRoleCodes`);let O;try{let T=R(u.rules,`${l}/rules`,100).map((C,S)=>({rule:m(C,`${l}/rules/${S}`),pointer:`${l}/rules/${S}`}));T.length===0?(!d||u.matchMode!=="AND"||u.writeBoundary!=="capability_only")&&f("NATIVE_DATA_POLICY_WRITE_BOUNDARY_REQUIRED",l):u.writeBoundary!==void 0&&f("NATIVE_DATA_POLICY_WRITE_BOUNDARY_INVALID",`${l}/writeBoundary`),O=[...T],d&&(O.push(...We(u.readExpression,`${l}/readExpression`)),on(u.readExpression,`${l}/readExpression`))}catch(T){throw T instanceof ve&&f(T.code,T.pointer),T}for(let{rule:T,pointer:C}of O){$(T,["subject","dimensionCode","relationCode","resourceCode","field","roleCodes","operation","valuePath","emptyMatchesAll","operator","value","operand"],C,!0);let S=B(T.field,`${C}/field`),D=g?.get(S);d&&!D&&f("NATIVE_DATA_POLICY_FIELD_MISSING",`${C}/field`);for(let K of F(T.roleCodes||[],`${C}/roleCodes`,100))t.has(K)||f("NATIVE_ROLE_REFERENCE_MISSING",`${C}/roleCodes`);let U=String(T.operator||""),k=T.operand==="db_now",Y=["is_null","is_not_null"].includes(U),M=["eq","not_eq","in","not_in"].includes(U),fe=!k&&(T.operator!==void 0||T.value!==void 0);if([T.subject==="current_user"?"current_user":"",typeof T.dimensionCode=="string"?"dimension":"",typeof T.relationCode=="string"?"relationship":"",fe?"constant":"",k?"db_now":""].filter(Boolean).length!==1&&f("NATIVE_DATA_POLICY_RULE_SOURCE_INVALID",C),T.subject!==void 0&&T.subject!=="current_user"&&f("NATIVE_DATA_POLICY_SUBJECT_INVALID",`${C}/subject`),fe){if(!M&&!Y&&f("NATIVE_DATA_POLICY_OPERATOR_INVALID",`${C}/operator`),["in","not_in"].includes(U)){let K=R(T.value,`${C}/value`,100).map((Ie,ie)=>h(Ie,`${C}/value/${ie}`,2048));(K.length===0||new Set(K).size!==K.length)&&f("NATIVE_DATA_POLICY_VALUE_INVALID",`${C}/value`)}else["eq","not_eq"].includes(U)?h(T.value,`${C}/value`,2048):(T.value!==void 0||T.operand!==void 0)&&f("NATIVE_DATA_POLICY_VALUE_INVALID",`${C}/value`);for(let K of["operation","valuePath","emptyMatchesAll","resourceCode","operand"])T[K]!==void 0&&f("NATIVE_DATA_POLICY_CONSTANT_RULE_INVALID",`${C}/${K}`)}if(k){(!["lt","lte","gt","gte"].includes(U)||T.value!==void 0||D?.type!=="datetime")&&f("NATIVE_DATA_POLICY_DB_NOW_INVALID",C);for(let K of["operation","valuePath","emptyMatchesAll","resourceCode","value"])T[K]!==void 0&&f("NATIVE_DATA_POLICY_DB_NOW_INVALID",`${C}/${K}`)}T.dimensionCode&&!s.has(T.dimensionCode)&&f("NATIVE_SCOPE_DIMENSION_MISSING",`${C}/dimensionCode`),r.has(String(T.dimensionCode||""))&&T.operation!=="read"&&f("NATIVE_SCOPE_SOURCE_LAST_KNOWN_GOOD_UNSAFE",`${C}/operation`)}}for(let[p,_]of e.data.resources.entries()){let l=m(_,`/config/data/resources/${p}`);l.dataPolicyCode&&!c.has(l.dataPolicyCode)&&f("NATIVE_DATA_POLICY_REFERENCE_MISSING",`/config/data/resources/${p}/dataPolicyCode`)}}function Zi(e){try{St(e.data.resources,"/config/data/resources")}catch(t){throw t instanceof de&&f(t.code,t.pointer),t}}function er(e,t,n,o){let s=new Set;for(let[i,a]of e.authz.roleMembershipSources.entries()){let r=`/config/authz/roleMembershipSources/${i}`,c=m(a,r);$(c,["code","name","resourceCode","userIdField","roleCode","enabledField","effectiveFromField","effectiveToField","failureMode"],r,!0);let p=w(c.code,`${r}/code`);p.length>100&&f("NATIVE_AUTHORIZATION_PROJECTION_SOURCE_CODE_INVALID",`${r}/code`),s.has(p)&&f("NATIVE_AUTHORIZATION_PROJECTION_SOURCE_DUPLICATE",`${r}/code`),s.add(p),h(c.name,`${r}/name`,255);let _=to(c.resourceCode,`${r}/resourceCode`,n);no(c.userIdField,`${r}/userIdField`,_),t.has(String(c.roleCode||""))||f("NATIVE_ROLE_REFERENCE_MISSING",`${r}/roleCode`),o&&c.roleCode===o&&f("NATIVE_AUTHENTICATED_USER_ROLE_SOURCE_CONFLICT",`${r}/roleCode`),oo(c,r,_)}for(let[i,a]of e.authz.relationshipGrantSources.entries()){let r=`/config/authz/relationshipGrantSources/${i}`,c=m(a,r);$(c,["code","name","resourceCode","subject","relationCode","targetResourceCode","resourceIdField","operations","enabledField","effectiveFromField","effectiveToField","failureMode"],r,!0);let p=w(c.code,`${r}/code`);p.length>100&&f("NATIVE_AUTHORIZATION_PROJECTION_SOURCE_CODE_INVALID",`${r}/code`),s.has(p)&&f("NATIVE_AUTHORIZATION_PROJECTION_SOURCE_DUPLICATE",`${r}/code`),s.add(p),h(c.name,`${r}/name`,255);let _=to(c.resourceCode,`${r}/resourceCode`,n),l=m(c.subject,`${r}/subject`),u=h(l.type,`${r}/subject/type`,32);$(l,u==="role_membership"?["type","userIdField","roleCode"]:["type","userIdField"],`${r}/subject`),["user","role_membership"].includes(u)||f("NATIVE_AUTHORIZATION_PROJECTION_SUBJECT_INVALID",`${r}/subject/type`),no(l.userIdField,`${r}/subject/userIdField`,_),u==="role_membership"&&!t.has(String(l.roleCode||""))&&f("NATIVE_ROLE_REFERENCE_MISSING",`${r}/subject/roleCode`),w(c.relationCode,`${r}/relationCode`);let E=z(c.targetResourceCode,`${r}/targetResourceCode`);n.has(E)||f("NATIVE_AUTHORIZATION_PROJECTION_TARGET_RESOURCE_MISSING",`${r}/targetResourceCode`);let d=Fe(c.resourceIdField,_),A=d?.field.type==="resource-ref.single"&&d.valuePath==="value"&&d.field.source?.resourceCode===E;(c.resourceIdField==="id"?E!==String(c.resourceCode):!A)&&f("NATIVE_AUTHORIZATION_PROJECTION_RESOURCE_ID_FIELD_INVALID",`${r}/resourceIdField`);let N=F(c.operations,`${r}/operations`,20);(N.length===0||N.some(I=>I.length>64||!/^[A-Za-z0-9][A-Za-z0-9:._*-]{0,63}$/.test(I)))&&f("NATIVE_AUTHORIZATION_PROJECTION_OPERATIONS_INVALID",`${r}/operations`),oo(c,r,_)}}function to(e,t,n){let o=z(e,t),s=n.get(o);return s||f("NATIVE_AUTHORIZATION_PROJECTION_RESOURCE_MISSING",t),s}function no(e,t,n){let o=Fe(e,n);ut(o)||f("NATIVE_AUTHORIZATION_PROJECTION_USER_FIELD_INVALID",t)}function oo(e,t,n){if(e.failureMode!=="strict"&&f("NATIVE_AUTHORIZATION_PROJECTION_FAILURE_MODE_INVALID",`${t}/failureMode`),e.enabledField!==void 0){let o=B(e.enabledField,`${t}/enabledField`);n.get(o)?.type!=="boolean"&&f("NATIVE_AUTHORIZATION_PROJECTION_ENABLED_FIELD_INVALID",`${t}/enabledField`)}for(let o of["effectiveFromField","effectiveToField"]){if(e[o]===void 0)continue;let s=B(e[o],`${t}/${o}`);["date","datetime"].includes(String(n.get(s)?.type))||f("NATIVE_AUTHORIZATION_PROJECTION_EFFECTIVE_FIELD_INVALID",`${t}/${o}`)}}function tr(e){let t=new Set,n=new Set;e.forEach((o,s)=>{let i=`/config/backend/secrets/${s}`,a=m(o,i);$(a,["name","env","description","required","exposure"],i,!0);let r=h(a.name,`${i}/name`,128),c=h(a.env,`${i}/env`,128);ti.test(r)||f("NATIVE_SECRET_NAME_INVALID",`${i}/name`),(!ni.test(c)||c.startsWith("OPENXIANGDA_")||["NODE_ENV","PORT"].includes(c))&&f("NATIVE_SECRET_ENV_INVALID",`${i}/env`),t.has(r)&&f("NATIVE_SECRET_NAME_DUPLICATE",`${i}/name`),n.has(c)&&f("NATIVE_SECRET_ENV_DUPLICATE",`${i}/env`),t.add(r),n.add(c),L(a.exposure,"active_only",`${i}/exposure`),a.required!==void 0&&xe(a.required,`${i}/required`),a.description!==void 0&&fn(a.description,`${i}/description`,2e3)})}function nr(e){let t=new Set,n=new Map,o=new Map(e.data.resources.map(u=>[String(u.code),u])),s=new Map(e.frontend.routes.map((u,E)=>{let d=m(u,`/config/frontend/routes/${E}`);return[w(d.code,`/config/frontend/routes/${E}/code`),d]}));for(let[u,E]of e.workflows.definitions.entries()){let d=`/config/workflows/definitions/${u}`,A=m(E,d);if($(A,["version","definition","launch"],d,["detailRouteCode"]),bo(A.launch,`${d}/launch`),A.detailRouteCode!==void 0){let b=Oo(A.detailRouteCode,`${d}/detailRouteCode`);for(let[O,T,C]of[["desktop",b.desktop,["admin","user"]],["mobile",b.mobile,["user"]]]){let S=`${d}/detailRouteCode/${O}`,D=s.get(T);D||f("NATIVE_WORKFLOW_DETAIL_ROUTE_MISSING",S),C.some(Y=>Y===D.surface)||f("NATIVE_WORKFLOW_DETAIL_ROUTE_SURFACE_INVALID",S);let U=ue(D.path,S),k=[...U.matchAll(/:([A-Za-z][A-Za-z0-9_]*)/g)].map(Y=>Y[1]);(U.includes("*")||k.length!==1||k[0]!=="instanceId")&&f("NATIVE_WORKFLOW_DETAIL_ROUTE_PATH_INVALID",S)}}let N=m(A.definition,`${d}/definition`),I=`${N.code}:${ke(A.version,`${d}/version`)}`;t.has(I)&&f("NATIVE_WORKFLOW_DEFINITION_DUPLICATE",d),t.add(I),sr(N,`${d}/definition`),or(N.subject,o,`${d}/definition/subject`);let g=tn(N,{appCode:e.appCode,capabilities:e.authz.capabilities.map(b=>b.code),fields:new Map((o.get(N.subject.resourceCode)?.schema.fields||[]).map(b=>[b.code,b]))});g.length&&f("NATIVE_WORKFLOW_INSTANCE_COMMAND_POLICY_INVALID",`${d}/definition/instanceCommands`,{errors:g}),N.title===N.code&&f("NATIVE_WORKFLOW_USER_TITLE_REQUIRED",`${d}/definition/title`),n.set(I,N)}let i=new Set,a=new Map;for(let[u,E]of e.workflows.bindings.entries()){let d=m(E,`/config/workflows/bindings/${u}`),A=m(d.binding,`/config/workflows/bindings/${u}/binding`),N=`${A.workflowCode}:${ke(d.version,`/config/workflows/bindings/${u}/version`)}`;i.has(N)&&f("NATIVE_WORKFLOW_BINDING_DUPLICATE",`/config/workflows/bindings/${u}`),i.add(N),ir(A,`/config/workflows/bindings/${u}/binding`),a.set(N,A)}let r=new Set,c=new Map;for(let[u,E]of e.workflows.activations.entries()){let d=`/config/workflows/activations/${u}`,A=m(E,d);$(A,["workflowCode","definitionVersion","bindingVersion","acceptedCommandDeactivationPolicy"],d,["environmentKey"]);let N=w(A.workflowCode,`${d}/workflowCode`);r.has(N)&&f("NATIVE_WORKFLOW_ACTIVATION_DUPLICATE",d),r.add(N);let I=`${N}:${ke(A.definitionVersion,`${d}/definitionVersion`)}`,g=`${N}:${ke(A.bindingVersion,`${d}/bindingVersion`)}`;t.has(I)||f("NATIVE_WORKFLOW_DEFINITION_REFERENCE_MISSING",`${d}/definitionVersion`),i.has(g)||f("NATIVE_WORKFLOW_BINDING_REFERENCE_MISSING",`${d}/bindingVersion`);let b=n.get(I),O=a.get(g);(!["finish-pinned","cancel-on-deactivate"].includes(A.acceptedCommandDeactivationPolicy)||A.acceptedCommandDeactivationPolicy!==b.acceptedCommandDeactivationPolicy)&&f("NATIVE_WORKFLOW_COMMAND_DEACTIVATION_POLICY_MISMATCH",`${d}/acceptedCommandDeactivationPolicy`),rr(b,O,`/config/workflows/activations/${u}`),c.set(N,O)}let p=new Set;e.workflows.providers.forEach((u,E)=>{let d=`/config/workflows/providers/${E}`,A=m(u,d);$(A,["code","endpointPath","timeoutMs"],d,!0);let N=w(A.code,`${d}/code`);p.has(N)&&f("NATIVE_WORKFLOW_PROVIDER_DUPLICATE",`${d}/code`),p.add(N),ue(A.endpointPath,`${d}/endpointPath`),A.timeoutMs!==void 0&&Z(A.timeoutMs,`${d}/timeoutMs`,100,1e4)});for(let[u,E]of c.entries())for(let[d,A]of Object.entries(m(E.bindings,"/config/workflows/bindings/*/binding/bindings"))){let N=m(A,`/config/workflows/${u}/bindings/${d}`);N.provider==="application_provider"&&!p.has(N.providerCode)&&f("NATIVE_WORKFLOW_PROVIDER_REFERENCE_MISSING",`/config/workflows/${u}/bindings/${d}/providerCode`)}let _=new Set(e.authz.roles.map(u=>u.code)),l=new Set;e.workflows.editableParameters.forEach((u,E)=>{let d=`/config/workflows/editableParameters/${E}`,A=m(u,d);$(A,["code","workflowCode","bindingKey","label","valueType","required","allowedRoleCodes","allowedProviderCodes","maxItems"],d,!0);let N=w(A.code,`${d}/code`);l.has(N)&&f("NATIVE_WORKFLOW_EDITABLE_PARAMETER_DUPLICATE",`${d}/code`),l.add(N);let I=bt(A.workflowCode,`${d}/workflowCode`),g=pn(A.bindingKey,`${d}/bindingKey`),b=c.get(I);(!b||!m(b.bindings,`${d}/bindingKey`)[g])&&f("NATIVE_WORKFLOW_EDITABLE_BINDING_MISSING",`${d}/bindingKey`),h(A.label,`${d}/label`,255),["role_code","user_ids","provider_code"].includes(A.valueType)||f("NATIVE_WORKFLOW_EDITABLE_VALUE_TYPE_INVALID",`${d}/valueType`);for(let O of F(A.allowedRoleCodes||[],`${d}/allowedRoleCodes`,100))_.has(O)||f("NATIVE_ROLE_REFERENCE_MISSING",`${d}/allowedRoleCodes`);for(let O of F(A.allowedProviderCodes||[],`${d}/allowedProviderCodes`,100))p.has(O)||f("NATIVE_WORKFLOW_PROVIDER_REFERENCE_MISSING",`${d}/allowedProviderCodes`);A.required!==void 0&&xe(A.required,`${d}/required`),A.maxItems!==void 0&&Z(A.maxItems,`${d}/maxItems`,1,200)})}function or(e,t,n){let o=m(e,n);$(o,["resourceCode","factProjection"],n,["summaryFields"]);let s=z(o.resourceCode,`${n}/resourceCode`),i=t.get(s);i||f("NATIVE_WORKFLOW_SUBJECT_RESOURCE_MISSING",`${n}/resourceCode`);let a=new Set(R(m(i.schema,`${n}/resourceCode`).fields,`${n}/resourceCode`,500).map((p,_)=>B(m(p,`${n}/resourceCode/${_}`).code,`${n}/resourceCode/${_}`))),r=m(o.factProjection,`${n}/factProjection`),c=Object.entries(r);(c.length<1||c.length>64)&&f("NATIVE_WORKFLOW_SUBJECT_FACT_PROJECTION_INVALID",`${n}/factProjection`);for(let[p,_]of c){ii.test(p)||f("NATIVE_WORKFLOW_SUBJECT_FACT_KEY_INVALID",`${n}/factProjection/${p}`);let l=B(_,`${n}/factProjection/${p}`);a.has(l)||f("NATIVE_WORKFLOW_SUBJECT_FIELD_MISSING",`${n}/factProjection/${p}`)}if(o.summaryFields!==void 0){let p=F(o.summaryFields,`${n}/summaryFields`,ri).map((d,A)=>B(d,`${n}/summaryFields/${A}`)),_=t.get(s),l=_.surface&&typeof _.surface=="object"&&!Array.isArray(_.surface)?_.surface:{},u=l.fields&&typeof l.fields=="object"&&!Array.isArray(l.fields)?l.fields:{},E=new Map(R(m(_.schema,`${n}/resourceCode`).fields,`${n}/resourceCode`,500).map((d,A)=>{let N=m(d,`${n}/resourceCode/${A}`);return[String(N.code),N]}));for(let[d,A]of p.entries()){let N=E.get(A),I=u[A],g=String(N?.type||""),b=N?.maxLength;(!N||N.system===!0||I&&typeof I=="object"&&!Array.isArray(I)&&I.system===!0||["id","revision","created_by","updated_by","created_at","updated_at"].includes(A)||!ci.has(g)||g==="text.long"&&typeof b=="number"&&Number.isFinite(b)&&b>ai)&&f("NATIVE_WORKFLOW_SUBJECT_SUMMARY_FIELDS_INVALID",`${n}/summaryFields/${d}`)}}}function sr(e,t){$(e,["schemaVersion","code","title","subject","acceptedCommandDeactivationPolicy","startAt","inputSchema","nodes"],t,["organizationContext","instanceCommands"]),L(e.schemaVersion,"openxiangda.workflow-definition/v2",`${t}/schemaVersion`),bt(e.code,`${t}/code`),h(e.title,`${t}/title`,255),["finish-pinned","cancel-on-deactivate"].includes(e.acceptedCommandDeactivationPolicy)||f("NATIVE_WORKFLOW_COMMAND_DEACTIVATION_POLICY_REQUIRED",`${t}/acceptedCommandDeactivationPolicy`);let n=m(e.nodes,`${t}/nodes`),o=Object.keys(n);(o.length===0||o.length>200)&&f("NATIVE_WORKFLOW_NODE_COUNT_INVALID",`${t}/nodes`);let s=h(e.startAt,`${t}/startAt`,128);n[s]||f("NATIVE_WORKFLOW_START_NODE_MISSING",`${t}/startAt`);let i=new Map;for(let[p,_]of Object.entries(n)){let l=`${t}/nodes/${p}`,u=m(_,l);L(u.id,p,`${l}/id`),["approval","condition","end"].includes(u.kind)||f("NATIVE_WORKFLOW_NODE_KIND_INVALID",`${l}/kind`);let E=[];if(u.kind==="approval"){h(u.title,`${l}/title`,255),pn(u.binding,`${l}/binding`),["single","any","all","sequence"].includes(u.mode)||f("NATIVE_WORKFLOW_APPROVAL_MODE_INVALID",`${l}/mode`),E.push(h(u.onApprove,`${l}/onApprove`,128),h(u.onReject,`${l}/onReject`,128));for(let d of F(u.returnTargets||[],`${l}/returnTargets`,200))n[d]||f("NATIVE_WORKFLOW_TARGET_MISSING",`${l}/returnTargets`);for(let d of F(u.allowedOperations||[],`${l}/allowedOperations`,20))li.has(d)||f("NATIVE_WORKFLOW_OPERATION_INVALID",`${l}/allowedOperations`)}else if(u.kind==="condition"){let d=R(u.branches,`${l}/branches`,100);d.length===0&&f("NATIVE_WORKFLOW_BRANCH_REQUIRED",`${l}/branches`),d.forEach((A,N)=>{let I=m(A,`${l}/branches/${N}`);ze(I.when,`${l}/branches/${N}/when`,0),E.push(h(I.target,`${l}/branches/${N}/target`,128))}),E.push(h(u.otherwise,`${l}/otherwise`,128))}else h(u.title,`${l}/title`,255),h(u.outcome,`${l}/outcome`,128);for(let d of E)n[d]||f("NATIVE_WORKFLOW_TARGET_MISSING",l);i.set(p,E)}let a=new Set,r=new Set,c=p=>{if(r.has(p)&&f("NATIVE_WORKFLOW_CYCLE_FORBIDDEN",`${t}/nodes/${p}`),!a.has(p)){a.add(p),r.add(p);for(let _ of i.get(p)||[])c(_);r.delete(p)}};c(s),a.size!==o.length&&f("NATIVE_WORKFLOW_NODE_UNREACHABLE",`${t}/nodes`)}function ze(e,t,n){n>20&&f("NATIVE_WORKFLOW_EXPRESSION_DEPTH_EXCEEDED",t);let o=m(e,t),s=h(o.op,`${t}/op`,16);if(s!=="literal"){if(s==="path"){let i=h(o.path,`${t}/path`,255);/^[A-Za-z][A-Za-z0-9_.]{0,254}$/.test(i)||f("NATIVE_WORKFLOW_EXPRESSION_PATH_INVALID",`${t}/path`);return}if(["eq","neq","gt","gte","lt","lte","in","contains"].includes(s)){ze(o.left,`${t}/left`,n+1),ze(o.right,`${t}/right`,n+1);return}if(["and","or"].includes(s)){let i=R(o.values,`${t}/values`,100);i.length===0&&f("NATIVE_WORKFLOW_EXPRESSION_EMPTY",`${t}/values`),i.forEach((a,r)=>ze(a,`${t}/values/${r}`,n+1));return}if(["not","exists"].includes(s)){ze(o.value,`${t}/value`,n+1);return}f("NATIVE_WORKFLOW_EXPRESSION_OPERATOR_INVALID",`${t}/op`)}}function ir(e,t){L(e.schemaVersion,"openxiangda.workflow-binding/v2",`${t}/schemaVersion`),bt(e.workflowCode,`${t}/workflowCode`);let n=m(e.bindings,`${t}/bindings`);Object.keys(n).length>200&&f("NATIVE_WORKFLOW_BINDING_LIMIT_EXCEEDED",`${t}/bindings`);for(let[o,s]of Object.entries(n)){pn(o,`${t}/bindings/${o}`);let i=m(s,`${t}/bindings/${o}`),a=h(i.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)||f("NATIVE_WORKFLOW_BINDING_PROVIDER_INVALID",`${t}/bindings/${o}/provider`),a==="fixed_users"&&R(i.users,`${t}/bindings/${o}/users`,200).length===0&&f("NATIVE_WORKFLOW_BINDING_USERS_REQUIRED",`${t}/bindings/${o}/users`),["input_users","form_field_users"].includes(a)&&h(i.inputPath,`${t}/bindings/${o}/inputPath`,255),["app_role","app_role_in_scope","initiator_select"].includes(a)&&w(i.roleCode,`${t}/bindings/${o}/roleCode`),a==="department_supervisor"&&h(i.departmentIdFrom,`${t}/bindings/${o}/departmentIdFrom`,255),a==="application_provider"&&w(i.providerCode,`${t}/bindings/${o}/providerCode`)}}function rr(e,t,n){L(t.workflowCode,e.code,`${n}/workflowCode`);let o=m(t.bindings,`${n}/bindings`);for(let[s,i]of Object.entries(m(e.nodes,`${n}/nodes`))){let a=m(i,`${n}/nodes/${s}`);a.kind==="approval"&&!o[a.binding]&&f("NATIVE_WORKFLOW_BINDING_REFERENCE_MISSING",`${n}/nodes/${s}/binding`)}}function ar(e,t,n){let o=m(t.routeManifest,"/contracts/routeManifest"),s=m(e.routeManifest,"/contracts/routeManifest"),i=new Map;for(let _ of R(n.data?.resources,"/config/data/resources",100)){let l=m(_,"/config/data/resources");i.set(String(l.code||""),l)}let a=new Set(R(s.routes,"/contracts/routeManifest/routes",1e3).map(_=>String(m(_,"/contracts/routeManifest/routes").code||""))),r=[];for(let _ of R(o.routes,"/contracts/routeManifest/routes",1e3)){let l=m(_,"/contracts/routeManifest/routes"),u=String(l.kind||"");if(u!=="resource-records"&&u!=="resource-submit")continue;let E=String(l.resourceCode||""),d=i.get(E);d||f("NATIVE_ROUTE_MANIFEST_RESOURCE_UNKNOWN","/contracts/routeManifest/routes");let N=`user.${E}.${u==="resource-records"?"records":"submit"}`;L(String(l.code||""),N,"/contracts/routeManifest/routes/code");let I=u==="resource-records"?"read":"create",g=String(m(d.capabilities,"/config/data/resources/capabilities")[I]||"");for(let b of["desktop","mobile"]){let O=m(l[b],`/contracts/routeManifest/routes/${b}`),T=b==="mobile"?"/m/my/":"/my/",C=u==="resource-records"?`${T}${E}`:`${T}${E}/submit`;L(String(O.path||""),C,`/contracts/routeManifest/routes/${b}/path`),L(String(O.capability||""),g,`/contracts/routeManifest/routes/${b}/capability`),L(String(O.routeCode||""),`${N}.${b}`,`/contracts/routeManifest/routes/${b}/routeCode`)}(a.has(N)||r.some(b=>String(b.code)===N))&&f("NATIVE_ROUTE_MANIFEST_DUPLICATE","/contracts/routeManifest/routes/code"),r.push(l)}if(!r.length)return;s.routes=R([...s.routes,...r],"/contracts/routeManifest/routes",1e3).sort((_,l)=>ae(String(m(_,"x").code||""),String(m(l,"x").code||"")));let c=String(m(o.rootEntry,"x").code||"");if(r.find(_=>String(_.code)===c&&_.kind==="resource-records")){let _=m(o.rootEntry,"x");s.rootEntry={code:c,desktop:String(_.desktop||""),mobile:String(_.mobile||"")}}s.digest=ee({schemaVersion:s.schemaVersion,appCode:s.appCode,devicePolicy:s.devicePolicy,rootEntry:s.rootEntry,authentication:s.authentication,routes:s.routes})}function Re(e,t,n){let o=m(e,t);$(o,["schemaVersion","appCode","code","name","schema","surface","invariants","decimalReservationLifecycle","uniqueKeys","capabilities","dataPolicyCode","fieldPolicies"],t,!0),L(o.schemaVersion,"openxiangda.data-resource/v2",`${t}/schemaVersion`),L(o.appCode,n,`${t}/appCode`);let s=z(o.code,`${t}/code`),i=h(o.name,`${t}/name`,255),a=m(o.schema,`${t}/schema`);$(a,["fields"],`${t}/schema`);let r,c,p,_;try{p=at(o.decimalReservationLifecycle,`${t}/decimalReservationLifecycle`),r=Qe(a.fields,`${t}/schema/fields`),_=Qt(o.uniqueKeys,r,`${t}/uniqueKeys`),c=Dt(o.invariants,r,`${t}/invariants`),ot(o.surface,r,`${t}/surface`)}catch(d){throw(d instanceof de||d instanceof $e||d instanceof Pe)&&f(d.code,d.pointer),d}let l=new Set(r.map(d=>d.code)),u=m(o.capabilities,`${t}/capabilities`);$(u,["read","create","update","delete"],`${t}/capabilities`);let E=m(o.fieldPolicies,`${t}/fieldPolicies`);for(let[d,A]of Object.entries(E)){!l.has(d)&&!Se(d)&&f("NATIVE_DATA_FIELD_POLICY_FIELD_MISSING",`${t}/fieldPolicies/${d}`);let N=`${t}/fieldPolicies/${d}`,I=m(A,N);Se(d)&&($(I,["read"],N,!0),(!Array.isArray(I.read)||I.read.length>20||I.read.some(g=>typeof g!="string"||!g.trim())||new Set(I.read).size!==I.read.length)&&f("NATIVE_DATA_AUDIT_READ_POLICY_INVALID",`${N}/read`)),$(I,["read","create","update","mask"],N,!0),I.mask!==void 0&&!["omit","null"].includes(I.mask)&&f("NATIVE_DATA_FIELD_POLICY_MASK_INVALID",`${N}/mask`)}return{...o,code:s,name:i,schema:{fields:r},...o.invariants===void 0?{}:{invariants:c},...p?{decimalReservationLifecycle:p}:{},..._!==void 0?{uniqueKeys:_}:{},capabilities:u,fieldPolicies:E}}function $o(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 so(e,t,n,o){let s=e.toString("utf8"),i;try{i=JSON.parse(s)}catch{f(n,t)}let a=m(i,t);return Q(a)!==s&&f(o,t),a}function io(e,t){let n=0,o=(s,i,a)=>{if(n+=1,n>_i&&f("NATIVE_ARTIFACT_NODE_LIMIT_EXCEEDED",i),a>pi&&f("NATIVE_ARTIFACT_DEPTH_LIMIT_EXCEEDED",i),typeof s=="string"){Buffer.byteLength(s)>rn&&f("NATIVE_ARTIFACT_STRING_LIMIT_EXCEEDED",i);return}if(Array.isArray(s)){s.forEach((r,c)=>o(r,`${i}/${c}`,a+1));return}if(!(!s||typeof s!="object"))for(let[r,c]of Object.entries(s))["__proto__","prototype","constructor"].includes(r)&&f("NATIVE_ARTIFACT_DANGEROUS_KEY",`${i}/${r}`),cr(r)&&f("NATIVE_ARTIFACT_RUNTIME_FIELD_FORBIDDEN",`${i}/${r}`),o(c,`${i}/${r}`,a+1)};o(e,t,0)}function cr(e){return["environmentKey","environmentId","secretValue","ciphertext","oauthClient","oauthClientId","oauthClientSecret","signingSecret","kubernetesNamespace","nodePort","productionUrl"].includes(e)}function Le(e){return{value:e,digest:ee(e)}}function ro(e,t,n,o){typeof e!="string"&&!Buffer.isBuffer(e)&&!(e instanceof Uint8Array)&&f("NATIVE_ARTIFACT_BYTES_REQUIRED",n);let s=Buffer.isBuffer(e)?e:Buffer.from(e);return s.byteLength===0&&f("NATIVE_ARTIFACT_EMPTY",n),s.byteLength>t&&f(o,n),s}function ao(e,t,n,o){let s=gt.createHash("sha256").update(e).digest("hex");gt.timingSafeEqual(Buffer.from(s),Buffer.from(t))||f(o,n)}function m(e,t){return(!e||typeof e!="object"||Array.isArray(e))&&f("NATIVE_OBJECT_REQUIRED",t),e}function R(e,t,n){return Array.isArray(e)||f("NATIVE_ARRAY_REQUIRED",t),e.length>n&&f("NATIVE_ARRAY_LIMIT_EXCEEDED",t),e}function F(e,t,n){let o=R(e,t,n).map((s,i)=>h(s,`${t}/${i}`,255));return new Set(o).size!==o.length&&f("NATIVE_ARRAY_DUPLICATE",t),o}function h(e,t,n){return(typeof e!="string"||e.length===0||e.length>n)&&f("NATIVE_STRING_INVALID",t),e}function fn(e,t,n){return(typeof e!="string"||e.length>n)&&f("NATIVE_STRING_INVALID",t),e}function w(e,t){let n=h(e,t,128);return Xs.test(n)||f("NATIVE_CODE_INVALID",t),n}function z(e,t){let n=h(e,t,64);return Zs.test(n)||f("NATIVE_RESOURCE_CODE_INVALID",t),n}function B(e,t){let n=h(e,t,63);return ei.test(n)||f("NATIVE_FIELD_CODE_INVALID",t),n}function bt(e,t){let n=h(e,t,128);return oi.test(n)||f("NATIVE_WORKFLOW_CODE_INVALID",t),n}function pn(e,t){let n=h(e,t,128);return si.test(n)||f("NATIVE_WORKFLOW_BINDING_CODE_INVALID",t),n}function Ce(e,t,n){let o=h(e,t,255);return Hs.test(o)||f("NATIVE_CAPABILITY_CODE_INVALID",t),!o.startsWith(`app:${n}:`)&&!$o(n).some(s=>s.code===o)&&f("NATIVE_CAPABILITY_APP_MISMATCH",t),o}function ue(e,t){let n=h(e,t,2048);return(!n.startsWith("/")||n.startsWith("//")||n.includes("..")||n.includes("?")||n.includes("#"))&&f("NATIVE_ABSOLUTE_PATH_INVALID",t),n}function ke(e,t){return(!Number.isInteger(e)||Number(e)<1)&&f("NATIVE_POSITIVE_INTEGER_REQUIRED",t),Number(e)}function Z(e,t,n,o){return(!Number.isInteger(e)||Number(e)<n||Number(e)>o)&&f("NATIVE_INTEGER_OUT_OF_RANGE",t),Number(e)}function xe(e,t){return typeof e!="boolean"&&f("NATIVE_BOOLEAN_REQUIRED",t),e}function cn(e,t){let n=h(e,t,64).toLowerCase();return qs.test(n)||f("NATIVE_DIGEST_INVALID",t),n}function L(e,t,n){e!==t&&f("NATIVE_VALUE_MISMATCH",n)}function $(e,t,n,o=!1){let s=new Set([...t,...Array.isArray(o)?o:[]]);for(let i of Object.keys(e))s.has(i)||f("NATIVE_PROPERTY_UNKNOWN",`${n}/${i}`);if(o!==!0)for(let i of t)Object.prototype.hasOwnProperty.call(e,i)||f("NATIVE_PROPERTY_REQUIRED",`${n}/${i}`)}function X(e,t){return[...e].sort((n,o)=>ae(t(n),t(o)))}function j(e){return[...new Set(e)].sort(ae)}function co(e){return[...new Set(e)].sort((t,n)=>t-n)}function ae(e,t){return e===t?0:e<t?-1:1}function Ro(e){return!e||typeof e!="object"||Object.isFrozen(e)||(Object.freeze(e),Object.values(e).forEach(t=>Ro(t))),e}function dn(e,t,n){if(sn(e,t))return n;if(Array.isArray(e)&&Array.isArray(t)){let o=Math.max(e.length,t.length);for(let s=0;s<o;s+=1)if(!sn(e[s],t[s]))return dn(e[s],t[s],`${n}/${s}`)}if(e&&t&&typeof e=="object"&&typeof t=="object"&&!Array.isArray(e)&&!Array.isArray(t)){let o=j([...Object.keys(e),...Object.keys(t)]);for(let s of o){let i=e[s],a=t[s];if(!sn(i,a))return dn(i,a,`${n}/${s}`)}}return n}function sn(e,t){return e===void 0||t===void 0?e===t:Q(e)===Q(t)}function f(e,t,n={}){throw new It(e,t,n)}var dr="c703c0438d4ed1a3d5aef896868a91b5e18985649ec35ca9f4b3de9bc9faabb7";0&&(module.exports={DATA_AUDIT_METADATA_FIELDS,DATA_EVENT_TYPES_V2,DATA_SYSTEM_SORT_FIELD_CODES,NATIVE_CONFIGURATION_VALIDATOR_DIGEST,NATIVE_CONTRACT_CAPACITY_V2,NATIVE_DATA_POLICY_EXPRESSION_MAX_CLAUSES,NATIVE_DATA_POLICY_EXPRESSION_MAX_DEPTH,NATIVE_DATA_POLICY_EXPRESSION_MAX_GROUP_ITEMS,NATIVE_DATA_POLICY_EXPRESSION_MAX_LEAVES,NATIVE_DATA_POLICY_EXPRESSION_MAX_OCCURRENCES,NATIVE_DATA_QUERY_OPERATORS_V2,NATIVE_UNIQUE_KEY_MAX_BYTES,NATIVE_UNIQUE_KEY_NORMALIZERS,NativeConfigurationCompilerError,NativeDataFieldContractV2Error,NativeDataPolicyExpressionV2Error,NativeDecimalLifecycleContractError,NativeEventActionContractError,NativeScopeSourceFieldPathV2Error,NativeUniqueKeyContractError,OPENXIANGDA_NATIVE_DATA_FIELD_TYPES_V2,OPENXIANGDA_NATIVE_DATA_SURFACE_KEYS_V2,OPENXIANGDA_NATIVE_DRAFT_STATE_KEYS_V2,OPENXIANGDA_NATIVE_SYSTEM_FIELDS_V2,OPENXIANGDA_NATIVE_SYSTEM_FIELD_MAP_V2,WORKFLOW_EVENT_TYPES_V2,compileNativeApplicationConfiguration,compileNativeEventAction,compileNativeEventCapturePlansV2,compileRequiredPlatformCapabilitiesV3,hasDataAuditReadPolicy,isDataAuditMetadataField,isDataSystemSortField,isNativeDataQueryOperatorV2,isNativeMultiValueFieldV2,materializeNativeDataQueryPathTypesV2,nativeDataPolicyExpressionLeavesV2,nativeDataPolicyExpressionToCnfV2,nativeDataQueryPathPlanV2,nativeFieldAggregatePlanV2,nativeFieldColumnDefinitionV2,nativeFieldDefaultSqlV2,nativeFieldHasDefaultV2,nativeFieldIndexStatementsV2,nativeFieldRequiresCreateInputV2,nativeFieldSequenceGrantStatementsV2,nativeFieldSequenceOwnershipStatementsV2,nativeFieldSequenceStatementsV2,nativeFieldSupportsFilterV2,nativeFieldSupportsOperatorV2,nativeFieldSupportsSearchV2,nativeFieldSupportsSortV2,nativeOperatorsForFieldV2,nativePhysicalFieldV2,nativePhysicalFieldsV2,nativePhysicalObjectNameV2,nativeScopeSourceFieldValueV2,nativeScopeSourceGrantPathSupportedV2,nativeScopeSourceSubjectPathSupportedV2,nativeSubtableConstraintStatementsV2,nativeUniqueKeysJsonSchema,parseDecimalReservationLifecycle,parseNativeDataFieldsV2,parseNativeDataResourceInvariantsV2,parseNativeUniqueKeys,projectNativeDataResourceViewV2,quoteNativeIdentifierV2,resolveNativeScopeSourceFieldPathV2,validateDecimalReservationLifecycles,validateNativeDataDraftStateV2,validateNativeDataResourceReferencesV2,validateNativeDataResourceSurfaceV2,validateWorkflowInstanceCommandPolicies,workflowInstanceCommandDeadlineError,workflowInstanceTerminateCapabilityAllowed,workflowPolicyTimestamp});
|