openxiangda-contracts 2.32.0 → 2.33.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.
|
@@ -5,4 +5,4 @@ import{createHash as go}from"node:crypto";function No(e){if(!e||typeof e!="objec
|
|
|
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 Ce(e,...t){return`${e}_${Xo("sha256").update(t.join(":")).digest("hex").slice(0,32)}`}function se(e){if(!/^[A-Za-z_][A-Za-z0-9_]{0,62}$/.test(e))throw new Error("OPENXIANGDA_NATIVE_IDENTIFIER_INVALID");return`"${e}"`}function os(e,t){return e.type==="subtable"?"none":t?"gin-trigram":e.indexed?["date-range","datetime-range"].includes(e.type)?"gist-range":wt.has(e.type)?"btree-snapshot-expressions":Qo.has(e.type)?"gin-jsonb-path":"btree":"none"}function ss(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 bn(e,t){if(Ye(t.type)&&t.type!=="subtable")return"'[]'::jsonb";if(t.type!=="serial-number")return"";let o=Tn(t.serial?.prefix||""),n=t.serial?.digits??6;return`(${o} || lpad(nextval(${Tn(tt(e,t.code))})::text, ${n}, '0'))`}function is(e,t){return Cn.has(t.type)?` CHECK (${e} IS NULL OR jsonb_typeof(${e}) = 'array')`:Zo.has(t.type)?` CHECK (${e} IS NULL OR jsonb_typeof(${e}) = 'object')`:""}function et(e){return`"app_data".${se(e)}`}function tt(e,t){let o=Ce("seq",e,t);return`"app_data".${se(o)}`}function Tn(e){return`'${e.replace(/'/g,"''")}'`}var On=new Set(["option.single","option.multiple","user.single","user.multiple","department.single","department.multiple","resource-ref.single","resource-ref.multiple"]),rs=new Set([...On,"cascade.single","cascade.multiple","file","image","signature","address","location","json"]),yn=/^[A-Za-z][A-Za-z0-9_]{0,62}$/,as=new Set(["__proto__","prototype","constructor"]),Ft=class extends Error{constructor(o){super("OPENXIANGDA_SCOPE_PROJECTION_FIELD_PATH_INVALID");this.path=o;this.name="NativeScopeSourceFieldPathV2Error"}path;code="OPENXIANGDA_SCOPE_PROJECTION_FIELD_PATH_INVALID"};function xe(e,t){let o=Rn(e);if(!o)return null;let n=t.get(o[0]);if(!n)return null;let s=o.slice(1).join(".")||void 0;return{field:n,...s?{valuePath:s}:{}}}function vt(e){return!!(e&&e.field.type==="user.single"&&e.valuePath==="value")}function $n(e,t,o){if(!e||!t||!cs(e))return!1;let{field:n,valuePath:s}=e;if(!s)return t.valueType==="uuid"?n.type==="uuid":["text.short","text.long","serial-number"].includes(n.type);if(s==="value")return!(t.valueSourceResourceCode&&n.type.startsWith("resource-ref.")&&n.source?.resourceCode!==t.valueSourceResourceCode);let i=s.slice(9),r=o.get(n.source?.resourceCode||"")?.get(i)?.type;return t.valueType==="uuid"?r==="uuid":["text.short","text.long","serial-number"].includes(r||"")}function Ir(e,t){let o=Rn(t);if(!o)throw new Ft(String(t||""));let n=e;for(let s of o){if(!n||typeof n!="object"||!Object.prototype.hasOwnProperty.call(n,s))return;n=n[s]}return n}function cs(e){let{field:t,valuePath:o}=e;if(!o)return!rs.has(t.type);if(o==="value")return On.has(t.type);if(!o.startsWith("snapshot."))return!1;let n=o.slice(9);return yn.test(n)&&t.type.startsWith("resource-ref.")&&!!t.source?.snapshotFields?.includes(n)}function Rn(e){if(typeof e!="string"||e.length===0||e.length>192)return null;let t=e.split(".");return![1,2,3].includes(t.length)||t.some(o=>!yn.test(o)||as.has(o))||t.length===2&&t[1]!=="value"||t.length===3&&t[1]!=="snapshot"?null:t}var ds=new Set(["option.single","user.single","department.single","resource-ref.single"]),ls=new Set(["text.short","text.long","text.rich","number.integer","number.decimal","boolean","date","time","datetime","uuid","serial-number"]),us=new Set(["value","label","description","color"]),fs=new Set(["avatarUrl","employeeNo","title","mobile","email"]),ps=new Set(["fullPath","parent.value","parent.label"]),_s=new Set(["country.value","country.label","province.value","province.label","city.value","city.label","district.value","district.label","street.value","street.label","detail","fullAddress"]),Es=new Set(["longitude","latitude","accuracy"]),As=new Set(["address","name","province","city","district","source"]);function gr(e){let t=new Map(e.map(o=>[o.code,new Map(o.schema.fields.map(n=>[n.code,n]))]));return e.map(o=>({...o,schema:{...o.schema,fields:o.schema.fields.map(n=>{let s=Is(n,t);if(!Object.keys(s).length)return n;let i={...n};return Object.defineProperty(i,"queryPathTypes",{configurable:!1,enumerable:!1,writable:!1,value:Object.freeze(s)}),i})}}))}function Nr(e,t){if(ds.has(e.type)&&us.has(t)||e.type==="user.single"&&fs.has(t)||e.type==="department.single"&&ps.has(t))return Ue(t);if(e.type==="resource-ref.single"){let o=e.queryPathTypes?.[t];return o?{parts:t.split("."),type:o}:null}if(e.type==="address"&&_s.has(t))return Ue(t);if(e.type==="location"){if(Es.has(t))return{parts:[t],type:"number.decimal"};if(As.has(t))return Ue(t);if(t==="capturedAt")return{parts:[t],type:"datetime"}}return null}function Is(e,t){if(e.type!=="resource-ref.single"||!e.source)return{};let o=t.get(e.source.resourceCode);return o?Object.fromEntries((e.source.snapshotFields||[]).flatMap(n=>{let s=o.get(n);return s?[[`snapshot.${n}`,ls.has(s.type)?s.type:"json"]]:[]})):{}}function Ue(e){return{parts:e.split("."),type:"text.short"}}var hn=["exact-v1","nfkc-space-v1","nfkc-upper-ascii-v1"],Cr=256,je=class extends Error{constructor(o,n){super(`\u6761\u4EF6\u552F\u4E00\u952E\u58F0\u660E\u65E0\u6548\uFF1A${n}\uFF08${o}\uFF09`);this.pointer=o;this.reason=n}pointer;reason;code="NATIVE_UNIQUE_KEY_INVALID"},Pt=e=>!!(e&&typeof e=="object"&&!Array.isArray(e)),ne=(e,t)=>{throw new je(e,t)},nt=(e,t)=>e<t?-1:e>t?1:0,ot=(e,t,o)=>{Object.keys(e).some(n=>!t.includes(n))&&ne(o,"\u4E0D\u652F\u6301\u672A\u77E5\u5C5E\u6027")};function Sn(e,t,o="/uniqueKeys"){if(e===void 0)return;if(!Array.isArray(e)||e.length>8)return ne(o,"\u6BCF\u8D44\u6E90\u6700\u591A 8 \u6761\u89C4\u5219");let n=new Map(t.map(i=>[i.code,i])),s=new Set;return e.map((i,c)=>{let r=`${o}/${c}`;if(!Pt(i))return ne(r,"\u89C4\u5219\u5FC5\u987B\u662F\u5BF9\u8C61");if(ot(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 ne(`${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 ne(`${r}/fields`,"\u5FC5\u987B\u9009\u62E9 1 \u5230 4 \u4E2A\u5B57\u6BB5");let a=new Set,f=i.fields.map((m,l)=>{let A=`${r}/fields/${l}`;if(!Pt(m))return ne(A,"\u5B57\u6BB5\u5FC5\u987B\u662F\u5BF9\u8C61");ot(m,["fieldCode","normalizer"],A);let N=n.get(m.fieldCode);if(!N||!["text.short","uuid","option.single","resource-ref.single"].includes(N.type)||a.has(m.fieldCode))return ne(`${A}/fieldCode`,"\u9700\u8981\u4E0D\u91CD\u590D\u7684\u77ED\u6587\u672C\u3001UUID\u3001\u5355\u9009\u6216\u5355\u8BB0\u5F55\u5F15\u7528\u5B57\u6BB5");a.add(m.fieldCode);let _=m.normalizer===void 0?"exact-v1":m.normalizer;return!hn.includes(_)||N.type!=="text.short"&&_!=="exact-v1"?ne(`${A}/normalizer`,"\u5F52\u4E00\u5316\u65B9\u5F0F\u4E0D\u652F\u6301\u6216\u4E0E\u5B57\u6BB5\u7C7B\u578B\u4E0D\u7B26"):{fieldCode:N.code,normalizer:_}}).sort((m,l)=>nt(m.fieldCode,l.fieldCode)),E=i.when===void 0?[]:i.when;if(!Array.isArray(E)||E.length>4)return ne(`${r}/when`,"\u6700\u591A 4 \u4E2A\u5408\u53D6\u6761\u4EF6");let d=new Set,u=E.map((m,l)=>{let A=`${r}/when/${l}`;if(!Pt(m))return ne(A,"\u6761\u4EF6\u5FC5\u987B\u662F\u5BF9\u8C61");let N=n.get(m.fieldCode);if(!N)return ne(`${A}/fieldCode`,"\u5B57\u6BB5\u4E0D\u5B58\u5728");let _;if(m.operator==="empty"||m.operator==="nonempty"){if(ot(m,["fieldCode","operator"],A),N.type!=="text.short")return ne(A,"\u7A7A\u503C\u6761\u4EF6\u4EC5\u652F\u6301\u77ED\u6587\u672C");_={fieldCode:N.code,operator:m.operator}}else if(m.operator==="in"||m.operator==="notIn"){ot(m,["fieldCode","operator","values"],A);let T=new Set((N.options??[]).map(b=>b.value));if(N.type!=="option.single"||!Array.isArray(m.values)||m.values.length<1||m.values.length>16||m.values.some(b=>typeof b!="string"||b.length<1||b.length>128||!T.has(b))||new Set(m.values).size!==m.values.length)return ne(A,"\u96C6\u5408\u6761\u4EF6\u9700\u8981 1 \u5230 16 \u4E2A\u4E0D\u91CD\u590D\u7684\u5DF2\u58F0\u660E\u5355\u9009\u503C");_={fieldCode:N.code,operator:m.operator,values:[...m.values].sort(nt)}}else return ne(`${A}/operator`,"\u53EA\u652F\u6301 empty\u3001nonempty\u3001in \u548C notIn");let I=JSON.stringify(_);return d.has(I)?ne(A,"\u6761\u4EF6\u4E0D\u80FD\u91CD\u590D"):(d.add(I),_)}).sort((m,l)=>nt(JSON.stringify(m),JSON.stringify(l)));return{code:i.code,fields:f,when:u}}).sort((i,c)=>nt(i.code,c.code))}var Lt={type:"string",pattern:"^[A-Za-z_][A-Za-z0-9_]{0,62}$"},br={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:Lt,normalizer:{enum:[...hn]}}}},when:{type:"array",maxItems:4,uniqueItems:!0,items:{oneOf:[{type:"object",additionalProperties:!1,required:["fieldCode","operator"],properties:{fieldCode:Lt,operator:{enum:["empty","nonempty"]}}},{type:"object",additionalProperties:!1,required:["fieldCode","operator","values"],properties:{fieldCode:Lt,operator:{enum:["in","notIn"]},values:{type:"array",minItems:1,maxItems:16,uniqueItems:!0,items:{type:"string",minLength:1,maxLength:128}}}}]}}}}};var Dn={"openxiangda.workflow.instance.completed.v2":"commit","openxiangda.workflow.instance.rejected.v2":"release","openxiangda.workflow.instance.withdrawn.v2":"release"};function Vn(e,t){let o=()=>{throw new Error("NATIVE_EVENT_DECIMAL_RESERVATION_INVALID")},n=u=>!u||typeof u!="object"||Array.isArray(u)?o():u,s=n(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 o();let i=t.resources.find(u=>u.code===s.resourceCode),c=t.reservations.find(u=>u.mode==="reserve"&&u.resourceCode===s.resourceCode),r=t.workflows.find(u=>u.code===s.workflowCode);if(!i||!c||!r||r.resourceCode!==i.code)return o();let a=i.fields.find(u=>u.code===c.statusFieldCode);if(a?.type!=="option.single")return o();let f=new Set(a.options?.map(u=>u.value)),E=new Set,d=s.outcomes.map(u=>{let m=n(u),l=m.eventType;return Object.keys(m).some(A=>!["eventType","mode","eligibleChildStatuses"].includes(A))||typeof l!="string"||!Object.prototype.hasOwnProperty.call(Dn,l)||!t.eventTypes.includes(l)||E.has(l)||m.mode!==Dn[l]||!Array.isArray(m.eligibleChildStatuses)||!m.eligibleChildStatuses.length||m.eligibleChildStatuses.length>16||new Set(m.eligibleChildStatuses).size!==m.eligibleChildStatuses.length||m.eligibleChildStatuses.some(A=>typeof A!="string"||!/^[A-Za-z0-9._:-]{1,128}$/.test(A)||!f.has(A))?o():(E.add(l),{eventType:l,mode:m.mode,eligibleChildStatuses:[...m.eligibleChildStatuses].sort()})}).sort((u,m)=>u.eventType.localeCompare(m.eventType));return{resourceCode:s.resourceCode,workflowCode:s.workflowCode,outcomes:d}}function wn(e,t){let o=n=>Array.isArray(n)?n.filter(s=>s&&typeof s=="object"&&!Array.isArray(s)):[];return{eventTypes:Array.isArray(t.eventTypes)?t.eventTypes:[],execution:t.execution,resources:o(e.data?.resources).map(n=>({code:n.code,fields:o(n.schema?.fields).map(s=>({code:s.code,type:s.type,options:o(s.options).map(i=>({value:i.value}))}))})),reservations:o(e.backend?.operations).flatMap(n=>n.platformAccess?.decimalReservation?[n.platformAccess.decimalReservation]:[]),workflows:o(e.workflows?.definitions).map(n=>({code:n.definition?.code,resourceCode:n.definition?.subject?.resourceCode}))}}var kt=class extends Error{constructor(o,n){super(n);this.pointer=o}pointer;code="NATIVE_EVENT_ACTION_INVALID"};function Fn(e,t,o="/events/subscriptions"){if(e.execution===void 0)return;let n=(A,N)=>{throw new kt(`${o}${A}`,N)},s=(A,N,_)=>((!A||typeof A!="object"||Array.isArray(A)||Object.keys(A).some(I=>!_.includes(I)))&&n(N,"Invalid action object or unsupported property"),A),i=s(e.execution,"/execution",["kind","version","operations"]);(i.kind!=="native-data"||i.version!==1)&&n("/execution","Expected native-data version 1"),e.platformAccess&&n("/platformAccess","Native actions do not use application runtime capabilities"),(!Array.isArray(e.eventTypes)||!e.eventTypes.length||e.eventTypes.some(A=>!/^openxiangda\.data\.record\.(created|updated|deleted)\.v2$/.test(A)))&&n("/eventTypes","Native data actions require declared data events");let c=e.filter?.resourceCodes;(!Array.isArray(c)||!c.length||c.length>20)&&n("/filter/resourceCodes","Native actions require explicit source resources");let r=new Map(t.map(A=>[A.code,A])),a=c.map(A=>{let N=r.get(A);return N||n("/filter/resourceCodes","Unknown source resource"),new Set((N.schema?.fields||[]).map(_=>_.code))}),f=new Set(e.payload?.fields||[]),E=e.payload?.includeChanges===!0,d=(A,N)=>{let _=s(A,N,["source","path","value"]);if(_.source==="literal"){(!Object.hasOwn(_,"value")||Object.hasOwn(_,"path"))&&n(N,"Literal binding requires only value");let C;try{C=JSON.stringify(_.value)}catch{n(N,"Literal must be JSON")}return(C===void 0||Buffer.byteLength(C)>65536)&&n(N,"Literal is too large or not JSON"),{source:"literal",value:JSON.parse(C)}}(_.source!=="event"||typeof _.path!="string"||Object.hasOwn(_,"value"))&&n(N,"Expected a literal or event binding");let I=_.path.split(".");(I.length>8||I.some(C=>!/^[A-Za-z0-9_-]+$/.test(C)||["__proto__","prototype","constructor"].includes(C)))&&n(N,"Invalid event path");let T=/^data\.projection\.([A-Za-z][A-Za-z0-9_]{0,62})$/.exec(_.path),b=/^data\.changes\.([A-Za-z][A-Za-z0-9_]{0,62})\.(before|after)$/.exec(_.path);if(T||b){let C=(T||b)[1];a.some(O=>!O.has(C))&&n(N,"Source field must exist on every filtered resource"),f.add(C),b&&(E=!0)}else["id","time","type","subject","data.recordId","data.revision","data.operation","data.resourceCode"].includes(_.path)||n(N,"Event path is not part of the data event contract");return{source:"event",path:_.path}};(!Array.isArray(i.operations)||i.operations.length<1||i.operations.length>16)&&n("/execution/operations","Expected 1 to 16 operations");let u={},m=i.operations.map((A,N)=>{let _=`/execution/operations/${N}`,I=s(A,_,["operation","resourceCode","data","id","expectedRevision"]);["create","update","delete"].includes(I.operation)||n(_,"Unsupported Native operation");let T=r.get(I.resourceCode);T||n(_,"Unknown action target resource");let b=new Map((T.schema?.fields||[]).map(O=>[O.code,O])),C=I.data===void 0?{}:s(I.data,`${_}/data`,[...b.keys()]);return Object.keys(C).length>32&&n(_,"Maximum 32 mapped fields per operation"),I.operation==="create"&&(I.id!==void 0||I.expectedRevision!==void 0)&&n(_,"Create does not accept id or expectedRevision"),I.operation==="delete"&&I.data!==void 0&&n(_,"Delete does not accept data"),Object.keys(C).some(O=>b.get(O)?.type==="serial-number")&&n(_,"Generated fields cannot be assigned"),u[I.resourceCode]=ee(T),{operation:I.operation,resourceCode:I.resourceCode,...I.operation==="create"?{}:{id:d(I.id,`${_}/id`),expectedRevision:d(I.expectedRevision,`${_}/expectedRevision`)},...I.operation==="delete"?{}:{data:Object.fromEntries(Object.entries(C).map(([O,S])=>[O,d(S,`${_}/data/${O}`)]))}}});(f.size>32||[...f].some(A=>a.some(N=>!N.has(A))))&&n("/payload/fields","Payload must contain at most 32 declared source fields");let l={kind:"native-data",version:1,operations:m,resourceDigests:u};return Buffer.byteLength(JSON.stringify(l))>65536&&n("/execution","Action plan exceeds 64 KiB"),{execution:{...l,digest:ee(l)},payload:{includeChanges:E,fields:[...f].sort()}}}function be(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)?e:void 0}function Pn(e,t){if(e?.instanceCommands===void 0)return[];let o=be(e.instanceCommands);if(!o||!Object.keys(o).length||Object.keys(o).some(s=>!["withdraw","terminate"].includes(s)))return["WORKFLOW_INSTANCE_COMMAND_POLICIES_INVALID"];let n=[];for(let[s,i]of Object.entries(o)){let c=be(i),r=s==="withdraw"?["beforeFact"]:["beforeFact","capability"];if(!c||Object.keys(c).some(a=>!r.includes(a))){n.push(`WORKFLOW_INSTANCE_COMMAND_POLICY_INVALID:${s}`);continue}if(s==="terminate"){let a=c.capability;(typeof a!="string"||a.length>255||!/^app:[a-z][a-z0-9]*(?:-[a-z0-9]+)*:[A-Za-z0-9:._-]+$/.test(a)||t&&(!a.startsWith(`app:${t.appCode}:`)||!t.capabilities.includes(a)))&&n.push("WORKFLOW_INSTANCE_TERMINATE_CAPABILITY_INVALID")}if(s==="withdraw"||c.beforeFact!==void 0){let a=c.beforeFact,f=be(e.inputSchema),E=be(be(f?.properties)?.[a]),d=be(be(e.subject)?.factProjection)?.[a],u=t?.fields.get(d);(typeof a!="string"||!/^[A-Za-z][A-Za-z0-9_]{0,62}$/.test(a)||!Array.isArray(f?.required)||!f.required.includes(a)||E?.type!=="string"||E?.format!=="date-time"||typeof d!="string"||t&&(u?.type!=="datetime"||u.nullable===!0))&&n.push(`WORKFLOW_INSTANCE_COMMAND_DEADLINE_FACT_INVALID:${s}`)}}return n}function hr(e,t){let o=e?.terminate?.capability;return typeof o=="string"&&/^app:[a-z][a-z0-9]*(?:-[a-z0-9]+)*:[A-Za-z0-9:._-]+$/.test(o)&&t.includes(o)}function vn(e){if(typeof e!="string")return null;let t=/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(?:\.(\d{1,3}))?(Z|[+-]\d{2}:\d{2})$/.exec(e);if(!t)return null;let[,o,n,s,i,c,r]=t,a=t[8],f=new Date(Date.UTC(Number(o),Number(n),0)).getUTCDate();if(Number(n)<1||Number(n)>12||Number(s)<1||Number(s)>f||Number(i)>23||Number(c)>59||Number(r)>59||a!=="Z"&&(Number(a.slice(1,3))>23||Number(a.slice(4))>59))return null;let E=Date.parse(e);return Number.isFinite(E)?E:null}function Sr(e,t,o,n){let s=e?.[t];if(!s||t==="terminate"&&s.beforeFact===void 0)return null;let i=s.beforeFact,c=be(o),r=i&&c&&Object.hasOwn(c,i)?vn(c[i]):null,a=n instanceof Date?n.getTime():vn(n);return r===null||a===null||!Number.isFinite(a)?"WORKFLOW_V2_CANCELLATION_DEADLINE_INVALID":a<r?null:"WORKFLOW_V2_CANCELLATION_DEADLINE_PASSED"}import*as at from"crypto";var Ln="native-4",kn={"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","data.managed-concurrency":"1.0.0","workflow.named-input-sources":"1.0.0","directory-v2":"1.0.0","directory.selected-user":"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 wr=5,Fr=20,vr=50,Pr=50,Lr=100,Be=class extends Error{constructor(o,n){super(o);this.code=o;this.pointer=n;this.name="NativeDataPolicyExpressionV2Error"}code;pointer};function st(e,t){let o=[],n=(s,i,c)=>{c>5&&Me("NATIVE_DATA_POLICY_EXPRESSION_DEPTH_EXCEEDED",i);let r=Un(s,i),a=["allOf","anyOf"].filter(d=>d in r);if(a.length===0){o.push({rule:r,pointer:i}),o.length>50&&Me("NATIVE_DATA_POLICY_EXPRESSION_LEAVES_EXCEEDED",i);return}let f=a[0],E=r[f];(a.length!==1||Object.keys(r).length!==1||!Array.isArray(E)||E.length<1||E.length>20)&&Me("NATIVE_DATA_POLICY_EXPRESSION_GROUP_INVALID",i),E.forEach((d,u)=>n(d,`${i}/${f}/${u}`,c+1))};return n(e,t,1),o}function xn(e,t){st(e,t);let o=(n,s)=>{let i=Un(n,s);if(Array.isArray(i.allOf))return xt(i.allOf.flatMap((c,r)=>o(c,`${s}/allOf/${r}`)),s);if(Array.isArray(i.anyOf)){let c=[[]];return i.anyOf.forEach((r,a)=>{let f=o(r,`${s}/anyOf/${a}`);c=xt(c.flatMap(E=>f.map(d=>[...E,...d])),s)}),c}return[[i]]};return xt(o(e,t),t)}function xt(e,t){let o=e.reduce((n,s)=>n+s.length,0);return(e.length>50||o>100)&&Me("NATIVE_DATA_POLICY_EXPRESSION_EXPANSION_EXCEEDED",t),e}function Un(e,t){return(!e||typeof e!="object"||Array.isArray(e))&&Me("NATIVE_DATA_POLICY_EXPRESSION_NODE_INVALID",t),e}function Me(e,t){throw new Be(e,t)}var ms="openxiangda.config-bundle/v3",oo="openxiangda.contract-bundle/v3",jn="openxiangda.native-configuration-projection/v1",We=Ln,gs=/^[a-f0-9]{64}$/,Ns=/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/,Ts=/^app:[a-z][a-z0-9]*(?:-[a-z0-9]+)*:[A-Za-z0-9:._*-]+$/,Cs=/^[a-z][a-z0-9]*(?:[-_.][a-z0-9]+)*$/,bs=/^[a-z][a-z0-9]*(?:[-.][a-z0-9]+)*$/,Os=/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/,ys=/^[A-Za-z][A-Za-z0-9_]{0,62}$/,Mn=/^[A-Za-z][A-Za-z0-9_]{0,127}$/,$s=/^[a-z][a-z0-9]*(?:[-_][a-z0-9]+)*$/,Rs=/^[A-Z][A-Z0-9_]*$/,hs=/^[a-z][a-z0-9-]{2,63}$/,Ss=/^[A-Za-z][A-Za-z0-9_-]{0,127}$/,Ds=/^[A-Za-z][A-Za-z0-9_.]{0,127}$/,Vs=16,ws=2*1024,Fs=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"]),vs=new Set(["overview","database","operations","workflow","members","calendar","document","folder","settings"]),Ps=new Set(["approve","reject","return","transfer","delegate","add_assignee","resubmit","withdraw","terminate","admin_reassign","admin_override","retry_resolution"]),Ls=4*1024*1024,ks=8*1024*1024,xs=40,Us=1e5,jt=1024*1024,js="openxiangda.event-handler-manifest/v2",so="openxiangda.application-route-manifest/v3",Bn=64,io=new Set(["id","revision","created_by","updated_by","created_at","updated_at"]),Y=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}),Mt=["openxiangda.data.record.created.v2","openxiangda.data.record.updated.v2","openxiangda.data.record.deleted.v2"],Bt=["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"],Ms=new Set(Bt),Jt=class extends Error{code;pointer;identifiers;constructor(t,o,n={}){super(t),this.name="NativeConfigurationCompilerError",this.code=t,this.pointer=o,this.identifiers=Object.fromEntries(Object.entries(n).slice(0,8).map(([s,i])=>[s,String(i).slice(0,128)]))}};function ta(e){let t=R(e.appCode,"/appCode",128);Ns.test(t)||p("NATIVE_CONFIG_APP_CODE_INVALID","/appCode");let o=zt(e.expectedConfigDigest,"/expectedConfigDigest"),n=zt(e.expectedContractDigest,"/expectedContractDigest"),s=eo(e.configBytes,Ls,"/configBytes","NATIVE_CONFIG_ARTIFACT_TOO_LARGE"),i=eo(e.contractBytes,ks,"/contractBytes","NATIVE_CONTRACT_ARTIFACT_TOO_LARGE");to(s,o,"/configBytes","NATIVE_CONFIG_DIGEST_MISMATCH"),to(i,n,"/contractBytes","NATIVE_CONTRACT_DIGEST_MISMATCH");let c=Qn(s,"/configBytes","NATIVE_CONFIG_JSON_INVALID","NATIVE_CONFIG_NOT_CANONICAL"),r=Qn(i,"/contractBytes","NATIVE_CONTRACT_JSON_INVALID","NATIVE_CONTRACT_NOT_CANONICAL");Zn(c,"/config"),Zn(r,"/contracts");let a=c,f=r;zs(a,t),Gs(f,t,o);let E=qs(a,o,f.generatorVersion);Fi(E,f,a),Q(E)!==Q(f)&&p("NATIVE_CONTRACT_CLOSURE_MISMATCH",Gt(E,f,"/contracts"));let d={authz:{appCode:t,...a.authz,perspectives:a.perspectives,capabilityCatalog:E.capabilities},data:{appCode:t,resources:a.data.resources,resourceContracts:E.resources,...E.concurrency?{concurrency:E.concurrency}:{},...E.subjectReadSurfaces?{subjectReadSurfaces:E.subjectReadSurfaces}:{}},events:{appCode:t,...a.events,consumers:E.eventConsumers,producers:E.eventProducers,handlerManifest:E.eventHandlerManifest,eventTypes:E.eventTypes,capturePlans:Js({resources:a.data.resources,dataPolicies:a.authz.dataPolicies,subscriptions:E.eventConsumers,capturePolicies:a.events.capturePolicies})},workflows:{appCode:t,...a.workflows,contracts:E.workflows},runtime:{appCode:t,requirements:a.runtime,backend:a.backend,frontend:a.frontend},contracts:E},u={authz:Ve(d.authz),data:Ve(d.data),events:Ve(d.events),workflows:Ve(d.workflows),runtime:Ve(d.runtime),contracts:Ve(d.contracts)},m={configDigest:o,contractDigest:n,generatorVersion:f.generatorVersion},l=Bs(a),A={schemaVersion:jn,compilerContractVersion:We,appCode:t,source:m,projections:u,requiredPlatformCapabilities:l,aggregateDigest:ee({schemaVersion:jn,compilerContractVersion:We,appCode:t,source:m,requiredPlatformCapabilities:l,projectionDigests:Object.fromEntries(Object.entries(u).map(([N,_])=>[N,_.digest]))})};return mo(A)}function Bs(e){let t=e.authz.roles,o=e.data.resources,n=e.backend.operations,s=t.some(l=>l.capabilities.some(A=>A.endsWith(":directory:read")))||o.some(l=>l.schema.fields.some(A=>["user.single","user.multiple","department.single","department.multiple"].includes(A.type)))||n.some(l=>l.platformAccess?.directory),i=!!(e.events.subscriptions.length||e.events.timers.length||e.events.dateTriggers.length||e.events.schemas.length),c=n.some(l=>l.platformAccess?.managedFiles||l.platformAccess?.managedFileCopies)||e.events.subscriptions.some(l=>l.platformAccess?.managedFileCopies),r=n.some(l=>l.platformAccess?.notification)||e.events.subscriptions.some(l=>l.platformAccess?.notification),a=e.workflows.definitions.filter(l=>l.launch.mode==="standalone"||l.launch.mode==="hidden-handoff"),f=n.some(l=>l.platformAccess?.workflow)||a.length>0,E={resources:o},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:n.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[...o.some(l=>l.uniqueKeys?.length)?[{code:"data.unique-keys",declaration:o.filter(l=>l.uniqueKeys?.length).map(l=>({code:l.code,uniqueKeys:l.uniqueKeys}))}]:[],...e.data.concurrency?[{code:"data.managed-concurrency",declaration:e.data.concurrency}]:[],...o.some(l=>l.decimalReservationLifecycle)?[{code:"data.decimal-reservation-lifecycle",declaration:o.filter(l=>l.decimalReservationLifecycle).map(l=>({code:l.code,decimalReservationLifecycle:l.decimalReservationLifecycle}))}]:[],...n.some(l=>l.platformAccess?.decimalReservation)||e.events.subscriptions.some(l=>l.platformAccess?.decimalReservation)?[{code:"data.decimal-reservations",declaration:[...n.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"]}},...o.length?[{code:"data-api-v2",declaration:E},{code:"data.native-golden-crud",declaration:E}]:[],...o.some(rn)?[{code:"data.audit-read-access",declaration:E}]:[],...s?[{code:"directory-v2",declaration:{roles:t.map(l=>({code:l.code,capabilities:l.capabilities.filter(A=>A.endsWith(":directory:read"))})),resources:o.map(l=>({code:l.code,fields:l.schema.fields.filter(A=>["user.single","user.multiple","department.single","department.multiple"].includes(A.type))})),operations:n.filter(l=>l.platformAccess?.directory).map(l=>({code:l.code,directory:l.platformAccess.directory}))}}]:[],...n.some(l=>l.platformAccess?.directory?.mode==="selected-user")?[{code:"directory.selected-user",declaration:n.filter(l=>l.platformAccess?.directory?.mode==="selected-user").map(l=>({code:l.code,directory:l.platformAccess.directory}))}]:[],...c?[{code:"data.managed-files",declaration:{operations:n.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}]:[],...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(l=>l.definition.instanceCommands!==void 0)?[{code:"workflow.instance-cancellation-policy",declaration:e.workflows.definitions.filter(l=>l.definition.instanceCommands!==void 0)}]:[],...f?[{code:"business-process.durable-command",declaration:{operations:n.filter(l=>l.platformAccess?.workflow).map(l=>({code:l.code,workflow:l.platformAccess.workflow})),definitions:a,activations:e.workflows.activations.filter(l=>a.some(A=>A.definition.code===l.workflowCode))}}]:[],...r?[{code:"notification-hub-v2",declaration:{operations:n.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:kn[l],usageDigest:`sha256:${ee(A)}`})).sort((l,A)=>l.code===A.code?0:l.code<A.code?-1:1)}function Js(e){let t=new Map,o=new Set(e.resources.map(i=>String(i.code)));for(let[i,c]of $(e.capturePolicies===void 0?[]:e.capturePolicies,"/capturePlan/capturePolicies",100).entries()){let r=`/capturePlan/capturePolicies/${i}`,a=g(c,r);y(a,["resourceCode","mode"],r);let f=z(a.resourceCode,`${r}/resourceCode`);o.has(f)||p("NATIVE_EVENT_CAPTURE_RESOURCE_NOT_FOUND",r,{resourceCode:f}),t.has(f)&&p("NATIVE_EVENT_CAPTURE_POLICY_DUPLICATE",r,{resourceCode:f}),a.mode!=="all"&&a.mode!=="subscribed"&&p("NATIVE_EVENT_CAPTURE_MODE_INVALID",`${r}/mode`),t.set(f,a.mode)}let n=new Map(e.dataPolicies.map((i,c)=>{let r=g(i,`/capturePlan/dataPolicies/${c}`);return[String(r.code),r]})),s=e.subscriptions.map((i,c)=>g(i,`/capturePlan/subscriptions/${c}`));return e.resources.map((i,c)=>{let r=`/capturePlan/resources/${c}`,a=g(i,r),f=z(a.code,`${r}/code`),E=a.schema?g(a.schema,`${r}/schema`):a,d=new Set($(E.fields||[],`${r}/schema/fields`,500).map((O,S)=>B(g(O,`${r}/schema/fields/${S}`).code,`${r}/schema/fields/${S}/code`))),u=a.dataPolicyCode?w(a.dataPolicyCode,`${r}/dataPolicyCode`):null,m=u?n.get(u):void 0;u&&!m&&p("NATIVE_EVENT_CAPTURE_AUTHZ_POLICY_NOT_FOUND",r,{resourceCode:f,dataPolicyCode:u});let l=new Set;for(let O of m?.rules||[])l.add(String(O.field));if(m?.readExpression)for(let O of st(m.readExpression,`${r}/readExpression`))l.add(String(O.rule.field));let A=new Set,N=new Set,_=new Set;for(let[O,S]of s.entries()){let D=$(S.eventTypes,`/capturePlan/subscriptions/${O}/eventTypes`,20).map(String);if(!D.some(j=>j.startsWith("openxiangda.data.")))continue;let U=g(S.filter||{},`/capturePlan/subscriptions/${O}/filter`),k=Array.isArray(U.resourceCodes)?U.resourceCodes.map(String):[];if(k.length&&!k.includes(f))continue;for(let j of D)Mt.includes(j)&&_.add(j);for(let j of Ws(U,`/capturePlan/subscriptions/${O}/filter`))A.add(j);let q=g(S.payload||{},`/capturePlan/subscriptions/${O}/payload`);for(let j of $(q.fields||[],`/capturePlan/subscriptions/${O}/payload/fields`,32))N.add(B(j,`/capturePlan/subscriptions/${O}/payload/fields`))}let I=new Set([...A,...N]),T=new Set([...I,...l]);T.size>Bn&&p("NATIVE_EVENT_CAPTURE_FIELDS_LIMIT",r,{resourceCode:f,maximum:Bn});for(let O of T)!d.has(O)&&!(l.has(O)&&io.has(O))&&p("NATIVE_EVENT_CAPTURE_FIELD_NOT_FOUND",r,{resourceCode:f,field:O});let b=g(a.fieldPolicies||{},`${r}/fieldPolicies`);for(let O of I)b[O]?.mask==="omit"&&p("NATIVE_EVENT_CAPTURE_FIELD_SENSITIVE",r,{resourceCode:f,field:O});let C={resourceCode:f,...t.get(f)==="subscribed"?{capturedEventTypes:[..._].sort()}:{},filterFields:[...A].sort(),projectionFields:[...N].sort(),authorizationFields:[...l].sort(),captureFields:[...T].sort()};return{...C,digest:ee(C)}}).sort((i,c)=>i.resourceCode.localeCompare(c.resourceCode))}function Ws(e,t){let o=new Set;for(let[c,r]of $(e.changes||[],`${t}/changes`,16).entries()){let a=g(r,`${t}/changes/${c}`);o.add(B(a.field,`${t}/changes/${c}/field`))}let n=g(e.changedFields||{},`${t}/changedFields`);for(let c of["anyOf","allOf","noneOf"])for(let[r,a]of $(n[c]||[],`${t}/changedFields/${c}`,32).entries())o.add(B(a,`${t}/changedFields/${c}/${r}`));let s=0,i=(c,r,a)=>{a>3&&p("NATIVE_EVENT_FILTER_DEPTH_LIMIT",r);let f=g(c,r);if(f.change){let d=g(f.change,`${r}/change`);o.add(B(d.field,`${r}/change/field`)),s+=1;return}if(f.not){i(f.not,`${r}/not`,a+1);return}let E=f.all?"all":f.any?"any":null;E||p("NATIVE_EVENT_FILTER_CONDITION_INVALID",r);for(let[d,u]of $(f[E],`${r}/${E}`,16).entries())i(u,`${r}/${E}/${d}`,a+1)};return e.where&&i(e.where,`${t}/where`,1),s+=Array.isArray(e.changes)?e.changes.length:0,s>16&&p("NATIVE_EVENT_FILTER_ATOM_LIMIT",t),[...o].sort()}function zs(e,t){y(e,["schemaVersion","compilerContractVersion","appCode","perspectives","authz","backend","data","events","workflows","frontend","runtime"],"/config"),L(e.schemaVersion,ms,"/config/schemaVersion"),L(e.compilerContractVersion,We,"/config/compilerContractVersion"),L(e.appCode,t,"/config/appCode"),$(e.perspectives,"/config/perspectives",100);let o=g(e.authz,"/config/authz");y(o,["capabilities","roles","scopeDimensions","scopeSources","roleMembershipSources","relationshipGrantSources","dataPolicies","authorizationTransitions"],"/config/authz",["authenticatedUserRoleCode"]),$(o.capabilities,"/config/authz/capabilities",2e3),$(o.roles,"/config/authz/roles",100),$(o.scopeDimensions,"/config/authz/scopeDimensions",100),$(o.scopeSources,"/config/authz/scopeSources",100),$(o.roleMembershipSources,"/config/authz/roleMembershipSources",100),$(o.relationshipGrantSources,"/config/authz/relationshipGrantSources",100),$(o.dataPolicies,"/config/authz/dataPolicies",100),$(o.authorizationTransitions,"/config/authz/authorizationTransitions",100);let n=g(e.backend,"/config/backend");y(n,["secrets","operations"],"/config/backend"),$(n.secrets,"/config/backend/secrets",100),$(n.operations,"/config/backend/operations",500),Ri(n.secrets);let s=g(e.data,"/config/data");y(s,["resources"],"/config/data",["resourceDetailRoutes","subjectReadSurfaces","concurrency"]),$(s.resources,"/config/data/resources",100),s.subjectReadSurfaces!==void 0&&$(s.subjectReadSurfaces,"/config/data/subjectReadSurfaces",Y.subjectReadSurfaces),s.resourceDetailRoutes!==void 0&&$(s.resourceDetailRoutes,"/config/data/resourceDetailRoutes",100);let i=g(e.events,"/config/events");y(i,["schemas","subscriptions","timers","dateTriggers"],"/config/events",["capturePolicies"]),$(i.schemas,"/config/events/schemas",100),$(i.subscriptions,"/config/events/subscriptions",100),$(i.timers,"/config/events/timers",100),$(i.dateTriggers,"/config/events/dateTriggers",100);let c=g(e.workflows,"/config/workflows");y(c,["definitions","bindings","activations","providers","editableParameters"],"/config/workflows"),$(c.definitions,"/config/workflows/definitions",100),$(c.bindings,"/config/workflows/bindings",100),$(c.activations,"/config/workflows/activations",100),$(c.providers,"/config/workflows/providers",100),$(c.editableParameters,"/config/workflows/editableParameters",100);let r=g(e.frontend,"/config/frontend");y(r,["routes","user","admin","devicePolicy"],"/config/frontend",["authentication","publicAccess"]),$(r.routes,"/config/frontend/routes",500);let a=g(r.user,"/config/frontend/user");y(a,["applicationTodoCenter"],"/config/frontend/user"),Fe(a.applicationTodoCenter,"/config/frontend/user/applicationTodoCenter"),qt(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")&&ci(r.publicAccess,e,"/config/frontend/publicAccess");let f=g(r.admin,"/config/frontend/admin");y(f,["navigation"],"/config/frontend/admin",["access"]),f.access!==void 0&&dt(f.access,"/config/frontend/admin/access",e.appCode),fi(f.navigation,"/config/frontend/admin/navigation");let E=g(e.runtime,"/config/runtime");y(E,["protocolCapabilities","health"],"/config/runtime"),F(E.protocolCapabilities,"/config/runtime/protocolCapabilities",100),y(g(E.health,"/config/runtime/health"),["livePath","readyPath","versionPath"],"/config/runtime/health"),L(E.health.livePath,"/__platform/health","/config/runtime/health/livePath"),L(E.health.readyPath,"/__platform/ready","/config/runtime/health/readyPath"),L(E.health.versionPath,"/__platform/version","/config/runtime/health/versionPath")}function Gs(e,t,o){y(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","concurrency"]),L(e.schemaVersion,oo,"/contracts/schemaVersion"),L(e.compilerContractVersion,We,"/contracts/compilerContractVersion"),R(e.generatorVersion,"/contracts/generatorVersion",128),L(e.appCode,t,"/contracts/appCode"),L(e.configDigest,o,"/contracts/configDigest"),$(e.perspectives,"/contracts/perspectives",Y.perspectives),$(e.resources,"/contracts/resources",Y.resources),e.subjectReadSurfaces!==void 0&&$(e.subjectReadSurfaces,"/contracts/subjectReadSurfaces",Y.subjectReadSurfaces),$(e.capabilities,"/contracts/capabilities",Y.capabilities),$(e.operations,"/contracts/operations",Y.operations),$(e.eventConsumers,"/contracts/eventConsumers",Y.eventConsumers),$(e.eventProducers,"/contracts/eventProducers",Y.eventProducers),$(e.eventSchemas,"/contracts/eventSchemas",Y.eventSchemas),g(e.eventHandlerManifest,"/contracts/eventHandlerManifest"),F(e.eventTypes,"/contracts/eventTypes",Y.eventTypes),$(e.workflows,"/contracts/workflows",Y.workflows),$(e.routes,"/contracts/routes",Y.routes),Object.prototype.hasOwnProperty.call(e,"authentication")&&ii(e.authentication,"/contracts/authentication"),Object.prototype.hasOwnProperty.call(e,"publicAccess")&&di(e.publicAccess,"/contracts/publicAccess"),Object.prototype.hasOwnProperty.call(e,"adminAccess")&&dt(e.adminAccess,"/contracts/adminAccess",t),mi(e.routeManifest,"/contracts/routeManifest",t),Ei(e.adminPages,"/contracts/adminPages"),Ai(e.adminNavigation,"/contracts/adminNavigation")}function qs(e,t,o){let n=Hs(e);bi(e,n),yi(e),Oi(e),hi(e);let s=e.events.schemas.map((A,N)=>{let _=`/config/events/schemas/${N}`,I=g(A,_),T=R(I.eventType,`${_}/eventType`,255);return T.startsWith("openxiangda.")&&p("NATIVE_EVENT_SCHEMA_RESERVED",`${_}/eventType`,{eventType:T}),L(I.schemaDigest,ee(g(I.jsonSchema,`${_}/jsonSchema`)),`${_}/schemaDigest`),I}),i=new Set([...Mt,...Bt,...s.map(A=>String(A.eventType))]),c=new Map(e.data.resources.map(A=>[String(A.code),new Map(A.schema.fields.map(N=>[String(N.code),String(N.type)]))])),r=X(e.events.subscriptions.map((A,N)=>{let _=`/config/events/subscriptions/${N}`,I=g(A,_),T=F(I.eventTypes,`${_}/eventTypes`,20);T.forEach((S,D)=>{i.has(S)||p("NATIVE_EVENT_TYPE_NOT_REGISTERED",`${_}/eventTypes/${D}`,{eventType:S})});let b=Fn(I,e.data.resources,_),C=Ks(I.delivery,T,`${_}/delivery`),O=Ys(I.platformAccess,`${_}/platformAccess`,c,e,I);return{code:w(I.code,`${_}/code`),endpointPath:le(I.endpointPath,`${_}/endpointPath`),eventTypes:T,filter:g(I.filter,`${_}/filter`),payload:b?.payload||g(I.payload,`${_}/payload`),...b?{execution:b.execution}:{},...O?{platformAccess:O}:{},delivery:C}}),A=>A.code),a=new Map(s.map(A=>[String(A.eventType),String(A.dataSchemaVersion)])),f=X([...e.data.resources.flatMap(A=>Mt.map(N=>({code:`data:${A.code}:${N}`,source:"data",eventType:N,dataSchemaVersion:"2.0.0",resourceCode:A.code}))),...s.map(A=>({code:`app:${A.eventType}`,source:"app",eventType:A.eventType,dataSchemaVersion:A.dataSchemaVersion})),...e.events.timers.map(A=>({code:A.code,source:"timer",eventType:A.eventType,dataSchemaVersion:a.get(String(A.eventType))||"2.0.0"})),...e.events.dateTriggers.map(A=>({code:A.code,source:"date",eventType:A.eventType,dataSchemaVersion:a.get(String(A.eventType))||"2.0.0",resourceCode:A.resourceCode,field:A.field})),...e.workflows.activations.length?Bt.map(A=>({code:`workflow:${A}`,source:"workflow",eventType:A,dataSchemaVersion:"2.0.0"})):[]],A=>`${A.source}:${A.code}:${A.eventType}`),E=M([...r.flatMap(A=>A.eventTypes),...f.map(A=>String(A.eventType))]);_i(e);let d=uo(e),u;try{u=mn(e.data.concurrency,e.data.resources,n)}catch(A){throw A instanceof ke&&p(A.code,A.pointer,{reason:A.reason}),A}let m=Qs(e,n),l=ro(e);try{Nn(e.data.resources,l)}catch(A){throw A instanceof De&&p(A.code,A.pointer,{reason:A.reason}),A}return{schemaVersion:oo,compilerContractVersion:We,generatorVersion:o,appCode:e.appCode,configDigest:t,perspectives:e.perspectives,resources:Xs(e),...m.length?{subjectReadSurfaces:m}:{},...u?{concurrency:u}:{},capabilities:X(n,A=>A.code),operations:l,eventConsumers:r,eventProducers:f,eventSchemas:s,eventHandlerManifest:{schemaVersion:js,appCode:e.appCode,handlers:r.filter(A=>!A.execution).map(A=>({code:A.code,endpointPath:A.endpointPath,eventTypes:A.eventTypes,dataSchemaVersions:M(A.eventTypes.map(N=>N.startsWith("openxiangda.")?"2.0.0":a.get(N)||"2.0.0")),maxBodyBytes:65536,receiptProtocolVersion:2}))},eventTypes:E,workflows:_o(e),routes:ct(e),...Object.prototype.hasOwnProperty.call(e.frontend,"authentication")?{authentication:ri(e)}:{},...Object.prototype.hasOwnProperty.call(e.frontend,"publicAccess")?{publicAccess:li(e)}:{},...e.frontend.admin.access?{adminAccess:e.frontend.admin.access}:{},routeManifest:Ti(e),adminPages:d,adminNavigation:ui(e)}}function Ys(e,t,o,n,s){if(e===void 0)return;let i=g(e,t);y(i,["notification","managedFileCopies","decimalReservation"],t,!0);let c={};if(i.decimalReservation!==void 0)try{c.decimalReservation=Vn(i.decimalReservation,wn(n,s))}catch{p("NATIVE_EVENT_DECIMAL_RESERVATION_INVALID",`${t}/decimalReservation`)}if(i.notification!==void 0){let r=g(i.notification,`${t}/notification`);y(r,["mode"],`${t}/notification`),L(r.mode,"business-standard",`${t}/notification/mode`),c.notification={mode:"business-standard"}}if(i.managedFileCopies!==void 0){let r=$(i.managedFileCopies,`${t}/managedFileCopies`,16);r.length||p("NATIVE_EVENT_MANAGED_FILE_COPIES_REQUIRED",`${t}/managedFileCopies`);let a=new Set;c.managedFileCopies=X(r.map((f,E)=>{let d=`${t}/managedFileCopies/${E}`,u=g(f,d);y(u,["mode","sourceResourceCode","sourceFieldCodes","targetResourceCode","targetFieldCodes"],d),L(u.mode,"copy",`${d}/mode`);let m=z(u.sourceResourceCode,`${d}/sourceResourceCode`),l=z(u.targetResourceCode,`${d}/targetResourceCode`),A=o.get(m),N=o.get(l);(!A||!N)&&p("NATIVE_EVENT_MANAGED_FILE_COPY_RESOURCE_INVALID",d);let _=F(u.sourceFieldCodes,`${d}/sourceFieldCodes`,16),I=F(u.targetFieldCodes,`${d}/targetFieldCodes`,16);(!_.length||_.length!==I.length)&&p("NATIVE_EVENT_MANAGED_FILE_COPY_FIELDS_INVALID",d),_.forEach((b,C)=>{let O=A.get(b),S=N.get(I[C]);(!["file","image"].includes(String(O))||O!==S)&&p("NATIVE_EVENT_MANAGED_FILE_COPY_FIELD_INVALID",`${d}/sourceFieldCodes/${C}`)});let T=`${m}:${_.join(",")}=>${l}:${I.join(",")}`;return a.has(T)&&p("NATIVE_EVENT_MANAGED_FILE_COPY_DUPLICATE",d),a.add(T),{mode:"copy",sourceResourceCode:m,sourceFieldCodes:M(_),targetResourceCode:l,targetFieldCodes:M(I)}}),f=>`${f.sourceResourceCode}:${f.sourceFieldCodes.join(",")}=>${f.targetResourceCode}:${f.targetFieldCodes.join(",")}`)}return Object.keys(c).length||p("NATIVE_EVENT_PLATFORM_ACCESS_EMPTY",t),c}function Ks(e,t,o){let n=g(e,o);y(n,["timeoutMs","maxAttempts","initialBackoffMs","maxBackoffMs","ordering","concurrency"],o),Z(n.timeoutMs,`${o}/timeoutMs`,1e3,3e4),Z(n.maxAttempts,`${o}/maxAttempts`,1,12);let s=Z(n.initialBackoffMs,`${o}/initialBackoffMs`,1e3,3e5);Z(n.maxBackoffMs,`${o}/maxBackoffMs`,s,18e5),Z(n.concurrency,`${o}/concurrency`,1,50);let i=R(n.ordering,`${o}/ordering`,32);return["none","record","workflow-instance"].includes(i)||p("NATIVE_EVENT_DELIVERY_ORDERING_INVALID",`${o}/ordering`),i==="workflow-instance"&&t.some(c=>!Ms.has(c))&&p("NATIVE_EVENT_WORKFLOW_ORDERING_REQUIRES_WORKFLOW_FACTS",`${o}/ordering`),n}function Hs(e){let t=new Map;for(let o of Io(e.appCode))t.set(o.code,o);for(let[o,n]of e.authz.capabilities.entries()){let s=`/config/authz/capabilities/${o}`,i=g(n,s);y(i,["code","kind","name","description"],s,!0);let c=Ne(i.code,`${s}/code`,e.appCode);t.has(c)&&p("NATIVE_CAPABILITY_DUPLICATE",`${s}/code`),["backend","ui"].includes(i.kind)||p("NATIVE_CAPABILITY_KIND_INVALID",`${s}/kind`);let r={code:c,kind:i.kind,name:R(i.name,`${s}/name`,255),source:"explicit",...i.description===void 0?{}:{description:Kt(i.description,`${s}/description`,2e3)}};t.set(c,r)}for(let[o,n]of e.data.resources.entries()){let s=`/config/data/resources/${o}`,i=ye(n,s,e.appCode),c={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 a=Ne(i.capabilities[r],`${s}/capabilities/${r}`,e.appCode);t.has(a)&&p("NATIVE_CAPABILITY_DUPLICATE",`${s}/capabilities/${r}`),t.set(a,{code:a,kind:"data",name:c[r],source:"data"})}for(let[r,a]of Object.entries(i.fieldPolicies)){if(ve(r))continue;let f=g(a,`${s}/fieldPolicies/${r}`);for(let E of["read","create","update"])if(Array.isArray(f[E]))for(let d of F(f[E],`${s}/fieldPolicies/${r}/${E}`,2e3))Ne(d,`${s}/fieldPolicies/${r}/${E}`,e.appCode),!t.has(d)&&t.set(d,{code:d,kind:"data",name:`${i.name}.${r}.${E}`,source:"data"})}}return[...t.values()]}function Xs(e){let t=Zs(e);return X(e.data.resources.map((o,n)=>{let s=ye(o,`/config/data/resources/${n}`,e.appCode),i=t.get(s.code);return{code:s.code,schemaDigest:ee(s.schema),fields:X(s.schema.fields.map(c=>({code:c.code,type:c.type})),c=>c.code),...i?{detailRouteCode:i}:{}}}),o=>o.code)}function Qs(e,t){if(e.data.subjectReadSurfaces===void 0)return[];let o=$(e.data.subjectReadSurfaces,"/config/data/subjectReadSurfaces",Y.subjectReadSurfaces),n=new Set(t.map(c=>String(c.code))),s=new Map(e.data.resources.map((c,r)=>{let a=`/config/data/resources/${r}`,f=ye(c,a,e.appCode);return[String(f.code),{resource:f,fields:new Map($(g(f.schema,`${a}/schema`).fields,`${a}/schema/fields`,500).map(E=>{let d=g(E,`${a}/schema/fields`);return[String(d.code),d]}))}]})),i=new Set;return X(o.map((c,r)=>{let a=`/config/data/subjectReadSurfaces/${r}`,f=g(c,a);y(f,["code","name","capability","subject","relations"],a);let E=w(f.code,`${a}/code`);i.has(E)&&p("NATIVE_SUBJECT_READ_SURFACE_CODE_DUPLICATE",`${a}/code`),i.add(E);let d=Ne(f.capability,`${a}/capability`,e.appCode);n.has(d)||p("NATIVE_SUBJECT_READ_SURFACE_CAPABILITY_NOT_DECLARED",`${a}/capability`);let u=g(f.subject,`${a}/subject`);y(u,["resourceCode","fields"],`${a}/subject`);let m=z(u.resourceCode,`${a}/subject/resourceCode`),l=s.get(m);l||p("NATIVE_SUBJECT_READ_SURFACE_RESOURCE_NOT_DECLARED",`${a}/subject/resourceCode`);let A=F(u.fields,`${a}/subject/fields`,100).map((b,C)=>B(b,`${a}/subject/fields/${C}`));A.length||p("NATIVE_SUBJECT_READ_SURFACE_FIELDS_REQUIRED",`${a}/subject/fields`);for(let[b,C]of A.entries()){let O=l.fields.get(C);(!O||O.type==="subtable")&&p("NATIVE_SUBJECT_READ_SURFACE_FIELD_INVALID",`${a}/subject/fields/${b}`)}let N=$(f.relations,`${a}/relations`,8);N.length||p("NATIVE_SUBJECT_READ_SURFACE_RELATIONS_REQUIRED",`${a}/relations`);let _=new Set,I=0,T=X(N.map((b,C)=>{let O=`${a}/relations/${C}`,S=g(b,O);y(S,["code","resourceCode","foreignKeyField","fields","limit"],O,["order"]);let D=w(S.code,`${O}/code`);_.has(D)&&p("NATIVE_SUBJECT_READ_SURFACE_RELATION_CODE_DUPLICATE",`${O}/code`),_.add(D);let U=z(S.resourceCode,`${O}/resourceCode`),k=s.get(U);k||p("NATIVE_SUBJECT_READ_SURFACE_RESOURCE_NOT_DECLARED",`${O}/resourceCode`);let q=B(S.foreignKeyField,`${O}/foreignKeyField`),j=k.fields.get(q),ue=g(j?.source||{},`${O}/foreignKeyField/source`);(!j||!["uuid","resource-ref.single"].includes(String(j.type))||j.type==="resource-ref.single"&&(ue.kind!=="resource"||ue.resourceCode!==m))&&p("NATIVE_SUBJECT_READ_SURFACE_RELATION_INVALID",`${O}/foreignKeyField`);let fe=F(S.fields,`${O}/fields`,100).map((ie,V)=>B(ie,`${O}/fields/${V}`));fe.length||p("NATIVE_SUBJECT_READ_SURFACE_FIELDS_REQUIRED",`${O}/fields`);for(let[ie,V]of fe.entries()){let x=k.fields.get(V);(!x||x.type==="subtable")&&p("NATIVE_SUBJECT_READ_SURFACE_FIELD_INVALID",`${O}/fields/${ie}`)}let K=$(S.order||[],`${O}/order`,10).map((ie,V)=>{let x=`${O}/order/${V}`,v=g(ie,x);y(v,["field","direction"],x);let J=B(v.field,`${x}/field`),W=k.fields.get(J);return(!io.has(J)&&!W||W?.type==="subtable"||W&&!Le(W.type))&&p("NATIVE_SUBJECT_READ_SURFACE_ORDER_FIELD_INVALID",`${x}/field`),["asc","desc"].includes(String(v.direction))||p("NATIVE_SUBJECT_READ_SURFACE_ORDER_DIRECTION_INVALID",`${x}/direction`),{field:J,direction:v.direction}}),Ie=Z(S.limit,`${O}/limit`,1,100);return I+=Ie,{code:D,resourceCode:U,foreignKeyField:q,fields:M(fe),...K.length?{order:K}:{},limit:Ie}}),b=>b.code);return I>400&&p("NATIVE_SUBJECT_READ_SURFACE_ROW_LIMIT_EXCEEDED",`${a}/relations`),{code:E,name:R(f.name,`${a}/name`,255),capability:d,subject:{resourceCode:m,fields:M(A)},relations:T}}),c=>c.code)}function Zs(e){let t=e.data.resourceDetailRoutes===void 0?[]:$(e.data.resourceDetailRoutes,"/config/data/resourceDetailRoutes",100),o=new Map(e.data.resources.map((i,c)=>{let r=`/config/data/resources/${c}`,a=ye(i,r,e.appCode);return[a.code,a]})),n=new Map(ct(e).map(i=>[String(i.code),i])),s=new Map;for(let[i,c]of t.entries()){let r=`/config/data/resourceDetailRoutes/${i}`,a=g(c,r);y(a,["resourceCode","desktop","mobile"],r);let f=z(a.resourceCode,`${r}/resourceCode`);s.has(f)&&p("NATIVE_DATA_RESOURCE_DETAIL_ROUTE_DUPLICATE",`${r}/resourceCode`);let E=o.get(f);E||p("NATIVE_DATA_RESOURCE_DETAIL_ROUTE_RESOURCE_MISSING",`${r}/resourceCode`);let d=w(a.desktop,`${r}/desktop`),u=w(a.mobile,`${r}/mobile`);d===u&&p("NATIVE_DATA_RESOURCE_DETAIL_ROUTE_INVALID",r);let m=String(E.capabilities.read);for(let[l,A]of[["desktop",d],["mobile",u]]){let N=`${r}/${l}`,_=n.get(A);_||p("NATIVE_DATA_RESOURCE_DETAIL_ROUTE_REFERENCE_MISSING",N),_.surface!=="user"&&p("NATIVE_DATA_RESOURCE_DETAIL_ROUTE_SURFACE_INVALID",N);let I=le(_.path,`${N}/path`),T=[...I.matchAll(/:([A-Za-z][A-Za-z0-9_]*)/g)],b=l==="mobile"?!I.startsWith("/m/"):I==="/m"||I.startsWith("/m/");(I.includes("*")||I.includes("?")||I.includes("#")||I.split("/").includes("..")||T.length!==1||b)&&p("NATIVE_DATA_RESOURCE_DETAIL_ROUTE_PATH_INVALID",N);let C=Array.isArray(_.access?.allOf)?_.access.allOf:[];_.capability!==m&&!C.includes(m)&&p("NATIVE_DATA_RESOURCE_DETAIL_ROUTE_CAPABILITY_INVALID",N)}s.set(f,{desktop:d,mobile:u})}return s}function ro(e){let t=new Map(e.data.resources.map((c,r)=>{let a=`/config/data/resources/${r}`,f=ye(c,a,e.appCode);return[f.code,new Map(f.schema.fields.map(E=>[String(E.code),E]))]})),o=new Map(e.data.resources.map((c,r)=>{let a=`/config/data/resources/${r}`,f=ye(c,a,e.appCode);return[f.code,new Map(f.schema.fields.map(E=>[String(E.code),String(E.type)]))]})),n=new Set(o.keys()),s=new Set(e.workflows.activations.map((c,r)=>lt(g(c,`/config/workflows/activations/${r}`).workflowCode,`/config/workflows/activations/${r}/workflowCode`))),i=new Map;return X(e.backend.operations.map((c,r)=>{let a=`/config/backend/operations/${r}`,f=g(c,a);y(f,["code","method","path","capability","requestSchema","responseSchema","description","platformAccess","browser","ai"],a,!0);let E=R(f.method,`${a}/method`,16);["GET","POST","PUT","PATCH","DELETE"].includes(E)||p("NATIVE_OPERATION_METHOD_INVALID",`${a}/method`);let d=w(f.code,`${a}/code`);oi(f.ai,a,d,E,n);let u=ni(f.platformAccess,`${a}/platformAccess`,o,t,s,new Set(e.authz.roles.map(l=>String(l.code))));if(u?.decimalReservation){let l=u.decimalReservation,A=String(l.resourceCode),N=JSON.stringify([l.amountFieldCode,l.currencyFieldCode,l.relationFieldCode,l.parentFieldCode,l.rootFieldCode,l.statusFieldCode,l.parentRelationValue,l.childRelationValue]),_=i.get(A);_&&_!==N&&p("NATIVE_DECIMAL_RESERVATION_MAPPING_CONFLICT",`${a}/platformAccess/decimalReservation`),i.set(A,N)}let m=ei(f.browser,`${a}/browser`,E,f.requestSchema,f.responseSchema,o,t,e.data.subjectReadSurfaces||[]);return{code:d,method:E,path:le(f.path,`${a}/path`),requiredCapability:Ne(f.capability,`${a}/capability`,e.appCode),requestSchemaDigest:ee(g(f.requestSchema,`${a}/requestSchema`)),responseSchemaDigest:ee(g(f.responseSchema,`${a}/responseSchema`)),...f.description===void 0?{}:{description:Kt(f.description,`${a}/description`,2e3)},...u?{platformAccess:u}:{},...m?{browser:m}:{}}}),c=>c.code)}function ei(e,t,o,n,s,i,c,r){if(e===void 0)return null;let a=g(e,t);y(a,["exposure","behavior","idempotency","subject"],t,["refreshTargets","fileIntent"]),L(a.exposure,"authenticated",`${t}/exposure`);let f=R(a.behavior,`${t}/behavior`,32);["read","controlled"].includes(f)||p("NATIVE_OPERATION_BROWSER_BEHAVIOR_INVALID",`${t}/behavior`);let E=R(a.idempotency,`${t}/idempotency`,32);(!["none","required"].includes(E)||f==="controlled"&&E!=="required"||f==="read"&&E!=="none")&&p("NATIVE_OPERATION_BROWSER_IDEMPOTENCY_INVALID",`${t}/idempotency`);let d=g(a.subject,`${t}/subject`);y(d,["resourceCode","inputField"],`${t}/subject`);let u=z(d.resourceCode,`${t}/subject/resourceCode`);i.has(u)||p("NATIVE_OPERATION_BROWSER_SUBJECT_RESOURCE_NOT_DECLARED",`${t}/subject/resourceCode`);let m=B(d.inputField,`${t}/subject/inputField`),l=g(n,`${t}/requestSchema`),A=g(s,`${t}/responseSchema`);(l.type!=="object"||l.additionalProperties!==!1||A.type!=="object"||A.additionalProperties!==!1)&&p("NATIVE_OPERATION_BROWSER_SCHEMA_ROOT_INVALID",`${t}/requestSchema`);let N=g(l.properties,`${t}/requestSchema/properties`),_=new Set(l.required===void 0?[]:F(l.required,`${t}/requestSchema/required`,200));(!(m in N)||!_.has(m))&&p("NATIVE_OPERATION_BROWSER_SUBJECT_INPUT_INVALID",`${t}/subject/inputField`);let I=g(N[m],`${t}/requestSchema/properties/${m}`);(I.type!=="string"||I.format!=="uuid")&&p("NATIVE_OPERATION_BROWSER_SUBJECT_INPUT_INVALID",`${t}/subject/inputField`);let T=new Map((Array.isArray(r)?r:[]).map((D,U)=>{let k=g(D,`/config/data/subjectReadSurfaces/${U}`);return[String(k.code),String(g(k.subject,`/config/data/subjectReadSurfaces/${U}/subject`).resourceCode)]})),b=a.refreshTargets===void 0?[]:$(a.refreshTargets,`${t}/refreshTargets`,16),C=new Set,O=X(b.map((D,U)=>{let k=`${t}/refreshTargets/${U}`,q=g(D,k);y(q,["kind","code"],k),L(q.kind,"subject-surface",`${k}/kind`);let j=w(q.code,`${k}/code`);return(C.has(j)||!T.has(j)||T.get(j)!==u)&&p("NATIVE_OPERATION_BROWSER_REFRESH_TARGET_INVALID",`${k}/code`),C.add(j),{kind:"subject-surface",code:j}}),D=>`${D.kind}:${D.code}`),S=ti(a.fileIntent,`${t}/fileIntent`,o,f,E,u,N,_,c);return{exposure:"authenticated",behavior:f,idempotency:E,subject:{resourceCode:u,inputField:m},...O.length?{refreshTargets:O}:{},...S?{fileIntent:S}:{}}}function ti(e,t,o,n,s,i,c,r,a){if(e===void 0)return null;let f=g(e,t);y(f,["recordResourceCode","recordIdInputField","relationField","fileNameField","contentTypeField","sizeField","purposes","maxTtlSeconds","maxBytes"],t),(o!=="GET"||n!=="read"||s!=="none")&&p("NATIVE_OPERATION_FILE_INTENT_BEHAVIOR_INVALID",t);let E=z(f.recordResourceCode,`${t}/recordResourceCode`),d=a.get(E);d||p("NATIVE_OPERATION_FILE_INTENT_RESOURCE_NOT_DECLARED",`${t}/recordResourceCode`);let u=B(f.recordIdInputField,`${t}/recordIdInputField`),m=g(c[u],`${t}/recordIdInputField`);(!r.has(u)||m.type!=="string"||m.format!=="uuid")&&p("NATIVE_OPERATION_FILE_INTENT_RECORD_INPUT_INVALID",`${t}/recordIdInputField`);let l=B(f.relationField,`${t}/relationField`),A=d.get(l);(!A||!["uuid","resource-ref.single"].includes(String(A.type))||String(A.type)==="resource-ref.single"&&(String(g(A.source,`${t}/relationField`).kind||"")!=="resource"||String(g(A.source,`${t}/relationField`).resourceCode||"")!==i))&&p("NATIVE_OPERATION_FILE_INTENT_RELATION_INVALID",`${t}/relationField`);let N=[["fileNameField",["text.short","text.long"]],["contentTypeField",["text.short","text.long"]],["sizeField",["number.integer"]]],_={};for(let[C,O]of N){let S=B(f[C],`${t}/${C}`);O.includes(String(d.get(S)?.type))||p("NATIVE_OPERATION_FILE_INTENT_METADATA_INVALID",`${t}/${C}`),_[C]=S}let I=X(F(f.purposes,`${t}/purposes`,2),C=>C);(!I.length||I.some(C=>!["preview","download"].includes(C)))&&p("NATIVE_OPERATION_FILE_INTENT_PURPOSE_INVALID",`${t}/purposes`);let T=Number(f.maxTtlSeconds);(!Number.isSafeInteger(T)||T<1||T>300)&&p("NATIVE_OPERATION_FILE_INTENT_TTL_INVALID",`${t}/maxTtlSeconds`);let b=Number(f.maxBytes);return(!Number.isSafeInteger(b)||b<1||b>104857600)&&p("NATIVE_OPERATION_FILE_INTENT_SIZE_INVALID",`${t}/maxBytes`),{recordResourceCode:E,recordIdInputField:u,relationField:l,fileNameField:_.fileNameField,contentTypeField:_.contentTypeField,sizeField:_.sizeField,purposes:I,maxTtlSeconds:T,maxBytes:b}}function ni(e,t,o,n,s,i){if(e===void 0)return null;let c=g(e,t);y(c,["directory","managedFiles","managedFileCopies","notification","workflow","roleAssertions","decimalReservation"],t,!0),Object.keys(c).length===0&&p("NATIVE_OPERATION_PLATFORM_ACCESS_EMPTY",t);let r={};if(c.roleAssertions!==void 0){let a=g(c.roleAssertions,`${t}/roleAssertions`);y(a,["roleCodes"],`${t}/roleAssertions`);let f=F(a.roleCodes,`${t}/roleAssertions/roleCodes`,20);f.length||p("NATIVE_OPERATION_ROLE_ASSERTIONS_REQUIRED",`${t}/roleAssertions/roleCodes`),f.forEach((E,d)=>{i.has(E)||p("NATIVE_ROLE_REFERENCE_MISSING",`${t}/roleAssertions/roleCodes/${d}`)}),r.roleAssertions={roleCodes:M(f)}}if(c.directory!==void 0){let a=g(c.directory,`${t}/directory`);y(a,["mode","fields"],`${t}/directory`),["current-initiator","selected-user"].includes(String(a.mode))||p("NATIVE_OPERATION_DIRECTORY_MODE_INVALID",`${t}/directory/mode`);let f=new Set(["displayName","employeeNumber","primaryDepartment","departments"]),E=F(a.fields,`${t}/directory/fields`,4);(!E.length||E.some(d=>!f.has(d)))&&p("NATIVE_OPERATION_DIRECTORY_FIELDS_INVALID",`${t}/directory/fields`),r.directory={mode:String(a.mode),fields:M(E)}}if(c.managedFiles!==void 0){let a=$(c.managedFiles,`${t}/managedFiles`,16);a.length||p("NATIVE_OPERATION_MANAGED_FILES_REQUIRED",`${t}/managedFiles`);let f=new Set;r.managedFiles=X(a.map((E,d)=>{let u=`${t}/managedFiles/${d}`,m=g(E,u);y(m,["resourceCode","fieldCodes","intents"],u);let l=z(m.resourceCode,`${u}/resourceCode`);(f.has(l)||!o.has(l))&&p("NATIVE_OPERATION_MANAGED_FILE_RESOURCE_INVALID",`${u}/resourceCode`),f.add(l);let A=F(m.fieldCodes,`${u}/fieldCodes`,16);(!A.length||A.some(_=>!["file","image","signature"].includes(String(o.get(l)?.get(_)||""))))&&p("NATIVE_OPERATION_MANAGED_FILE_FIELD_INVALID",`${u}/fieldCodes`);let N=F(m.intents,`${u}/intents`,2);return(!N.length||N.some(_=>!["create","update"].includes(_)))&&p("NATIVE_OPERATION_MANAGED_FILE_INTENT_INVALID",`${u}/intents`),{resourceCode:l,fieldCodes:M(A),intents:M(N)}}),E=>E.resourceCode)}if(c.managedFileCopies!==void 0){let a=$(c.managedFileCopies,`${t}/managedFileCopies`,16);a.length||p("NATIVE_OPERATION_MANAGED_FILE_COPIES_REQUIRED",`${t}/managedFileCopies`);let f=new Set;r.managedFileCopies=X(a.map((E,d)=>{let u=`${t}/managedFileCopies/${d}`,m=g(E,u);y(m,["mode","sourceResourceCode","sourceFieldCodes","targetResourceCode","targetFieldCodes"],u),L(m.mode,"copy",`${u}/mode`);let l=z(m.sourceResourceCode,`${u}/sourceResourceCode`),A=z(m.targetResourceCode,`${u}/targetResourceCode`),N=o.get(l),_=o.get(A);(!N||!_)&&p("NATIVE_OPERATION_MANAGED_FILE_COPY_RESOURCE_INVALID",u);let I=F(m.sourceFieldCodes,`${u}/sourceFieldCodes`,16),T=F(m.targetFieldCodes,`${u}/targetFieldCodes`,16);(!I.length||I.length!==T.length)&&p("NATIVE_OPERATION_MANAGED_FILE_COPY_FIELDS_INVALID",u),I.forEach((C,O)=>{let S=N.get(C),D=_.get(T[O]);(!["file","image"].includes(String(S))||S!==D)&&p("NATIVE_OPERATION_MANAGED_FILE_COPY_FIELD_INVALID",`${u}/sourceFieldCodes/${O}`)});let b=`${l}:${I.join(",")}=>${A}:${T.join(",")}`;return f.has(b)&&p("NATIVE_OPERATION_MANAGED_FILE_COPY_DUPLICATE",u),f.add(b),{mode:"copy",sourceResourceCode:l,sourceFieldCodes:M(I),targetResourceCode:A,targetFieldCodes:M(T)}}),E=>`${E.sourceResourceCode}:${E.sourceFieldCodes.join(",")}=>${E.targetResourceCode}:${E.targetFieldCodes.join(",")}`)}if(c.notification!==void 0){let a=g(c.notification,`${t}/notification`);y(a,["mode"],`${t}/notification`),a.mode!=="business-standard"&&p("NATIVE_OPERATION_NOTIFICATION_MODE_INVALID",`${t}/notification/mode`),r.notification={mode:"business-standard"}}if(c.workflow!==void 0){let a=g(c.workflow,`${t}/workflow`);y(a,["codes"],`${t}/workflow`);let f=F(a.codes,`${t}/workflow/codes`,16);(!f.length||f.some(E=>!s.has(E)))&&p("NATIVE_OPERATION_WORKFLOW_CODE_INVALID",`${t}/workflow/codes`),r.workflow={codes:M(f)}}if(c.decimalReservation!==void 0){let a=`${t}/decimalReservation`,f=g(c.decimalReservation,a);y(f,["mode","resourceCode","amountFieldCode","currencyFieldCode","relationFieldCode","parentFieldCode","rootFieldCode","statusFieldCode","parentRelationValue","childRelationValue","eligibleParentStatuses","eligibleChildStatuses"],a);let E=R(f.mode,`${a}/mode`,16);["reserve","commit","release"].includes(E)||p("NATIVE_DECIMAL_RESERVATION_MODE_INVALID",`${a}/mode`);let d=z(f.resourceCode,`${a}/resourceCode`),u=n.get(d);u||p("NATIVE_DECIMAL_RESERVATION_RESOURCE_MISSING",`${a}/resourceCode`);let l=Object.fromEntries(["amountFieldCode","currencyFieldCode","relationFieldCode","parentFieldCode","rootFieldCode","statusFieldCode"].map(C=>[C,B(f[C],`${a}/${C}`)])),A=C=>u.get(l[C]),N=C=>new Set((A(C)?.options||[]).map(O=>String(O.value))),_=w(f.parentRelationValue,`${a}/parentRelationValue`),I=w(f.childRelationValue,`${a}/childRelationValue`),T=F(f.eligibleParentStatuses,`${a}/eligibleParentStatuses`,16),b=F(f.eligibleChildStatuses,`${a}/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"||_===I||!N("relationFieldCode").has(_)||!N("relationFieldCode").has(I)||!T.length||!b.length||T.some(C=>!N("statusFieldCode").has(C))||b.some(C=>!N("statusFieldCode").has(C)))&&p("NATIVE_DECIMAL_RESERVATION_FIELD_INVALID",a),r.decimalReservation={mode:E,resourceCode:d,...l,parentRelationValue:_,childRelationValue:I,eligibleParentStatuses:M(T),eligibleChildStatuses:M(b)}}return r}function oi(e,t,o,n,s){if(e===void 0)return;let i=`${t}/ai`,c=g(e,i);bs.test(o)||p("NATIVE_OPERATION_AI_CODE_INVALID",`${t}/code`),y(c,["name","description","risk","resources","sideEffects","concurrency","timeoutMs"],i,!0),R(c.name,`${i}/name`,jt),R(c.description,`${i}/description`,jt);let r=R(c.risk,`${i}/risk`,16);["read","write","destructive","external"].includes(r)||p("NATIVE_OPERATION_AI_RISK_INVALID",`${i}/risk`),r==="read"!=(n==="GET")&&p("NATIVE_OPERATION_AI_METHOD_RISK_MISMATCH",`${i}/risk`),n==="DELETE"&&!["destructive","external"].includes(r)&&p("NATIVE_OPERATION_AI_METHOD_RISK_MISMATCH",`${i}/risk`);let a=F(c.resources,`${i}/resources`,16);a.length===0&&p("NATIVE_OPERATION_AI_RESOURCE_REQUIRED",`${i}/resources`),a.forEach((E,d)=>{let u=z(E,`${i}/resources/${d}`);s.has(u)||p("NATIVE_OPERATION_AI_RESOURCE_MISSING",`${i}/resources/${d}`)});let f=F(c.sideEffects,`${i}/sideEffects`,20);(r==="read"&&f.length!==0||r!=="read"&&f.length===0)&&p("NATIVE_OPERATION_AI_SIDE_EFFECT_INVALID",`${i}/sideEffects`),c.concurrency!==void 0&&!["none","revision"].includes(R(c.concurrency,`${i}/concurrency`,16))&&p("NATIVE_OPERATION_AI_CONCURRENCY_INVALID",`${i}/concurrency`),c.timeoutMs!==void 0&&Z(c.timeoutMs,`${i}/timeoutMs`,100,3e4)}function it(e){return(e.replace(/\/{2,}/g,"/").replace(/\/$/,"")||"/").split("/").map(o=>o.startsWith(":")?":":o.includes("*")?"*":o).join("/")}function si(e,t){let o=g(e,t),n=R(o.type,`${t}/type`,32),s=["code","type","label","presentation","required"],i=n==="sso"?[...s,"provider"]:n==="dingtalk"?[...s,"flow"]:s;y(o,i,t);let c=w(o.code,`${t}/code`),r=R(o.label,`${t}/label`,255),a=R(o.presentation,`${t}/presentation`,16);["primary","secondary"].includes(a)||p("NATIVE_APPLICATION_AUTH_METHOD_PRESENTATION_INVALID",`${t}/presentation`);let f=Fe(o.required,`${t}/required`);return["sso","password","dingtalk"].includes(n)||p("NATIVE_APPLICATION_AUTH_METHOD_TYPE_INVALID",`${t}/type`),n==="sso"&&o.provider!=="tenant-default"&&p("NATIVE_APPLICATION_AUTH_SSO_PROVIDER_INVALID",`${t}/provider`),n==="dingtalk"&&!["auto","jsapi","oauth"].includes(R(o.flow,`${t}/flow`,16))&&p("NATIVE_APPLICATION_AUTH_DINGTALK_FLOW_INVALID",`${t}/flow`),{code:c,type:n,label:r,presentation:a,required:f,...n==="sso"?{provider:"tenant-default"}:{},...n==="dingtalk"?{flow:o.flow}:{}}}function Jn(e,t,o){let n=g(e,o);y(n,["routeCode","path","defaultRouteCode"],o);let s=w(n.routeCode,`${o}/routeCode`),i=le(n.path,`${o}/path`),c=t==="desktop"?"/login":"/m/login";return(i!==c||/[:*?#\\]/.test(i))&&p("NATIVE_APPLICATION_AUTH_SURFACE_PATH_INVALID",`${o}/path`,{device:t,expectedPath:c}),{routeCode:s,path:i,defaultRouteCode:w(n.defaultRouteCode,`${o}/defaultRouteCode`)}}function ao(e,t,o,n){if(e===null)return;let s=g(e,n);y(s,["accountMode","registration","methods","surfaces"],n),L(s.accountMode,"existing-platform-users-only",`${n}/accountMode`);let i=g(s.registration,`${n}/registration`);y(i,["mode"],`${n}/registration`),L(i.mode,"reject",`${n}/registration/mode`);let c=$(s.methods,`${n}/methods`,8);c.length===0&&p("NATIVE_APPLICATION_AUTH_METHOD_REQUIRED",`${n}/methods`);let r=c.map((_,I)=>si(_,`${n}/methods/${I}`)),a=new Set,f=new Set;for(let[_,I]of r.entries())a.has(I.code)&&p("NATIVE_APPLICATION_AUTH_METHOD_CODE_DUPLICATE",`${n}/methods/${_}/code`),f.has(I.type)&&p("NATIVE_APPLICATION_AUTH_METHOD_TYPE_DUPLICATE",`${n}/methods/${_}/type`),a.add(I.code),f.add(I.type);r.filter(_=>_.presentation==="primary").length!==1&&p("NATIVE_APPLICATION_AUTH_PRIMARY_METHOD_INVALID",`${n}/methods`);let E=g(s.surfaces,`${n}/surfaces`);y(E,["desktop","mobile"],`${n}/surfaces`);let d=Jn(E.desktop,"desktop",`${n}/surfaces/desktop`),u=Jn(E.mobile,"mobile",`${n}/surfaces/mobile`);d.routeCode===u.routeCode&&p("NATIVE_APPLICATION_AUTH_SURFACE_CODE_DUPLICATE",`${n}/surfaces/mobile/routeCode`);let m=$(t,"/config/frontend/routes",500),l=new Map;for(let[_,I]of m.entries()){let T=g(I,`/config/frontend/routes/${_}`);l.set(String(T.code||""),T)}let A=new Set((Array.isArray(o.data?.resources)?o.data.resources:[]).map(_=>String(_.code||"")).filter(_=>/^[a-z][a-z0-9-]{0,62}$/.test(_)));for(let[_,I]of[["desktop",d],["mobile",u]]){l.has(I.routeCode)&&p("NATIVE_APPLICATION_AUTH_SURFACE_CODE_CONFLICT",`${n}/surfaces/${_}/routeCode`);let T=/^user\.([a-z][a-z0-9-]{0,62})\.(records|submit)$/.exec(String(I.defaultRouteCode||"")),b=l.get(I.defaultRouteCode),C=String(b?.path||"");if(T&&A.has(T[1])){let S=T[2]==="records"?`/my/${T[1]}`:`/my/${T[1]}/submit`;b={surface:"user",path:_==="mobile"?`/m${S}`:S},C=String(b.path)}let O=_==="desktop"?C==="/m"||C.startsWith("/m/"):!(C==="/m"||C.startsWith("/m/"));(!b||b.surface!=="user"||/[:*]/.test(C)||O)&&p("NATIVE_APPLICATION_AUTH_DEFAULT_ROUTE_INVALID",`${n}/surfaces/${_}/defaultRouteCode`)}let N=co(o).filter(_=>!_.owner.startsWith("authentication:"));for(let[_,I]of[["desktop",d],["mobile",u]]){let T=N.find(b=>it(b.path)===it(I.path));T&&p("NATIVE_APPLICATION_AUTH_SURFACE_PATH_CONFLICT",`${n}/surfaces/${_}/path`,{owner:T.owner})}}function ii(e,t){if(e===null)return;let o={data:{resources:[]},workflows:{definitions:[]},frontend:{routes:[{code:"auth-desktop-default",path:"/auth-desktop-default",surface:"user"},{code:"auth-mobile-default",path:"/m/auth-mobile-default",surface:"user"}],user:{applicationTodoCenter:!1},admin:{navigation:[]},authentication:e}},n=g(e,t),s=g(n.surfaces,`${t}/surfaces`),i={...n,surfaces:{...s,desktop:{...g(s.desktop,`${t}/surfaces/desktop`),defaultRouteCode:"auth-desktop-default"},mobile:{...g(s.mobile,`${t}/surfaces/mobile`),defaultRouteCode:"auth-mobile-default"}}};ao(i,o.frontend.routes,{...o,frontend:{...o.frontend,authentication:i}},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(o=>({...o})),surfaces:{desktop:{...t.surfaces.desktop},mobile:{...t.surfaces.mobile}}}}var ai=new Set(["draft.read","draft.update","validate","create","own.list","own.read","public.list","public.read"]);function ci(e,t,o){let n=g(e,o);y(n,["policies"],o);let s=$(n.policies,`${o}/policies`,16);s.length<1&&p("NATIVE_PUBLIC_POLICY_REQUIRED",o);let i=new Map(t.frontend.routes.map(f=>[f.code,f])),c=new Map(t.data.resources.map(f=>[f.code,f])),r=new Set,a=new Set(s.map(f=>String(f?.code||"")));s.forEach((f,E)=>{let d=`${o}/policies/${E}`,u=g(f,d);y(u,["code","routeCode","mode","resourceCode","operations","fields"],d,["requiredFields","ownRecordFields","publicRecordFields","publicFilters","serverGeneratedFields","schedule","publicSubtableFields","draft","validations"]);let m=w(u.code,`${d}/code`);r.has(m)&&p("NATIVE_PUBLIC_POLICY_DUPLICATE",`${d}/code`);let l=w(u.routeCode,`${d}/routeCode`),A=i.get(l);(!A||A.surface!=="user"||A.capability!==void 0||A.access!==void 0||/[:*]/.test(String(A.path)))&&p("NATIVE_PUBLIC_ROUTE_INVALID",`${d}/routeCode`),L(u.mode,"anonymous",`${d}/mode`);let N=z(u.resourceCode,`${d}/resourceCode`),_=c.get(N);_||p("NATIVE_PUBLIC_RESOURCE_MISSING",`${d}/resourceCode`);let I=new Map(_.schema.fields.map(V=>[String(V.code),String(V.type)])),T=F(u.operations,`${d}/operations`,8);(T.length<1||T.some(V=>!ai.has(V)))&&p("NATIVE_PUBLIC_OPERATION_INVALID",`${d}/operations`),T.includes("draft.read")!==T.includes("draft.update")&&p("NATIVE_PUBLIC_DRAFT_OPERATION_INCOMPLETE",`${d}/operations`);let b=F(u.fields,`${d}/fields`,64);(b.length<1||b.some(V=>!I.has(V)))&&p("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(v=>!b.includes(v))&&p("NATIVE_PUBLIC_FIELD_SCOPE_INVALID",`${d}/${V}`)}let C=Object.prototype.hasOwnProperty.call(u,"serverGeneratedFields")?$(u.serverGeneratedFields,`${d}/serverGeneratedFields`,16):[],O=new Set;C.forEach((V,x)=>{let v=`${d}/serverGeneratedFields/${x}`,J=g(V,v);y(J,["field","kind"],v);let W=B(J.field,`${v}/field`);(O.has(W)||!I.has(W)||b.includes(W)||I.get(W)!=="text.short"&&I.get(W)!=="text.long")&&p("NATIVE_PUBLIC_SERVER_GENERATED_FIELD_INVALID",`${v}/field`),L(J.kind,"random-token",`${v}/kind`),O.add(W)});let S=Object.prototype.hasOwnProperty.call(u,"schedule")?g(u.schedule,`${d}/schedule`):null;if(S){let V=["campusPolicyCode","rulePolicyCode","campusField","ruleCampusField","ruleWeekdaysField","ruleOpenAtField","ruleCloseAtField","ruleSlotMinutesField","ruleAdvanceHoursField","ruleAdvanceDaysField","campusEnabledField","ruleEnabledField","dateField","timeField"];y(S,V,`${d}/schedule`);for(let x of["campusPolicyCode","rulePolicyCode"])w(S[x],`${d}/schedule/${x}`);for(let x of V.filter(v=>!["campusPolicyCode","rulePolicyCode"].includes(v)))B(S[x],`${d}/schedule/${x}`);for(let x of[S.campusField,S.dateField,S.timeField])b.includes(String(x))||p("NATIVE_PUBLIC_SCHEDULE_FIELD_INVALID",`${d}/schedule`);(!a.has(String(S.campusPolicyCode))||!a.has(String(S.rulePolicyCode)))&&p("NATIVE_PUBLIC_SCHEDULE_POLICY_INVALID",`${d}/schedule`)}let D=Object.prototype.hasOwnProperty.call(u,"publicFilters")?$(u.publicFilters,`${d}/publicFilters`,16):[],U=new Set;D.forEach((V,x)=>{let v=`${d}/publicFilters/${x}`,J=g(V,v);y(J,["field","operator","value"],v);let W=B(J.field,`${v}/field`);U.has(W)&&p("NATIVE_PUBLIC_FILTER_DUPLICATE",`${v}/field`),b.includes(W)||p("NATIVE_PUBLIC_FILTER_FIELD_INVALID",`${v}/field`),L(J.operator,"eq",`${v}/operator`),["boolean","text.short","text.long","number.integer","number.decimal","date","time"].includes(I.get(W)||"")||p("NATIVE_PUBLIC_FILTER_FIELD_INVALID",`${v}/field`),J.value!==null&&typeof J.value!="string"&&typeof J.value!="number"&&typeof J.value!="boolean"&&p("NATIVE_PUBLIC_FILTER_VALUE_INVALID",`${v}/value`),U.add(W)});let k=Object.prototype.hasOwnProperty.call(u,"publicSubtableFields")?g(u.publicSubtableFields,`${d}/publicSubtableFields`):null;if(k){Object.keys(k).length>64&&p("NATIVE_PUBLIC_SUBTABLE_FIELDS_INVALID",`${d}/publicSubtableFields`);for(let[V,x]of Object.entries(k)){let v=_.schema.fields.find(H=>String(H.code)===V),J=String(v?.subtable?.resourceCode||""),W=c.get(J),me=new Map((W?.schema?.fields||[]).map(H=>[String(H.code),String(H.type)])),G=F(x,`${d}/publicSubtableFields/${V}`,64);(!b.includes(V)||I.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"))&&p("NATIVE_PUBLIC_SUBTABLE_FIELDS_INVALID",`${d}/publicSubtableFields/${V}`)}}if(T.some(V=>V.startsWith("public."))){Object.prototype.hasOwnProperty.call(u,"publicRecordFields")||p("NATIVE_PUBLIC_RECORD_FIELDS_REQUIRED",`${d}/publicRecordFields`);let V=F(u.publicRecordFields,`${d}/publicRecordFields`,64);(V.length<1||V.some(x=>!b.includes(x))||V.some(x=>I.get(x)==="signature"||I.get(x)==="subtable"&&!k?.[x]))&&p("NATIVE_PUBLIC_RECORD_FIELDS_INVALID",`${d}/publicRecordFields`)}let q=Object.prototype.hasOwnProperty.call(u,"requiredFields")?F(u.requiredFields,`${d}/requiredFields`,64):[],j=_.surface||{},ue=j.fields||{},fe=String(j.mutationOwner||"native")==="native"&&j.generated?.create!==!1,K=_.schema.fields.filter(V=>Ke(V,ue[V.code])).map(V=>String(V.code));if(T.includes("create")&&!fe&&p("NATIVE_PUBLIC_CREATE_FIELDS_INCOMPLETE",`${d}/fields`),T.includes("create")&&!Object.prototype.hasOwnProperty.call(u,"draft")&&p("NATIVE_PUBLIC_DRAFT_REQUIRED",`${d}/draft`),T.includes("create"))for(let V of K){let x=b.includes(V)?q.includes(V)?null:"requiredFields":"fields";x&&p("NATIVE_PUBLIC_CREATE_FIELDS_INCOMPLETE",`${d}/${x}`,{resourceCode:z,fieldCode:V})}if(Object.prototype.hasOwnProperty.call(u,"draft")){let V=g(u.draft,`${d}/draft`);y(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 T.includes("draft.read")&&p("NATIVE_PUBLIC_DRAFT_REQUIRED",`${d}/draft`);let Ie=Object.prototype.hasOwnProperty.call(u,"validations")?$(u.validations,`${d}/validations`,16):[],ie=new Set;Ie.forEach((V,x)=>{let v=`${d}/validations/${x}`,J=g(V,v);y(J,["code","kind","fields","result"],v);let W=w(J.code,`${v}/code`);ie.has(W)&&p("NATIVE_PUBLIC_VALIDATION_DUPLICATE",`${v}/code`),L(J.kind,"duplicate",`${v}/kind`),L(J.result,"availability",`${v}/result`);let me=F(J.fields,`${v}/fields`,8);(me.length<1||me.some(G=>!b.includes(G))||me.some(G=>["file","subtable"].includes(I.get(G)||"")))&&p("NATIVE_PUBLIC_VALIDATION_FIELD_INVALID",`${v}/fields`),ie.add(W)}),r.add(m)})}function di(e,t){let o=g(e,t);y(o,["policies"],t),$(o.policies,`${t}/policies`,16).length<1&&p("NATIVE_PUBLIC_POLICY_REQUIRED",t)}function li(e){return{policies:X(e.frontend.publicAccess.policies.map(t=>({code:t.code,routeCode:t.routeCode,mode:t.mode,resourceCode:t.resourceCode,operations:M(t.operations),fields:M(t.fields),...t.requiredFields?{requiredFields:M(t.requiredFields)}:{},...t.ownRecordFields?{ownRecordFields:M(t.ownRecordFields)}:{},...t.publicRecordFields?{publicRecordFields:M(t.publicRecordFields)}:{},...t.publicFilters?{publicFilters:t.publicFilters.map(o=>({field:o.field,operator:o.operator,value:o.value})).sort((o,n)=>ae(o.field,n.field))}:{},...t.publicSubtableFields?{publicSubtableFields:Object.fromEntries(Object.entries(t.publicSubtableFields).sort(([o],[n])=>o.localeCompare(n)).map(([o,n])=>[o,M(Array.isArray(n)?n.map(String):[])]))}:{},...t.serverGeneratedFields?{serverGeneratedFields:t.serverGeneratedFields.map(o=>({field:o.field,kind:o.kind})).sort((o,n)=>ae(o.field,n.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(o=>({code:o.code,kind:o.kind,fields:M(o.fields),result:o.result})),o=>o.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 o of e.data.resources){let n=lo(o),s=`/admin/resources/${o.code}`,i=[["list",s],["detail",`${s}/:id`],["create",`${s}/new`],["update",`${s}/:id/edit`]];for(let[c,r]of i)n[c]&&t.push({owner:`resource:${o.code}:${c}`,path:r},{owner:`resource:${o.code}:${c}: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 o=!1;for(let n of e.workflows.definitions)["standalone","hidden-handoff"].includes(n.launch.mode)&&(o=!0);o&&t.push({owner:"workflow:launch",path:"/workflows/:workflowCode/start"},{owner:"workflow:launch:mobile",path:"/m/workflows/:workflowCode/start"})}return t}function ct(e){let t=new Map(co(e).map(o=>[it(o.path),o]));return X(e.frontend.routes.map((o,n)=>{let s=`/config/frontend/routes/${n}`,i=g(o,s);y(i,["code","path","label","surface","parentCode","capability","access","pinned","tabPersistence","keepAlive"],s,!0),["admin","user"].includes(i.surface)||p("NATIVE_ROUTE_SURFACE_INVALID",`${s}/surface`);let c=le(i.path,`${s}/path`);i.surface==="admin"&&c!=="/admin"&&!c.startsWith("/admin/")&&p("NATIVE_ADMIN_ROUTE_PATH_INVALID",`${s}/path`),i.surface==="user"&&(c==="/admin"||c.startsWith("/admin/"))&&p("NATIVE_USER_ROUTE_PATH_RESERVED",`${s}/path`);let r=it(c),a=t.get(r);a&&p("NATIVE_ROUTE_PATH_CONFLICT",`${s}/path`,{path:c,owner:a.owner}),t.set(r,{owner:`frontend:${String(i.code||n)}`,path:c});let f=/[:*]/.test(c),E=Yt(i,s,e.appCode),d=i.pinned===void 0?void 0:Fe(i.pinned,`${s}/pinned`),u=i.tabPersistence===void 0?f?"none":"session":R(i.tabPersistence,`${s}/tabPersistence`,16),m=i.keepAlive===void 0?"none":R(i.keepAlive,`${s}/keepAlive`,16);return["session","none"].includes(u)||p("NATIVE_ROUTE_TAB_PERSISTENCE_INVALID",`${s}/tabPersistence`),["none","memory"].includes(m)||p("NATIVE_ROUTE_KEEP_ALIVE_INVALID",`${s}/keepAlive`),f&&d===!0&&p("NATIVE_DYNAMIC_ROUTE_PINNED_FORBIDDEN",`${s}/pinned`),f&&u==="session"&&p("NATIVE_DYNAMIC_ROUTE_TAB_PERSISTENCE_FORBIDDEN",`${s}/tabPersistence`),f&&m==="memory"&&p("NATIVE_DYNAMIC_ROUTE_KEEP_ALIVE_FORBIDDEN",`${s}/keepAlive`),{code:w(i.code,`${s}/code`),path:c,label:R(i.label,`${s}/label`,255),surface:i.surface,...i.parentCode===void 0?{}:{parentCode:w(i.parentCode,`${s}/parentCode`)},...E,...d===void 0?{}:{pinned:d},tabPersistence:u,keepAlive:m}}),o=>o.code)}function lo(e){let t=e.surface===void 0?{}:g(e.surface,"/surface"),o=t.mutationOwner||"native",n=t.generated===void 0?{}:g(t.generated,"/surface/generated"),s=o==="native";return{list:n.list??!0,detail:n.detail??!0,create:n.create??s,update:n.update??s,delete:n.delete??s}}function uo(e){let t=[];for(let o of X(e.data.resources,n=>n.code).flatMap(n=>[{resource:n,viewCode:void 0},...(n.surface?.views||[]).map(s=>({viewCode:s.code,resource:{...n,name:s.name,surface:Rt(n.surface,s.code)}}))])){let{resource:n,viewCode:s}=o,i=`/admin/resources/${n.code}${s?`/views/${s}`:""}`,c=lo(n),r=[{operation:"list",kind:"resource-list",path:`${i}`,label:n.name,capability:n.capabilities.read,navigationEligible:!0},{operation:"detail",kind:"resource-detail",path:`${i}/:id`,label:`${n.name}\u8BE6\u60C5`,capability:n.capabilities.read,navigationEligible:!1},{operation:"create",kind:"resource-create",path:`${i}/new`,label:`\u65B0\u589E${n.name}`,capability:n.capabilities.create,navigationEligible:!1},{operation:"update",kind:"resource-update",path:`${i}/:id/edit`,label:`\u7F16\u8F91${n.name}`,capability:n.capabilities.update,navigationEligible:!1}];for(let a of r)c[a.operation]&&t.push({code:`resource:${n.code}${s?`:view:${s}`:""}:${a.operation}`,kind:a.kind,path:a.path,label:a.label,navigationEligible:a.navigationEligible,capability:a.capability,resourceCode:n.code,...s?{viewCode:s}:{}})}for(let o of ct(e))o.surface==="admin"&&t.push({code:`operation:${o.code}`,kind:"operation",path:o.path,label:o.label,navigationEligible:!/[:*]/.test(o.path),routeCode:o.code});return t.sort((o,n)=>ae(o.code,n.code))}function fo(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,o)=>({code:t.code,label:t.label,...t.icon===void 0?{}:{icon:t.icon},order:t.order??o,items:t.items.map((n,s)=>({pageCode:fo(n.page),...n.label===void 0?{}:{label:n.label},...n.icon===void 0?{}:{icon:n.icon},order:n.order??s})).sort((n,s)=>n.order-s.order||ae(n.pageCode,s.pageCode))})).sort((t,o)=>t.order-o.order||ae(t.code,o.code))}function fi(e,t){let o=$(e,t,Y.adminNavigationGroups),n=0;o.forEach((s,i)=>{let c=`${t}/${i}`,r=g(s,c);y(r,["code","label","icon","order","items"],c,!0),w(r.code,`${c}/code`),R(r.label,`${c}/label`,255),rt(r.icon,`${c}/icon`),Yn(r.order,`${c}/order`);let a=$(r.items,`${c}/items`,500);a.length===0&&p("NATIVE_ADMIN_GROUP_ORPHANED",`${c}/items`),n+=a.length,n>Y.adminNavigationItems&&p("NATIVE_ARRAY_LIMIT_EXCEEDED",t),a.forEach((f,E)=>{let d=`${c}/items/${E}`,u=g(f,d);y(u,["page","label","icon","order"],d,!0),pi(u.page,`${d}/page`),u.label!==void 0&&R(u.label,`${d}/label`,255),rt(u.icon,`${d}/icon`),Yn(u.order,`${d}/order`)})})}function pi(e,t){let o=g(e,t),n=R(o.kind,`${t}/kind`,64);if(n==="resource"){y(o,["kind","resourceCode"],t,["viewCode"]),o.viewCode!==void 0&&w(o.viewCode,`${t}/viewCode`),z(o.resourceCode,`${t}/resourceCode`);return}if(n==="operation"){y(o,["kind","routeCode"],t),w(o.routeCode,`${t}/routeCode`);return}p("NATIVE_ADMIN_PAGE_REFERENCE_KIND_INVALID",`${t}/kind`)}function _i(e){let t=new Map(uo(e).map(s=>[String(s.code),s])),o=new Set,n=new Set;e.frontend.admin.navigation.forEach((s,i)=>{let c=`/config/frontend/admin/navigation/${i}`;o.has(s.code)&&p("NATIVE_ADMIN_GROUP_DUPLICATE",`${c}/code`),o.add(s.code),s.label===s.code&&p("NATIVE_ADMIN_USER_LABEL_REQUIRED",`${c}/label`),s.items.forEach((r,a)=>{let f=`${c}/items/${a}`,E=fo(r.page),d=t.get(E);(!d||d.navigationEligible!==!0)&&p("NATIVE_ADMIN_PAGE_NOT_FOUND",`${f}/page`),n.has(E)&&p("NATIVE_ADMIN_PAGE_DUPLICATE",`${f}/page`),n.add(E);let u=r.page.resourceCode||r.page.routeCode||r.page.workflowCode||E,m=r.label||d.label;(!m||m===u||m===E)&&p("NATIVE_ADMIN_USER_LABEL_REQUIRED",`${f}/label`)})})}function Ei(e,t){let o=$(e,t,Y.adminPages),n=new Set;o.forEach((s,i)=>{let c=`${t}/${i}`,r=g(s,c);y(r,["code","kind","path","label","navigationEligible","capability","access","resourceCode","viewCode","routeCode"],c,!0);let a=R(r.code,`${c}/code`,255);n.has(a)&&p("NATIVE_ADMIN_PAGE_DUPLICATE",`${c}/code`),n.add(a);let f=R(r.kind,`${c}/kind`,64);if(["resource-list","resource-detail","resource-create","resource-update","operation"].includes(f)||p("NATIVE_ADMIN_PAGE_KIND_INVALID",`${c}/kind`),le(r.path,`${c}/path`),R(r.label,`${c}/label`,255),Fe(r.navigationEligible,`${c}/navigationEligible`),r.capability!==void 0&&r.access!==void 0&&p("NATIVE_ROUTE_ACCESS_CONFLICT",`${c}/access`),r.capability!==void 0&&R(r.capability,`${c}/capability`,255),r.access!==void 0){let E=g(r.access,`${c}/access`);y(E,["allOf","anyOf"],`${c}/access`,!0);for(let d of["allOf","anyOf"])E[d]!==void 0&&F(E[d],`${c}/access/${d}`,50)}for(let E of["resourceCode","viewCode","routeCode"])r[E]!==void 0&&w(r[E],`${c}/${E}`)})}function Ai(e,t){let o=$(e,t,Y.adminNavigationGroups),n=0;o.forEach((s,i)=>{let c=`${t}/${i}`,r=g(s,c);y(r,["code","label","icon","order","items"],c,!0),w(r.code,`${c}/code`),R(r.label,`${c}/label`,255),rt(r.icon,`${c}/icon`),Z(r.order,`${c}/order`,-1e4,1e4);let a=$(r.items,`${c}/items`,500);a.length===0&&p("NATIVE_ADMIN_GROUP_ORPHANED",`${c}/items`),n+=a.length,n>Y.adminNavigationItems&&p("NATIVE_ARRAY_LIMIT_EXCEEDED",t),a.forEach((f,E)=>{let d=`${c}/items/${E}`,u=g(f,d);y(u,["pageCode","label","icon","order"],d,!0),R(u.pageCode,`${d}/pageCode`,255),u.label!==void 0&&R(u.label,`${d}/label`,255),rt(u.icon,`${d}/icon`),Z(u.order,`${d}/order`,-1e4,1e4)})})}var Ii=new Set(["application-todo-center","workflow-work-center","workflow-launch","workflow-task","workflow-instance","resource-records","resource-submit"]);function mi(e,t,o){let n=g(e,t);y(n,["schemaVersion","appCode","devicePolicy","rootEntry","authentication","routes","digest"],t),L(n.schemaVersion,so,`${t}/schemaVersion`),L(n.appCode,o,`${t}/appCode`),qt(n.devicePolicy,`${t}/devicePolicy`),gi(n.rootEntry,`${t}/rootEntry`),Ni(n.authentication,`${t}/authentication`),zt(n.digest,`${t}/digest`);let s=$(n.routes,`${t}/routes`,Y.routes),i=new Set;s.forEach((c,r)=>{let a=`${t}/routes/${r}`,f=g(c,a),E=f.kind==="resource-records"||f.kind==="resource-submit";y(f,["code","kind","desktop","mobile"],a,["workflowCode",...E?["resourceCode"]:[]]);let d=R(f.code,`${a}/code`,255);i.has(d)&&p("NATIVE_ROUTE_MANIFEST_DUPLICATE",`${a}/code`),i.add(d);let u=R(f.kind,`${a}/kind`,64);if(Ii.has(u)||p("NATIVE_ROUTE_MANIFEST_KIND_INVALID",`${a}/kind`),f.workflowCode!==void 0&&w(f.workflowCode,`${a}/workflowCode`),E){let A=z(f.resourceCode,`${a}/resourceCode`);L(d,`user.${A}.${f.kind==="resource-records"?"records":"submit"}`,`${a}/code`)}else f.resourceCode!==void 0&&p("NATIVE_PROPERTY_UNKNOWN",`${a}/resourceCode`);let m=zn(f.desktop,`${a}/desktop`,o),l=zn(f.mobile,`${a}/mobile`,o);m.surface!=="user"&&p("NATIVE_ROUTE_MANIFEST_DESKTOP_SURFACE_INVALID",`${a}/desktop/surface`),l.surface!=="user"&&p("NATIVE_ROUTE_MANIFEST_MOBILE_SURFACE_INVALID",`${a}/mobile/surface`),m.routeCode===l.routeCode&&p("NATIVE_ROUTE_MANIFEST_PAIR_DUPLICATE",a)}),L(n.digest,ee({schemaVersion:n.schemaVersion,appCode:n.appCode,devicePolicy:n.devicePolicy,rootEntry:n.rootEntry,authentication:n.authentication,routes:n.routes}),`${t}/digest`)}function qt(e,t){let o=g(e,t);y(o,["kind","mobileMaxWidthPx","desktopMinWidthPx"],t),L(o.kind,"viewport-family",`${t}/kind`);let n=Z(o.mobileMaxWidthPx,`${t}/mobileMaxWidthPx`,320,1600),s=Z(o.desktopMinWidthPx,`${t}/desktopMinWidthPx`,320,1600);return s!==n+1&&p("NATIVE_FRONTEND_DEVICE_POLICY_INVALID",t),{kind:"viewport-family",mobileMaxWidthPx:n,desktopMinWidthPx:s}}function gi(e,t){let o=g(e,t);y(o,["code","desktop","mobile"],t);let n=w(o.code,`${t}/code`),s=Wt(o.desktop,`${t}/desktop`),i=Wt(o.mobile,`${t}/mobile`);return(s===i||i==="/"||!i.startsWith("/m/"))&&p("NATIVE_ROUTE_MANIFEST_ROOT_ENTRY_INVALID",t),s.startsWith("/m/")&&p("NATIVE_ROUTE_MANIFEST_ROOT_ENTRY_INVALID",`${t}/desktop`),{code:n,desktop:s,mobile:i}}function Ni(e,t){let o=g(e,t);y(o,["desktop","mobile"],t);let n=Wn(o.desktop,`${t}/desktop`,!1),s=Wn(o.mobile,`${t}/mobile`,!0);return(n.routeCode===s.routeCode||n.path===s.path)&&p("NATIVE_ROUTE_MANIFEST_AUTHENTICATION_DUPLICATE",t),{desktop:n,mobile:s}}function Wn(e,t,o){let n=g(e,t);y(n,["routeCode","path"],t);let s=w(n.routeCode,`${t}/routeCode`),i=Wt(n.path,`${t}/path`);return(o?!i.startsWith("/m/"):i.startsWith("/m/"))&&p("NATIVE_ROUTE_MANIFEST_AUTHENTICATION_PATH_INVALID",`${t}/path`),{routeCode:s,path:i}}function Wt(e,t){let o=le(e,t);return/[:*?#\\\\]/.test(o)&&p("NATIVE_ROUTE_MANIFEST_STATIC_PATH_INVALID",t),o}function zn(e,t,o){let n=g(e,t);y(n,["routeCode","path","surface","pathParams","requiresAuthentication"],t,["capability","access"]),w(n.routeCode,`${t}/routeCode`);let s=le(n.path,`${t}/path`),i=R(n.surface,`${t}/surface`,16);["admin","user"].includes(i)||p("NATIVE_ROUTE_SURFACE_INVALID",`${t}/surface`);let c=F(n.pathParams,`${t}/pathParams`,8);return c.forEach((r,a)=>{(!/^[A-Za-z][A-Za-z0-9_]*$/.test(r)||r.length>64)&&p("NATIVE_ROUTE_PATH_PARAM_INVALID",`${t}/pathParams/${a}`)}),Q(c)!==Q(po(s))&&p("NATIVE_ROUTE_PATH_PARAMS_MISMATCH",`${t}/pathParams`),Yt(n,t,o),n.requiresAuthentication!==!0&&p("NATIVE_ROUTE_AUTHENTICATION_REQUIRED",`${t}/requiresAuthentication`),n}function po(e){return M([...e.matchAll(/:([A-Za-z][A-Za-z0-9_]*)/g)].map(t=>t[1]))}function Gn(e,t,o,n){return{routeCode:e,path:t,surface:o,pathParams:po(t),...n?.capability?{capability:n.capability}:{},...n?.access?{access:n.access}:{},requiresAuthentication:!0}}function qn(e,t,o,n){return e==="workflow-launch"?`workflow.${o}.launch.${t}`:e==="application-todo-center"?`application.todo-center.${t}`:e==="resource-records"?`user.${n}.records.${t}`:e==="resource-submit"?`user.${n}.submit.${t}`:`${e.replace(/-/g,".")}.${t}`}function Ti(e){let t=e.appCode,o=[],n=(m,l,A,N,_,I,T)=>{o.push({code:m,kind:l,..._?{workflowCode:_}:{},...T?{resourceCode:T}:{},desktop:Gn(qn(l,"desktop",_,T),A,"user",I),mobile:Gn(qn(l,"mobile",_,T),N,"user",I)})};e.frontend.user.applicationTodoCenter===!0&&n("application:todo-center","application-todo-center","/todos","/m/todos");let s=_o(e);s.length>0&&(n("workflow:work-center","workflow-work-center","/work-center","/m/work-center"),n("workflow:task","workflow-task","/tasks/:taskId","/m/tasks/:taskId"),n("workflow:instance","workflow-instance","/workflows/:instanceId","/m/workflows/:instanceId"));for(let m of s){if(!["standalone","hidden-handoff"].includes(m.launch.mode))continue;let l=M([m.launch.submission?.create?.requiredCapability,m.launch.submission?.existing?.requiredCapability].filter(A=>!!A));n(`workflow:${m.code}:launch`,"workflow-launch","/workflows/:workflowCode/start","/m/workflows/:workflowCode/start",m.code,l.length===1?{capability:l[0]}:l.length>1?{access:{anyOf:l}}:void 0)}let i=o.sort((m,l)=>ae(String(m.code),String(l.code))),c=ct(e),r=m=>{let l=m==="mobile"?"/m/":"/",A=c.filter(_=>_.surface==="user"&&!/[:*?#\\\\]/.test(_.path)&&_.path===l).sort((_,I)=>ae(_.code,I.code))[0];if(A)return{code:A.code,path:A.path};let N=c.filter(_=>_.surface==="user"&&!/[:*?#\\\\]/.test(_.path)&&(m==="mobile"?_.path.startsWith("/m/"):!_.path.startsWith("/m/"))).sort((_,I)=>ae(_.code,I.code))[0];return N?{code:N.code,path:N.path}:{code:m==="mobile"?"application-root-mobile":"application-root",path:l}},a=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"}},f=qt(e.frontend.devicePolicy,"/config/frontend/devicePolicy"),E=r("desktop"),d=r("mobile"),u={schemaVersion:so,appCode:t,devicePolicy:f,rootEntry:{code:E.code,desktop:E.path,mobile:d.path},authentication:a,routes:i};return{...u,digest:ee(u)}}function rt(e,t){if(e===void 0)return;let o=R(e,t,32);vs.has(o)||p("NATIVE_ADMIN_ICON_INVALID",t)}function Yn(e,t){e!==void 0&&Z(e,t,-1e4,1e4)}function Yt(e,t,o){return e.capability!==void 0&&e.access!==void 0&&p("NATIVE_ROUTE_ACCESS_CONFLICT",`${t}/access`),e.capability!==void 0?{capability:Ne(e.capability,`${t}/capability`,o)}:e.access===void 0?{}:{access:dt(e.access,`${t}/access`,o)}}function dt(e,t,o){let n=g(e,t);y(n,["allOf","anyOf"],t,!0);let s=n.allOf===void 0?void 0:M(F(n.allOf,`${t}/allOf`,50).map((c,r)=>Ne(c,`${t}/allOf/${r}`,o))),i=n.anyOf===void 0?void 0:M(F(n.anyOf,`${t}/anyOf`,50).map((c,r)=>Ne(c,`${t}/anyOf/${r}`,o)));return(s?.length||0)+(i?.length||0)===0&&p("NATIVE_ROUTE_ACCESS_EMPTY",t),{...s===void 0?{}:{allOf:s},...i===void 0?{}:{anyOf:i}}}function _o(e){let t=new Map(ro(e).map(s=>[String(s.code),s])),o=e.workflows.definitions.map((s,i)=>{let c=`/config/workflows/definitions/${i}`,r=g(s,c);y(r,["version","definition","launch"],c,["detailRouteCode"]);let a=g(r.definition,`${c}/definition`),f=r.detailRouteCode===void 0?void 0:Ao(r.detailRouteCode,`${c}/detailRouteCode`);return{code:w(a.code,`${c}/definition/code`),title:R(a.title,`${c}/definition/title`,255),version:we(r.version,`${c}/version`),launch:Ci(e,a,r.launch,`${c}/launch`,t),...f?{detailRouteCode:f}:{},definition:a}});return M(o.map(s=>s.code)).map(s=>{let i=o.filter(f=>f.code===s),c=e.workflows.activations.find(f=>f.workflowCode===s)?.definitionVersion,r=i.find(f=>f.version===c)||[...i].sort((f,E)=>E.version-f.version)[0],a=new Set;for(let f of i){let E=g(f.definition.nodes,"/config/workflows/definitions/nodes");for(let d of Object.values(E)){let u=g(d,"/config/workflows/definitions/nodes/*");if(u.kind==="approval")for(let m of F(u.allowedOperations||[],"/config/workflows/definitions/nodes/*/allowedOperations",20))a.add(m)}}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:no(i.map(f=>f.version)),bindingVersions:no(e.workflows.bindings.map((f,E)=>{let d=`/config/workflows/bindings/${E}`,u=g(f,d),m=g(u.binding,`${d}/binding`);return{code:w(m.workflowCode,`${d}/binding/workflowCode`),version:we(u.version,`${d}/version`)}}).filter(f=>f.code===s).map(f=>f.version)),providerCodes:M(e.workflows.providers.map((f,E)=>w(g(f,`/config/workflows/providers/${E}`).code,`/config/workflows/providers/${E}/code`))),allowedOperations:[...a].sort(ae),editableParameterCodes:M(e.workflows.editableParameters.map((f,E)=>{let d=`/config/workflows/editableParameters/${E}`,u=g(f,d);return{code:w(u.code,`${d}/code`),workflowCode:w(u.workflowCode,`${d}/workflowCode`)}}).filter(f=>f.workflowCode===s).map(f=>f.code))}})}function Eo(e,t){let o=g(e,t);y(o,["mode"],t,["submission"]);let n=R(o.mode,`${t}/mode`,32);return["standalone","custom-page","hidden-handoff","work-center-only"].includes(n)||p("NATIVE_WORKFLOW_LAUNCH_MODE_INVALID",`${t}/mode`),{mode:n,...o.submission===void 0?{}:{submission:g(o.submission,`${t}/submission`)}}}function Ci(e,t,o,n,s){let i=Eo(o,n);if(!i.submission)return{mode:i.mode};["standalone","hidden-handoff"].includes(i.mode)||p("NATIVE_WORKFLOW_NAMED_OPERATION_SUBMISSION_INVALID",`${n}/submission`);let c=g(i.submission,`${n}/submission`);y(c,["kind"],`${n}/submission`,["create","existing","context"]),L(c.kind,"named-operation",`${n}/submission/kind`);let r=n.endsWith("/launch")?n.slice(0,-7):n,a=g(t.subject,`${r}/definition/subject`),f=z(a.resourceCode,`${r}/definition/subject/resourceCode`),E=e.data.resources.findIndex(O=>O.code===f),d=e.data.resources[E];(E<0||!d)&&p("NATIVE_WORKFLOW_SUBJECT_RESOURCE_MISSING",`${r}/definition/subject/resourceCode`);let u=new Set(g(d.schema,`/config/data/resources/${E}/schema`).fields.map(O=>String(O.code))),m=new Map(e.backend.operations.map(O=>[String(O.code),O])),l=(O,S)=>{let D=`${n}/submission/${S}`,U=g(O,D);y(U,["operationCode","inputs","output"],D);let k=w(U.operationCode,`${D}/operationCode`),q=m.get(k),j=s.get(k),ue=j?.platformAccess?.workflow?.codes;(!q||!j||j.method!=="POST"||!Array.isArray(ue)||!ue.includes(t.code))&&p("NATIVE_WORKFLOW_NAMED_OPERATION_INVALID",D);let fe=g(q.requestSchema,`${D}/operation/requestSchema`),K=g(fe.properties,`${D}/operation/requestSchema/properties`),Ie=new Set(fe.required===void 0?[]:F(fe.required,`${D}/operation/requestSchema/required`,64)),ie=g(U.inputs,`${D}/inputs`),V=Object.entries(ie);(!V.length||V.length>64)&&p("NATIVE_WORKFLOW_NAMED_OPERATION_INPUT_INVALID",`${D}/inputs`);let x=new Set,v=new Map,J={};for(let[G,H]of V){(!Mn.test(G)||!Object.prototype.hasOwnProperty.call(K,G))&&p("NATIVE_WORKFLOW_NAMED_OPERATION_INPUT_INVALID",`${D}/inputs/${G}`);let $e=`${D}/inputs/${G}`,ut=g(H,$e),Oe=R(ut.source,`${$e}/source`,32);if(["field","idempotency-key","current-user-reference","subject-id","subject-revision","requested-at"].includes(Oe)||p("NATIVE_WORKFLOW_NAMED_OPERATION_INPUT_INVALID",$e),y(ut,["source"],$e,Oe==="field"?["fieldCode"]:!1),v.set(Oe,(v.get(Oe)||0)+1),Oe==="field"){let ze=B(ut.fieldCode,`${$e}/fieldCode`);(x.has(ze)||!u.has(ze))&&p("NATIVE_WORKFLOW_NAMED_OPERATION_INPUT_INVALID",`${$e}/fieldCode`),x.add(ze),J[G]={source:Oe,fieldCode:ze}}else J[G]={source:Oe}}([...Ie].some(G=>!(G in ie))||(v.get("idempotency-key")||0)!==1||!V.some(([G,H])=>g(H,`${D}/inputs/${G}`).source==="idempotency-key"&&Ie.has(G))||S==="create"&&((v.get("subject-id")||0)>0||(v.get("subject-revision")||0)>0)||S==="existing"&&((v.get("subject-id")||0)!==1||(v.get("subject-revision")||0)!==1))&&p("NATIVE_WORKFLOW_NAMED_OPERATION_INPUT_INVALID",`${D}/inputs`);let W=g(U.output,`${D}/output`);y(W,["subjectId"],`${D}/output`,["subjectRevision","processCommand"]);let me=g(g(q.responseSchema,`${D}/operation/responseSchema`).properties,`${D}/operation/responseSchema/properties`);for(let G of["subjectId","subjectRevision","processCommand"]){if(W[G]===void 0)continue;let H=R(W[G],`${D}/output/${G}`,128);(!Mn.test(H)||!Object.prototype.hasOwnProperty.call(me,H))&&p("NATIVE_WORKFLOW_NAMED_OPERATION_OUTPUT_INVALID",`${D}/output/${G}`)}return{operationCode:k,method:"POST",path:j.path,requiredCapability:j.requiredCapability,requestSchemaDigest:j.requestSchemaDigest,responseSchemaDigest:j.responseSchemaDigest,inputs:J,output:{...W},fieldCodes:x}},A=c.create===void 0?void 0:l(c.create,"create"),N=c.existing===void 0?void 0:l(c.existing,"existing");!A&&!N&&p("NATIVE_WORKFLOW_NAMED_OPERATION_SUBMISSION_INVALID",`${n}/submission`);let _=new Set([...A?.fieldCodes||[],...N?.fieldCodes||[]]),I=c.context===void 0?[]:$(c.context,`${n}/submission/context`,16),T=new Set,b=I.map((O,S)=>{let D=`${n}/submission/context/${S}`,U=g(O,D);y(U,["queryParameter","fieldCode"],D);let k=R(U.queryParameter,`${D}/queryParameter`,64),q=B(U.fieldCode,`${D}/fieldCode`);return(!/^[A-Za-z][A-Za-z0-9]{0,63}$/.test(k)||T.has(k)||!_.has(q))&&p("NATIVE_WORKFLOW_LAUNCH_CONTEXT_INVALID",D),T.add(k),{queryParameter:k,fieldCode:q}}),C=O=>{let{fieldCodes:S,...D}=O;return D};return{mode:i.mode,submission:{kind:"named-operation",...A?{create:C(A)}:{},...N?{existing:C(N)}:{},context:b}}}function Ao(e,t){let o=g(e,t);y(o,["desktop","mobile"],t);let n=w(o.desktop,`${t}/desktop`),s=w(o.mobile,`${t}/mobile`);return n===s&&p("NATIVE_WORKFLOW_DETAIL_ROUTE_DUPLICATE",t),{desktop:n,mobile:s}}function bi(e,t){let o=new Set(t.map(E=>E.code)),n=new Map;e.data.resources.forEach((E,d)=>{let u=`/config/data/resources/${d}`,m=g(E,u);for(let[N,_]of Object.entries(m.fieldPolicies||{})){if(!ve(N))continue;let I=`${u}/fieldPolicies/${N}/read`,T=g(_,`${u}/fieldPolicies/${N}`);for(let b of F(T.read||[],I,2e3))o.has(b)||p("NATIVE_CAPABILITY_REFERENCE_MISSING",I)}let l=m.surface===void 0?{}:g(m.surface,`${u}/surface`);if(["native","queued-command"].includes(l.mutationOwner||"native"))return;let A=g(m.capabilities,`${u}/capabilities`);for(let N of["create","update","delete"])n.set(String(A[N]),N)});let s=new Set;for(let[E,d]of e.authz.roles.entries()){let u=`/config/authz/roles/${E}`,m=g(d,u);y(m,["code","name","description","capabilities"],u,!0);let l=w(m.code,`${u}/code`);s.has(l)&&p("NATIVE_ROLE_DUPLICATE",`${u}/code`),s.add(l),R(m.name,`${u}/name`,255);let A=F(m.capabilities,`${u}/capabilities`,2e3);for(let[N,_]of A.entries())n.has(_)&&p("NATIVE_DATA_SURFACE_MUTATION_GRANT_FORBIDDEN",`${u}/capabilities/${N}`,{operation:n.get(_)}),o.has(_)||p("NATIVE_CAPABILITY_REFERENCE_MISSING",`${u}/capabilities`)}let i=e.authz.authenticatedUserRoleCode===void 0?"":w(e.authz.authenticatedUserRoleCode,"/config/authz/authenticatedUserRoleCode");i&&!s.has(i)&&p("NATIVE_AUTHENTICATED_USER_ROLE_REFERENCE_MISSING","/config/authz/authenticatedUserRoleCode");let c=new Set,r=0;for(let[E,d]of e.perspectives.entries()){let u=`/config/perspectives/${E}`,m=g(d,u);y(m,["code","name","description","roleCodes","capabilityCodes","default"],u,!0);let l=w(m.code,`${u}/code`);c.has(l)&&p("NATIVE_PERSPECTIVE_DUPLICATE",`${u}/code`),c.add(l),R(m.name,`${u}/name`,255);let A=F(m.roleCodes,`${u}/roleCodes`,20);A.length<1&&p("NATIVE_PERSPECTIVE_ROLE_REQUIRED",`${u}/roleCodes`),A.forEach((I,T)=>{s.has(I)||p("NATIVE_PERSPECTIVE_ROLE_MISSING",`${u}/roleCodes/${T}`)});let N=M(e.authz.roles.filter(I=>A.includes(I.code)).flatMap(I=>I.capabilities)),_=F(m.capabilityCodes,`${u}/capabilityCodes`,2e3);Q(N)!==Q(_)&&p("NATIVE_PERSPECTIVE_CAPABILITY_PROJECTION_MISMATCH",`${u}/capabilityCodes`),m.default===!0?r+=1:m.default!==void 0&&p("NATIVE_PERSPECTIVE_DEFAULT_INVALID",`${u}/default`)}r>1&&p("NATIVE_PERSPECTIVE_DEFAULT_DUPLICATE","/config/perspectives");for(let[E,d]of e.backend.operations.entries()){let u=g(d,`/config/backend/operations/${E}`);o.has(u.capability)||p("NATIVE_CAPABILITY_REFERENCE_MISSING",`/config/backend/operations/${E}/capability`)}let a=new Set,f=new Set;for(let[E,d]of e.frontend.routes.entries()){let u=`/config/frontend/routes/${E}`,m=g(d,u),l=w(m.code,`${u}/code`);a.has(l)&&p("NATIVE_ROUTE_DUPLICATE",`${u}/code`),a.add(l);let A=le(m.path,`${u}/path`);f.has(A)&&p("NATIVE_ROUTE_PATH_DUPLICATE",`${u}/path`),f.add(A);let N=Yt(m,u,e.appCode);N.capability&&!o.has(N.capability)&&p("NATIVE_CAPABILITY_REFERENCE_MISSING",`${u}/capability`);let _=m.access===void 0?void 0:g(m.access,`${u}/access`);for(let I of["allOf","anyOf"]){let T=_?.[I]===void 0?[]:$(_[I],`${u}/access/${I}`,50);for(let[b,C]of T.entries()){let O=Ne(C,`${u}/access/${I}/${b}`,e.appCode);o.has(O)||p("NATIVE_CAPABILITY_REFERENCE_MISSING",`${u}/access/${I}/${b}`)}}}if(e.frontend.admin.access!==void 0){let E=dt(e.frontend.admin.access,"/config/frontend/admin/access",e.appCode);for(let d of["allOf","anyOf"])for(let[u,m]of(E[d]||[]).entries())o.has(m)||p("NATIVE_CAPABILITY_REFERENCE_MISSING",`/config/frontend/admin/access/${d}/${u}`)}for(let[E,d]of e.frontend.routes.entries()){let u=g(d,`/config/frontend/routes/${E}`);u.parentCode&&!a.has(u.parentCode)&&p("NATIVE_ROUTE_PARENT_MISSING",`/config/frontend/routes/${E}/parentCode`)}}function Oi(e){let t=new Set(e.authz.roles.map(f=>String(f.code))),o=e.authz.authenticatedUserRoleCode===void 0?"":w(e.authz.authenticatedUserRoleCode,"/config/authz/authenticatedUserRoleCode"),n=new Map(e.authz.scopeDimensions.map(f=>[String(f.code),{valueType:f.valueType==="uuid"?"uuid":"string",...f.valueSource?.resourceCode?{valueSourceResourceCode:String(f.valueSource.resourceCode)}:{}}])),s=new Set(n.keys()),i=new Map(e.data.resources.map((f,E)=>{let d=ye(f,`/config/data/resources/${E}`,e.appCode);return[d.code,new Map(d.schema.fields.map(u=>[String(u.code),u]))]}));for(let[f,E]of e.authz.scopeDimensions.entries()){let d=`/config/authz/scopeDimensions/${f}`,u=g(E,d);if(y(u,["code","name","resourceCode","valueType","hierarchyMode","valueSource"],d,!0),u.valueSource===void 0)continue;let m=g(u.valueSource,`${d}/valueSource`);y(m,["kind","resourceCode","labelField","enabledField"],`${d}/valueSource`,!0),m.kind!=="native_resource"&&p("NATIVE_SCOPE_VALUE_SOURCE_KIND_INVALID",`${d}/valueSource/kind`),u.valueType!=="uuid"&&p("NATIVE_SCOPE_VALUE_SOURCE_TYPE_INVALID",`${d}/valueType`);let l=z(m.resourceCode,`${d}/valueSource/resourceCode`),A=i.get(l);A||p("NATIVE_SCOPE_VALUE_SOURCE_RESOURCE_MISSING",`${d}/valueSource/resourceCode`);let N=B(m.labelField,`${d}/valueSource/labelField`);if(["text.short","text.long"].includes(String(A.get(N)?.type||""))||p("NATIVE_SCOPE_VALUE_SOURCE_LABEL_FIELD_INVALID",`${d}/valueSource/labelField`),m.enabledField!==void 0){let _=B(m.enabledField,`${d}/valueSource/enabledField`);A.get(_)?.type!=="boolean"&&p("NATIVE_SCOPE_VALUE_SOURCE_ENABLED_FIELD_INVALID",`${d}/valueSource/enabledField`)}}let c=new Set,r=new Set;for(let[f,E]of e.authz.scopeSources.entries()){let d=`/config/authz/scopeSources/${f}`,u=g(E,d);y(u,["code","name","resourceCode","subject","grants","operationField","enabledField","effectiveFromField","effectiveToField","failureMode"],d,!0);let m=w(u.code,`${d}/code`);c.has(m)&&p("NATIVE_SCOPE_SOURCE_DUPLICATE",`${d}/code`),c.add(m),R(u.name,`${d}/name`,255);let l=z(u.resourceCode,`${d}/resourceCode`),A=i.get(l);A||p("NATIVE_SCOPE_SOURCE_RESOURCE_MISSING",`${d}/resourceCode`);let N=g(u.subject,`${d}/subject`),_=R(N.type,`${d}/subject/type`,32);y(N,_==="role_membership"?["type","userIdField","roleCode"]:["type","userIdField"],`${d}/subject`),["user","role_membership"].includes(_)||p("NATIVE_SCOPE_SOURCE_SUBJECT_INVALID",`${d}/subject/type`);let I=xe(N.userIdField,A);vt(I)||p("NATIVE_SCOPE_SOURCE_SUBJECT_PATH_INVALID",`${d}/subject/userIdField`),_==="role_membership"&&!t.has(String(N.roleCode))&&p("NATIVE_ROLE_REFERENCE_MISSING",`${d}/subject/roleCode`);let T=new Set;for(let[b,C]of $(u.grants,`${d}/grants`,100).entries()){let O=`${d}/grants/${b}`,S=g(C,O);y(S,["dimensionCode","valueField","parentValueField"],O,!0);let D=w(S.dimensionCode,`${O}/dimensionCode`);(!s.has(D)||T.has(D))&&p("NATIVE_SCOPE_SOURCE_DIMENSION_INVALID",`${O}/dimensionCode`),T.add(D),u.failureMode==="last_known_good"&&r.add(D);for(let U of["valueField","parentValueField"]){if(S[U]===void 0)continue;let k=xe(S[U],A);$n(k,n.get(D),i)||p("NATIVE_SCOPE_SOURCE_GRANT_PATH_INVALID",`${O}/${U}`)}}T.size===0&&p("NATIVE_SCOPE_SOURCE_GRANT_REQUIRED",`${d}/grants`),["strict","last_known_good"].includes(u.failureMode)||p("NATIVE_SCOPE_SOURCE_FAILURE_MODE_INVALID",`${d}/failureMode`);for(let b of["operationField","enabledField","effectiveFromField","effectiveToField"]){if(u[b]===void 0)continue;let C=B(u[b],`${d}/${b}`);A.has(C)||p("NATIVE_SCOPE_SOURCE_FIELD_MISSING",`${d}/${b}`)}}$i(e,t,i,o);let a=new Set;for(let[f,E]of e.authz.dataPolicies.entries()){let d=`/config/authz/dataPolicies/${f}`,u=g(E,d);y(u,["code","name","resourceCode","unrestrictedRoleCodes","operations","matchMode","rules","readExpression","writeBoundary"],d,!0);let m=w(u.code,`${d}/code`);a.has(m)&&p("NATIVE_DATA_POLICY_DUPLICATE",`${d}/code`),a.add(m);let l=u.readExpression!==void 0,A=F(u.operations||[],`${d}/operations`,4);u.operations!==void 0&&(A.length===0||A.some(C=>!["read","create","update","delete"].includes(C)))&&p("NATIVE_DATA_POLICY_OPERATIONS_INVALID",`${d}/operations`),["AND","OR"].includes(u.matchMode)||p("NATIVE_DATA_POLICY_MATCH_MODE_INVALID",`${d}/matchMode`),l&&u.operations!==void 0&&p("NATIVE_DATA_POLICY_READ_EXPRESSION_OPERATIONS_FORBIDDEN",`${d}/operations`);let N=e.data.resources.find(C=>C.dataPolicyCode===m),_=u.resourceCode||N?.code,I=_?i.get(z(_,`${d}/resourceCode`)):void 0;l&&!I&&p("NATIVE_DATA_POLICY_RESOURCE_MISSING",`${d}/resourceCode`);let T=F(u.unrestrictedRoleCodes||[],`${d}/unrestrictedRoleCodes`,100);u.unrestrictedRoleCodes!==void 0&&T.length===0&&p("NATIVE_DATA_POLICY_UNRESTRICTED_ROLES_INVALID",`${d}/unrestrictedRoleCodes`);for(let C of T)t.has(C)||p("NATIVE_ROLE_REFERENCE_MISSING",`${d}/unrestrictedRoleCodes`);let b;try{let C=$(u.rules,`${d}/rules`,100).map((O,S)=>({rule:g(O,`${d}/rules/${S}`),pointer:`${d}/rules/${S}`}));C.length===0?(!l||u.matchMode!=="AND"||u.writeBoundary!=="capability_only")&&p("NATIVE_DATA_POLICY_WRITE_BOUNDARY_REQUIRED",d):u.writeBoundary!==void 0&&p("NATIVE_DATA_POLICY_WRITE_BOUNDARY_INVALID",`${d}/writeBoundary`),b=[...C],l&&(b.push(...st(u.readExpression,`${d}/readExpression`)),xn(u.readExpression,`${d}/readExpression`))}catch(C){throw C instanceof Be&&p(C.code,C.pointer),C}for(let{rule:C,pointer:O}of b){y(C,["subject","dimensionCode","relationCode","resourceCode","field","roleCodes","operation","valuePath","emptyMatchesAll","operator","value","operand"],O,!0);let S=B(C.field,`${O}/field`),D=I?.get(S);l&&!D&&p("NATIVE_DATA_POLICY_FIELD_MISSING",`${O}/field`);for(let K of F(C.roleCodes||[],`${O}/roleCodes`,100))t.has(K)||p("NATIVE_ROLE_REFERENCE_MISSING",`${O}/roleCodes`);let U=String(C.operator||""),k=C.operand==="db_now",q=["is_null","is_not_null"].includes(U),j=["eq","not_eq","in","not_in"].includes(U),ue=!k&&(C.operator!==void 0||C.value!==void 0);if([C.subject==="current_user"?"current_user":"",typeof C.dimensionCode=="string"?"dimension":"",typeof C.relationCode=="string"?"relationship":"",ue?"constant":"",k?"db_now":""].filter(Boolean).length!==1&&p("NATIVE_DATA_POLICY_RULE_SOURCE_INVALID",O),C.subject!==void 0&&C.subject!=="current_user"&&p("NATIVE_DATA_POLICY_SUBJECT_INVALID",`${O}/subject`),ue){if(!j&&!q&&p("NATIVE_DATA_POLICY_OPERATOR_INVALID",`${O}/operator`),["in","not_in"].includes(U)){let K=$(C.value,`${O}/value`,100).map((Ie,ie)=>R(Ie,`${O}/value/${ie}`,2048));(K.length===0||new Set(K).size!==K.length)&&p("NATIVE_DATA_POLICY_VALUE_INVALID",`${O}/value`)}else["eq","not_eq"].includes(U)?R(C.value,`${O}/value`,2048):(C.value!==void 0||C.operand!==void 0)&&p("NATIVE_DATA_POLICY_VALUE_INVALID",`${O}/value`);for(let K of["operation","valuePath","emptyMatchesAll","resourceCode","operand"])C[K]!==void 0&&p("NATIVE_DATA_POLICY_CONSTANT_RULE_INVALID",`${O}/${K}`)}if(k){(!["lt","lte","gt","gte"].includes(U)||C.value!==void 0||D?.type!=="datetime")&&p("NATIVE_DATA_POLICY_DB_NOW_INVALID",O);for(let K of["operation","valuePath","emptyMatchesAll","resourceCode","value"])C[K]!==void 0&&p("NATIVE_DATA_POLICY_DB_NOW_INVALID",`${O}/${K}`)}C.dimensionCode&&!s.has(C.dimensionCode)&&p("NATIVE_SCOPE_DIMENSION_MISSING",`${O}/dimensionCode`),r.has(String(C.dimensionCode||""))&&C.operation!=="read"&&p("NATIVE_SCOPE_SOURCE_LAST_KNOWN_GOOD_UNSAFE",`${O}/operation`)}}for(let[f,E]of e.data.resources.entries()){let d=g(E,`/config/data/resources/${f}`);d.dataPolicyCode&&!a.has(d.dataPolicyCode)&&p("NATIVE_DATA_POLICY_REFERENCE_MISSING",`/config/data/resources/${f}/dataPolicyCode`)}}function yi(e){try{nn(e.data.resources,"/config/data/resources")}catch(t){throw t instanceof _e&&p(t.code,t.pointer),t}}function $i(e,t,o,n){let s=new Set;for(let[i,c]of e.authz.roleMembershipSources.entries()){let r=`/config/authz/roleMembershipSources/${i}`,a=g(c,r);y(a,["code","name","resourceCode","userIdField","roleCode","enabledField","effectiveFromField","effectiveToField","failureMode"],r,!0);let f=w(a.code,`${r}/code`);f.length>100&&p("NATIVE_AUTHORIZATION_PROJECTION_SOURCE_CODE_INVALID",`${r}/code`),s.has(f)&&p("NATIVE_AUTHORIZATION_PROJECTION_SOURCE_DUPLICATE",`${r}/code`),s.add(f),R(a.name,`${r}/name`,255);let E=Kn(a.resourceCode,`${r}/resourceCode`,o);Hn(a.userIdField,`${r}/userIdField`,E),t.has(String(a.roleCode||""))||p("NATIVE_ROLE_REFERENCE_MISSING",`${r}/roleCode`),n&&a.roleCode===n&&p("NATIVE_AUTHENTICATED_USER_ROLE_SOURCE_CONFLICT",`${r}/roleCode`),Xn(a,r,E)}for(let[i,c]of e.authz.relationshipGrantSources.entries()){let r=`/config/authz/relationshipGrantSources/${i}`,a=g(c,r);y(a,["code","name","resourceCode","subject","relationCode","targetResourceCode","resourceIdField","operations","enabledField","effectiveFromField","effectiveToField","failureMode"],r,!0);let f=w(a.code,`${r}/code`);f.length>100&&p("NATIVE_AUTHORIZATION_PROJECTION_SOURCE_CODE_INVALID",`${r}/code`),s.has(f)&&p("NATIVE_AUTHORIZATION_PROJECTION_SOURCE_DUPLICATE",`${r}/code`),s.add(f),R(a.name,`${r}/name`,255);let E=Kn(a.resourceCode,`${r}/resourceCode`,o),d=g(a.subject,`${r}/subject`),u=R(d.type,`${r}/subject/type`,32);y(d,u==="role_membership"?["type","userIdField","roleCode"]:["type","userIdField"],`${r}/subject`),["user","role_membership"].includes(u)||p("NATIVE_AUTHORIZATION_PROJECTION_SUBJECT_INVALID",`${r}/subject/type`),Hn(d.userIdField,`${r}/subject/userIdField`,E),u==="role_membership"&&!t.has(String(d.roleCode||""))&&p("NATIVE_ROLE_REFERENCE_MISSING",`${r}/subject/roleCode`),w(a.relationCode,`${r}/relationCode`);let m=z(a.targetResourceCode,`${r}/targetResourceCode`);o.has(m)||p("NATIVE_AUTHORIZATION_PROJECTION_TARGET_RESOURCE_MISSING",`${r}/targetResourceCode`);let l=xe(a.resourceIdField,E),A=l?.field.type==="resource-ref.single"&&l.valuePath==="value"&&l.field.source?.resourceCode===m;(a.resourceIdField==="id"?m!==String(a.resourceCode):!A)&&p("NATIVE_AUTHORIZATION_PROJECTION_RESOURCE_ID_FIELD_INVALID",`${r}/resourceIdField`);let N=F(a.operations,`${r}/operations`,20);(N.length===0||N.some(_=>_.length>64||!/^[A-Za-z0-9][A-Za-z0-9:._*-]{0,63}$/.test(_)))&&p("NATIVE_AUTHORIZATION_PROJECTION_OPERATIONS_INVALID",`${r}/operations`),Xn(a,r,E)}}function Kn(e,t,o){let n=z(e,t),s=o.get(n);return s||p("NATIVE_AUTHORIZATION_PROJECTION_RESOURCE_MISSING",t),s}function Hn(e,t,o){let n=xe(e,o);vt(n)||p("NATIVE_AUTHORIZATION_PROJECTION_USER_FIELD_INVALID",t)}function Xn(e,t,o){if(e.failureMode!=="strict"&&p("NATIVE_AUTHORIZATION_PROJECTION_FAILURE_MODE_INVALID",`${t}/failureMode`),e.enabledField!==void 0){let n=B(e.enabledField,`${t}/enabledField`);o.get(n)?.type!=="boolean"&&p("NATIVE_AUTHORIZATION_PROJECTION_ENABLED_FIELD_INVALID",`${t}/enabledField`)}for(let n of["effectiveFromField","effectiveToField"]){if(e[n]===void 0)continue;let s=B(e[n],`${t}/${n}`);["date","datetime"].includes(String(o.get(s)?.type))||p("NATIVE_AUTHORIZATION_PROJECTION_EFFECTIVE_FIELD_INVALID",`${t}/${n}`)}}function Ri(e){let t=new Set,o=new Set;e.forEach((n,s)=>{let i=`/config/backend/secrets/${s}`,c=g(n,i);y(c,["name","env","description","required","exposure"],i,!0);let r=R(c.name,`${i}/name`,128),a=R(c.env,`${i}/env`,128);$s.test(r)||p("NATIVE_SECRET_NAME_INVALID",`${i}/name`),(!Rs.test(a)||a.startsWith("OPENXIANGDA_")||["NODE_ENV","PORT"].includes(a))&&p("NATIVE_SECRET_ENV_INVALID",`${i}/env`),t.has(r)&&p("NATIVE_SECRET_NAME_DUPLICATE",`${i}/name`),o.has(a)&&p("NATIVE_SECRET_ENV_DUPLICATE",`${i}/env`),t.add(r),o.add(a),L(c.exposure,"active_only",`${i}/exposure`),c.required!==void 0&&Fe(c.required,`${i}/required`),c.description!==void 0&&Kt(c.description,`${i}/description`,2e3)})}function hi(e){let t=new Set,o=new Map,n=new Map(e.data.resources.map(u=>[String(u.code),u])),s=new Map(e.frontend.routes.map((u,m)=>{let l=g(u,`/config/frontend/routes/${m}`);return[w(l.code,`/config/frontend/routes/${m}/code`),l]}));for(let[u,m]of e.workflows.definitions.entries()){let l=`/config/workflows/definitions/${u}`,A=g(m,l);if(y(A,["version","definition","launch"],l,["detailRouteCode"]),Eo(A.launch,`${l}/launch`),A.detailRouteCode!==void 0){let T=Ao(A.detailRouteCode,`${l}/detailRouteCode`);for(let[b,C,O]of[["desktop",T.desktop,["admin","user"]],["mobile",T.mobile,["user"]]]){let S=`${l}/detailRouteCode/${b}`,D=s.get(C);D||p("NATIVE_WORKFLOW_DETAIL_ROUTE_MISSING",S),O.some(q=>q===D.surface)||p("NATIVE_WORKFLOW_DETAIL_ROUTE_SURFACE_INVALID",S);let U=le(D.path,S),k=[...U.matchAll(/:([A-Za-z][A-Za-z0-9_]*)/g)].map(q=>q[1]);(U.includes("*")||k.length!==1||k[0]!=="instanceId")&&p("NATIVE_WORKFLOW_DETAIL_ROUTE_PATH_INVALID",S)}}let N=g(A.definition,`${l}/definition`),_=`${N.code}:${we(A.version,`${l}/version`)}`;t.has(_)&&p("NATIVE_WORKFLOW_DEFINITION_DUPLICATE",l),t.add(_),Di(N,`${l}/definition`),Si(N.subject,n,`${l}/definition/subject`);let I=Pn(N,{appCode:e.appCode,capabilities:e.authz.capabilities.map(T=>T.code),fields:new Map((n.get(N.subject.resourceCode)?.schema.fields||[]).map(T=>[T.code,T]))});I.length&&p("NATIVE_WORKFLOW_INSTANCE_COMMAND_POLICY_INVALID",`${l}/definition/instanceCommands`,{errors:I}),N.title===N.code&&p("NATIVE_WORKFLOW_USER_TITLE_REQUIRED",`${l}/definition/title`),o.set(_,N)}let i=new Set,c=new Map;for(let[u,m]of e.workflows.bindings.entries()){let l=g(m,`/config/workflows/bindings/${u}`),A=g(l.binding,`/config/workflows/bindings/${u}/binding`),N=`${A.workflowCode}:${we(l.version,`/config/workflows/bindings/${u}/version`)}`;i.has(N)&&p("NATIVE_WORKFLOW_BINDING_DUPLICATE",`/config/workflows/bindings/${u}`),i.add(N),Vi(A,`/config/workflows/bindings/${u}/binding`),c.set(N,A)}let r=new Set,a=new Map;for(let[u,m]of e.workflows.activations.entries()){let l=`/config/workflows/activations/${u}`,A=g(m,l);y(A,["workflowCode","definitionVersion","bindingVersion","acceptedCommandDeactivationPolicy"],l,["environmentKey"]);let N=w(A.workflowCode,`${l}/workflowCode`);r.has(N)&&p("NATIVE_WORKFLOW_ACTIVATION_DUPLICATE",l),r.add(N);let _=`${N}:${we(A.definitionVersion,`${l}/definitionVersion`)}`,I=`${N}:${we(A.bindingVersion,`${l}/bindingVersion`)}`;t.has(_)||p("NATIVE_WORKFLOW_DEFINITION_REFERENCE_MISSING",`${l}/definitionVersion`),i.has(I)||p("NATIVE_WORKFLOW_BINDING_REFERENCE_MISSING",`${l}/bindingVersion`);let T=o.get(_),b=c.get(I);(!["finish-pinned","cancel-on-deactivate"].includes(A.acceptedCommandDeactivationPolicy)||A.acceptedCommandDeactivationPolicy!==T.acceptedCommandDeactivationPolicy)&&p("NATIVE_WORKFLOW_COMMAND_DEACTIVATION_POLICY_MISMATCH",`${l}/acceptedCommandDeactivationPolicy`),wi(T,b,`/config/workflows/activations/${u}`),a.set(N,b)}let f=new Set;e.workflows.providers.forEach((u,m)=>{let l=`/config/workflows/providers/${m}`,A=g(u,l);y(A,["code","endpointPath","timeoutMs"],l,!0);let N=w(A.code,`${l}/code`);f.has(N)&&p("NATIVE_WORKFLOW_PROVIDER_DUPLICATE",`${l}/code`),f.add(N),le(A.endpointPath,`${l}/endpointPath`),A.timeoutMs!==void 0&&Z(A.timeoutMs,`${l}/timeoutMs`,100,1e4)});for(let[u,m]of a.entries())for(let[l,A]of Object.entries(g(m.bindings,"/config/workflows/bindings/*/binding/bindings"))){let N=g(A,`/config/workflows/${u}/bindings/${l}`);N.provider==="application_provider"&&!f.has(N.providerCode)&&p("NATIVE_WORKFLOW_PROVIDER_REFERENCE_MISSING",`/config/workflows/${u}/bindings/${l}/providerCode`)}let E=new Set(e.authz.roles.map(u=>u.code)),d=new Set;e.workflows.editableParameters.forEach((u,m)=>{let l=`/config/workflows/editableParameters/${m}`,A=g(u,l);y(A,["code","workflowCode","bindingKey","label","valueType","required","allowedRoleCodes","allowedProviderCodes","maxItems"],l,!0);let N=w(A.code,`${l}/code`);d.has(N)&&p("NATIVE_WORKFLOW_EDITABLE_PARAMETER_DUPLICATE",`${l}/code`),d.add(N);let _=lt(A.workflowCode,`${l}/workflowCode`),I=Ht(A.bindingKey,`${l}/bindingKey`),T=a.get(_);(!T||!g(T.bindings,`${l}/bindingKey`)[I])&&p("NATIVE_WORKFLOW_EDITABLE_BINDING_MISSING",`${l}/bindingKey`),R(A.label,`${l}/label`,255),["role_code","user_ids","provider_code"].includes(A.valueType)||p("NATIVE_WORKFLOW_EDITABLE_VALUE_TYPE_INVALID",`${l}/valueType`);for(let b of F(A.allowedRoleCodes||[],`${l}/allowedRoleCodes`,100))E.has(b)||p("NATIVE_ROLE_REFERENCE_MISSING",`${l}/allowedRoleCodes`);for(let b of F(A.allowedProviderCodes||[],`${l}/allowedProviderCodes`,100))f.has(b)||p("NATIVE_WORKFLOW_PROVIDER_REFERENCE_MISSING",`${l}/allowedProviderCodes`);A.required!==void 0&&Fe(A.required,`${l}/required`),A.maxItems!==void 0&&Z(A.maxItems,`${l}/maxItems`,1,200)})}function Si(e,t,o){let n=g(e,o);y(n,["resourceCode","factProjection"],o,["summaryFields"]);let s=z(n.resourceCode,`${o}/resourceCode`),i=t.get(s);i||p("NATIVE_WORKFLOW_SUBJECT_RESOURCE_MISSING",`${o}/resourceCode`);let c=new Set($(g(i.schema,`${o}/resourceCode`).fields,`${o}/resourceCode`,500).map((f,E)=>B(g(f,`${o}/resourceCode/${E}`).code,`${o}/resourceCode/${E}`))),r=g(n.factProjection,`${o}/factProjection`),a=Object.entries(r);(a.length<1||a.length>64)&&p("NATIVE_WORKFLOW_SUBJECT_FACT_PROJECTION_INVALID",`${o}/factProjection`);for(let[f,E]of a){Ds.test(f)||p("NATIVE_WORKFLOW_SUBJECT_FACT_KEY_INVALID",`${o}/factProjection/${f}`);let d=B(E,`${o}/factProjection/${f}`);c.has(d)||p("NATIVE_WORKFLOW_SUBJECT_FIELD_MISSING",`${o}/factProjection/${f}`)}if(n.summaryFields!==void 0){let f=F(n.summaryFields,`${o}/summaryFields`,Vs).map((l,A)=>B(l,`${o}/summaryFields/${A}`)),E=t.get(s),d=E.surface&&typeof E.surface=="object"&&!Array.isArray(E.surface)?E.surface:{},u=d.fields&&typeof d.fields=="object"&&!Array.isArray(d.fields)?d.fields:{},m=new Map($(g(E.schema,`${o}/resourceCode`).fields,`${o}/resourceCode`,500).map((l,A)=>{let N=g(l,`${o}/resourceCode/${A}`);return[String(N.code),N]}));for(let[l,A]of f.entries()){let N=m.get(A),_=u[A],I=String(N?.type||""),T=N?.maxLength;(!N||N.system===!0||_&&typeof _=="object"&&!Array.isArray(_)&&_.system===!0||["id","revision","created_by","updated_by","created_at","updated_at"].includes(A)||!Fs.has(I)||I==="text.long"&&typeof T=="number"&&Number.isFinite(T)&&T>ws)&&p("NATIVE_WORKFLOW_SUBJECT_SUMMARY_FIELDS_INVALID",`${o}/summaryFields/${l}`)}}}function Di(e,t){y(e,["schemaVersion","code","title","subject","acceptedCommandDeactivationPolicy","startAt","inputSchema","nodes"],t,["organizationContext","instanceCommands"]),L(e.schemaVersion,"openxiangda.workflow-definition/v2",`${t}/schemaVersion`),lt(e.code,`${t}/code`),R(e.title,`${t}/title`,255),["finish-pinned","cancel-on-deactivate"].includes(e.acceptedCommandDeactivationPolicy)||p("NATIVE_WORKFLOW_COMMAND_DEACTIVATION_POLICY_REQUIRED",`${t}/acceptedCommandDeactivationPolicy`);let o=g(e.nodes,`${t}/nodes`),n=Object.keys(o);(n.length===0||n.length>200)&&p("NATIVE_WORKFLOW_NODE_COUNT_INVALID",`${t}/nodes`);let s=R(e.startAt,`${t}/startAt`,128);o[s]||p("NATIVE_WORKFLOW_START_NODE_MISSING",`${t}/startAt`);let i=new Map;for(let[f,E]of Object.entries(o)){let d=`${t}/nodes/${f}`,u=g(E,d);L(u.id,f,`${d}/id`),["approval","condition","end"].includes(u.kind)||p("NATIVE_WORKFLOW_NODE_KIND_INVALID",`${d}/kind`);let m=[];if(u.kind==="approval"){R(u.title,`${d}/title`,255),Ht(u.binding,`${d}/binding`),["single","any","all","sequence"].includes(u.mode)||p("NATIVE_WORKFLOW_APPROVAL_MODE_INVALID",`${d}/mode`),m.push(R(u.onApprove,`${d}/onApprove`,128),R(u.onReject,`${d}/onReject`,128));for(let l of F(u.returnTargets||[],`${d}/returnTargets`,200))o[l]||p("NATIVE_WORKFLOW_TARGET_MISSING",`${d}/returnTargets`);for(let l of F(u.allowedOperations||[],`${d}/allowedOperations`,20))Ps.has(l)||p("NATIVE_WORKFLOW_OPERATION_INVALID",`${d}/allowedOperations`)}else if(u.kind==="condition"){let l=$(u.branches,`${d}/branches`,100);l.length===0&&p("NATIVE_WORKFLOW_BRANCH_REQUIRED",`${d}/branches`),l.forEach((A,N)=>{let _=g(A,`${d}/branches/${N}`);Je(_.when,`${d}/branches/${N}/when`,0),m.push(R(_.target,`${d}/branches/${N}/target`,128))}),m.push(R(u.otherwise,`${d}/otherwise`,128))}else R(u.title,`${d}/title`,255),R(u.outcome,`${d}/outcome`,128);for(let l of m)o[l]||p("NATIVE_WORKFLOW_TARGET_MISSING",d);i.set(f,m)}let c=new Set,r=new Set,a=f=>{if(r.has(f)&&p("NATIVE_WORKFLOW_CYCLE_FORBIDDEN",`${t}/nodes/${f}`),!c.has(f)){c.add(f),r.add(f);for(let E of i.get(f)||[])a(E);r.delete(f)}};a(s),c.size!==n.length&&p("NATIVE_WORKFLOW_NODE_UNREACHABLE",`${t}/nodes`)}function Je(e,t,o){o>20&&p("NATIVE_WORKFLOW_EXPRESSION_DEPTH_EXCEEDED",t);let n=g(e,t),s=R(n.op,`${t}/op`,16);if(s!=="literal"){if(s==="path"){let i=R(n.path,`${t}/path`,255);/^[A-Za-z][A-Za-z0-9_.]{0,254}$/.test(i)||p("NATIVE_WORKFLOW_EXPRESSION_PATH_INVALID",`${t}/path`);return}if(["eq","neq","gt","gte","lt","lte","in","contains"].includes(s)){Je(n.left,`${t}/left`,o+1),Je(n.right,`${t}/right`,o+1);return}if(["and","or"].includes(s)){let i=$(n.values,`${t}/values`,100);i.length===0&&p("NATIVE_WORKFLOW_EXPRESSION_EMPTY",`${t}/values`),i.forEach((c,r)=>Je(c,`${t}/values/${r}`,o+1));return}if(["not","exists"].includes(s)){Je(n.value,`${t}/value`,o+1);return}p("NATIVE_WORKFLOW_EXPRESSION_OPERATOR_INVALID",`${t}/op`)}}function Vi(e,t){L(e.schemaVersion,"openxiangda.workflow-binding/v2",`${t}/schemaVersion`),lt(e.workflowCode,`${t}/workflowCode`);let o=g(e.bindings,`${t}/bindings`);Object.keys(o).length>200&&p("NATIVE_WORKFLOW_BINDING_LIMIT_EXCEEDED",`${t}/bindings`);for(let[n,s]of Object.entries(o)){Ht(n,`${t}/bindings/${n}`);let i=g(s,`${t}/bindings/${n}`),c=R(i.provider,`${t}/bindings/${n}/provider`,64);["fixed_users","initiator","input_users","form_field_users","department_supervisor","app_role","app_role_in_scope","business_relation","previous_node_actor","initiator_select","application_provider"].includes(c)||p("NATIVE_WORKFLOW_BINDING_PROVIDER_INVALID",`${t}/bindings/${n}/provider`),c==="fixed_users"&&$(i.users,`${t}/bindings/${n}/users`,200).length===0&&p("NATIVE_WORKFLOW_BINDING_USERS_REQUIRED",`${t}/bindings/${n}/users`),["input_users","form_field_users"].includes(c)&&R(i.inputPath,`${t}/bindings/${n}/inputPath`,255),["app_role","app_role_in_scope","initiator_select"].includes(c)&&w(i.roleCode,`${t}/bindings/${n}/roleCode`),c==="department_supervisor"&&R(i.departmentIdFrom,`${t}/bindings/${n}/departmentIdFrom`,255),c==="application_provider"&&w(i.providerCode,`${t}/bindings/${n}/providerCode`)}}function wi(e,t,o){L(t.workflowCode,e.code,`${o}/workflowCode`);let n=g(t.bindings,`${o}/bindings`);for(let[s,i]of Object.entries(g(e.nodes,`${o}/nodes`))){let c=g(i,`${o}/nodes/${s}`);c.kind==="approval"&&!n[c.binding]&&p("NATIVE_WORKFLOW_BINDING_REFERENCE_MISSING",`${o}/nodes/${s}/binding`)}}function Fi(e,t,o){let n=g(t.routeManifest,"/contracts/routeManifest"),s=g(e.routeManifest,"/contracts/routeManifest"),i=new Map;for(let E of $(o.data?.resources,"/config/data/resources",100)){let d=g(E,"/config/data/resources");i.set(String(d.code||""),d)}let c=new Set($(s.routes,"/contracts/routeManifest/routes",1e3).map(E=>String(g(E,"/contracts/routeManifest/routes").code||""))),r=[];for(let E of $(n.routes,"/contracts/routeManifest/routes",1e3)){let d=g(E,"/contracts/routeManifest/routes"),u=String(d.kind||"");if(u!=="resource-records"&&u!=="resource-submit")continue;let m=String(d.resourceCode||""),l=i.get(m);l||p("NATIVE_ROUTE_MANIFEST_RESOURCE_UNKNOWN","/contracts/routeManifest/routes");let N=`user.${m}.${u==="resource-records"?"records":"submit"}`;L(String(d.code||""),N,"/contracts/routeManifest/routes/code");let _=u==="resource-records"?"read":"create",I=String(g(l.capabilities,"/config/data/resources/capabilities")[_]||"");for(let T of["desktop","mobile"]){let b=g(d[T],`/contracts/routeManifest/routes/${T}`),C=T==="mobile"?"/m/my/":"/my/",O=u==="resource-records"?`${C}${m}`:`${C}${m}/submit`;L(String(b.path||""),O,`/contracts/routeManifest/routes/${T}/path`),L(String(b.capability||""),I,`/contracts/routeManifest/routes/${T}/capability`),L(String(b.routeCode||""),`${N}.${T}`,`/contracts/routeManifest/routes/${T}/routeCode`)}(c.has(N)||r.some(T=>String(T.code)===N))&&p("NATIVE_ROUTE_MANIFEST_DUPLICATE","/contracts/routeManifest/routes/code"),r.push(d)}if(!r.length)return;s.routes=$([...s.routes,...r],"/contracts/routeManifest/routes",1e3).sort((E,d)=>ae(String(g(E,"x").code||""),String(g(d,"x").code||"")));let a=String(g(n.rootEntry,"x").code||"");if(r.find(E=>String(E.code)===a&&E.kind==="resource-records")){let E=g(n.rootEntry,"x");s.rootEntry={code:a,desktop:String(E.desktop||""),mobile:String(E.mobile||"")}}s.digest=ee({schemaVersion:s.schemaVersion,appCode:s.appCode,devicePolicy:s.devicePolicy,rootEntry:s.rootEntry,authentication:s.authentication,routes:s.routes})}function ye(e,t,o){let n=g(e,t);y(n,["schemaVersion","appCode","code","name","schema","surface","invariants","decimalReservationLifecycle","uniqueKeys","capabilities","dataPolicyCode","fieldPolicies"],t,!0),L(n.schemaVersion,"openxiangda.data-resource/v2",`${t}/schemaVersion`),L(n.appCode,o,`${t}/appCode`);let s=z(n.code,`${t}/code`),i=R(n.name,`${t}/name`,255),c=g(n.schema,`${t}/schema`);y(c,["fields"],`${t}/schema`);let r,a,f,E;try{f=Vt(n.decimalReservationLifecycle,`${t}/decimalReservationLifecycle`),r=It(c.fields,`${t}/schema/fields`),E=Sn(n.uniqueKeys,r,`${t}/uniqueKeys`),a=on(n.invariants,r,`${t}/invariants`),$t(n.surface,r,`${t}/surface`)}catch(l){throw(l instanceof _e||l instanceof De||l instanceof je)&&p(l.code,l.pointer),l}let d=new Set(r.map(l=>l.code)),u=g(n.capabilities,`${t}/capabilities`);y(u,["read","create","update","delete"],`${t}/capabilities`);let m=g(n.fieldPolicies,`${t}/fieldPolicies`);for(let[l,A]of Object.entries(m)){!d.has(l)&&!ve(l)&&p("NATIVE_DATA_FIELD_POLICY_FIELD_MISSING",`${t}/fieldPolicies/${l}`);let N=`${t}/fieldPolicies/${l}`,_=g(A,N);ve(l)&&(y(_,["read"],N,!0),(!Array.isArray(_.read)||_.read.length>20||_.read.some(I=>typeof I!="string"||!I.trim())||new Set(_.read).size!==_.read.length)&&p("NATIVE_DATA_AUDIT_READ_POLICY_INVALID",`${N}/read`)),y(_,["read","create","update","mask"],N,!0),_.mask!==void 0&&!["omit","null"].includes(_.mask)&&p("NATIVE_DATA_FIELD_POLICY_MASK_INVALID",`${N}/mask`)}return{...n,code:s,name:i,schema:{fields:r},...n.invariants===void 0?{}:{invariants:a},...f?{decimalReservationLifecycle:f}:{},...E!==void 0?{uniqueKeys:E}:{},capabilities:u,fieldPolicies:m}}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,o])=>({code:t,kind:"platform",name:o,source:"platform"}))]}function Qn(e,t,o,n){let s=e.toString("utf8"),i;try{i=JSON.parse(s)}catch{p(o,t)}let c=g(i,t);return Q(c)!==s&&p(n,t),c}function Zn(e,t){let o=0,n=(s,i,c)=>{if(o+=1,o>Us&&p("NATIVE_ARTIFACT_NODE_LIMIT_EXCEEDED",i),c>xs&&p("NATIVE_ARTIFACT_DEPTH_LIMIT_EXCEEDED",i),typeof s=="string"){Buffer.byteLength(s)>jt&&p("NATIVE_ARTIFACT_STRING_LIMIT_EXCEEDED",i);return}if(Array.isArray(s)){s.forEach((r,a)=>n(r,`${i}/${a}`,c+1));return}if(!(!s||typeof s!="object"))for(let[r,a]of Object.entries(s))["__proto__","prototype","constructor"].includes(r)&&p("NATIVE_ARTIFACT_DANGEROUS_KEY",`${i}/${r}`),vi(r)&&p("NATIVE_ARTIFACT_RUNTIME_FIELD_FORBIDDEN",`${i}/${r}`),n(a,`${i}/${r}`,c+1)};n(e,t,0)}function vi(e){return["environmentKey","environmentId","secretValue","ciphertext","oauthClient","oauthClientId","oauthClientSecret","signingSecret","kubernetesNamespace","nodePort","productionUrl"].includes(e)}function Ve(e){return{value:e,digest:ee(e)}}function eo(e,t,o,n){typeof e!="string"&&!Buffer.isBuffer(e)&&!(e instanceof Uint8Array)&&p("NATIVE_ARTIFACT_BYTES_REQUIRED",o);let s=Buffer.isBuffer(e)?e:Buffer.from(e);return s.byteLength===0&&p("NATIVE_ARTIFACT_EMPTY",o),s.byteLength>t&&p(n,o),s}function to(e,t,o,n){let s=at.createHash("sha256").update(e).digest("hex");at.timingSafeEqual(Buffer.from(s),Buffer.from(t))||p(n,o)}function g(e,t){return(!e||typeof e!="object"||Array.isArray(e))&&p("NATIVE_OBJECT_REQUIRED",t),e}function $(e,t,o){return Array.isArray(e)||p("NATIVE_ARRAY_REQUIRED",t),e.length>o&&p("NATIVE_ARRAY_LIMIT_EXCEEDED",t),e}function F(e,t,o){let n=$(e,t,o).map((s,i)=>R(s,`${t}/${i}`,255));return new Set(n).size!==n.length&&p("NATIVE_ARRAY_DUPLICATE",t),n}function R(e,t,o){return(typeof e!="string"||e.length===0||e.length>o)&&p("NATIVE_STRING_INVALID",t),e}function Kt(e,t,o){return(typeof e!="string"||e.length>o)&&p("NATIVE_STRING_INVALID",t),e}function w(e,t){let o=R(e,t,128);return Cs.test(o)||p("NATIVE_CODE_INVALID",t),o}function z(e,t){let o=R(e,t,64);return Os.test(o)||p("NATIVE_RESOURCE_CODE_INVALID",t),o}function B(e,t){let o=R(e,t,63);return ys.test(o)||p("NATIVE_FIELD_CODE_INVALID",t),o}function lt(e,t){let o=R(e,t,128);return hs.test(o)||p("NATIVE_WORKFLOW_CODE_INVALID",t),o}function Ht(e,t){let o=R(e,t,128);return Ss.test(o)||p("NATIVE_WORKFLOW_BINDING_CODE_INVALID",t),o}function Ne(e,t,o){let n=R(e,t,255);return Ts.test(n)||p("NATIVE_CAPABILITY_CODE_INVALID",t),!n.startsWith(`app:${o}:`)&&!Io(o).some(s=>s.code===n)&&p("NATIVE_CAPABILITY_APP_MISMATCH",t),n}function le(e,t){let o=R(e,t,2048);return(!o.startsWith("/")||o.startsWith("//")||o.includes("..")||o.includes("?")||o.includes("#"))&&p("NATIVE_ABSOLUTE_PATH_INVALID",t),o}function we(e,t){return(!Number.isInteger(e)||Number(e)<1)&&p("NATIVE_POSITIVE_INTEGER_REQUIRED",t),Number(e)}function Z(e,t,o,n){return(!Number.isInteger(e)||Number(e)<o||Number(e)>n)&&p("NATIVE_INTEGER_OUT_OF_RANGE",t),Number(e)}function Fe(e,t){return typeof e!="boolean"&&p("NATIVE_BOOLEAN_REQUIRED",t),e}function zt(e,t){let o=R(e,t,64).toLowerCase();return gs.test(o)||p("NATIVE_DIGEST_INVALID",t),o}function L(e,t,o){e!==t&&p("NATIVE_VALUE_MISMATCH",o)}function y(e,t,o,n=!1){let s=new Set([...t,...Array.isArray(n)?n:[]]);for(let i of Object.keys(e))s.has(i)||p("NATIVE_PROPERTY_UNKNOWN",`${o}/${i}`);if(n!==!0)for(let i of t)Object.prototype.hasOwnProperty.call(e,i)||p("NATIVE_PROPERTY_REQUIRED",`${o}/${i}`)}function X(e,t){return[...e].sort((o,n)=>ae(t(o),t(n)))}function M(e){return[...new Set(e)].sort(ae)}function no(e){return[...new Set(e)].sort((t,o)=>t-o)}function ae(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 Gt(e,t,o){if(Ut(e,t))return o;if(Array.isArray(e)&&Array.isArray(t)){let n=Math.max(e.length,t.length);for(let s=0;s<n;s+=1)if(!Ut(e[s],t[s]))return Gt(e[s],t[s],`${o}/${s}`)}if(e&&t&&typeof e=="object"&&typeof t=="object"&&!Array.isArray(e)&&!Array.isArray(t)){let n=M([...Object.keys(e),...Object.keys(t)]);for(let s of n){let i=e[s],c=t[s];if(!Ut(i,c))return Gt(i,c,`${o}/${s}`)}}return o}function Ut(e,t){return e===void 0||t===void 0?e===t:Q(e)===Q(t)}function p(e,t,o={}){throw new Jt(e,t,o)}var oa="dfe5f95d523a8e517d69e1a28859b52b51689412b5d02ca26215fedc541a8154";export{sn as DATA_AUDIT_METADATA_FIELDS,Mt as DATA_EVENT_TYPES_V2,wo as DATA_SYSTEM_SORT_FIELD_CODES,ke as ManagedConcurrencyContractError,oa as NATIVE_CONFIGURATION_VALIDATOR_DIGEST,Y as NATIVE_CONTRACT_CAPACITY_V2,Pr as NATIVE_DATA_POLICY_EXPRESSION_MAX_CLAUSES,wr as NATIVE_DATA_POLICY_EXPRESSION_MAX_DEPTH,Fr as NATIVE_DATA_POLICY_EXPRESSION_MAX_GROUP_ITEMS,vr as NATIVE_DATA_POLICY_EXPRESSION_MAX_LEAVES,Lr as NATIVE_DATA_POLICY_EXPRESSION_MAX_OCCURRENCES,Fo as NATIVE_DATA_QUERY_OPERATORS_V2,Cr as NATIVE_UNIQUE_KEY_MAX_BYTES,hn as NATIVE_UNIQUE_KEY_NORMALIZERS,Jt as NativeConfigurationCompilerError,_e as NativeDataFieldContractV2Error,Be as NativeDataPolicyExpressionV2Error,De as NativeDecimalLifecycleContractError,kt as NativeEventActionContractError,Ft as NativeScopeSourceFieldPathV2Error,je as NativeUniqueKeyContractError,To as OPENXIANGDA_NATIVE_DATA_FIELD_TYPES_V2,Te as OPENXIANGDA_NATIVE_DATA_SURFACE_KEYS_V2,bt as OPENXIANGDA_NATIVE_DRAFT_STATE_KEYS_V2,At as OPENXIANGDA_NATIVE_SYSTEM_FIELDS_V2,ki as OPENXIANGDA_NATIVE_SYSTEM_FIELD_MAP_V2,Bt as WORKFLOW_EVENT_TYPES_V2,ta as compileNativeApplicationConfiguration,Fn as compileNativeEventAction,Js as compileNativeEventCapturePlansV2,Bs as compileRequiredPlatformCapabilitiesV3,rn as hasDataAuditReadPolicy,ve as isDataAuditMetadataField,an as isDataSystemSortField,Mi as isNativeDataQueryOperatorV2,Ye as isNativeMultiValueFieldV2,gr as materializeNativeDataQueryPathTypesV2,st as nativeDataPolicyExpressionLeavesV2,xn as nativeDataPolicyExpressionToCnfV2,Nr as nativeDataQueryPathPlanV2,Ji as nativeFieldAggregatePlanV2,cr as nativeFieldColumnDefinitionV2,dr as nativeFieldDefaultSqlV2,lr as nativeFieldHasDefaultV2,_r as nativeFieldIndexStatementsV2,Ke as nativeFieldRequiresCreateInputV2,pr as nativeFieldSequenceGrantStatementsV2,fr as nativeFieldSequenceOwnershipStatementsV2,ur as nativeFieldSequenceStatementsV2,un as nativeFieldSupportsFilterV2,Bi as nativeFieldSupportsOperatorV2,Tt as nativeFieldSupportsSearchV2,Le as nativeFieldSupportsSortV2,ln as nativeOperatorsForFieldV2,ts as nativePhysicalFieldV2,ar as nativePhysicalFieldsV2,Ce as nativePhysicalObjectNameV2,Ir as nativeScopeSourceFieldValueV2,$n as nativeScopeSourceGrantPathSupportedV2,vt as nativeScopeSourceSubjectPathSupportedV2,Er as nativeSubtableConstraintStatementsV2,br as nativeUniqueKeysJsonSchema,Vt as parseDecimalReservationLifecycle,It as parseNativeDataFieldsV2,on as parseNativeDataResourceInvariantsV2,Sn as parseNativeUniqueKeys,Rt as projectNativeDataResourceViewV2,se as quoteNativeIdentifierV2,xe as resolveNativeScopeSourceFieldPathV2,Nn as validateDecimalReservationLifecycles,mn as validateManagedConcurrency,_n as validateNativeDataDraftStateV2,nn as validateNativeDataResourceReferencesV2,$t as validateNativeDataResourceSurfaceV2,Pn as validateWorkflowInstanceCommandPolicies,Sr as workflowInstanceCommandDeadlineError,hr as workflowInstanceTerminateCapabilityAllowed,vn as workflowPolicyTimestamp};
|
|
8
|
+
END $native_subtable$`]}function Ce(e,...t){return`${e}_${Xo("sha256").update(t.join(":")).digest("hex").slice(0,32)}`}function se(e){if(!/^[A-Za-z_][A-Za-z0-9_]{0,62}$/.test(e))throw new Error("OPENXIANGDA_NATIVE_IDENTIFIER_INVALID");return`"${e}"`}function os(e,t){return e.type==="subtable"?"none":t?"gin-trigram":e.indexed?["date-range","datetime-range"].includes(e.type)?"gist-range":wt.has(e.type)?"btree-snapshot-expressions":Qo.has(e.type)?"gin-jsonb-path":"btree":"none"}function ss(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 bn(e,t){if(Ye(t.type)&&t.type!=="subtable")return"'[]'::jsonb";if(t.type!=="serial-number")return"";let o=Tn(t.serial?.prefix||""),n=t.serial?.digits??6;return`(${o} || lpad(nextval(${Tn(tt(e,t.code))})::text, ${n}, '0'))`}function is(e,t){return Cn.has(t.type)?` CHECK (${e} IS NULL OR jsonb_typeof(${e}) = 'array')`:Zo.has(t.type)?` CHECK (${e} IS NULL OR jsonb_typeof(${e}) = 'object')`:""}function et(e){return`"app_data".${se(e)}`}function tt(e,t){let o=Ce("seq",e,t);return`"app_data".${se(o)}`}function Tn(e){return`'${e.replace(/'/g,"''")}'`}var On=new Set(["option.single","option.multiple","user.single","user.multiple","department.single","department.multiple","resource-ref.single","resource-ref.multiple"]),rs=new Set([...On,"cascade.single","cascade.multiple","file","image","signature","address","location","json"]),yn=/^[A-Za-z][A-Za-z0-9_]{0,62}$/,as=new Set(["__proto__","prototype","constructor"]),Ft=class extends Error{constructor(o){super("OPENXIANGDA_SCOPE_PROJECTION_FIELD_PATH_INVALID");this.path=o;this.name="NativeScopeSourceFieldPathV2Error"}path;code="OPENXIANGDA_SCOPE_PROJECTION_FIELD_PATH_INVALID"};function xe(e,t){let o=Rn(e);if(!o)return null;let n=t.get(o[0]);if(!n)return null;let s=o.slice(1).join(".")||void 0;return{field:n,...s?{valuePath:s}:{}}}function vt(e){return!!(e&&e.field.type==="user.single"&&e.valuePath==="value")}function $n(e,t,o){if(!e||!t||!cs(e))return!1;let{field:n,valuePath:s}=e;if(!s)return t.valueType==="uuid"?n.type==="uuid":["text.short","text.long","serial-number"].includes(n.type);if(s==="value")return!(t.valueSourceResourceCode&&n.type.startsWith("resource-ref.")&&n.source?.resourceCode!==t.valueSourceResourceCode);let i=s.slice(9),r=o.get(n.source?.resourceCode||"")?.get(i)?.type;return t.valueType==="uuid"?r==="uuid":["text.short","text.long","serial-number"].includes(r||"")}function Ir(e,t){let o=Rn(t);if(!o)throw new Ft(String(t||""));let n=e;for(let s of o){if(!n||typeof n!="object"||!Object.prototype.hasOwnProperty.call(n,s))return;n=n[s]}return n}function cs(e){let{field:t,valuePath:o}=e;if(!o)return!rs.has(t.type);if(o==="value")return On.has(t.type);if(!o.startsWith("snapshot."))return!1;let n=o.slice(9);return yn.test(n)&&t.type.startsWith("resource-ref.")&&!!t.source?.snapshotFields?.includes(n)}function Rn(e){if(typeof e!="string"||e.length===0||e.length>192)return null;let t=e.split(".");return![1,2,3].includes(t.length)||t.some(o=>!yn.test(o)||as.has(o))||t.length===2&&t[1]!=="value"||t.length===3&&t[1]!=="snapshot"?null:t}var ds=new Set(["option.single","user.single","department.single","resource-ref.single"]),ls=new Set(["text.short","text.long","text.rich","number.integer","number.decimal","boolean","date","time","datetime","uuid","serial-number"]),us=new Set(["value","label","description","color"]),fs=new Set(["avatarUrl","employeeNo","title","mobile","email"]),ps=new Set(["fullPath","parent.value","parent.label"]),_s=new Set(["country.value","country.label","province.value","province.label","city.value","city.label","district.value","district.label","street.value","street.label","detail","fullAddress"]),Es=new Set(["longitude","latitude","accuracy"]),As=new Set(["address","name","province","city","district","source"]);function gr(e){let t=new Map(e.map(o=>[o.code,new Map(o.schema.fields.map(n=>[n.code,n]))]));return e.map(o=>({...o,schema:{...o.schema,fields:o.schema.fields.map(n=>{let s=Is(n,t);if(!Object.keys(s).length)return n;let i={...n};return Object.defineProperty(i,"queryPathTypes",{configurable:!1,enumerable:!1,writable:!1,value:Object.freeze(s)}),i})}}))}function Nr(e,t){if(ds.has(e.type)&&us.has(t)||e.type==="user.single"&&fs.has(t)||e.type==="department.single"&&ps.has(t))return Ue(t);if(e.type==="resource-ref.single"){let o=e.queryPathTypes?.[t];return o?{parts:t.split("."),type:o}:null}if(e.type==="address"&&_s.has(t))return Ue(t);if(e.type==="location"){if(Es.has(t))return{parts:[t],type:"number.decimal"};if(As.has(t))return Ue(t);if(t==="capturedAt")return{parts:[t],type:"datetime"}}return null}function Is(e,t){if(e.type!=="resource-ref.single"||!e.source)return{};let o=t.get(e.source.resourceCode);return o?Object.fromEntries((e.source.snapshotFields||[]).flatMap(n=>{let s=o.get(n);return s?[[`snapshot.${n}`,ls.has(s.type)?s.type:"json"]]:[]})):{}}function Ue(e){return{parts:e.split("."),type:"text.short"}}var hn=["exact-v1","nfkc-space-v1","nfkc-upper-ascii-v1"],Cr=256,je=class extends Error{constructor(o,n){super(`\u6761\u4EF6\u552F\u4E00\u952E\u58F0\u660E\u65E0\u6548\uFF1A${n}\uFF08${o}\uFF09`);this.pointer=o;this.reason=n}pointer;reason;code="NATIVE_UNIQUE_KEY_INVALID"},Pt=e=>!!(e&&typeof e=="object"&&!Array.isArray(e)),ne=(e,t)=>{throw new je(e,t)},nt=(e,t)=>e<t?-1:e>t?1:0,ot=(e,t,o)=>{Object.keys(e).some(n=>!t.includes(n))&&ne(o,"\u4E0D\u652F\u6301\u672A\u77E5\u5C5E\u6027")};function Sn(e,t,o="/uniqueKeys"){if(e===void 0)return;if(!Array.isArray(e)||e.length>8)return ne(o,"\u6BCF\u8D44\u6E90\u6700\u591A 8 \u6761\u89C4\u5219");let n=new Map(t.map(i=>[i.code,i])),s=new Set;return e.map((i,c)=>{let r=`${o}/${c}`;if(!Pt(i))return ne(r,"\u89C4\u5219\u5FC5\u987B\u662F\u5BF9\u8C61");if(ot(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 ne(`${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 ne(`${r}/fields`,"\u5FC5\u987B\u9009\u62E9 1 \u5230 4 \u4E2A\u5B57\u6BB5");let a=new Set,f=i.fields.map((m,l)=>{let A=`${r}/fields/${l}`;if(!Pt(m))return ne(A,"\u5B57\u6BB5\u5FC5\u987B\u662F\u5BF9\u8C61");ot(m,["fieldCode","normalizer"],A);let N=n.get(m.fieldCode);if(!N||!["text.short","uuid","option.single","resource-ref.single"].includes(N.type)||a.has(m.fieldCode))return ne(`${A}/fieldCode`,"\u9700\u8981\u4E0D\u91CD\u590D\u7684\u77ED\u6587\u672C\u3001UUID\u3001\u5355\u9009\u6216\u5355\u8BB0\u5F55\u5F15\u7528\u5B57\u6BB5");a.add(m.fieldCode);let _=m.normalizer===void 0?"exact-v1":m.normalizer;return!hn.includes(_)||N.type!=="text.short"&&_!=="exact-v1"?ne(`${A}/normalizer`,"\u5F52\u4E00\u5316\u65B9\u5F0F\u4E0D\u652F\u6301\u6216\u4E0E\u5B57\u6BB5\u7C7B\u578B\u4E0D\u7B26"):{fieldCode:N.code,normalizer:_}}).sort((m,l)=>nt(m.fieldCode,l.fieldCode)),E=i.when===void 0?[]:i.when;if(!Array.isArray(E)||E.length>4)return ne(`${r}/when`,"\u6700\u591A 4 \u4E2A\u5408\u53D6\u6761\u4EF6");let d=new Set,u=E.map((m,l)=>{let A=`${r}/when/${l}`;if(!Pt(m))return ne(A,"\u6761\u4EF6\u5FC5\u987B\u662F\u5BF9\u8C61");let N=n.get(m.fieldCode);if(!N)return ne(`${A}/fieldCode`,"\u5B57\u6BB5\u4E0D\u5B58\u5728");let _;if(m.operator==="empty"||m.operator==="nonempty"){if(ot(m,["fieldCode","operator"],A),N.type!=="text.short")return ne(A,"\u7A7A\u503C\u6761\u4EF6\u4EC5\u652F\u6301\u77ED\u6587\u672C");_={fieldCode:N.code,operator:m.operator}}else if(m.operator==="in"||m.operator==="notIn"){ot(m,["fieldCode","operator","values"],A);let T=new Set((N.options??[]).map(b=>b.value));if(N.type!=="option.single"||!Array.isArray(m.values)||m.values.length<1||m.values.length>16||m.values.some(b=>typeof b!="string"||b.length<1||b.length>128||!T.has(b))||new Set(m.values).size!==m.values.length)return ne(A,"\u96C6\u5408\u6761\u4EF6\u9700\u8981 1 \u5230 16 \u4E2A\u4E0D\u91CD\u590D\u7684\u5DF2\u58F0\u660E\u5355\u9009\u503C");_={fieldCode:N.code,operator:m.operator,values:[...m.values].sort(nt)}}else return ne(`${A}/operator`,"\u53EA\u652F\u6301 empty\u3001nonempty\u3001in \u548C notIn");let I=JSON.stringify(_);return d.has(I)?ne(A,"\u6761\u4EF6\u4E0D\u80FD\u91CD\u590D"):(d.add(I),_)}).sort((m,l)=>nt(JSON.stringify(m),JSON.stringify(l)));return{code:i.code,fields:f,when:u}}).sort((i,c)=>nt(i.code,c.code))}var Lt={type:"string",pattern:"^[A-Za-z_][A-Za-z0-9_]{0,62}$"},br={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:Lt,normalizer:{enum:[...hn]}}}},when:{type:"array",maxItems:4,uniqueItems:!0,items:{oneOf:[{type:"object",additionalProperties:!1,required:["fieldCode","operator"],properties:{fieldCode:Lt,operator:{enum:["empty","nonempty"]}}},{type:"object",additionalProperties:!1,required:["fieldCode","operator","values"],properties:{fieldCode:Lt,operator:{enum:["in","notIn"]},values:{type:"array",minItems:1,maxItems:16,uniqueItems:!0,items:{type:"string",minLength:1,maxLength:128}}}}]}}}}};var Dn={"openxiangda.workflow.instance.completed.v2":"commit","openxiangda.workflow.instance.rejected.v2":"release","openxiangda.workflow.instance.withdrawn.v2":"release"};function Vn(e,t){let o=()=>{throw new Error("NATIVE_EVENT_DECIMAL_RESERVATION_INVALID")},n=u=>!u||typeof u!="object"||Array.isArray(u)?o():u,s=n(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 o();let i=t.resources.find(u=>u.code===s.resourceCode),c=t.reservations.find(u=>u.mode==="reserve"&&u.resourceCode===s.resourceCode),r=t.workflows.find(u=>u.code===s.workflowCode);if(!i||!c||!r||r.resourceCode!==i.code)return o();let a=i.fields.find(u=>u.code===c.statusFieldCode);if(a?.type!=="option.single")return o();let f=new Set(a.options?.map(u=>u.value)),E=new Set,d=s.outcomes.map(u=>{let m=n(u),l=m.eventType;return Object.keys(m).some(A=>!["eventType","mode","eligibleChildStatuses"].includes(A))||typeof l!="string"||!Object.prototype.hasOwnProperty.call(Dn,l)||!t.eventTypes.includes(l)||E.has(l)||m.mode!==Dn[l]||!Array.isArray(m.eligibleChildStatuses)||!m.eligibleChildStatuses.length||m.eligibleChildStatuses.length>16||new Set(m.eligibleChildStatuses).size!==m.eligibleChildStatuses.length||m.eligibleChildStatuses.some(A=>typeof A!="string"||!/^[A-Za-z0-9._:-]{1,128}$/.test(A)||!f.has(A))?o():(E.add(l),{eventType:l,mode:m.mode,eligibleChildStatuses:[...m.eligibleChildStatuses].sort()})}).sort((u,m)=>u.eventType.localeCompare(m.eventType));return{resourceCode:s.resourceCode,workflowCode:s.workflowCode,outcomes:d}}function wn(e,t){let o=n=>Array.isArray(n)?n.filter(s=>s&&typeof s=="object"&&!Array.isArray(s)):[];return{eventTypes:Array.isArray(t.eventTypes)?t.eventTypes:[],execution:t.execution,resources:o(e.data?.resources).map(n=>({code:n.code,fields:o(n.schema?.fields).map(s=>({code:s.code,type:s.type,options:o(s.options).map(i=>({value:i.value}))}))})),reservations:o(e.backend?.operations).flatMap(n=>n.platformAccess?.decimalReservation?[n.platformAccess.decimalReservation]:[]),workflows:o(e.workflows?.definitions).map(n=>({code:n.definition?.code,resourceCode:n.definition?.subject?.resourceCode}))}}var kt=class extends Error{constructor(o,n){super(n);this.pointer=o}pointer;code="NATIVE_EVENT_ACTION_INVALID"};function Fn(e,t,o="/events/subscriptions"){if(e.execution===void 0)return;let n=(A,N)=>{throw new kt(`${o}${A}`,N)},s=(A,N,_)=>((!A||typeof A!="object"||Array.isArray(A)||Object.keys(A).some(I=>!_.includes(I)))&&n(N,"Invalid action object or unsupported property"),A),i=s(e.execution,"/execution",["kind","version","operations"]);(i.kind!=="native-data"||i.version!==1)&&n("/execution","Expected native-data version 1"),e.platformAccess&&n("/platformAccess","Native actions do not use application runtime capabilities"),(!Array.isArray(e.eventTypes)||!e.eventTypes.length||e.eventTypes.some(A=>!/^openxiangda\.data\.record\.(created|updated|deleted)\.v2$/.test(A)))&&n("/eventTypes","Native data actions require declared data events");let c=e.filter?.resourceCodes;(!Array.isArray(c)||!c.length||c.length>20)&&n("/filter/resourceCodes","Native actions require explicit source resources");let r=new Map(t.map(A=>[A.code,A])),a=c.map(A=>{let N=r.get(A);return N||n("/filter/resourceCodes","Unknown source resource"),new Set((N.schema?.fields||[]).map(_=>_.code))}),f=new Set(e.payload?.fields||[]),E=e.payload?.includeChanges===!0,d=(A,N)=>{let _=s(A,N,["source","path","value"]);if(_.source==="literal"){(!Object.hasOwn(_,"value")||Object.hasOwn(_,"path"))&&n(N,"Literal binding requires only value");let C;try{C=JSON.stringify(_.value)}catch{n(N,"Literal must be JSON")}return(C===void 0||Buffer.byteLength(C)>65536)&&n(N,"Literal is too large or not JSON"),{source:"literal",value:JSON.parse(C)}}(_.source!=="event"||typeof _.path!="string"||Object.hasOwn(_,"value"))&&n(N,"Expected a literal or event binding");let I=_.path.split(".");(I.length>8||I.some(C=>!/^[A-Za-z0-9_-]+$/.test(C)||["__proto__","prototype","constructor"].includes(C)))&&n(N,"Invalid event path");let T=/^data\.projection\.([A-Za-z][A-Za-z0-9_]{0,62})$/.exec(_.path),b=/^data\.changes\.([A-Za-z][A-Za-z0-9_]{0,62})\.(before|after)$/.exec(_.path);if(T||b){let C=(T||b)[1];a.some(O=>!O.has(C))&&n(N,"Source field must exist on every filtered resource"),f.add(C),b&&(E=!0)}else["id","time","type","subject","data.recordId","data.revision","data.operation","data.resourceCode"].includes(_.path)||n(N,"Event path is not part of the data event contract");return{source:"event",path:_.path}};(!Array.isArray(i.operations)||i.operations.length<1||i.operations.length>16)&&n("/execution/operations","Expected 1 to 16 operations");let u={},m=i.operations.map((A,N)=>{let _=`/execution/operations/${N}`,I=s(A,_,["operation","resourceCode","data","id","expectedRevision"]);["create","update","delete"].includes(I.operation)||n(_,"Unsupported Native operation");let T=r.get(I.resourceCode);T||n(_,"Unknown action target resource");let b=new Map((T.schema?.fields||[]).map(O=>[O.code,O])),C=I.data===void 0?{}:s(I.data,`${_}/data`,[...b.keys()]);return Object.keys(C).length>32&&n(_,"Maximum 32 mapped fields per operation"),I.operation==="create"&&(I.id!==void 0||I.expectedRevision!==void 0)&&n(_,"Create does not accept id or expectedRevision"),I.operation==="delete"&&I.data!==void 0&&n(_,"Delete does not accept data"),Object.keys(C).some(O=>b.get(O)?.type==="serial-number")&&n(_,"Generated fields cannot be assigned"),u[I.resourceCode]=ee(T),{operation:I.operation,resourceCode:I.resourceCode,...I.operation==="create"?{}:{id:d(I.id,`${_}/id`),expectedRevision:d(I.expectedRevision,`${_}/expectedRevision`)},...I.operation==="delete"?{}:{data:Object.fromEntries(Object.entries(C).map(([O,S])=>[O,d(S,`${_}/data/${O}`)]))}}});(f.size>32||[...f].some(A=>a.some(N=>!N.has(A))))&&n("/payload/fields","Payload must contain at most 32 declared source fields");let l={kind:"native-data",version:1,operations:m,resourceDigests:u};return Buffer.byteLength(JSON.stringify(l))>65536&&n("/execution","Action plan exceeds 64 KiB"),{execution:{...l,digest:ee(l)},payload:{includeChanges:E,fields:[...f].sort()}}}function be(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)?e:void 0}function Pn(e,t){if(e?.instanceCommands===void 0)return[];let o=be(e.instanceCommands);if(!o||!Object.keys(o).length||Object.keys(o).some(s=>!["withdraw","terminate"].includes(s)))return["WORKFLOW_INSTANCE_COMMAND_POLICIES_INVALID"];let n=[];for(let[s,i]of Object.entries(o)){let c=be(i),r=s==="withdraw"?["beforeFact"]:["beforeFact","capability"];if(!c||Object.keys(c).some(a=>!r.includes(a))){n.push(`WORKFLOW_INSTANCE_COMMAND_POLICY_INVALID:${s}`);continue}if(s==="terminate"){let a=c.capability;(typeof a!="string"||a.length>255||!/^app:[a-z][a-z0-9]*(?:-[a-z0-9]+)*:[A-Za-z0-9:._-]+$/.test(a)||t&&(!a.startsWith(`app:${t.appCode}:`)||!t.capabilities.includes(a)))&&n.push("WORKFLOW_INSTANCE_TERMINATE_CAPABILITY_INVALID")}if(s==="withdraw"||c.beforeFact!==void 0){let a=c.beforeFact,f=be(e.inputSchema),E=be(be(f?.properties)?.[a]),d=be(be(e.subject)?.factProjection)?.[a],u=t?.fields.get(d);(typeof a!="string"||!/^[A-Za-z][A-Za-z0-9_]{0,62}$/.test(a)||!Array.isArray(f?.required)||!f.required.includes(a)||E?.type!=="string"||E?.format!=="date-time"||typeof d!="string"||t&&(u?.type!=="datetime"||u.nullable===!0))&&n.push(`WORKFLOW_INSTANCE_COMMAND_DEADLINE_FACT_INVALID:${s}`)}}return n}function hr(e,t){let o=e?.terminate?.capability;return typeof o=="string"&&/^app:[a-z][a-z0-9]*(?:-[a-z0-9]+)*:[A-Za-z0-9:._-]+$/.test(o)&&t.includes(o)}function vn(e){if(typeof e!="string")return null;let t=/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})(?:\.(\d{1,3}))?(Z|[+-]\d{2}:\d{2})$/.exec(e);if(!t)return null;let[,o,n,s,i,c,r]=t,a=t[8],f=new Date(Date.UTC(Number(o),Number(n),0)).getUTCDate();if(Number(n)<1||Number(n)>12||Number(s)<1||Number(s)>f||Number(i)>23||Number(c)>59||Number(r)>59||a!=="Z"&&(Number(a.slice(1,3))>23||Number(a.slice(4))>59))return null;let E=Date.parse(e);return Number.isFinite(E)?E:null}function Sr(e,t,o,n){let s=e?.[t];if(!s||t==="terminate"&&s.beforeFact===void 0)return null;let i=s.beforeFact,c=be(o),r=i&&c&&Object.hasOwn(c,i)?vn(c[i]):null,a=n instanceof Date?n.getTime():vn(n);return r===null||a===null||!Number.isFinite(a)?"WORKFLOW_V2_CANCELLATION_DEADLINE_INVALID":a<r?null:"WORKFLOW_V2_CANCELLATION_DEADLINE_PASSED"}import*as at from"crypto";var Ln="native-4",kn={"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","data.managed-concurrency":"1.0.0","workflow.named-input-sources":"1.0.0","directory-v2":"1.0.0","directory.selected-user":"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 wr=5,Fr=20,vr=50,Pr=50,Lr=100,Be=class extends Error{constructor(o,n){super(o);this.code=o;this.pointer=n;this.name="NativeDataPolicyExpressionV2Error"}code;pointer};function st(e,t){let o=[],n=(s,i,c)=>{c>5&&Me("NATIVE_DATA_POLICY_EXPRESSION_DEPTH_EXCEEDED",i);let r=Un(s,i),a=["allOf","anyOf"].filter(d=>d in r);if(a.length===0){o.push({rule:r,pointer:i}),o.length>50&&Me("NATIVE_DATA_POLICY_EXPRESSION_LEAVES_EXCEEDED",i);return}let f=a[0],E=r[f];(a.length!==1||Object.keys(r).length!==1||!Array.isArray(E)||E.length<1||E.length>20)&&Me("NATIVE_DATA_POLICY_EXPRESSION_GROUP_INVALID",i),E.forEach((d,u)=>n(d,`${i}/${f}/${u}`,c+1))};return n(e,t,1),o}function xn(e,t){st(e,t);let o=(n,s)=>{let i=Un(n,s);if(Array.isArray(i.allOf))return xt(i.allOf.flatMap((c,r)=>o(c,`${s}/allOf/${r}`)),s);if(Array.isArray(i.anyOf)){let c=[[]];return i.anyOf.forEach((r,a)=>{let f=o(r,`${s}/anyOf/${a}`);c=xt(c.flatMap(E=>f.map(d=>[...E,...d])),s)}),c}return[[i]]};return xt(o(e,t),t)}function xt(e,t){let o=e.reduce((n,s)=>n+s.length,0);return(e.length>50||o>100)&&Me("NATIVE_DATA_POLICY_EXPRESSION_EXPANSION_EXCEEDED",t),e}function Un(e,t){return(!e||typeof e!="object"||Array.isArray(e))&&Me("NATIVE_DATA_POLICY_EXPRESSION_NODE_INVALID",t),e}function Me(e,t){throw new Be(e,t)}var ms="openxiangda.config-bundle/v3",oo="openxiangda.contract-bundle/v3",jn="openxiangda.native-configuration-projection/v1",We=Ln,gs=/^[a-f0-9]{64}$/,Ns=/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/,Ts=/^app:[a-z][a-z0-9]*(?:-[a-z0-9]+)*:[A-Za-z0-9:._*-]+$/,Cs=/^[a-z][a-z0-9]*(?:[-_.][a-z0-9]+)*$/,bs=/^[a-z][a-z0-9]*(?:[-.][a-z0-9]+)*$/,Os=/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/,ys=/^[A-Za-z][A-Za-z0-9_]{0,62}$/,Mn=/^[A-Za-z][A-Za-z0-9_]{0,127}$/,$s=/^[a-z][a-z0-9]*(?:[-_][a-z0-9]+)*$/,Rs=/^[A-Z][A-Z0-9_]*$/,hs=/^[a-z][a-z0-9-]{2,63}$/,Ss=/^[A-Za-z][A-Za-z0-9_-]{0,127}$/,Ds=/^[A-Za-z][A-Za-z0-9_.]{0,127}$/,Vs=16,ws=2*1024,Fs=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"]),vs=new Set(["overview","database","operations","workflow","members","calendar","document","folder","settings"]),Ps=new Set(["approve","reject","return","transfer","delegate","add_assignee","resubmit","withdraw","terminate","admin_reassign","admin_override","retry_resolution"]),Ls=4*1024*1024,ks=8*1024*1024,xs=40,Us=1e5,jt=1024*1024,js="openxiangda.event-handler-manifest/v2",so="openxiangda.application-route-manifest/v3",Bn=64,io=new Set(["id","revision","created_by","updated_by","created_at","updated_at"]),Y=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}),Mt=["openxiangda.data.record.created.v2","openxiangda.data.record.updated.v2","openxiangda.data.record.deleted.v2"],Bt=["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"],Ms=new Set(Bt),Jt=class extends Error{code;pointer;identifiers;constructor(t,o,n={}){super(t),this.name="NativeConfigurationCompilerError",this.code=t,this.pointer=o,this.identifiers=Object.fromEntries(Object.entries(n).slice(0,8).map(([s,i])=>[s,String(i).slice(0,128)]))}};function ta(e){let t=R(e.appCode,"/appCode",128);Ns.test(t)||p("NATIVE_CONFIG_APP_CODE_INVALID","/appCode");let o=zt(e.expectedConfigDigest,"/expectedConfigDigest"),n=zt(e.expectedContractDigest,"/expectedContractDigest"),s=eo(e.configBytes,Ls,"/configBytes","NATIVE_CONFIG_ARTIFACT_TOO_LARGE"),i=eo(e.contractBytes,ks,"/contractBytes","NATIVE_CONTRACT_ARTIFACT_TOO_LARGE");to(s,o,"/configBytes","NATIVE_CONFIG_DIGEST_MISMATCH"),to(i,n,"/contractBytes","NATIVE_CONTRACT_DIGEST_MISMATCH");let c=Qn(s,"/configBytes","NATIVE_CONFIG_JSON_INVALID","NATIVE_CONFIG_NOT_CANONICAL"),r=Qn(i,"/contractBytes","NATIVE_CONTRACT_JSON_INVALID","NATIVE_CONTRACT_NOT_CANONICAL");Zn(c,"/config"),Zn(r,"/contracts");let a=c,f=r;zs(a,t),Gs(f,t,o);let E=qs(a,o,f.generatorVersion);Fi(E,f,a),Q(E)!==Q(f)&&p("NATIVE_CONTRACT_CLOSURE_MISMATCH",Gt(E,f,"/contracts"));let d={authz:{appCode:t,...a.authz,perspectives:a.perspectives,capabilityCatalog:E.capabilities},data:{appCode:t,resources:a.data.resources,resourceContracts:E.resources,...E.concurrency?{concurrency:E.concurrency}:{},...E.subjectReadSurfaces?{subjectReadSurfaces:E.subjectReadSurfaces}:{}},events:{appCode:t,...a.events,consumers:E.eventConsumers,producers:E.eventProducers,handlerManifest:E.eventHandlerManifest,eventTypes:E.eventTypes,capturePlans:Js({resources:a.data.resources,dataPolicies:a.authz.dataPolicies,subscriptions:E.eventConsumers,capturePolicies:a.events.capturePolicies})},workflows:{appCode:t,...a.workflows,contracts:E.workflows},runtime:{appCode:t,requirements:a.runtime,backend:a.backend,frontend:a.frontend},contracts:E},u={authz:Ve(d.authz),data:Ve(d.data),events:Ve(d.events),workflows:Ve(d.workflows),runtime:Ve(d.runtime),contracts:Ve(d.contracts)},m={configDigest:o,contractDigest:n,generatorVersion:f.generatorVersion},l=Bs(a),A={schemaVersion:jn,compilerContractVersion:We,appCode:t,source:m,projections:u,requiredPlatformCapabilities:l,aggregateDigest:ee({schemaVersion:jn,compilerContractVersion:We,appCode:t,source:m,requiredPlatformCapabilities:l,projectionDigests:Object.fromEntries(Object.entries(u).map(([N,_])=>[N,_.digest]))})};return mo(A)}function Bs(e){let t=e.authz.roles,o=e.data.resources,n=e.backend.operations,s=t.some(l=>l.capabilities.some(A=>A.endsWith(":directory:read")))||o.some(l=>l.schema.fields.some(A=>["user.single","user.multiple","department.single","department.multiple"].includes(A.type)))||n.some(l=>l.platformAccess?.directory),i=!!(e.events.subscriptions.length||e.events.timers.length||e.events.dateTriggers.length||e.events.schemas.length),c=n.some(l=>l.platformAccess?.managedFiles||l.platformAccess?.managedFileCopies)||e.events.subscriptions.some(l=>l.platformAccess?.managedFileCopies),r=n.some(l=>l.platformAccess?.notification)||e.events.subscriptions.some(l=>l.platformAccess?.notification),a=e.workflows.definitions.filter(l=>l.launch.mode==="standalone"||l.launch.mode==="hidden-handoff"),f=n.some(l=>l.platformAccess?.workflow)||a.length>0,E={resources:o},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:n.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[...o.some(l=>l.uniqueKeys?.length)?[{code:"data.unique-keys",declaration:o.filter(l=>l.uniqueKeys?.length).map(l=>({code:l.code,uniqueKeys:l.uniqueKeys}))}]:[],...e.data.concurrency?[{code:"data.managed-concurrency",declaration:e.data.concurrency}]:[],...o.some(l=>l.decimalReservationLifecycle)?[{code:"data.decimal-reservation-lifecycle",declaration:o.filter(l=>l.decimalReservationLifecycle).map(l=>({code:l.code,decimalReservationLifecycle:l.decimalReservationLifecycle}))}]:[],...n.some(l=>l.platformAccess?.decimalReservation)||e.events.subscriptions.some(l=>l.platformAccess?.decimalReservation)?[{code:"data.decimal-reservations",declaration:[...n.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"]}},...o.length?[{code:"data-api-v2",declaration:E},{code:"data.native-golden-crud",declaration:E}]:[],...o.some(rn)?[{code:"data.audit-read-access",declaration:E}]:[],...s?[{code:"directory-v2",declaration:{roles:t.map(l=>({code:l.code,capabilities:l.capabilities.filter(A=>A.endsWith(":directory:read"))})),resources:o.map(l=>({code:l.code,fields:l.schema.fields.filter(A=>["user.single","user.multiple","department.single","department.multiple"].includes(A.type))})),operations:n.filter(l=>l.platformAccess?.directory).map(l=>({code:l.code,directory:l.platformAccess.directory}))}}]:[],...n.some(l=>l.platformAccess?.directory?.mode==="selected-user")?[{code:"directory.selected-user",declaration:n.filter(l=>l.platformAccess?.directory?.mode==="selected-user").map(l=>({code:l.code,directory:l.platformAccess.directory}))}]:[],...c?[{code:"data.managed-files",declaration:{operations:n.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}]:[],...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(l=>l.definition.instanceCommands!==void 0)?[{code:"workflow.instance-cancellation-policy",declaration:e.workflows.definitions.filter(l=>l.definition.instanceCommands!==void 0)}]:[],...f?[{code:"business-process.durable-command",declaration:{operations:n.filter(l=>l.platformAccess?.workflow).map(l=>({code:l.code,workflow:l.platformAccess.workflow})),definitions:a,activations:e.workflows.activations.filter(l=>a.some(A=>A.definition.code===l.workflowCode))}}]:[],...r?[{code:"notification-hub-v2",declaration:{operations:n.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:kn[l],usageDigest:`sha256:${ee(A)}`})).sort((l,A)=>l.code===A.code?0:l.code<A.code?-1:1)}function Js(e){let t=new Map,o=new Set(e.resources.map(i=>String(i.code)));for(let[i,c]of $(e.capturePolicies===void 0?[]:e.capturePolicies,"/capturePlan/capturePolicies",100).entries()){let r=`/capturePlan/capturePolicies/${i}`,a=g(c,r);y(a,["resourceCode","mode"],r);let f=z(a.resourceCode,`${r}/resourceCode`);o.has(f)||p("NATIVE_EVENT_CAPTURE_RESOURCE_NOT_FOUND",r,{resourceCode:f}),t.has(f)&&p("NATIVE_EVENT_CAPTURE_POLICY_DUPLICATE",r,{resourceCode:f}),a.mode!=="all"&&a.mode!=="subscribed"&&p("NATIVE_EVENT_CAPTURE_MODE_INVALID",`${r}/mode`),t.set(f,a.mode)}let n=new Map(e.dataPolicies.map((i,c)=>{let r=g(i,`/capturePlan/dataPolicies/${c}`);return[String(r.code),r]})),s=e.subscriptions.map((i,c)=>g(i,`/capturePlan/subscriptions/${c}`));return e.resources.map((i,c)=>{let r=`/capturePlan/resources/${c}`,a=g(i,r),f=z(a.code,`${r}/code`),E=a.schema?g(a.schema,`${r}/schema`):a,d=new Set($(E.fields||[],`${r}/schema/fields`,500).map((O,S)=>B(g(O,`${r}/schema/fields/${S}`).code,`${r}/schema/fields/${S}/code`))),u=a.dataPolicyCode?w(a.dataPolicyCode,`${r}/dataPolicyCode`):null,m=u?n.get(u):void 0;u&&!m&&p("NATIVE_EVENT_CAPTURE_AUTHZ_POLICY_NOT_FOUND",r,{resourceCode:f,dataPolicyCode:u});let l=new Set;for(let O of m?.rules||[])l.add(String(O.field));if(m?.readExpression)for(let O of st(m.readExpression,`${r}/readExpression`))l.add(String(O.rule.field));let A=new Set,N=new Set,_=new Set;for(let[O,S]of s.entries()){let D=$(S.eventTypes,`/capturePlan/subscriptions/${O}/eventTypes`,20).map(String);if(!D.some(j=>j.startsWith("openxiangda.data.")))continue;let U=g(S.filter||{},`/capturePlan/subscriptions/${O}/filter`),k=Array.isArray(U.resourceCodes)?U.resourceCodes.map(String):[];if(k.length&&!k.includes(f))continue;for(let j of D)Mt.includes(j)&&_.add(j);for(let j of Ws(U,`/capturePlan/subscriptions/${O}/filter`))A.add(j);let q=g(S.payload||{},`/capturePlan/subscriptions/${O}/payload`);for(let j of $(q.fields||[],`/capturePlan/subscriptions/${O}/payload/fields`,32))N.add(B(j,`/capturePlan/subscriptions/${O}/payload/fields`))}let I=new Set([...A,...N]),T=new Set([...I,...l]);T.size>Bn&&p("NATIVE_EVENT_CAPTURE_FIELDS_LIMIT",r,{resourceCode:f,maximum:Bn});for(let O of T)!d.has(O)&&!(l.has(O)&&io.has(O))&&p("NATIVE_EVENT_CAPTURE_FIELD_NOT_FOUND",r,{resourceCode:f,field:O});let b=g(a.fieldPolicies||{},`${r}/fieldPolicies`);for(let O of I)b[O]?.mask==="omit"&&p("NATIVE_EVENT_CAPTURE_FIELD_SENSITIVE",r,{resourceCode:f,field:O});let C={resourceCode:f,...t.get(f)==="subscribed"?{capturedEventTypes:[..._].sort()}:{},filterFields:[...A].sort(),projectionFields:[...N].sort(),authorizationFields:[...l].sort(),captureFields:[...T].sort()};return{...C,digest:ee(C)}}).sort((i,c)=>i.resourceCode.localeCompare(c.resourceCode))}function Ws(e,t){let o=new Set;for(let[c,r]of $(e.changes||[],`${t}/changes`,16).entries()){let a=g(r,`${t}/changes/${c}`);o.add(B(a.field,`${t}/changes/${c}/field`))}let n=g(e.changedFields||{},`${t}/changedFields`);for(let c of["anyOf","allOf","noneOf"])for(let[r,a]of $(n[c]||[],`${t}/changedFields/${c}`,32).entries())o.add(B(a,`${t}/changedFields/${c}/${r}`));let s=0,i=(c,r,a)=>{a>3&&p("NATIVE_EVENT_FILTER_DEPTH_LIMIT",r);let f=g(c,r);if(f.change){let d=g(f.change,`${r}/change`);o.add(B(d.field,`${r}/change/field`)),s+=1;return}if(f.not){i(f.not,`${r}/not`,a+1);return}let E=f.all?"all":f.any?"any":null;E||p("NATIVE_EVENT_FILTER_CONDITION_INVALID",r);for(let[d,u]of $(f[E],`${r}/${E}`,16).entries())i(u,`${r}/${E}/${d}`,a+1)};return e.where&&i(e.where,`${t}/where`,1),s+=Array.isArray(e.changes)?e.changes.length:0,s>16&&p("NATIVE_EVENT_FILTER_ATOM_LIMIT",t),[...o].sort()}function zs(e,t){y(e,["schemaVersion","compilerContractVersion","appCode","perspectives","authz","backend","data","events","workflows","frontend","runtime"],"/config"),L(e.schemaVersion,ms,"/config/schemaVersion"),L(e.compilerContractVersion,We,"/config/compilerContractVersion"),L(e.appCode,t,"/config/appCode"),$(e.perspectives,"/config/perspectives",100);let o=g(e.authz,"/config/authz");y(o,["capabilities","roles","scopeDimensions","scopeSources","roleMembershipSources","relationshipGrantSources","dataPolicies","authorizationTransitions"],"/config/authz",["authenticatedUserRoleCode"]),$(o.capabilities,"/config/authz/capabilities",2e3),$(o.roles,"/config/authz/roles",100),$(o.scopeDimensions,"/config/authz/scopeDimensions",100),$(o.scopeSources,"/config/authz/scopeSources",100),$(o.roleMembershipSources,"/config/authz/roleMembershipSources",100),$(o.relationshipGrantSources,"/config/authz/relationshipGrantSources",100),$(o.dataPolicies,"/config/authz/dataPolicies",100),$(o.authorizationTransitions,"/config/authz/authorizationTransitions",100);let n=g(e.backend,"/config/backend");y(n,["secrets","operations"],"/config/backend"),$(n.secrets,"/config/backend/secrets",100),$(n.operations,"/config/backend/operations",500),Ri(n.secrets);let s=g(e.data,"/config/data");y(s,["resources"],"/config/data",["resourceDetailRoutes","subjectReadSurfaces","concurrency"]),$(s.resources,"/config/data/resources",100),s.subjectReadSurfaces!==void 0&&$(s.subjectReadSurfaces,"/config/data/subjectReadSurfaces",Y.subjectReadSurfaces),s.resourceDetailRoutes!==void 0&&$(s.resourceDetailRoutes,"/config/data/resourceDetailRoutes",100);let i=g(e.events,"/config/events");y(i,["schemas","subscriptions","timers","dateTriggers"],"/config/events",["capturePolicies"]),$(i.schemas,"/config/events/schemas",100),$(i.subscriptions,"/config/events/subscriptions",100),$(i.timers,"/config/events/timers",100),$(i.dateTriggers,"/config/events/dateTriggers",100);let c=g(e.workflows,"/config/workflows");y(c,["definitions","bindings","activations","providers","editableParameters"],"/config/workflows"),$(c.definitions,"/config/workflows/definitions",100),$(c.bindings,"/config/workflows/bindings",100),$(c.activations,"/config/workflows/activations",100),$(c.providers,"/config/workflows/providers",100),$(c.editableParameters,"/config/workflows/editableParameters",100);let r=g(e.frontend,"/config/frontend");y(r,["routes","user","admin","devicePolicy"],"/config/frontend",["authentication","publicAccess"]),$(r.routes,"/config/frontend/routes",500);let a=g(r.user,"/config/frontend/user");y(a,["applicationTodoCenter"],"/config/frontend/user"),Fe(a.applicationTodoCenter,"/config/frontend/user/applicationTodoCenter"),qt(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")&&ci(r.publicAccess,e,"/config/frontend/publicAccess");let f=g(r.admin,"/config/frontend/admin");y(f,["navigation"],"/config/frontend/admin",["access"]),f.access!==void 0&&dt(f.access,"/config/frontend/admin/access",e.appCode),fi(f.navigation,"/config/frontend/admin/navigation");let E=g(e.runtime,"/config/runtime");y(E,["protocolCapabilities","health"],"/config/runtime"),F(E.protocolCapabilities,"/config/runtime/protocolCapabilities",100),y(g(E.health,"/config/runtime/health"),["livePath","readyPath","versionPath"],"/config/runtime/health"),L(E.health.livePath,"/__platform/health","/config/runtime/health/livePath"),L(E.health.readyPath,"/__platform/ready","/config/runtime/health/readyPath"),L(E.health.versionPath,"/__platform/version","/config/runtime/health/versionPath")}function Gs(e,t,o){y(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","concurrency"]),L(e.schemaVersion,oo,"/contracts/schemaVersion"),L(e.compilerContractVersion,We,"/contracts/compilerContractVersion"),R(e.generatorVersion,"/contracts/generatorVersion",128),L(e.appCode,t,"/contracts/appCode"),L(e.configDigest,o,"/contracts/configDigest"),$(e.perspectives,"/contracts/perspectives",Y.perspectives),$(e.resources,"/contracts/resources",Y.resources),e.subjectReadSurfaces!==void 0&&$(e.subjectReadSurfaces,"/contracts/subjectReadSurfaces",Y.subjectReadSurfaces),$(e.capabilities,"/contracts/capabilities",Y.capabilities),$(e.operations,"/contracts/operations",Y.operations),$(e.eventConsumers,"/contracts/eventConsumers",Y.eventConsumers),$(e.eventProducers,"/contracts/eventProducers",Y.eventProducers),$(e.eventSchemas,"/contracts/eventSchemas",Y.eventSchemas),g(e.eventHandlerManifest,"/contracts/eventHandlerManifest"),F(e.eventTypes,"/contracts/eventTypes",Y.eventTypes),$(e.workflows,"/contracts/workflows",Y.workflows),$(e.routes,"/contracts/routes",Y.routes),Object.prototype.hasOwnProperty.call(e,"authentication")&&ii(e.authentication,"/contracts/authentication"),Object.prototype.hasOwnProperty.call(e,"publicAccess")&&di(e.publicAccess,"/contracts/publicAccess"),Object.prototype.hasOwnProperty.call(e,"adminAccess")&&dt(e.adminAccess,"/contracts/adminAccess",t),mi(e.routeManifest,"/contracts/routeManifest",t),Ei(e.adminPages,"/contracts/adminPages"),Ai(e.adminNavigation,"/contracts/adminNavigation")}function qs(e,t,o){let n=Hs(e);bi(e,n),yi(e),Oi(e),hi(e);let s=e.events.schemas.map((A,N)=>{let _=`/config/events/schemas/${N}`,I=g(A,_),T=R(I.eventType,`${_}/eventType`,255);return T.startsWith("openxiangda.")&&p("NATIVE_EVENT_SCHEMA_RESERVED",`${_}/eventType`,{eventType:T}),L(I.schemaDigest,ee(g(I.jsonSchema,`${_}/jsonSchema`)),`${_}/schemaDigest`),I}),i=new Set([...Mt,...Bt,...s.map(A=>String(A.eventType))]),c=new Map(e.data.resources.map(A=>[String(A.code),new Map(A.schema.fields.map(N=>[String(N.code),String(N.type)]))])),r=X(e.events.subscriptions.map((A,N)=>{let _=`/config/events/subscriptions/${N}`,I=g(A,_),T=F(I.eventTypes,`${_}/eventTypes`,20);T.forEach((S,D)=>{i.has(S)||p("NATIVE_EVENT_TYPE_NOT_REGISTERED",`${_}/eventTypes/${D}`,{eventType:S})});let b=Fn(I,e.data.resources,_),C=Ks(I.delivery,T,`${_}/delivery`),O=Ys(I.platformAccess,`${_}/platformAccess`,c,e,I);return{code:w(I.code,`${_}/code`),endpointPath:le(I.endpointPath,`${_}/endpointPath`),eventTypes:T,filter:g(I.filter,`${_}/filter`),payload:b?.payload||g(I.payload,`${_}/payload`),...b?{execution:b.execution}:{},...O?{platformAccess:O}:{},delivery:C}}),A=>A.code),a=new Map(s.map(A=>[String(A.eventType),String(A.dataSchemaVersion)])),f=X([...e.data.resources.flatMap(A=>Mt.map(N=>({code:`data:${A.code}:${N}`,source:"data",eventType:N,dataSchemaVersion:"2.0.0",resourceCode:A.code}))),...s.map(A=>({code:`app:${A.eventType}`,source:"app",eventType:A.eventType,dataSchemaVersion:A.dataSchemaVersion})),...e.events.timers.map(A=>({code:A.code,source:"timer",eventType:A.eventType,dataSchemaVersion:a.get(String(A.eventType))||"2.0.0"})),...e.events.dateTriggers.map(A=>({code:A.code,source:"date",eventType:A.eventType,dataSchemaVersion:a.get(String(A.eventType))||"2.0.0",resourceCode:A.resourceCode,field:A.field})),...e.workflows.activations.length?Bt.map(A=>({code:`workflow:${A}`,source:"workflow",eventType:A,dataSchemaVersion:"2.0.0"})):[]],A=>`${A.source}:${A.code}:${A.eventType}`),E=M([...r.flatMap(A=>A.eventTypes),...f.map(A=>String(A.eventType))]);_i(e);let d=uo(e),u;try{u=mn(e.data.concurrency,e.data.resources,n)}catch(A){throw A instanceof ke&&p(A.code,A.pointer,{reason:A.reason}),A}let m=Qs(e,n),l=ro(e);try{Nn(e.data.resources,l)}catch(A){throw A instanceof De&&p(A.code,A.pointer,{reason:A.reason}),A}return{schemaVersion:oo,compilerContractVersion:We,generatorVersion:o,appCode:e.appCode,configDigest:t,perspectives:e.perspectives,resources:Xs(e),...m.length?{subjectReadSurfaces:m}:{},...u?{concurrency:u}:{},capabilities:X(n,A=>A.code),operations:l,eventConsumers:r,eventProducers:f,eventSchemas:s,eventHandlerManifest:{schemaVersion:js,appCode:e.appCode,handlers:r.filter(A=>!A.execution).map(A=>({code:A.code,endpointPath:A.endpointPath,eventTypes:A.eventTypes,dataSchemaVersions:M(A.eventTypes.map(N=>N.startsWith("openxiangda.")?"2.0.0":a.get(N)||"2.0.0")),maxBodyBytes:65536,receiptProtocolVersion:2}))},eventTypes:E,workflows:_o(e),routes:ct(e),...Object.prototype.hasOwnProperty.call(e.frontend,"authentication")?{authentication:ri(e)}:{},...Object.prototype.hasOwnProperty.call(e.frontend,"publicAccess")?{publicAccess:li(e)}:{},...e.frontend.admin.access?{adminAccess:e.frontend.admin.access}:{},routeManifest:Ti(e),adminPages:d,adminNavigation:ui(e)}}function Ys(e,t,o,n,s){if(e===void 0)return;let i=g(e,t);y(i,["notification","managedFileCopies","decimalReservation"],t,!0);let c={};if(i.decimalReservation!==void 0)try{c.decimalReservation=Vn(i.decimalReservation,wn(n,s))}catch{p("NATIVE_EVENT_DECIMAL_RESERVATION_INVALID",`${t}/decimalReservation`)}if(i.notification!==void 0){let r=g(i.notification,`${t}/notification`);y(r,["mode"],`${t}/notification`),L(r.mode,"business-standard",`${t}/notification/mode`),c.notification={mode:"business-standard"}}if(i.managedFileCopies!==void 0){let r=$(i.managedFileCopies,`${t}/managedFileCopies`,16);r.length||p("NATIVE_EVENT_MANAGED_FILE_COPIES_REQUIRED",`${t}/managedFileCopies`);let a=new Set;c.managedFileCopies=X(r.map((f,E)=>{let d=`${t}/managedFileCopies/${E}`,u=g(f,d);y(u,["mode","sourceResourceCode","sourceFieldCodes","targetResourceCode","targetFieldCodes"],d),L(u.mode,"copy",`${d}/mode`);let m=z(u.sourceResourceCode,`${d}/sourceResourceCode`),l=z(u.targetResourceCode,`${d}/targetResourceCode`),A=o.get(m),N=o.get(l);(!A||!N)&&p("NATIVE_EVENT_MANAGED_FILE_COPY_RESOURCE_INVALID",d);let _=F(u.sourceFieldCodes,`${d}/sourceFieldCodes`,16),I=F(u.targetFieldCodes,`${d}/targetFieldCodes`,16);(!_.length||_.length!==I.length)&&p("NATIVE_EVENT_MANAGED_FILE_COPY_FIELDS_INVALID",d),_.forEach((b,C)=>{let O=A.get(b),S=N.get(I[C]);(!["file","image"].includes(String(O))||O!==S)&&p("NATIVE_EVENT_MANAGED_FILE_COPY_FIELD_INVALID",`${d}/sourceFieldCodes/${C}`)});let T=`${m}:${_.join(",")}=>${l}:${I.join(",")}`;return a.has(T)&&p("NATIVE_EVENT_MANAGED_FILE_COPY_DUPLICATE",d),a.add(T),{mode:"copy",sourceResourceCode:m,sourceFieldCodes:M(_),targetResourceCode:l,targetFieldCodes:M(I)}}),f=>`${f.sourceResourceCode}:${f.sourceFieldCodes.join(",")}=>${f.targetResourceCode}:${f.targetFieldCodes.join(",")}`)}return Object.keys(c).length||p("NATIVE_EVENT_PLATFORM_ACCESS_EMPTY",t),c}function Ks(e,t,o){let n=g(e,o);y(n,["timeoutMs","maxAttempts","initialBackoffMs","maxBackoffMs","ordering","concurrency"],o),Z(n.timeoutMs,`${o}/timeoutMs`,1e3,3e4),Z(n.maxAttempts,`${o}/maxAttempts`,1,12);let s=Z(n.initialBackoffMs,`${o}/initialBackoffMs`,1e3,3e5);Z(n.maxBackoffMs,`${o}/maxBackoffMs`,s,18e5),Z(n.concurrency,`${o}/concurrency`,1,50);let i=R(n.ordering,`${o}/ordering`,32);return["none","record","workflow-instance"].includes(i)||p("NATIVE_EVENT_DELIVERY_ORDERING_INVALID",`${o}/ordering`),i==="workflow-instance"&&t.some(c=>!Ms.has(c))&&p("NATIVE_EVENT_WORKFLOW_ORDERING_REQUIRES_WORKFLOW_FACTS",`${o}/ordering`),n}function Hs(e){let t=new Map;for(let o of Io(e.appCode))t.set(o.code,o);for(let[o,n]of e.authz.capabilities.entries()){let s=`/config/authz/capabilities/${o}`,i=g(n,s);y(i,["code","kind","name","description"],s,!0);let c=Ne(i.code,`${s}/code`,e.appCode);t.has(c)&&p("NATIVE_CAPABILITY_DUPLICATE",`${s}/code`),["backend","ui"].includes(i.kind)||p("NATIVE_CAPABILITY_KIND_INVALID",`${s}/kind`);let r={code:c,kind:i.kind,name:R(i.name,`${s}/name`,255),source:"explicit",...i.description===void 0?{}:{description:Kt(i.description,`${s}/description`,2e3)}};t.set(c,r)}for(let[o,n]of e.data.resources.entries()){let s=`/config/data/resources/${o}`,i=ye(n,s,e.appCode),c={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 a=Ne(i.capabilities[r],`${s}/capabilities/${r}`,e.appCode);t.has(a)&&p("NATIVE_CAPABILITY_DUPLICATE",`${s}/capabilities/${r}`),t.set(a,{code:a,kind:"data",name:c[r],source:"data"})}for(let[r,a]of Object.entries(i.fieldPolicies)){if(ve(r))continue;let f=g(a,`${s}/fieldPolicies/${r}`);for(let E of["read","create","update"])if(Array.isArray(f[E]))for(let d of F(f[E],`${s}/fieldPolicies/${r}/${E}`,2e3))Ne(d,`${s}/fieldPolicies/${r}/${E}`,e.appCode),!t.has(d)&&t.set(d,{code:d,kind:"data",name:`${i.name}.${r}.${E}`,source:"data"})}}return[...t.values()]}function Xs(e){let t=Zs(e);return X(e.data.resources.map((o,n)=>{let s=ye(o,`/config/data/resources/${n}`,e.appCode),i=t.get(s.code);return{code:s.code,schemaDigest:ee(s.schema),fields:X(s.schema.fields.map(c=>({code:c.code,type:c.type})),c=>c.code),...i?{detailRouteCode:i}:{}}}),o=>o.code)}function Qs(e,t){if(e.data.subjectReadSurfaces===void 0)return[];let o=$(e.data.subjectReadSurfaces,"/config/data/subjectReadSurfaces",Y.subjectReadSurfaces),n=new Set(t.map(c=>String(c.code))),s=new Map(e.data.resources.map((c,r)=>{let a=`/config/data/resources/${r}`,f=ye(c,a,e.appCode);return[String(f.code),{resource:f,fields:new Map($(g(f.schema,`${a}/schema`).fields,`${a}/schema/fields`,500).map(E=>{let d=g(E,`${a}/schema/fields`);return[String(d.code),d]}))}]})),i=new Set;return X(o.map((c,r)=>{let a=`/config/data/subjectReadSurfaces/${r}`,f=g(c,a);y(f,["code","name","capability","subject","relations"],a);let E=w(f.code,`${a}/code`);i.has(E)&&p("NATIVE_SUBJECT_READ_SURFACE_CODE_DUPLICATE",`${a}/code`),i.add(E);let d=Ne(f.capability,`${a}/capability`,e.appCode);n.has(d)||p("NATIVE_SUBJECT_READ_SURFACE_CAPABILITY_NOT_DECLARED",`${a}/capability`);let u=g(f.subject,`${a}/subject`);y(u,["resourceCode","fields"],`${a}/subject`);let m=z(u.resourceCode,`${a}/subject/resourceCode`),l=s.get(m);l||p("NATIVE_SUBJECT_READ_SURFACE_RESOURCE_NOT_DECLARED",`${a}/subject/resourceCode`);let A=F(u.fields,`${a}/subject/fields`,100).map((b,C)=>B(b,`${a}/subject/fields/${C}`));A.length||p("NATIVE_SUBJECT_READ_SURFACE_FIELDS_REQUIRED",`${a}/subject/fields`);for(let[b,C]of A.entries()){let O=l.fields.get(C);(!O||O.type==="subtable")&&p("NATIVE_SUBJECT_READ_SURFACE_FIELD_INVALID",`${a}/subject/fields/${b}`)}let N=$(f.relations,`${a}/relations`,8);N.length||p("NATIVE_SUBJECT_READ_SURFACE_RELATIONS_REQUIRED",`${a}/relations`);let _=new Set,I=0,T=X(N.map((b,C)=>{let O=`${a}/relations/${C}`,S=g(b,O);y(S,["code","resourceCode","foreignKeyField","fields","limit"],O,["order"]);let D=w(S.code,`${O}/code`);_.has(D)&&p("NATIVE_SUBJECT_READ_SURFACE_RELATION_CODE_DUPLICATE",`${O}/code`),_.add(D);let U=z(S.resourceCode,`${O}/resourceCode`),k=s.get(U);k||p("NATIVE_SUBJECT_READ_SURFACE_RESOURCE_NOT_DECLARED",`${O}/resourceCode`);let q=B(S.foreignKeyField,`${O}/foreignKeyField`),j=k.fields.get(q),ue=g(j?.source||{},`${O}/foreignKeyField/source`);(!j||!["uuid","resource-ref.single"].includes(String(j.type))||j.type==="resource-ref.single"&&(ue.kind!=="resource"||ue.resourceCode!==m))&&p("NATIVE_SUBJECT_READ_SURFACE_RELATION_INVALID",`${O}/foreignKeyField`);let fe=F(S.fields,`${O}/fields`,100).map((ie,V)=>B(ie,`${O}/fields/${V}`));fe.length||p("NATIVE_SUBJECT_READ_SURFACE_FIELDS_REQUIRED",`${O}/fields`);for(let[ie,V]of fe.entries()){let x=k.fields.get(V);(!x||x.type==="subtable")&&p("NATIVE_SUBJECT_READ_SURFACE_FIELD_INVALID",`${O}/fields/${ie}`)}let K=$(S.order||[],`${O}/order`,10).map((ie,V)=>{let x=`${O}/order/${V}`,v=g(ie,x);y(v,["field","direction"],x);let J=B(v.field,`${x}/field`),W=k.fields.get(J);return(!io.has(J)&&!W||W?.type==="subtable"||W&&!Le(W.type))&&p("NATIVE_SUBJECT_READ_SURFACE_ORDER_FIELD_INVALID",`${x}/field`),["asc","desc"].includes(String(v.direction))||p("NATIVE_SUBJECT_READ_SURFACE_ORDER_DIRECTION_INVALID",`${x}/direction`),{field:J,direction:v.direction}}),Ie=Z(S.limit,`${O}/limit`,1,100);return I+=Ie,{code:D,resourceCode:U,foreignKeyField:q,fields:M(fe),...K.length?{order:K}:{},limit:Ie}}),b=>b.code);return I>400&&p("NATIVE_SUBJECT_READ_SURFACE_ROW_LIMIT_EXCEEDED",`${a}/relations`),{code:E,name:R(f.name,`${a}/name`,255),capability:d,subject:{resourceCode:m,fields:M(A)},relations:T}}),c=>c.code)}function Zs(e){let t=e.data.resourceDetailRoutes===void 0?[]:$(e.data.resourceDetailRoutes,"/config/data/resourceDetailRoutes",100),o=new Map(e.data.resources.map((i,c)=>{let r=`/config/data/resources/${c}`,a=ye(i,r,e.appCode);return[a.code,a]})),n=new Map(ct(e).map(i=>[String(i.code),i])),s=new Map;for(let[i,c]of t.entries()){let r=`/config/data/resourceDetailRoutes/${i}`,a=g(c,r);y(a,["resourceCode","desktop","mobile"],r);let f=z(a.resourceCode,`${r}/resourceCode`);s.has(f)&&p("NATIVE_DATA_RESOURCE_DETAIL_ROUTE_DUPLICATE",`${r}/resourceCode`);let E=o.get(f);E||p("NATIVE_DATA_RESOURCE_DETAIL_ROUTE_RESOURCE_MISSING",`${r}/resourceCode`);let d=w(a.desktop,`${r}/desktop`),u=w(a.mobile,`${r}/mobile`);d===u&&p("NATIVE_DATA_RESOURCE_DETAIL_ROUTE_INVALID",r);let m=String(E.capabilities.read);for(let[l,A]of[["desktop",d],["mobile",u]]){let N=`${r}/${l}`,_=n.get(A);_||p("NATIVE_DATA_RESOURCE_DETAIL_ROUTE_REFERENCE_MISSING",N),_.surface!=="user"&&p("NATIVE_DATA_RESOURCE_DETAIL_ROUTE_SURFACE_INVALID",N);let I=le(_.path,`${N}/path`),T=[...I.matchAll(/:([A-Za-z][A-Za-z0-9_]*)/g)],b=l==="mobile"?!I.startsWith("/m/"):I==="/m"||I.startsWith("/m/");(I.includes("*")||I.includes("?")||I.includes("#")||I.split("/").includes("..")||T.length!==1||b)&&p("NATIVE_DATA_RESOURCE_DETAIL_ROUTE_PATH_INVALID",N);let C=Array.isArray(_.access?.allOf)?_.access.allOf:[];_.capability!==m&&!C.includes(m)&&p("NATIVE_DATA_RESOURCE_DETAIL_ROUTE_CAPABILITY_INVALID",N)}s.set(f,{desktop:d,mobile:u})}return s}function ro(e){let t=new Map(e.data.resources.map((c,r)=>{let a=`/config/data/resources/${r}`,f=ye(c,a,e.appCode);return[f.code,new Map(f.schema.fields.map(E=>[String(E.code),E]))]})),o=new Map(e.data.resources.map((c,r)=>{let a=`/config/data/resources/${r}`,f=ye(c,a,e.appCode);return[f.code,new Map(f.schema.fields.map(E=>[String(E.code),String(E.type)]))]})),n=new Set(o.keys()),s=new Set(e.workflows.activations.map((c,r)=>lt(g(c,`/config/workflows/activations/${r}`).workflowCode,`/config/workflows/activations/${r}/workflowCode`))),i=new Map;return X(e.backend.operations.map((c,r)=>{let a=`/config/backend/operations/${r}`,f=g(c,a);y(f,["code","method","path","capability","requestSchema","responseSchema","description","platformAccess","browser","ai"],a,!0);let E=R(f.method,`${a}/method`,16);["GET","POST","PUT","PATCH","DELETE"].includes(E)||p("NATIVE_OPERATION_METHOD_INVALID",`${a}/method`);let d=w(f.code,`${a}/code`);oi(f.ai,a,d,E,n);let u=ni(f.platformAccess,`${a}/platformAccess`,o,t,s,new Set(e.authz.roles.map(l=>String(l.code))));if(u?.decimalReservation){let l=u.decimalReservation,A=String(l.resourceCode),N=JSON.stringify([l.amountFieldCode,l.currencyFieldCode,l.relationFieldCode,l.parentFieldCode,l.rootFieldCode,l.statusFieldCode,l.parentRelationValue,l.childRelationValue]),_=i.get(A);_&&_!==N&&p("NATIVE_DECIMAL_RESERVATION_MAPPING_CONFLICT",`${a}/platformAccess/decimalReservation`),i.set(A,N)}let m=ei(f.browser,`${a}/browser`,E,f.requestSchema,f.responseSchema,o,t,e.data.subjectReadSurfaces||[]);return{code:d,method:E,path:le(f.path,`${a}/path`),requiredCapability:Ne(f.capability,`${a}/capability`,e.appCode),requestSchemaDigest:ee(g(f.requestSchema,`${a}/requestSchema`)),responseSchemaDigest:ee(g(f.responseSchema,`${a}/responseSchema`)),...f.description===void 0?{}:{description:Kt(f.description,`${a}/description`,2e3)},...u?{platformAccess:u}:{},...m?{browser:m}:{}}}),c=>c.code)}function ei(e,t,o,n,s,i,c,r){if(e===void 0)return null;let a=g(e,t);y(a,["exposure","behavior","idempotency","subject"],t,["refreshTargets","fileIntent"]),L(a.exposure,"authenticated",`${t}/exposure`);let f=R(a.behavior,`${t}/behavior`,32);["read","controlled"].includes(f)||p("NATIVE_OPERATION_BROWSER_BEHAVIOR_INVALID",`${t}/behavior`);let E=R(a.idempotency,`${t}/idempotency`,32);(!["none","required"].includes(E)||f==="controlled"&&E!=="required"||f==="read"&&E!=="none")&&p("NATIVE_OPERATION_BROWSER_IDEMPOTENCY_INVALID",`${t}/idempotency`);let d=g(a.subject,`${t}/subject`);y(d,["resourceCode","inputField"],`${t}/subject`);let u=z(d.resourceCode,`${t}/subject/resourceCode`);i.has(u)||p("NATIVE_OPERATION_BROWSER_SUBJECT_RESOURCE_NOT_DECLARED",`${t}/subject/resourceCode`);let m=B(d.inputField,`${t}/subject/inputField`),l=g(n,`${t}/requestSchema`),A=g(s,`${t}/responseSchema`);(l.type!=="object"||l.additionalProperties!==!1||A.type!=="object"||A.additionalProperties!==!1)&&p("NATIVE_OPERATION_BROWSER_SCHEMA_ROOT_INVALID",`${t}/requestSchema`);let N=g(l.properties,`${t}/requestSchema/properties`),_=new Set(l.required===void 0?[]:F(l.required,`${t}/requestSchema/required`,200));(!(m in N)||!_.has(m))&&p("NATIVE_OPERATION_BROWSER_SUBJECT_INPUT_INVALID",`${t}/subject/inputField`);let I=g(N[m],`${t}/requestSchema/properties/${m}`);(I.type!=="string"||I.format!=="uuid")&&p("NATIVE_OPERATION_BROWSER_SUBJECT_INPUT_INVALID",`${t}/subject/inputField`);let T=new Map((Array.isArray(r)?r:[]).map((D,U)=>{let k=g(D,`/config/data/subjectReadSurfaces/${U}`);return[String(k.code),String(g(k.subject,`/config/data/subjectReadSurfaces/${U}/subject`).resourceCode)]})),b=a.refreshTargets===void 0?[]:$(a.refreshTargets,`${t}/refreshTargets`,16),C=new Set,O=X(b.map((D,U)=>{let k=`${t}/refreshTargets/${U}`,q=g(D,k);y(q,["kind","code"],k),L(q.kind,"subject-surface",`${k}/kind`);let j=w(q.code,`${k}/code`);return(C.has(j)||!T.has(j)||T.get(j)!==u)&&p("NATIVE_OPERATION_BROWSER_REFRESH_TARGET_INVALID",`${k}/code`),C.add(j),{kind:"subject-surface",code:j}}),D=>`${D.kind}:${D.code}`),S=ti(a.fileIntent,`${t}/fileIntent`,o,f,E,u,N,_,c);return{exposure:"authenticated",behavior:f,idempotency:E,subject:{resourceCode:u,inputField:m},...O.length?{refreshTargets:O}:{},...S?{fileIntent:S}:{}}}function ti(e,t,o,n,s,i,c,r,a){if(e===void 0)return null;let f=g(e,t);y(f,["recordResourceCode","recordIdInputField","relationField","fileNameField","contentTypeField","sizeField","purposes","maxTtlSeconds","maxBytes"],t),(o!=="GET"||n!=="read"||s!=="none")&&p("NATIVE_OPERATION_FILE_INTENT_BEHAVIOR_INVALID",t);let E=z(f.recordResourceCode,`${t}/recordResourceCode`),d=a.get(E);d||p("NATIVE_OPERATION_FILE_INTENT_RESOURCE_NOT_DECLARED",`${t}/recordResourceCode`);let u=B(f.recordIdInputField,`${t}/recordIdInputField`),m=g(c[u],`${t}/recordIdInputField`);(!r.has(u)||m.type!=="string"||m.format!=="uuid")&&p("NATIVE_OPERATION_FILE_INTENT_RECORD_INPUT_INVALID",`${t}/recordIdInputField`);let l=B(f.relationField,`${t}/relationField`),A=d.get(l);(!A||!["uuid","resource-ref.single"].includes(String(A.type))||String(A.type)==="resource-ref.single"&&(String(g(A.source,`${t}/relationField`).kind||"")!=="resource"||String(g(A.source,`${t}/relationField`).resourceCode||"")!==i))&&p("NATIVE_OPERATION_FILE_INTENT_RELATION_INVALID",`${t}/relationField`);let N=[["fileNameField",["text.short","text.long"]],["contentTypeField",["text.short","text.long"]],["sizeField",["number.integer"]]],_={};for(let[C,O]of N){let S=B(f[C],`${t}/${C}`);O.includes(String(d.get(S)?.type))||p("NATIVE_OPERATION_FILE_INTENT_METADATA_INVALID",`${t}/${C}`),_[C]=S}let I=X(F(f.purposes,`${t}/purposes`,2),C=>C);(!I.length||I.some(C=>!["preview","download"].includes(C)))&&p("NATIVE_OPERATION_FILE_INTENT_PURPOSE_INVALID",`${t}/purposes`);let T=Number(f.maxTtlSeconds);(!Number.isSafeInteger(T)||T<1||T>300)&&p("NATIVE_OPERATION_FILE_INTENT_TTL_INVALID",`${t}/maxTtlSeconds`);let b=Number(f.maxBytes);return(!Number.isSafeInteger(b)||b<1||b>104857600)&&p("NATIVE_OPERATION_FILE_INTENT_SIZE_INVALID",`${t}/maxBytes`),{recordResourceCode:E,recordIdInputField:u,relationField:l,fileNameField:_.fileNameField,contentTypeField:_.contentTypeField,sizeField:_.sizeField,purposes:I,maxTtlSeconds:T,maxBytes:b}}function ni(e,t,o,n,s,i){if(e===void 0)return null;let c=g(e,t);y(c,["directory","managedFiles","managedFileCopies","notification","workflow","roleAssertions","decimalReservation"],t,!0),Object.keys(c).length===0&&p("NATIVE_OPERATION_PLATFORM_ACCESS_EMPTY",t);let r={};if(c.roleAssertions!==void 0){let a=g(c.roleAssertions,`${t}/roleAssertions`);y(a,["roleCodes"],`${t}/roleAssertions`);let f=F(a.roleCodes,`${t}/roleAssertions/roleCodes`,20);f.length||p("NATIVE_OPERATION_ROLE_ASSERTIONS_REQUIRED",`${t}/roleAssertions/roleCodes`),f.forEach((E,d)=>{i.has(E)||p("NATIVE_ROLE_REFERENCE_MISSING",`${t}/roleAssertions/roleCodes/${d}`)}),r.roleAssertions={roleCodes:M(f)}}if(c.directory!==void 0){let a=g(c.directory,`${t}/directory`);y(a,["mode","fields"],`${t}/directory`),["current-initiator","selected-user"].includes(String(a.mode))||p("NATIVE_OPERATION_DIRECTORY_MODE_INVALID",`${t}/directory/mode`);let f=new Set(["displayName","employeeNumber","primaryDepartment","departments"]),E=F(a.fields,`${t}/directory/fields`,4);(!E.length||E.some(d=>!f.has(d)))&&p("NATIVE_OPERATION_DIRECTORY_FIELDS_INVALID",`${t}/directory/fields`),r.directory={mode:String(a.mode),fields:M(E)}}if(c.managedFiles!==void 0){let a=$(c.managedFiles,`${t}/managedFiles`,16);a.length||p("NATIVE_OPERATION_MANAGED_FILES_REQUIRED",`${t}/managedFiles`);let f=new Set;r.managedFiles=X(a.map((E,d)=>{let u=`${t}/managedFiles/${d}`,m=g(E,u);y(m,["resourceCode","fieldCodes","intents"],u);let l=z(m.resourceCode,`${u}/resourceCode`);(f.has(l)||!o.has(l))&&p("NATIVE_OPERATION_MANAGED_FILE_RESOURCE_INVALID",`${u}/resourceCode`),f.add(l);let A=F(m.fieldCodes,`${u}/fieldCodes`,16);(!A.length||A.some(_=>!["file","image","signature","text.rich"].includes(String(o.get(l)?.get(_)||""))))&&p("NATIVE_OPERATION_MANAGED_FILE_FIELD_INVALID",`${u}/fieldCodes`);let N=F(m.intents,`${u}/intents`,2);return(!N.length||N.some(_=>!["create","update"].includes(_)))&&p("NATIVE_OPERATION_MANAGED_FILE_INTENT_INVALID",`${u}/intents`),{resourceCode:l,fieldCodes:M(A),intents:M(N)}}),E=>E.resourceCode)}if(c.managedFileCopies!==void 0){let a=$(c.managedFileCopies,`${t}/managedFileCopies`,16);a.length||p("NATIVE_OPERATION_MANAGED_FILE_COPIES_REQUIRED",`${t}/managedFileCopies`);let f=new Set;r.managedFileCopies=X(a.map((E,d)=>{let u=`${t}/managedFileCopies/${d}`,m=g(E,u);y(m,["mode","sourceResourceCode","sourceFieldCodes","targetResourceCode","targetFieldCodes"],u),L(m.mode,"copy",`${u}/mode`);let l=z(m.sourceResourceCode,`${u}/sourceResourceCode`),A=z(m.targetResourceCode,`${u}/targetResourceCode`),N=o.get(l),_=o.get(A);(!N||!_)&&p("NATIVE_OPERATION_MANAGED_FILE_COPY_RESOURCE_INVALID",u);let I=F(m.sourceFieldCodes,`${u}/sourceFieldCodes`,16),T=F(m.targetFieldCodes,`${u}/targetFieldCodes`,16);(!I.length||I.length!==T.length)&&p("NATIVE_OPERATION_MANAGED_FILE_COPY_FIELDS_INVALID",u),I.forEach((C,O)=>{let S=N.get(C),D=_.get(T[O]);(!["file","image"].includes(String(S))||S!==D)&&p("NATIVE_OPERATION_MANAGED_FILE_COPY_FIELD_INVALID",`${u}/sourceFieldCodes/${O}`)});let b=`${l}:${I.join(",")}=>${A}:${T.join(",")}`;return f.has(b)&&p("NATIVE_OPERATION_MANAGED_FILE_COPY_DUPLICATE",u),f.add(b),{mode:"copy",sourceResourceCode:l,sourceFieldCodes:M(I),targetResourceCode:A,targetFieldCodes:M(T)}}),E=>`${E.sourceResourceCode}:${E.sourceFieldCodes.join(",")}=>${E.targetResourceCode}:${E.targetFieldCodes.join(",")}`)}if(c.notification!==void 0){let a=g(c.notification,`${t}/notification`);y(a,["mode"],`${t}/notification`),a.mode!=="business-standard"&&p("NATIVE_OPERATION_NOTIFICATION_MODE_INVALID",`${t}/notification/mode`),r.notification={mode:"business-standard"}}if(c.workflow!==void 0){let a=g(c.workflow,`${t}/workflow`);y(a,["codes"],`${t}/workflow`);let f=F(a.codes,`${t}/workflow/codes`,16);(!f.length||f.some(E=>!s.has(E)))&&p("NATIVE_OPERATION_WORKFLOW_CODE_INVALID",`${t}/workflow/codes`),r.workflow={codes:M(f)}}if(c.decimalReservation!==void 0){let a=`${t}/decimalReservation`,f=g(c.decimalReservation,a);y(f,["mode","resourceCode","amountFieldCode","currencyFieldCode","relationFieldCode","parentFieldCode","rootFieldCode","statusFieldCode","parentRelationValue","childRelationValue","eligibleParentStatuses","eligibleChildStatuses"],a);let E=R(f.mode,`${a}/mode`,16);["reserve","commit","release"].includes(E)||p("NATIVE_DECIMAL_RESERVATION_MODE_INVALID",`${a}/mode`);let d=z(f.resourceCode,`${a}/resourceCode`),u=n.get(d);u||p("NATIVE_DECIMAL_RESERVATION_RESOURCE_MISSING",`${a}/resourceCode`);let l=Object.fromEntries(["amountFieldCode","currencyFieldCode","relationFieldCode","parentFieldCode","rootFieldCode","statusFieldCode"].map(C=>[C,B(f[C],`${a}/${C}`)])),A=C=>u.get(l[C]),N=C=>new Set((A(C)?.options||[]).map(O=>String(O.value))),_=w(f.parentRelationValue,`${a}/parentRelationValue`),I=w(f.childRelationValue,`${a}/childRelationValue`),T=F(f.eligibleParentStatuses,`${a}/eligibleParentStatuses`,16),b=F(f.eligibleChildStatuses,`${a}/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"||_===I||!N("relationFieldCode").has(_)||!N("relationFieldCode").has(I)||!T.length||!b.length||T.some(C=>!N("statusFieldCode").has(C))||b.some(C=>!N("statusFieldCode").has(C)))&&p("NATIVE_DECIMAL_RESERVATION_FIELD_INVALID",a),r.decimalReservation={mode:E,resourceCode:d,...l,parentRelationValue:_,childRelationValue:I,eligibleParentStatuses:M(T),eligibleChildStatuses:M(b)}}return r}function oi(e,t,o,n,s){if(e===void 0)return;let i=`${t}/ai`,c=g(e,i);bs.test(o)||p("NATIVE_OPERATION_AI_CODE_INVALID",`${t}/code`),y(c,["name","description","risk","resources","sideEffects","concurrency","timeoutMs"],i,!0),R(c.name,`${i}/name`,jt),R(c.description,`${i}/description`,jt);let r=R(c.risk,`${i}/risk`,16);["read","write","destructive","external"].includes(r)||p("NATIVE_OPERATION_AI_RISK_INVALID",`${i}/risk`),r==="read"!=(n==="GET")&&p("NATIVE_OPERATION_AI_METHOD_RISK_MISMATCH",`${i}/risk`),n==="DELETE"&&!["destructive","external"].includes(r)&&p("NATIVE_OPERATION_AI_METHOD_RISK_MISMATCH",`${i}/risk`);let a=F(c.resources,`${i}/resources`,16);a.length===0&&p("NATIVE_OPERATION_AI_RESOURCE_REQUIRED",`${i}/resources`),a.forEach((E,d)=>{let u=z(E,`${i}/resources/${d}`);s.has(u)||p("NATIVE_OPERATION_AI_RESOURCE_MISSING",`${i}/resources/${d}`)});let f=F(c.sideEffects,`${i}/sideEffects`,20);(r==="read"&&f.length!==0||r!=="read"&&f.length===0)&&p("NATIVE_OPERATION_AI_SIDE_EFFECT_INVALID",`${i}/sideEffects`),c.concurrency!==void 0&&!["none","revision"].includes(R(c.concurrency,`${i}/concurrency`,16))&&p("NATIVE_OPERATION_AI_CONCURRENCY_INVALID",`${i}/concurrency`),c.timeoutMs!==void 0&&Z(c.timeoutMs,`${i}/timeoutMs`,100,3e4)}function it(e){return(e.replace(/\/{2,}/g,"/").replace(/\/$/,"")||"/").split("/").map(o=>o.startsWith(":")?":":o.includes("*")?"*":o).join("/")}function si(e,t){let o=g(e,t),n=R(o.type,`${t}/type`,32),s=["code","type","label","presentation","required"],i=n==="sso"?[...s,"provider"]:n==="dingtalk"?[...s,"flow"]:s;y(o,i,t);let c=w(o.code,`${t}/code`),r=R(o.label,`${t}/label`,255),a=R(o.presentation,`${t}/presentation`,16);["primary","secondary"].includes(a)||p("NATIVE_APPLICATION_AUTH_METHOD_PRESENTATION_INVALID",`${t}/presentation`);let f=Fe(o.required,`${t}/required`);return["sso","password","dingtalk"].includes(n)||p("NATIVE_APPLICATION_AUTH_METHOD_TYPE_INVALID",`${t}/type`),n==="sso"&&o.provider!=="tenant-default"&&p("NATIVE_APPLICATION_AUTH_SSO_PROVIDER_INVALID",`${t}/provider`),n==="dingtalk"&&!["auto","jsapi","oauth"].includes(R(o.flow,`${t}/flow`,16))&&p("NATIVE_APPLICATION_AUTH_DINGTALK_FLOW_INVALID",`${t}/flow`),{code:c,type:n,label:r,presentation:a,required:f,...n==="sso"?{provider:"tenant-default"}:{},...n==="dingtalk"?{flow:o.flow}:{}}}function Jn(e,t,o){let n=g(e,o);y(n,["routeCode","path","defaultRouteCode"],o);let s=w(n.routeCode,`${o}/routeCode`),i=le(n.path,`${o}/path`),c=t==="desktop"?"/login":"/m/login";return(i!==c||/[:*?#\\]/.test(i))&&p("NATIVE_APPLICATION_AUTH_SURFACE_PATH_INVALID",`${o}/path`,{device:t,expectedPath:c}),{routeCode:s,path:i,defaultRouteCode:w(n.defaultRouteCode,`${o}/defaultRouteCode`)}}function ao(e,t,o,n){if(e===null)return;let s=g(e,n);y(s,["accountMode","registration","methods","surfaces"],n),L(s.accountMode,"existing-platform-users-only",`${n}/accountMode`);let i=g(s.registration,`${n}/registration`);y(i,["mode"],`${n}/registration`),L(i.mode,"reject",`${n}/registration/mode`);let c=$(s.methods,`${n}/methods`,8);c.length===0&&p("NATIVE_APPLICATION_AUTH_METHOD_REQUIRED",`${n}/methods`);let r=c.map((_,I)=>si(_,`${n}/methods/${I}`)),a=new Set,f=new Set;for(let[_,I]of r.entries())a.has(I.code)&&p("NATIVE_APPLICATION_AUTH_METHOD_CODE_DUPLICATE",`${n}/methods/${_}/code`),f.has(I.type)&&p("NATIVE_APPLICATION_AUTH_METHOD_TYPE_DUPLICATE",`${n}/methods/${_}/type`),a.add(I.code),f.add(I.type);r.filter(_=>_.presentation==="primary").length!==1&&p("NATIVE_APPLICATION_AUTH_PRIMARY_METHOD_INVALID",`${n}/methods`);let E=g(s.surfaces,`${n}/surfaces`);y(E,["desktop","mobile"],`${n}/surfaces`);let d=Jn(E.desktop,"desktop",`${n}/surfaces/desktop`),u=Jn(E.mobile,"mobile",`${n}/surfaces/mobile`);d.routeCode===u.routeCode&&p("NATIVE_APPLICATION_AUTH_SURFACE_CODE_DUPLICATE",`${n}/surfaces/mobile/routeCode`);let m=$(t,"/config/frontend/routes",500),l=new Map;for(let[_,I]of m.entries()){let T=g(I,`/config/frontend/routes/${_}`);l.set(String(T.code||""),T)}let A=new Set((Array.isArray(o.data?.resources)?o.data.resources:[]).map(_=>String(_.code||"")).filter(_=>/^[a-z][a-z0-9-]{0,62}$/.test(_)));for(let[_,I]of[["desktop",d],["mobile",u]]){l.has(I.routeCode)&&p("NATIVE_APPLICATION_AUTH_SURFACE_CODE_CONFLICT",`${n}/surfaces/${_}/routeCode`);let T=/^user\.([a-z][a-z0-9-]{0,62})\.(records|submit)$/.exec(String(I.defaultRouteCode||"")),b=l.get(I.defaultRouteCode),C=String(b?.path||"");if(T&&A.has(T[1])){let S=T[2]==="records"?`/my/${T[1]}`:`/my/${T[1]}/submit`;b={surface:"user",path:_==="mobile"?`/m${S}`:S},C=String(b.path)}let O=_==="desktop"?C==="/m"||C.startsWith("/m/"):!(C==="/m"||C.startsWith("/m/"));(!b||b.surface!=="user"||/[:*]/.test(C)||O)&&p("NATIVE_APPLICATION_AUTH_DEFAULT_ROUTE_INVALID",`${n}/surfaces/${_}/defaultRouteCode`)}let N=co(o).filter(_=>!_.owner.startsWith("authentication:"));for(let[_,I]of[["desktop",d],["mobile",u]]){let T=N.find(b=>it(b.path)===it(I.path));T&&p("NATIVE_APPLICATION_AUTH_SURFACE_PATH_CONFLICT",`${n}/surfaces/${_}/path`,{owner:T.owner})}}function ii(e,t){if(e===null)return;let o={data:{resources:[]},workflows:{definitions:[]},frontend:{routes:[{code:"auth-desktop-default",path:"/auth-desktop-default",surface:"user"},{code:"auth-mobile-default",path:"/m/auth-mobile-default",surface:"user"}],user:{applicationTodoCenter:!1},admin:{navigation:[]},authentication:e}},n=g(e,t),s=g(n.surfaces,`${t}/surfaces`),i={...n,surfaces:{...s,desktop:{...g(s.desktop,`${t}/surfaces/desktop`),defaultRouteCode:"auth-desktop-default"},mobile:{...g(s.mobile,`${t}/surfaces/mobile`),defaultRouteCode:"auth-mobile-default"}}};ao(i,o.frontend.routes,{...o,frontend:{...o.frontend,authentication:i}},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(o=>({...o})),surfaces:{desktop:{...t.surfaces.desktop},mobile:{...t.surfaces.mobile}}}}var ai=new Set(["draft.read","draft.update","validate","create","own.list","own.read","public.list","public.read"]);function ci(e,t,o){let n=g(e,o);y(n,["policies"],o);let s=$(n.policies,`${o}/policies`,16);s.length<1&&p("NATIVE_PUBLIC_POLICY_REQUIRED",o);let i=new Map(t.frontend.routes.map(f=>[f.code,f])),c=new Map(t.data.resources.map(f=>[f.code,f])),r=new Set,a=new Set(s.map(f=>String(f?.code||"")));s.forEach((f,E)=>{let d=`${o}/policies/${E}`,u=g(f,d);y(u,["code","routeCode","mode","resourceCode","operations","fields"],d,["requiredFields","ownRecordFields","publicRecordFields","publicFilters","serverGeneratedFields","schedule","publicSubtableFields","draft","validations"]);let m=w(u.code,`${d}/code`);r.has(m)&&p("NATIVE_PUBLIC_POLICY_DUPLICATE",`${d}/code`);let l=w(u.routeCode,`${d}/routeCode`),A=i.get(l);(!A||A.surface!=="user"||A.capability!==void 0||A.access!==void 0||/[:*]/.test(String(A.path)))&&p("NATIVE_PUBLIC_ROUTE_INVALID",`${d}/routeCode`),L(u.mode,"anonymous",`${d}/mode`);let N=z(u.resourceCode,`${d}/resourceCode`),_=c.get(N);_||p("NATIVE_PUBLIC_RESOURCE_MISSING",`${d}/resourceCode`);let I=new Map(_.schema.fields.map(V=>[String(V.code),String(V.type)])),T=F(u.operations,`${d}/operations`,8);(T.length<1||T.some(V=>!ai.has(V)))&&p("NATIVE_PUBLIC_OPERATION_INVALID",`${d}/operations`),T.includes("draft.read")!==T.includes("draft.update")&&p("NATIVE_PUBLIC_DRAFT_OPERATION_INCOMPLETE",`${d}/operations`);let b=F(u.fields,`${d}/fields`,64);(b.length<1||b.some(V=>!I.has(V)))&&p("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(v=>!b.includes(v))&&p("NATIVE_PUBLIC_FIELD_SCOPE_INVALID",`${d}/${V}`)}let C=Object.prototype.hasOwnProperty.call(u,"serverGeneratedFields")?$(u.serverGeneratedFields,`${d}/serverGeneratedFields`,16):[],O=new Set;C.forEach((V,x)=>{let v=`${d}/serverGeneratedFields/${x}`,J=g(V,v);y(J,["field","kind"],v);let W=B(J.field,`${v}/field`);(O.has(W)||!I.has(W)||b.includes(W)||I.get(W)!=="text.short"&&I.get(W)!=="text.long")&&p("NATIVE_PUBLIC_SERVER_GENERATED_FIELD_INVALID",`${v}/field`),L(J.kind,"random-token",`${v}/kind`),O.add(W)});let S=Object.prototype.hasOwnProperty.call(u,"schedule")?g(u.schedule,`${d}/schedule`):null;if(S){let V=["campusPolicyCode","rulePolicyCode","campusField","ruleCampusField","ruleWeekdaysField","ruleOpenAtField","ruleCloseAtField","ruleSlotMinutesField","ruleAdvanceHoursField","ruleAdvanceDaysField","campusEnabledField","ruleEnabledField","dateField","timeField"];y(S,V,`${d}/schedule`);for(let x of["campusPolicyCode","rulePolicyCode"])w(S[x],`${d}/schedule/${x}`);for(let x of V.filter(v=>!["campusPolicyCode","rulePolicyCode"].includes(v)))B(S[x],`${d}/schedule/${x}`);for(let x of[S.campusField,S.dateField,S.timeField])b.includes(String(x))||p("NATIVE_PUBLIC_SCHEDULE_FIELD_INVALID",`${d}/schedule`);(!a.has(String(S.campusPolicyCode))||!a.has(String(S.rulePolicyCode)))&&p("NATIVE_PUBLIC_SCHEDULE_POLICY_INVALID",`${d}/schedule`)}let D=Object.prototype.hasOwnProperty.call(u,"publicFilters")?$(u.publicFilters,`${d}/publicFilters`,16):[],U=new Set;D.forEach((V,x)=>{let v=`${d}/publicFilters/${x}`,J=g(V,v);y(J,["field","operator","value"],v);let W=B(J.field,`${v}/field`);U.has(W)&&p("NATIVE_PUBLIC_FILTER_DUPLICATE",`${v}/field`),b.includes(W)||p("NATIVE_PUBLIC_FILTER_FIELD_INVALID",`${v}/field`),L(J.operator,"eq",`${v}/operator`),["boolean","text.short","text.long","number.integer","number.decimal","date","time"].includes(I.get(W)||"")||p("NATIVE_PUBLIC_FILTER_FIELD_INVALID",`${v}/field`),J.value!==null&&typeof J.value!="string"&&typeof J.value!="number"&&typeof J.value!="boolean"&&p("NATIVE_PUBLIC_FILTER_VALUE_INVALID",`${v}/value`),U.add(W)});let k=Object.prototype.hasOwnProperty.call(u,"publicSubtableFields")?g(u.publicSubtableFields,`${d}/publicSubtableFields`):null;if(k){Object.keys(k).length>64&&p("NATIVE_PUBLIC_SUBTABLE_FIELDS_INVALID",`${d}/publicSubtableFields`);for(let[V,x]of Object.entries(k)){let v=_.schema.fields.find(H=>String(H.code)===V),J=String(v?.subtable?.resourceCode||""),W=c.get(J),me=new Map((W?.schema?.fields||[]).map(H=>[String(H.code),String(H.type)])),G=F(x,`${d}/publicSubtableFields/${V}`,64);(!b.includes(V)||I.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"))&&p("NATIVE_PUBLIC_SUBTABLE_FIELDS_INVALID",`${d}/publicSubtableFields/${V}`)}}if(T.some(V=>V.startsWith("public."))){Object.prototype.hasOwnProperty.call(u,"publicRecordFields")||p("NATIVE_PUBLIC_RECORD_FIELDS_REQUIRED",`${d}/publicRecordFields`);let V=F(u.publicRecordFields,`${d}/publicRecordFields`,64);(V.length<1||V.some(x=>!b.includes(x))||V.some(x=>I.get(x)==="signature"||I.get(x)==="subtable"&&!k?.[x]))&&p("NATIVE_PUBLIC_RECORD_FIELDS_INVALID",`${d}/publicRecordFields`)}let q=Object.prototype.hasOwnProperty.call(u,"requiredFields")?F(u.requiredFields,`${d}/requiredFields`,64):[],j=_.surface||{},ue=j.fields||{},fe=String(j.mutationOwner||"native")==="native"&&j.generated?.create!==!1,K=_.schema.fields.filter(V=>Ke(V,ue[V.code])).map(V=>String(V.code));if(T.includes("create")&&!fe&&p("NATIVE_PUBLIC_CREATE_FIELDS_INCOMPLETE",`${d}/fields`),T.includes("create")&&!Object.prototype.hasOwnProperty.call(u,"draft")&&p("NATIVE_PUBLIC_DRAFT_REQUIRED",`${d}/draft`),T.includes("create"))for(let V of K){let x=b.includes(V)?q.includes(V)?null:"requiredFields":"fields";x&&p("NATIVE_PUBLIC_CREATE_FIELDS_INCOMPLETE",`${d}/${x}`,{resourceCode:z,fieldCode:V})}if(Object.prototype.hasOwnProperty.call(u,"draft")){let V=g(u.draft,`${d}/draft`);y(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 T.includes("draft.read")&&p("NATIVE_PUBLIC_DRAFT_REQUIRED",`${d}/draft`);let Ie=Object.prototype.hasOwnProperty.call(u,"validations")?$(u.validations,`${d}/validations`,16):[],ie=new Set;Ie.forEach((V,x)=>{let v=`${d}/validations/${x}`,J=g(V,v);y(J,["code","kind","fields","result"],v);let W=w(J.code,`${v}/code`);ie.has(W)&&p("NATIVE_PUBLIC_VALIDATION_DUPLICATE",`${v}/code`),L(J.kind,"duplicate",`${v}/kind`),L(J.result,"availability",`${v}/result`);let me=F(J.fields,`${v}/fields`,8);(me.length<1||me.some(G=>!b.includes(G))||me.some(G=>["file","subtable"].includes(I.get(G)||"")))&&p("NATIVE_PUBLIC_VALIDATION_FIELD_INVALID",`${v}/fields`),ie.add(W)}),r.add(m)})}function di(e,t){let o=g(e,t);y(o,["policies"],t),$(o.policies,`${t}/policies`,16).length<1&&p("NATIVE_PUBLIC_POLICY_REQUIRED",t)}function li(e){return{policies:X(e.frontend.publicAccess.policies.map(t=>({code:t.code,routeCode:t.routeCode,mode:t.mode,resourceCode:t.resourceCode,operations:M(t.operations),fields:M(t.fields),...t.requiredFields?{requiredFields:M(t.requiredFields)}:{},...t.ownRecordFields?{ownRecordFields:M(t.ownRecordFields)}:{},...t.publicRecordFields?{publicRecordFields:M(t.publicRecordFields)}:{},...t.publicFilters?{publicFilters:t.publicFilters.map(o=>({field:o.field,operator:o.operator,value:o.value})).sort((o,n)=>ae(o.field,n.field))}:{},...t.publicSubtableFields?{publicSubtableFields:Object.fromEntries(Object.entries(t.publicSubtableFields).sort(([o],[n])=>o.localeCompare(n)).map(([o,n])=>[o,M(Array.isArray(n)?n.map(String):[])]))}:{},...t.serverGeneratedFields?{serverGeneratedFields:t.serverGeneratedFields.map(o=>({field:o.field,kind:o.kind})).sort((o,n)=>ae(o.field,n.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(o=>({code:o.code,kind:o.kind,fields:M(o.fields),result:o.result})),o=>o.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 o of e.data.resources){let n=lo(o),s=`/admin/resources/${o.code}`,i=[["list",s],["detail",`${s}/:id`],["create",`${s}/new`],["update",`${s}/:id/edit`]];for(let[c,r]of i)n[c]&&t.push({owner:`resource:${o.code}:${c}`,path:r},{owner:`resource:${o.code}:${c}: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 o=!1;for(let n of e.workflows.definitions)["standalone","hidden-handoff"].includes(n.launch.mode)&&(o=!0);o&&t.push({owner:"workflow:launch",path:"/workflows/:workflowCode/start"},{owner:"workflow:launch:mobile",path:"/m/workflows/:workflowCode/start"})}return t}function ct(e){let t=new Map(co(e).map(o=>[it(o.path),o]));return X(e.frontend.routes.map((o,n)=>{let s=`/config/frontend/routes/${n}`,i=g(o,s);y(i,["code","path","label","surface","parentCode","capability","access","pinned","tabPersistence","keepAlive"],s,!0),["admin","user"].includes(i.surface)||p("NATIVE_ROUTE_SURFACE_INVALID",`${s}/surface`);let c=le(i.path,`${s}/path`);i.surface==="admin"&&c!=="/admin"&&!c.startsWith("/admin/")&&p("NATIVE_ADMIN_ROUTE_PATH_INVALID",`${s}/path`),i.surface==="user"&&(c==="/admin"||c.startsWith("/admin/"))&&p("NATIVE_USER_ROUTE_PATH_RESERVED",`${s}/path`);let r=it(c),a=t.get(r);a&&p("NATIVE_ROUTE_PATH_CONFLICT",`${s}/path`,{path:c,owner:a.owner}),t.set(r,{owner:`frontend:${String(i.code||n)}`,path:c});let f=/[:*]/.test(c),E=Yt(i,s,e.appCode),d=i.pinned===void 0?void 0:Fe(i.pinned,`${s}/pinned`),u=i.tabPersistence===void 0?f?"none":"session":R(i.tabPersistence,`${s}/tabPersistence`,16),m=i.keepAlive===void 0?"none":R(i.keepAlive,`${s}/keepAlive`,16);return["session","none"].includes(u)||p("NATIVE_ROUTE_TAB_PERSISTENCE_INVALID",`${s}/tabPersistence`),["none","memory"].includes(m)||p("NATIVE_ROUTE_KEEP_ALIVE_INVALID",`${s}/keepAlive`),f&&d===!0&&p("NATIVE_DYNAMIC_ROUTE_PINNED_FORBIDDEN",`${s}/pinned`),f&&u==="session"&&p("NATIVE_DYNAMIC_ROUTE_TAB_PERSISTENCE_FORBIDDEN",`${s}/tabPersistence`),f&&m==="memory"&&p("NATIVE_DYNAMIC_ROUTE_KEEP_ALIVE_FORBIDDEN",`${s}/keepAlive`),{code:w(i.code,`${s}/code`),path:c,label:R(i.label,`${s}/label`,255),surface:i.surface,...i.parentCode===void 0?{}:{parentCode:w(i.parentCode,`${s}/parentCode`)},...E,...d===void 0?{}:{pinned:d},tabPersistence:u,keepAlive:m}}),o=>o.code)}function lo(e){let t=e.surface===void 0?{}:g(e.surface,"/surface"),o=t.mutationOwner||"native",n=t.generated===void 0?{}:g(t.generated,"/surface/generated"),s=o==="native";return{list:n.list??!0,detail:n.detail??!0,create:n.create??s,update:n.update??s,delete:n.delete??s}}function uo(e){let t=[];for(let o of X(e.data.resources,n=>n.code).flatMap(n=>[{resource:n,viewCode:void 0},...(n.surface?.views||[]).map(s=>({viewCode:s.code,resource:{...n,name:s.name,surface:Rt(n.surface,s.code)}}))])){let{resource:n,viewCode:s}=o,i=`/admin/resources/${n.code}${s?`/views/${s}`:""}`,c=lo(n),r=[{operation:"list",kind:"resource-list",path:`${i}`,label:n.name,capability:n.capabilities.read,navigationEligible:!0},{operation:"detail",kind:"resource-detail",path:`${i}/:id`,label:`${n.name}\u8BE6\u60C5`,capability:n.capabilities.read,navigationEligible:!1},{operation:"create",kind:"resource-create",path:`${i}/new`,label:`\u65B0\u589E${n.name}`,capability:n.capabilities.create,navigationEligible:!1},{operation:"update",kind:"resource-update",path:`${i}/:id/edit`,label:`\u7F16\u8F91${n.name}`,capability:n.capabilities.update,navigationEligible:!1}];for(let a of r)c[a.operation]&&t.push({code:`resource:${n.code}${s?`:view:${s}`:""}:${a.operation}`,kind:a.kind,path:a.path,label:a.label,navigationEligible:a.navigationEligible,capability:a.capability,resourceCode:n.code,...s?{viewCode:s}:{}})}for(let o of ct(e))o.surface==="admin"&&t.push({code:`operation:${o.code}`,kind:"operation",path:o.path,label:o.label,navigationEligible:!/[:*]/.test(o.path),routeCode:o.code});return t.sort((o,n)=>ae(o.code,n.code))}function fo(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,o)=>({code:t.code,label:t.label,...t.icon===void 0?{}:{icon:t.icon},order:t.order??o,items:t.items.map((n,s)=>({pageCode:fo(n.page),...n.label===void 0?{}:{label:n.label},...n.icon===void 0?{}:{icon:n.icon},order:n.order??s})).sort((n,s)=>n.order-s.order||ae(n.pageCode,s.pageCode))})).sort((t,o)=>t.order-o.order||ae(t.code,o.code))}function fi(e,t){let o=$(e,t,Y.adminNavigationGroups),n=0;o.forEach((s,i)=>{let c=`${t}/${i}`,r=g(s,c);y(r,["code","label","icon","order","items"],c,!0),w(r.code,`${c}/code`),R(r.label,`${c}/label`,255),rt(r.icon,`${c}/icon`),Yn(r.order,`${c}/order`);let a=$(r.items,`${c}/items`,500);a.length===0&&p("NATIVE_ADMIN_GROUP_ORPHANED",`${c}/items`),n+=a.length,n>Y.adminNavigationItems&&p("NATIVE_ARRAY_LIMIT_EXCEEDED",t),a.forEach((f,E)=>{let d=`${c}/items/${E}`,u=g(f,d);y(u,["page","label","icon","order"],d,!0),pi(u.page,`${d}/page`),u.label!==void 0&&R(u.label,`${d}/label`,255),rt(u.icon,`${d}/icon`),Yn(u.order,`${d}/order`)})})}function pi(e,t){let o=g(e,t),n=R(o.kind,`${t}/kind`,64);if(n==="resource"){y(o,["kind","resourceCode"],t,["viewCode"]),o.viewCode!==void 0&&w(o.viewCode,`${t}/viewCode`),z(o.resourceCode,`${t}/resourceCode`);return}if(n==="operation"){y(o,["kind","routeCode"],t),w(o.routeCode,`${t}/routeCode`);return}p("NATIVE_ADMIN_PAGE_REFERENCE_KIND_INVALID",`${t}/kind`)}function _i(e){let t=new Map(uo(e).map(s=>[String(s.code),s])),o=new Set,n=new Set;e.frontend.admin.navigation.forEach((s,i)=>{let c=`/config/frontend/admin/navigation/${i}`;o.has(s.code)&&p("NATIVE_ADMIN_GROUP_DUPLICATE",`${c}/code`),o.add(s.code),s.label===s.code&&p("NATIVE_ADMIN_USER_LABEL_REQUIRED",`${c}/label`),s.items.forEach((r,a)=>{let f=`${c}/items/${a}`,E=fo(r.page),d=t.get(E);(!d||d.navigationEligible!==!0)&&p("NATIVE_ADMIN_PAGE_NOT_FOUND",`${f}/page`),n.has(E)&&p("NATIVE_ADMIN_PAGE_DUPLICATE",`${f}/page`),n.add(E);let u=r.page.resourceCode||r.page.routeCode||r.page.workflowCode||E,m=r.label||d.label;(!m||m===u||m===E)&&p("NATIVE_ADMIN_USER_LABEL_REQUIRED",`${f}/label`)})})}function Ei(e,t){let o=$(e,t,Y.adminPages),n=new Set;o.forEach((s,i)=>{let c=`${t}/${i}`,r=g(s,c);y(r,["code","kind","path","label","navigationEligible","capability","access","resourceCode","viewCode","routeCode"],c,!0);let a=R(r.code,`${c}/code`,255);n.has(a)&&p("NATIVE_ADMIN_PAGE_DUPLICATE",`${c}/code`),n.add(a);let f=R(r.kind,`${c}/kind`,64);if(["resource-list","resource-detail","resource-create","resource-update","operation"].includes(f)||p("NATIVE_ADMIN_PAGE_KIND_INVALID",`${c}/kind`),le(r.path,`${c}/path`),R(r.label,`${c}/label`,255),Fe(r.navigationEligible,`${c}/navigationEligible`),r.capability!==void 0&&r.access!==void 0&&p("NATIVE_ROUTE_ACCESS_CONFLICT",`${c}/access`),r.capability!==void 0&&R(r.capability,`${c}/capability`,255),r.access!==void 0){let E=g(r.access,`${c}/access`);y(E,["allOf","anyOf"],`${c}/access`,!0);for(let d of["allOf","anyOf"])E[d]!==void 0&&F(E[d],`${c}/access/${d}`,50)}for(let E of["resourceCode","viewCode","routeCode"])r[E]!==void 0&&w(r[E],`${c}/${E}`)})}function Ai(e,t){let o=$(e,t,Y.adminNavigationGroups),n=0;o.forEach((s,i)=>{let c=`${t}/${i}`,r=g(s,c);y(r,["code","label","icon","order","items"],c,!0),w(r.code,`${c}/code`),R(r.label,`${c}/label`,255),rt(r.icon,`${c}/icon`),Z(r.order,`${c}/order`,-1e4,1e4);let a=$(r.items,`${c}/items`,500);a.length===0&&p("NATIVE_ADMIN_GROUP_ORPHANED",`${c}/items`),n+=a.length,n>Y.adminNavigationItems&&p("NATIVE_ARRAY_LIMIT_EXCEEDED",t),a.forEach((f,E)=>{let d=`${c}/items/${E}`,u=g(f,d);y(u,["pageCode","label","icon","order"],d,!0),R(u.pageCode,`${d}/pageCode`,255),u.label!==void 0&&R(u.label,`${d}/label`,255),rt(u.icon,`${d}/icon`),Z(u.order,`${d}/order`,-1e4,1e4)})})}var Ii=new Set(["application-todo-center","workflow-work-center","workflow-launch","workflow-task","workflow-instance","resource-records","resource-submit"]);function mi(e,t,o){let n=g(e,t);y(n,["schemaVersion","appCode","devicePolicy","rootEntry","authentication","routes","digest"],t),L(n.schemaVersion,so,`${t}/schemaVersion`),L(n.appCode,o,`${t}/appCode`),qt(n.devicePolicy,`${t}/devicePolicy`),gi(n.rootEntry,`${t}/rootEntry`),Ni(n.authentication,`${t}/authentication`),zt(n.digest,`${t}/digest`);let s=$(n.routes,`${t}/routes`,Y.routes),i=new Set;s.forEach((c,r)=>{let a=`${t}/routes/${r}`,f=g(c,a),E=f.kind==="resource-records"||f.kind==="resource-submit";y(f,["code","kind","desktop","mobile"],a,["workflowCode",...E?["resourceCode"]:[]]);let d=R(f.code,`${a}/code`,255);i.has(d)&&p("NATIVE_ROUTE_MANIFEST_DUPLICATE",`${a}/code`),i.add(d);let u=R(f.kind,`${a}/kind`,64);if(Ii.has(u)||p("NATIVE_ROUTE_MANIFEST_KIND_INVALID",`${a}/kind`),f.workflowCode!==void 0&&w(f.workflowCode,`${a}/workflowCode`),E){let A=z(f.resourceCode,`${a}/resourceCode`);L(d,`user.${A}.${f.kind==="resource-records"?"records":"submit"}`,`${a}/code`)}else f.resourceCode!==void 0&&p("NATIVE_PROPERTY_UNKNOWN",`${a}/resourceCode`);let m=zn(f.desktop,`${a}/desktop`,o),l=zn(f.mobile,`${a}/mobile`,o);m.surface!=="user"&&p("NATIVE_ROUTE_MANIFEST_DESKTOP_SURFACE_INVALID",`${a}/desktop/surface`),l.surface!=="user"&&p("NATIVE_ROUTE_MANIFEST_MOBILE_SURFACE_INVALID",`${a}/mobile/surface`),m.routeCode===l.routeCode&&p("NATIVE_ROUTE_MANIFEST_PAIR_DUPLICATE",a)}),L(n.digest,ee({schemaVersion:n.schemaVersion,appCode:n.appCode,devicePolicy:n.devicePolicy,rootEntry:n.rootEntry,authentication:n.authentication,routes:n.routes}),`${t}/digest`)}function qt(e,t){let o=g(e,t);y(o,["kind","mobileMaxWidthPx","desktopMinWidthPx"],t),L(o.kind,"viewport-family",`${t}/kind`);let n=Z(o.mobileMaxWidthPx,`${t}/mobileMaxWidthPx`,320,1600),s=Z(o.desktopMinWidthPx,`${t}/desktopMinWidthPx`,320,1600);return s!==n+1&&p("NATIVE_FRONTEND_DEVICE_POLICY_INVALID",t),{kind:"viewport-family",mobileMaxWidthPx:n,desktopMinWidthPx:s}}function gi(e,t){let o=g(e,t);y(o,["code","desktop","mobile"],t);let n=w(o.code,`${t}/code`),s=Wt(o.desktop,`${t}/desktop`),i=Wt(o.mobile,`${t}/mobile`);return(s===i||i==="/"||!i.startsWith("/m/"))&&p("NATIVE_ROUTE_MANIFEST_ROOT_ENTRY_INVALID",t),s.startsWith("/m/")&&p("NATIVE_ROUTE_MANIFEST_ROOT_ENTRY_INVALID",`${t}/desktop`),{code:n,desktop:s,mobile:i}}function Ni(e,t){let o=g(e,t);y(o,["desktop","mobile"],t);let n=Wn(o.desktop,`${t}/desktop`,!1),s=Wn(o.mobile,`${t}/mobile`,!0);return(n.routeCode===s.routeCode||n.path===s.path)&&p("NATIVE_ROUTE_MANIFEST_AUTHENTICATION_DUPLICATE",t),{desktop:n,mobile:s}}function Wn(e,t,o){let n=g(e,t);y(n,["routeCode","path"],t);let s=w(n.routeCode,`${t}/routeCode`),i=Wt(n.path,`${t}/path`);return(o?!i.startsWith("/m/"):i.startsWith("/m/"))&&p("NATIVE_ROUTE_MANIFEST_AUTHENTICATION_PATH_INVALID",`${t}/path`),{routeCode:s,path:i}}function Wt(e,t){let o=le(e,t);return/[:*?#\\\\]/.test(o)&&p("NATIVE_ROUTE_MANIFEST_STATIC_PATH_INVALID",t),o}function zn(e,t,o){let n=g(e,t);y(n,["routeCode","path","surface","pathParams","requiresAuthentication"],t,["capability","access"]),w(n.routeCode,`${t}/routeCode`);let s=le(n.path,`${t}/path`),i=R(n.surface,`${t}/surface`,16);["admin","user"].includes(i)||p("NATIVE_ROUTE_SURFACE_INVALID",`${t}/surface`);let c=F(n.pathParams,`${t}/pathParams`,8);return c.forEach((r,a)=>{(!/^[A-Za-z][A-Za-z0-9_]*$/.test(r)||r.length>64)&&p("NATIVE_ROUTE_PATH_PARAM_INVALID",`${t}/pathParams/${a}`)}),Q(c)!==Q(po(s))&&p("NATIVE_ROUTE_PATH_PARAMS_MISMATCH",`${t}/pathParams`),Yt(n,t,o),n.requiresAuthentication!==!0&&p("NATIVE_ROUTE_AUTHENTICATION_REQUIRED",`${t}/requiresAuthentication`),n}function po(e){return M([...e.matchAll(/:([A-Za-z][A-Za-z0-9_]*)/g)].map(t=>t[1]))}function Gn(e,t,o,n){return{routeCode:e,path:t,surface:o,pathParams:po(t),...n?.capability?{capability:n.capability}:{},...n?.access?{access:n.access}:{},requiresAuthentication:!0}}function qn(e,t,o,n){return e==="workflow-launch"?`workflow.${o}.launch.${t}`:e==="application-todo-center"?`application.todo-center.${t}`:e==="resource-records"?`user.${n}.records.${t}`:e==="resource-submit"?`user.${n}.submit.${t}`:`${e.replace(/-/g,".")}.${t}`}function Ti(e){let t=e.appCode,o=[],n=(m,l,A,N,_,I,T)=>{o.push({code:m,kind:l,..._?{workflowCode:_}:{},...T?{resourceCode:T}:{},desktop:Gn(qn(l,"desktop",_,T),A,"user",I),mobile:Gn(qn(l,"mobile",_,T),N,"user",I)})};e.frontend.user.applicationTodoCenter===!0&&n("application:todo-center","application-todo-center","/todos","/m/todos");let s=_o(e);s.length>0&&(n("workflow:work-center","workflow-work-center","/work-center","/m/work-center"),n("workflow:task","workflow-task","/tasks/:taskId","/m/tasks/:taskId"),n("workflow:instance","workflow-instance","/workflows/:instanceId","/m/workflows/:instanceId"));for(let m of s){if(!["standalone","hidden-handoff"].includes(m.launch.mode))continue;let l=M([m.launch.submission?.create?.requiredCapability,m.launch.submission?.existing?.requiredCapability].filter(A=>!!A));n(`workflow:${m.code}:launch`,"workflow-launch","/workflows/:workflowCode/start","/m/workflows/:workflowCode/start",m.code,l.length===1?{capability:l[0]}:l.length>1?{access:{anyOf:l}}:void 0)}let i=o.sort((m,l)=>ae(String(m.code),String(l.code))),c=ct(e),r=m=>{let l=m==="mobile"?"/m/":"/",A=c.filter(_=>_.surface==="user"&&!/[:*?#\\\\]/.test(_.path)&&_.path===l).sort((_,I)=>ae(_.code,I.code))[0];if(A)return{code:A.code,path:A.path};let N=c.filter(_=>_.surface==="user"&&!/[:*?#\\\\]/.test(_.path)&&(m==="mobile"?_.path.startsWith("/m/"):!_.path.startsWith("/m/"))).sort((_,I)=>ae(_.code,I.code))[0];return N?{code:N.code,path:N.path}:{code:m==="mobile"?"application-root-mobile":"application-root",path:l}},a=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"}},f=qt(e.frontend.devicePolicy,"/config/frontend/devicePolicy"),E=r("desktop"),d=r("mobile"),u={schemaVersion:so,appCode:t,devicePolicy:f,rootEntry:{code:E.code,desktop:E.path,mobile:d.path},authentication:a,routes:i};return{...u,digest:ee(u)}}function rt(e,t){if(e===void 0)return;let o=R(e,t,32);vs.has(o)||p("NATIVE_ADMIN_ICON_INVALID",t)}function Yn(e,t){e!==void 0&&Z(e,t,-1e4,1e4)}function Yt(e,t,o){return e.capability!==void 0&&e.access!==void 0&&p("NATIVE_ROUTE_ACCESS_CONFLICT",`${t}/access`),e.capability!==void 0?{capability:Ne(e.capability,`${t}/capability`,o)}:e.access===void 0?{}:{access:dt(e.access,`${t}/access`,o)}}function dt(e,t,o){let n=g(e,t);y(n,["allOf","anyOf"],t,!0);let s=n.allOf===void 0?void 0:M(F(n.allOf,`${t}/allOf`,50).map((c,r)=>Ne(c,`${t}/allOf/${r}`,o))),i=n.anyOf===void 0?void 0:M(F(n.anyOf,`${t}/anyOf`,50).map((c,r)=>Ne(c,`${t}/anyOf/${r}`,o)));return(s?.length||0)+(i?.length||0)===0&&p("NATIVE_ROUTE_ACCESS_EMPTY",t),{...s===void 0?{}:{allOf:s},...i===void 0?{}:{anyOf:i}}}function _o(e){let t=new Map(ro(e).map(s=>[String(s.code),s])),o=e.workflows.definitions.map((s,i)=>{let c=`/config/workflows/definitions/${i}`,r=g(s,c);y(r,["version","definition","launch"],c,["detailRouteCode"]);let a=g(r.definition,`${c}/definition`),f=r.detailRouteCode===void 0?void 0:Ao(r.detailRouteCode,`${c}/detailRouteCode`);return{code:w(a.code,`${c}/definition/code`),title:R(a.title,`${c}/definition/title`,255),version:we(r.version,`${c}/version`),launch:Ci(e,a,r.launch,`${c}/launch`,t),...f?{detailRouteCode:f}:{},definition:a}});return M(o.map(s=>s.code)).map(s=>{let i=o.filter(f=>f.code===s),c=e.workflows.activations.find(f=>f.workflowCode===s)?.definitionVersion,r=i.find(f=>f.version===c)||[...i].sort((f,E)=>E.version-f.version)[0],a=new Set;for(let f of i){let E=g(f.definition.nodes,"/config/workflows/definitions/nodes");for(let d of Object.values(E)){let u=g(d,"/config/workflows/definitions/nodes/*");if(u.kind==="approval")for(let m of F(u.allowedOperations||[],"/config/workflows/definitions/nodes/*/allowedOperations",20))a.add(m)}}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:no(i.map(f=>f.version)),bindingVersions:no(e.workflows.bindings.map((f,E)=>{let d=`/config/workflows/bindings/${E}`,u=g(f,d),m=g(u.binding,`${d}/binding`);return{code:w(m.workflowCode,`${d}/binding/workflowCode`),version:we(u.version,`${d}/version`)}}).filter(f=>f.code===s).map(f=>f.version)),providerCodes:M(e.workflows.providers.map((f,E)=>w(g(f,`/config/workflows/providers/${E}`).code,`/config/workflows/providers/${E}/code`))),allowedOperations:[...a].sort(ae),editableParameterCodes:M(e.workflows.editableParameters.map((f,E)=>{let d=`/config/workflows/editableParameters/${E}`,u=g(f,d);return{code:w(u.code,`${d}/code`),workflowCode:w(u.workflowCode,`${d}/workflowCode`)}}).filter(f=>f.workflowCode===s).map(f=>f.code))}})}function Eo(e,t){let o=g(e,t);y(o,["mode"],t,["submission"]);let n=R(o.mode,`${t}/mode`,32);return["standalone","custom-page","hidden-handoff","work-center-only"].includes(n)||p("NATIVE_WORKFLOW_LAUNCH_MODE_INVALID",`${t}/mode`),{mode:n,...o.submission===void 0?{}:{submission:g(o.submission,`${t}/submission`)}}}function Ci(e,t,o,n,s){let i=Eo(o,n);if(!i.submission)return{mode:i.mode};["standalone","hidden-handoff"].includes(i.mode)||p("NATIVE_WORKFLOW_NAMED_OPERATION_SUBMISSION_INVALID",`${n}/submission`);let c=g(i.submission,`${n}/submission`);y(c,["kind"],`${n}/submission`,["create","existing","context"]),L(c.kind,"named-operation",`${n}/submission/kind`);let r=n.endsWith("/launch")?n.slice(0,-7):n,a=g(t.subject,`${r}/definition/subject`),f=z(a.resourceCode,`${r}/definition/subject/resourceCode`),E=e.data.resources.findIndex(O=>O.code===f),d=e.data.resources[E];(E<0||!d)&&p("NATIVE_WORKFLOW_SUBJECT_RESOURCE_MISSING",`${r}/definition/subject/resourceCode`);let u=new Set(g(d.schema,`/config/data/resources/${E}/schema`).fields.map(O=>String(O.code))),m=new Map(e.backend.operations.map(O=>[String(O.code),O])),l=(O,S)=>{let D=`${n}/submission/${S}`,U=g(O,D);y(U,["operationCode","inputs","output"],D);let k=w(U.operationCode,`${D}/operationCode`),q=m.get(k),j=s.get(k),ue=j?.platformAccess?.workflow?.codes;(!q||!j||j.method!=="POST"||!Array.isArray(ue)||!ue.includes(t.code))&&p("NATIVE_WORKFLOW_NAMED_OPERATION_INVALID",D);let fe=g(q.requestSchema,`${D}/operation/requestSchema`),K=g(fe.properties,`${D}/operation/requestSchema/properties`),Ie=new Set(fe.required===void 0?[]:F(fe.required,`${D}/operation/requestSchema/required`,64)),ie=g(U.inputs,`${D}/inputs`),V=Object.entries(ie);(!V.length||V.length>64)&&p("NATIVE_WORKFLOW_NAMED_OPERATION_INPUT_INVALID",`${D}/inputs`);let x=new Set,v=new Map,J={};for(let[G,H]of V){(!Mn.test(G)||!Object.prototype.hasOwnProperty.call(K,G))&&p("NATIVE_WORKFLOW_NAMED_OPERATION_INPUT_INVALID",`${D}/inputs/${G}`);let $e=`${D}/inputs/${G}`,ut=g(H,$e),Oe=R(ut.source,`${$e}/source`,32);if(["field","idempotency-key","current-user-reference","subject-id","subject-revision","requested-at"].includes(Oe)||p("NATIVE_WORKFLOW_NAMED_OPERATION_INPUT_INVALID",$e),y(ut,["source"],$e,Oe==="field"?["fieldCode"]:!1),v.set(Oe,(v.get(Oe)||0)+1),Oe==="field"){let ze=B(ut.fieldCode,`${$e}/fieldCode`);(x.has(ze)||!u.has(ze))&&p("NATIVE_WORKFLOW_NAMED_OPERATION_INPUT_INVALID",`${$e}/fieldCode`),x.add(ze),J[G]={source:Oe,fieldCode:ze}}else J[G]={source:Oe}}([...Ie].some(G=>!(G in ie))||(v.get("idempotency-key")||0)!==1||!V.some(([G,H])=>g(H,`${D}/inputs/${G}`).source==="idempotency-key"&&Ie.has(G))||S==="create"&&((v.get("subject-id")||0)>0||(v.get("subject-revision")||0)>0)||S==="existing"&&((v.get("subject-id")||0)!==1||(v.get("subject-revision")||0)!==1))&&p("NATIVE_WORKFLOW_NAMED_OPERATION_INPUT_INVALID",`${D}/inputs`);let W=g(U.output,`${D}/output`);y(W,["subjectId"],`${D}/output`,["subjectRevision","processCommand"]);let me=g(g(q.responseSchema,`${D}/operation/responseSchema`).properties,`${D}/operation/responseSchema/properties`);for(let G of["subjectId","subjectRevision","processCommand"]){if(W[G]===void 0)continue;let H=R(W[G],`${D}/output/${G}`,128);(!Mn.test(H)||!Object.prototype.hasOwnProperty.call(me,H))&&p("NATIVE_WORKFLOW_NAMED_OPERATION_OUTPUT_INVALID",`${D}/output/${G}`)}return{operationCode:k,method:"POST",path:j.path,requiredCapability:j.requiredCapability,requestSchemaDigest:j.requestSchemaDigest,responseSchemaDigest:j.responseSchemaDigest,inputs:J,output:{...W},fieldCodes:x}},A=c.create===void 0?void 0:l(c.create,"create"),N=c.existing===void 0?void 0:l(c.existing,"existing");!A&&!N&&p("NATIVE_WORKFLOW_NAMED_OPERATION_SUBMISSION_INVALID",`${n}/submission`);let _=new Set([...A?.fieldCodes||[],...N?.fieldCodes||[]]),I=c.context===void 0?[]:$(c.context,`${n}/submission/context`,16),T=new Set,b=I.map((O,S)=>{let D=`${n}/submission/context/${S}`,U=g(O,D);y(U,["queryParameter","fieldCode"],D);let k=R(U.queryParameter,`${D}/queryParameter`,64),q=B(U.fieldCode,`${D}/fieldCode`);return(!/^[A-Za-z][A-Za-z0-9]{0,63}$/.test(k)||T.has(k)||!_.has(q))&&p("NATIVE_WORKFLOW_LAUNCH_CONTEXT_INVALID",D),T.add(k),{queryParameter:k,fieldCode:q}}),C=O=>{let{fieldCodes:S,...D}=O;return D};return{mode:i.mode,submission:{kind:"named-operation",...A?{create:C(A)}:{},...N?{existing:C(N)}:{},context:b}}}function Ao(e,t){let o=g(e,t);y(o,["desktop","mobile"],t);let n=w(o.desktop,`${t}/desktop`),s=w(o.mobile,`${t}/mobile`);return n===s&&p("NATIVE_WORKFLOW_DETAIL_ROUTE_DUPLICATE",t),{desktop:n,mobile:s}}function bi(e,t){let o=new Set(t.map(E=>E.code)),n=new Map;e.data.resources.forEach((E,d)=>{let u=`/config/data/resources/${d}`,m=g(E,u);for(let[N,_]of Object.entries(m.fieldPolicies||{})){if(!ve(N))continue;let I=`${u}/fieldPolicies/${N}/read`,T=g(_,`${u}/fieldPolicies/${N}`);for(let b of F(T.read||[],I,2e3))o.has(b)||p("NATIVE_CAPABILITY_REFERENCE_MISSING",I)}let l=m.surface===void 0?{}:g(m.surface,`${u}/surface`);if(["native","queued-command"].includes(l.mutationOwner||"native"))return;let A=g(m.capabilities,`${u}/capabilities`);for(let N of["create","update","delete"])n.set(String(A[N]),N)});let s=new Set;for(let[E,d]of e.authz.roles.entries()){let u=`/config/authz/roles/${E}`,m=g(d,u);y(m,["code","name","description","capabilities"],u,!0);let l=w(m.code,`${u}/code`);s.has(l)&&p("NATIVE_ROLE_DUPLICATE",`${u}/code`),s.add(l),R(m.name,`${u}/name`,255);let A=F(m.capabilities,`${u}/capabilities`,2e3);for(let[N,_]of A.entries())n.has(_)&&p("NATIVE_DATA_SURFACE_MUTATION_GRANT_FORBIDDEN",`${u}/capabilities/${N}`,{operation:n.get(_)}),o.has(_)||p("NATIVE_CAPABILITY_REFERENCE_MISSING",`${u}/capabilities`)}let i=e.authz.authenticatedUserRoleCode===void 0?"":w(e.authz.authenticatedUserRoleCode,"/config/authz/authenticatedUserRoleCode");i&&!s.has(i)&&p("NATIVE_AUTHENTICATED_USER_ROLE_REFERENCE_MISSING","/config/authz/authenticatedUserRoleCode");let c=new Set,r=0;for(let[E,d]of e.perspectives.entries()){let u=`/config/perspectives/${E}`,m=g(d,u);y(m,["code","name","description","roleCodes","capabilityCodes","default"],u,!0);let l=w(m.code,`${u}/code`);c.has(l)&&p("NATIVE_PERSPECTIVE_DUPLICATE",`${u}/code`),c.add(l),R(m.name,`${u}/name`,255);let A=F(m.roleCodes,`${u}/roleCodes`,20);A.length<1&&p("NATIVE_PERSPECTIVE_ROLE_REQUIRED",`${u}/roleCodes`),A.forEach((I,T)=>{s.has(I)||p("NATIVE_PERSPECTIVE_ROLE_MISSING",`${u}/roleCodes/${T}`)});let N=M(e.authz.roles.filter(I=>A.includes(I.code)).flatMap(I=>I.capabilities)),_=F(m.capabilityCodes,`${u}/capabilityCodes`,2e3);Q(N)!==Q(_)&&p("NATIVE_PERSPECTIVE_CAPABILITY_PROJECTION_MISMATCH",`${u}/capabilityCodes`),m.default===!0?r+=1:m.default!==void 0&&p("NATIVE_PERSPECTIVE_DEFAULT_INVALID",`${u}/default`)}r>1&&p("NATIVE_PERSPECTIVE_DEFAULT_DUPLICATE","/config/perspectives");for(let[E,d]of e.backend.operations.entries()){let u=g(d,`/config/backend/operations/${E}`);o.has(u.capability)||p("NATIVE_CAPABILITY_REFERENCE_MISSING",`/config/backend/operations/${E}/capability`)}let a=new Set,f=new Set;for(let[E,d]of e.frontend.routes.entries()){let u=`/config/frontend/routes/${E}`,m=g(d,u),l=w(m.code,`${u}/code`);a.has(l)&&p("NATIVE_ROUTE_DUPLICATE",`${u}/code`),a.add(l);let A=le(m.path,`${u}/path`);f.has(A)&&p("NATIVE_ROUTE_PATH_DUPLICATE",`${u}/path`),f.add(A);let N=Yt(m,u,e.appCode);N.capability&&!o.has(N.capability)&&p("NATIVE_CAPABILITY_REFERENCE_MISSING",`${u}/capability`);let _=m.access===void 0?void 0:g(m.access,`${u}/access`);for(let I of["allOf","anyOf"]){let T=_?.[I]===void 0?[]:$(_[I],`${u}/access/${I}`,50);for(let[b,C]of T.entries()){let O=Ne(C,`${u}/access/${I}/${b}`,e.appCode);o.has(O)||p("NATIVE_CAPABILITY_REFERENCE_MISSING",`${u}/access/${I}/${b}`)}}}if(e.frontend.admin.access!==void 0){let E=dt(e.frontend.admin.access,"/config/frontend/admin/access",e.appCode);for(let d of["allOf","anyOf"])for(let[u,m]of(E[d]||[]).entries())o.has(m)||p("NATIVE_CAPABILITY_REFERENCE_MISSING",`/config/frontend/admin/access/${d}/${u}`)}for(let[E,d]of e.frontend.routes.entries()){let u=g(d,`/config/frontend/routes/${E}`);u.parentCode&&!a.has(u.parentCode)&&p("NATIVE_ROUTE_PARENT_MISSING",`/config/frontend/routes/${E}/parentCode`)}}function Oi(e){let t=new Set(e.authz.roles.map(f=>String(f.code))),o=e.authz.authenticatedUserRoleCode===void 0?"":w(e.authz.authenticatedUserRoleCode,"/config/authz/authenticatedUserRoleCode"),n=new Map(e.authz.scopeDimensions.map(f=>[String(f.code),{valueType:f.valueType==="uuid"?"uuid":"string",...f.valueSource?.resourceCode?{valueSourceResourceCode:String(f.valueSource.resourceCode)}:{}}])),s=new Set(n.keys()),i=new Map(e.data.resources.map((f,E)=>{let d=ye(f,`/config/data/resources/${E}`,e.appCode);return[d.code,new Map(d.schema.fields.map(u=>[String(u.code),u]))]}));for(let[f,E]of e.authz.scopeDimensions.entries()){let d=`/config/authz/scopeDimensions/${f}`,u=g(E,d);if(y(u,["code","name","resourceCode","valueType","hierarchyMode","valueSource"],d,!0),u.valueSource===void 0)continue;let m=g(u.valueSource,`${d}/valueSource`);y(m,["kind","resourceCode","labelField","enabledField"],`${d}/valueSource`,!0),m.kind!=="native_resource"&&p("NATIVE_SCOPE_VALUE_SOURCE_KIND_INVALID",`${d}/valueSource/kind`),u.valueType!=="uuid"&&p("NATIVE_SCOPE_VALUE_SOURCE_TYPE_INVALID",`${d}/valueType`);let l=z(m.resourceCode,`${d}/valueSource/resourceCode`),A=i.get(l);A||p("NATIVE_SCOPE_VALUE_SOURCE_RESOURCE_MISSING",`${d}/valueSource/resourceCode`);let N=B(m.labelField,`${d}/valueSource/labelField`);if(["text.short","text.long"].includes(String(A.get(N)?.type||""))||p("NATIVE_SCOPE_VALUE_SOURCE_LABEL_FIELD_INVALID",`${d}/valueSource/labelField`),m.enabledField!==void 0){let _=B(m.enabledField,`${d}/valueSource/enabledField`);A.get(_)?.type!=="boolean"&&p("NATIVE_SCOPE_VALUE_SOURCE_ENABLED_FIELD_INVALID",`${d}/valueSource/enabledField`)}}let c=new Set,r=new Set;for(let[f,E]of e.authz.scopeSources.entries()){let d=`/config/authz/scopeSources/${f}`,u=g(E,d);y(u,["code","name","resourceCode","subject","grants","operationField","enabledField","effectiveFromField","effectiveToField","failureMode"],d,!0);let m=w(u.code,`${d}/code`);c.has(m)&&p("NATIVE_SCOPE_SOURCE_DUPLICATE",`${d}/code`),c.add(m),R(u.name,`${d}/name`,255);let l=z(u.resourceCode,`${d}/resourceCode`),A=i.get(l);A||p("NATIVE_SCOPE_SOURCE_RESOURCE_MISSING",`${d}/resourceCode`);let N=g(u.subject,`${d}/subject`),_=R(N.type,`${d}/subject/type`,32);y(N,_==="role_membership"?["type","userIdField","roleCode"]:["type","userIdField"],`${d}/subject`),["user","role_membership"].includes(_)||p("NATIVE_SCOPE_SOURCE_SUBJECT_INVALID",`${d}/subject/type`);let I=xe(N.userIdField,A);vt(I)||p("NATIVE_SCOPE_SOURCE_SUBJECT_PATH_INVALID",`${d}/subject/userIdField`),_==="role_membership"&&!t.has(String(N.roleCode))&&p("NATIVE_ROLE_REFERENCE_MISSING",`${d}/subject/roleCode`);let T=new Set;for(let[b,C]of $(u.grants,`${d}/grants`,100).entries()){let O=`${d}/grants/${b}`,S=g(C,O);y(S,["dimensionCode","valueField","parentValueField"],O,!0);let D=w(S.dimensionCode,`${O}/dimensionCode`);(!s.has(D)||T.has(D))&&p("NATIVE_SCOPE_SOURCE_DIMENSION_INVALID",`${O}/dimensionCode`),T.add(D),u.failureMode==="last_known_good"&&r.add(D);for(let U of["valueField","parentValueField"]){if(S[U]===void 0)continue;let k=xe(S[U],A);$n(k,n.get(D),i)||p("NATIVE_SCOPE_SOURCE_GRANT_PATH_INVALID",`${O}/${U}`)}}T.size===0&&p("NATIVE_SCOPE_SOURCE_GRANT_REQUIRED",`${d}/grants`),["strict","last_known_good"].includes(u.failureMode)||p("NATIVE_SCOPE_SOURCE_FAILURE_MODE_INVALID",`${d}/failureMode`);for(let b of["operationField","enabledField","effectiveFromField","effectiveToField"]){if(u[b]===void 0)continue;let C=B(u[b],`${d}/${b}`);A.has(C)||p("NATIVE_SCOPE_SOURCE_FIELD_MISSING",`${d}/${b}`)}}$i(e,t,i,o);let a=new Set;for(let[f,E]of e.authz.dataPolicies.entries()){let d=`/config/authz/dataPolicies/${f}`,u=g(E,d);y(u,["code","name","resourceCode","unrestrictedRoleCodes","operations","matchMode","rules","readExpression","writeBoundary"],d,!0);let m=w(u.code,`${d}/code`);a.has(m)&&p("NATIVE_DATA_POLICY_DUPLICATE",`${d}/code`),a.add(m);let l=u.readExpression!==void 0,A=F(u.operations||[],`${d}/operations`,4);u.operations!==void 0&&(A.length===0||A.some(C=>!["read","create","update","delete"].includes(C)))&&p("NATIVE_DATA_POLICY_OPERATIONS_INVALID",`${d}/operations`),["AND","OR"].includes(u.matchMode)||p("NATIVE_DATA_POLICY_MATCH_MODE_INVALID",`${d}/matchMode`),l&&u.operations!==void 0&&p("NATIVE_DATA_POLICY_READ_EXPRESSION_OPERATIONS_FORBIDDEN",`${d}/operations`);let N=e.data.resources.find(C=>C.dataPolicyCode===m),_=u.resourceCode||N?.code,I=_?i.get(z(_,`${d}/resourceCode`)):void 0;l&&!I&&p("NATIVE_DATA_POLICY_RESOURCE_MISSING",`${d}/resourceCode`);let T=F(u.unrestrictedRoleCodes||[],`${d}/unrestrictedRoleCodes`,100);u.unrestrictedRoleCodes!==void 0&&T.length===0&&p("NATIVE_DATA_POLICY_UNRESTRICTED_ROLES_INVALID",`${d}/unrestrictedRoleCodes`);for(let C of T)t.has(C)||p("NATIVE_ROLE_REFERENCE_MISSING",`${d}/unrestrictedRoleCodes`);let b;try{let C=$(u.rules,`${d}/rules`,100).map((O,S)=>({rule:g(O,`${d}/rules/${S}`),pointer:`${d}/rules/${S}`}));C.length===0?(!l||u.matchMode!=="AND"||u.writeBoundary!=="capability_only")&&p("NATIVE_DATA_POLICY_WRITE_BOUNDARY_REQUIRED",d):u.writeBoundary!==void 0&&p("NATIVE_DATA_POLICY_WRITE_BOUNDARY_INVALID",`${d}/writeBoundary`),b=[...C],l&&(b.push(...st(u.readExpression,`${d}/readExpression`)),xn(u.readExpression,`${d}/readExpression`))}catch(C){throw C instanceof Be&&p(C.code,C.pointer),C}for(let{rule:C,pointer:O}of b){y(C,["subject","dimensionCode","relationCode","resourceCode","field","roleCodes","operation","valuePath","emptyMatchesAll","operator","value","operand"],O,!0);let S=B(C.field,`${O}/field`),D=I?.get(S);l&&!D&&p("NATIVE_DATA_POLICY_FIELD_MISSING",`${O}/field`);for(let K of F(C.roleCodes||[],`${O}/roleCodes`,100))t.has(K)||p("NATIVE_ROLE_REFERENCE_MISSING",`${O}/roleCodes`);let U=String(C.operator||""),k=C.operand==="db_now",q=["is_null","is_not_null"].includes(U),j=["eq","not_eq","in","not_in"].includes(U),ue=!k&&(C.operator!==void 0||C.value!==void 0);if([C.subject==="current_user"?"current_user":"",typeof C.dimensionCode=="string"?"dimension":"",typeof C.relationCode=="string"?"relationship":"",ue?"constant":"",k?"db_now":""].filter(Boolean).length!==1&&p("NATIVE_DATA_POLICY_RULE_SOURCE_INVALID",O),C.subject!==void 0&&C.subject!=="current_user"&&p("NATIVE_DATA_POLICY_SUBJECT_INVALID",`${O}/subject`),ue){if(!j&&!q&&p("NATIVE_DATA_POLICY_OPERATOR_INVALID",`${O}/operator`),["in","not_in"].includes(U)){let K=$(C.value,`${O}/value`,100).map((Ie,ie)=>R(Ie,`${O}/value/${ie}`,2048));(K.length===0||new Set(K).size!==K.length)&&p("NATIVE_DATA_POLICY_VALUE_INVALID",`${O}/value`)}else["eq","not_eq"].includes(U)?R(C.value,`${O}/value`,2048):(C.value!==void 0||C.operand!==void 0)&&p("NATIVE_DATA_POLICY_VALUE_INVALID",`${O}/value`);for(let K of["operation","valuePath","emptyMatchesAll","resourceCode","operand"])C[K]!==void 0&&p("NATIVE_DATA_POLICY_CONSTANT_RULE_INVALID",`${O}/${K}`)}if(k){(!["lt","lte","gt","gte"].includes(U)||C.value!==void 0||D?.type!=="datetime")&&p("NATIVE_DATA_POLICY_DB_NOW_INVALID",O);for(let K of["operation","valuePath","emptyMatchesAll","resourceCode","value"])C[K]!==void 0&&p("NATIVE_DATA_POLICY_DB_NOW_INVALID",`${O}/${K}`)}C.dimensionCode&&!s.has(C.dimensionCode)&&p("NATIVE_SCOPE_DIMENSION_MISSING",`${O}/dimensionCode`),r.has(String(C.dimensionCode||""))&&C.operation!=="read"&&p("NATIVE_SCOPE_SOURCE_LAST_KNOWN_GOOD_UNSAFE",`${O}/operation`)}}for(let[f,E]of e.data.resources.entries()){let d=g(E,`/config/data/resources/${f}`);d.dataPolicyCode&&!a.has(d.dataPolicyCode)&&p("NATIVE_DATA_POLICY_REFERENCE_MISSING",`/config/data/resources/${f}/dataPolicyCode`)}}function yi(e){try{nn(e.data.resources,"/config/data/resources")}catch(t){throw t instanceof _e&&p(t.code,t.pointer),t}}function $i(e,t,o,n){let s=new Set;for(let[i,c]of e.authz.roleMembershipSources.entries()){let r=`/config/authz/roleMembershipSources/${i}`,a=g(c,r);y(a,["code","name","resourceCode","userIdField","roleCode","enabledField","effectiveFromField","effectiveToField","failureMode"],r,!0);let f=w(a.code,`${r}/code`);f.length>100&&p("NATIVE_AUTHORIZATION_PROJECTION_SOURCE_CODE_INVALID",`${r}/code`),s.has(f)&&p("NATIVE_AUTHORIZATION_PROJECTION_SOURCE_DUPLICATE",`${r}/code`),s.add(f),R(a.name,`${r}/name`,255);let E=Kn(a.resourceCode,`${r}/resourceCode`,o);Hn(a.userIdField,`${r}/userIdField`,E),t.has(String(a.roleCode||""))||p("NATIVE_ROLE_REFERENCE_MISSING",`${r}/roleCode`),n&&a.roleCode===n&&p("NATIVE_AUTHENTICATED_USER_ROLE_SOURCE_CONFLICT",`${r}/roleCode`),Xn(a,r,E)}for(let[i,c]of e.authz.relationshipGrantSources.entries()){let r=`/config/authz/relationshipGrantSources/${i}`,a=g(c,r);y(a,["code","name","resourceCode","subject","relationCode","targetResourceCode","resourceIdField","operations","enabledField","effectiveFromField","effectiveToField","failureMode"],r,!0);let f=w(a.code,`${r}/code`);f.length>100&&p("NATIVE_AUTHORIZATION_PROJECTION_SOURCE_CODE_INVALID",`${r}/code`),s.has(f)&&p("NATIVE_AUTHORIZATION_PROJECTION_SOURCE_DUPLICATE",`${r}/code`),s.add(f),R(a.name,`${r}/name`,255);let E=Kn(a.resourceCode,`${r}/resourceCode`,o),d=g(a.subject,`${r}/subject`),u=R(d.type,`${r}/subject/type`,32);y(d,u==="role_membership"?["type","userIdField","roleCode"]:["type","userIdField"],`${r}/subject`),["user","role_membership"].includes(u)||p("NATIVE_AUTHORIZATION_PROJECTION_SUBJECT_INVALID",`${r}/subject/type`),Hn(d.userIdField,`${r}/subject/userIdField`,E),u==="role_membership"&&!t.has(String(d.roleCode||""))&&p("NATIVE_ROLE_REFERENCE_MISSING",`${r}/subject/roleCode`),w(a.relationCode,`${r}/relationCode`);let m=z(a.targetResourceCode,`${r}/targetResourceCode`);o.has(m)||p("NATIVE_AUTHORIZATION_PROJECTION_TARGET_RESOURCE_MISSING",`${r}/targetResourceCode`);let l=xe(a.resourceIdField,E),A=l?.field.type==="resource-ref.single"&&l.valuePath==="value"&&l.field.source?.resourceCode===m;(a.resourceIdField==="id"?m!==String(a.resourceCode):!A)&&p("NATIVE_AUTHORIZATION_PROJECTION_RESOURCE_ID_FIELD_INVALID",`${r}/resourceIdField`);let N=F(a.operations,`${r}/operations`,20);(N.length===0||N.some(_=>_.length>64||!/^[A-Za-z0-9][A-Za-z0-9:._*-]{0,63}$/.test(_)))&&p("NATIVE_AUTHORIZATION_PROJECTION_OPERATIONS_INVALID",`${r}/operations`),Xn(a,r,E)}}function Kn(e,t,o){let n=z(e,t),s=o.get(n);return s||p("NATIVE_AUTHORIZATION_PROJECTION_RESOURCE_MISSING",t),s}function Hn(e,t,o){let n=xe(e,o);vt(n)||p("NATIVE_AUTHORIZATION_PROJECTION_USER_FIELD_INVALID",t)}function Xn(e,t,o){if(e.failureMode!=="strict"&&p("NATIVE_AUTHORIZATION_PROJECTION_FAILURE_MODE_INVALID",`${t}/failureMode`),e.enabledField!==void 0){let n=B(e.enabledField,`${t}/enabledField`);o.get(n)?.type!=="boolean"&&p("NATIVE_AUTHORIZATION_PROJECTION_ENABLED_FIELD_INVALID",`${t}/enabledField`)}for(let n of["effectiveFromField","effectiveToField"]){if(e[n]===void 0)continue;let s=B(e[n],`${t}/${n}`);["date","datetime"].includes(String(o.get(s)?.type))||p("NATIVE_AUTHORIZATION_PROJECTION_EFFECTIVE_FIELD_INVALID",`${t}/${n}`)}}function Ri(e){let t=new Set,o=new Set;e.forEach((n,s)=>{let i=`/config/backend/secrets/${s}`,c=g(n,i);y(c,["name","env","description","required","exposure"],i,!0);let r=R(c.name,`${i}/name`,128),a=R(c.env,`${i}/env`,128);$s.test(r)||p("NATIVE_SECRET_NAME_INVALID",`${i}/name`),(!Rs.test(a)||a.startsWith("OPENXIANGDA_")||["NODE_ENV","PORT"].includes(a))&&p("NATIVE_SECRET_ENV_INVALID",`${i}/env`),t.has(r)&&p("NATIVE_SECRET_NAME_DUPLICATE",`${i}/name`),o.has(a)&&p("NATIVE_SECRET_ENV_DUPLICATE",`${i}/env`),t.add(r),o.add(a),L(c.exposure,"active_only",`${i}/exposure`),c.required!==void 0&&Fe(c.required,`${i}/required`),c.description!==void 0&&Kt(c.description,`${i}/description`,2e3)})}function hi(e){let t=new Set,o=new Map,n=new Map(e.data.resources.map(u=>[String(u.code),u])),s=new Map(e.frontend.routes.map((u,m)=>{let l=g(u,`/config/frontend/routes/${m}`);return[w(l.code,`/config/frontend/routes/${m}/code`),l]}));for(let[u,m]of e.workflows.definitions.entries()){let l=`/config/workflows/definitions/${u}`,A=g(m,l);if(y(A,["version","definition","launch"],l,["detailRouteCode"]),Eo(A.launch,`${l}/launch`),A.detailRouteCode!==void 0){let T=Ao(A.detailRouteCode,`${l}/detailRouteCode`);for(let[b,C,O]of[["desktop",T.desktop,["admin","user"]],["mobile",T.mobile,["user"]]]){let S=`${l}/detailRouteCode/${b}`,D=s.get(C);D||p("NATIVE_WORKFLOW_DETAIL_ROUTE_MISSING",S),O.some(q=>q===D.surface)||p("NATIVE_WORKFLOW_DETAIL_ROUTE_SURFACE_INVALID",S);let U=le(D.path,S),k=[...U.matchAll(/:([A-Za-z][A-Za-z0-9_]*)/g)].map(q=>q[1]);(U.includes("*")||k.length!==1||k[0]!=="instanceId")&&p("NATIVE_WORKFLOW_DETAIL_ROUTE_PATH_INVALID",S)}}let N=g(A.definition,`${l}/definition`),_=`${N.code}:${we(A.version,`${l}/version`)}`;t.has(_)&&p("NATIVE_WORKFLOW_DEFINITION_DUPLICATE",l),t.add(_),Di(N,`${l}/definition`),Si(N.subject,n,`${l}/definition/subject`);let I=Pn(N,{appCode:e.appCode,capabilities:e.authz.capabilities.map(T=>T.code),fields:new Map((n.get(N.subject.resourceCode)?.schema.fields||[]).map(T=>[T.code,T]))});I.length&&p("NATIVE_WORKFLOW_INSTANCE_COMMAND_POLICY_INVALID",`${l}/definition/instanceCommands`,{errors:I}),N.title===N.code&&p("NATIVE_WORKFLOW_USER_TITLE_REQUIRED",`${l}/definition/title`),o.set(_,N)}let i=new Set,c=new Map;for(let[u,m]of e.workflows.bindings.entries()){let l=g(m,`/config/workflows/bindings/${u}`),A=g(l.binding,`/config/workflows/bindings/${u}/binding`),N=`${A.workflowCode}:${we(l.version,`/config/workflows/bindings/${u}/version`)}`;i.has(N)&&p("NATIVE_WORKFLOW_BINDING_DUPLICATE",`/config/workflows/bindings/${u}`),i.add(N),Vi(A,`/config/workflows/bindings/${u}/binding`),c.set(N,A)}let r=new Set,a=new Map;for(let[u,m]of e.workflows.activations.entries()){let l=`/config/workflows/activations/${u}`,A=g(m,l);y(A,["workflowCode","definitionVersion","bindingVersion","acceptedCommandDeactivationPolicy"],l,["environmentKey"]);let N=w(A.workflowCode,`${l}/workflowCode`);r.has(N)&&p("NATIVE_WORKFLOW_ACTIVATION_DUPLICATE",l),r.add(N);let _=`${N}:${we(A.definitionVersion,`${l}/definitionVersion`)}`,I=`${N}:${we(A.bindingVersion,`${l}/bindingVersion`)}`;t.has(_)||p("NATIVE_WORKFLOW_DEFINITION_REFERENCE_MISSING",`${l}/definitionVersion`),i.has(I)||p("NATIVE_WORKFLOW_BINDING_REFERENCE_MISSING",`${l}/bindingVersion`);let T=o.get(_),b=c.get(I);(!["finish-pinned","cancel-on-deactivate"].includes(A.acceptedCommandDeactivationPolicy)||A.acceptedCommandDeactivationPolicy!==T.acceptedCommandDeactivationPolicy)&&p("NATIVE_WORKFLOW_COMMAND_DEACTIVATION_POLICY_MISMATCH",`${l}/acceptedCommandDeactivationPolicy`),wi(T,b,`/config/workflows/activations/${u}`),a.set(N,b)}let f=new Set;e.workflows.providers.forEach((u,m)=>{let l=`/config/workflows/providers/${m}`,A=g(u,l);y(A,["code","endpointPath","timeoutMs"],l,!0);let N=w(A.code,`${l}/code`);f.has(N)&&p("NATIVE_WORKFLOW_PROVIDER_DUPLICATE",`${l}/code`),f.add(N),le(A.endpointPath,`${l}/endpointPath`),A.timeoutMs!==void 0&&Z(A.timeoutMs,`${l}/timeoutMs`,100,1e4)});for(let[u,m]of a.entries())for(let[l,A]of Object.entries(g(m.bindings,"/config/workflows/bindings/*/binding/bindings"))){let N=g(A,`/config/workflows/${u}/bindings/${l}`);N.provider==="application_provider"&&!f.has(N.providerCode)&&p("NATIVE_WORKFLOW_PROVIDER_REFERENCE_MISSING",`/config/workflows/${u}/bindings/${l}/providerCode`)}let E=new Set(e.authz.roles.map(u=>u.code)),d=new Set;e.workflows.editableParameters.forEach((u,m)=>{let l=`/config/workflows/editableParameters/${m}`,A=g(u,l);y(A,["code","workflowCode","bindingKey","label","valueType","required","allowedRoleCodes","allowedProviderCodes","maxItems"],l,!0);let N=w(A.code,`${l}/code`);d.has(N)&&p("NATIVE_WORKFLOW_EDITABLE_PARAMETER_DUPLICATE",`${l}/code`),d.add(N);let _=lt(A.workflowCode,`${l}/workflowCode`),I=Ht(A.bindingKey,`${l}/bindingKey`),T=a.get(_);(!T||!g(T.bindings,`${l}/bindingKey`)[I])&&p("NATIVE_WORKFLOW_EDITABLE_BINDING_MISSING",`${l}/bindingKey`),R(A.label,`${l}/label`,255),["role_code","user_ids","provider_code"].includes(A.valueType)||p("NATIVE_WORKFLOW_EDITABLE_VALUE_TYPE_INVALID",`${l}/valueType`);for(let b of F(A.allowedRoleCodes||[],`${l}/allowedRoleCodes`,100))E.has(b)||p("NATIVE_ROLE_REFERENCE_MISSING",`${l}/allowedRoleCodes`);for(let b of F(A.allowedProviderCodes||[],`${l}/allowedProviderCodes`,100))f.has(b)||p("NATIVE_WORKFLOW_PROVIDER_REFERENCE_MISSING",`${l}/allowedProviderCodes`);A.required!==void 0&&Fe(A.required,`${l}/required`),A.maxItems!==void 0&&Z(A.maxItems,`${l}/maxItems`,1,200)})}function Si(e,t,o){let n=g(e,o);y(n,["resourceCode","factProjection"],o,["summaryFields"]);let s=z(n.resourceCode,`${o}/resourceCode`),i=t.get(s);i||p("NATIVE_WORKFLOW_SUBJECT_RESOURCE_MISSING",`${o}/resourceCode`);let c=new Set($(g(i.schema,`${o}/resourceCode`).fields,`${o}/resourceCode`,500).map((f,E)=>B(g(f,`${o}/resourceCode/${E}`).code,`${o}/resourceCode/${E}`))),r=g(n.factProjection,`${o}/factProjection`),a=Object.entries(r);(a.length<1||a.length>64)&&p("NATIVE_WORKFLOW_SUBJECT_FACT_PROJECTION_INVALID",`${o}/factProjection`);for(let[f,E]of a){Ds.test(f)||p("NATIVE_WORKFLOW_SUBJECT_FACT_KEY_INVALID",`${o}/factProjection/${f}`);let d=B(E,`${o}/factProjection/${f}`);c.has(d)||p("NATIVE_WORKFLOW_SUBJECT_FIELD_MISSING",`${o}/factProjection/${f}`)}if(n.summaryFields!==void 0){let f=F(n.summaryFields,`${o}/summaryFields`,Vs).map((l,A)=>B(l,`${o}/summaryFields/${A}`)),E=t.get(s),d=E.surface&&typeof E.surface=="object"&&!Array.isArray(E.surface)?E.surface:{},u=d.fields&&typeof d.fields=="object"&&!Array.isArray(d.fields)?d.fields:{},m=new Map($(g(E.schema,`${o}/resourceCode`).fields,`${o}/resourceCode`,500).map((l,A)=>{let N=g(l,`${o}/resourceCode/${A}`);return[String(N.code),N]}));for(let[l,A]of f.entries()){let N=m.get(A),_=u[A],I=String(N?.type||""),T=N?.maxLength;(!N||N.system===!0||_&&typeof _=="object"&&!Array.isArray(_)&&_.system===!0||["id","revision","created_by","updated_by","created_at","updated_at"].includes(A)||!Fs.has(I)||I==="text.long"&&typeof T=="number"&&Number.isFinite(T)&&T>ws)&&p("NATIVE_WORKFLOW_SUBJECT_SUMMARY_FIELDS_INVALID",`${o}/summaryFields/${l}`)}}}function Di(e,t){y(e,["schemaVersion","code","title","subject","acceptedCommandDeactivationPolicy","startAt","inputSchema","nodes"],t,["organizationContext","instanceCommands"]),L(e.schemaVersion,"openxiangda.workflow-definition/v2",`${t}/schemaVersion`),lt(e.code,`${t}/code`),R(e.title,`${t}/title`,255),["finish-pinned","cancel-on-deactivate"].includes(e.acceptedCommandDeactivationPolicy)||p("NATIVE_WORKFLOW_COMMAND_DEACTIVATION_POLICY_REQUIRED",`${t}/acceptedCommandDeactivationPolicy`);let o=g(e.nodes,`${t}/nodes`),n=Object.keys(o);(n.length===0||n.length>200)&&p("NATIVE_WORKFLOW_NODE_COUNT_INVALID",`${t}/nodes`);let s=R(e.startAt,`${t}/startAt`,128);o[s]||p("NATIVE_WORKFLOW_START_NODE_MISSING",`${t}/startAt`);let i=new Map;for(let[f,E]of Object.entries(o)){let d=`${t}/nodes/${f}`,u=g(E,d);L(u.id,f,`${d}/id`),["approval","condition","end"].includes(u.kind)||p("NATIVE_WORKFLOW_NODE_KIND_INVALID",`${d}/kind`);let m=[];if(u.kind==="approval"){R(u.title,`${d}/title`,255),Ht(u.binding,`${d}/binding`),["single","any","all","sequence"].includes(u.mode)||p("NATIVE_WORKFLOW_APPROVAL_MODE_INVALID",`${d}/mode`),m.push(R(u.onApprove,`${d}/onApprove`,128),R(u.onReject,`${d}/onReject`,128));for(let l of F(u.returnTargets||[],`${d}/returnTargets`,200))o[l]||p("NATIVE_WORKFLOW_TARGET_MISSING",`${d}/returnTargets`);for(let l of F(u.allowedOperations||[],`${d}/allowedOperations`,20))Ps.has(l)||p("NATIVE_WORKFLOW_OPERATION_INVALID",`${d}/allowedOperations`)}else if(u.kind==="condition"){let l=$(u.branches,`${d}/branches`,100);l.length===0&&p("NATIVE_WORKFLOW_BRANCH_REQUIRED",`${d}/branches`),l.forEach((A,N)=>{let _=g(A,`${d}/branches/${N}`);Je(_.when,`${d}/branches/${N}/when`,0),m.push(R(_.target,`${d}/branches/${N}/target`,128))}),m.push(R(u.otherwise,`${d}/otherwise`,128))}else R(u.title,`${d}/title`,255),R(u.outcome,`${d}/outcome`,128);for(let l of m)o[l]||p("NATIVE_WORKFLOW_TARGET_MISSING",d);i.set(f,m)}let c=new Set,r=new Set,a=f=>{if(r.has(f)&&p("NATIVE_WORKFLOW_CYCLE_FORBIDDEN",`${t}/nodes/${f}`),!c.has(f)){c.add(f),r.add(f);for(let E of i.get(f)||[])a(E);r.delete(f)}};a(s),c.size!==n.length&&p("NATIVE_WORKFLOW_NODE_UNREACHABLE",`${t}/nodes`)}function Je(e,t,o){o>20&&p("NATIVE_WORKFLOW_EXPRESSION_DEPTH_EXCEEDED",t);let n=g(e,t),s=R(n.op,`${t}/op`,16);if(s!=="literal"){if(s==="path"){let i=R(n.path,`${t}/path`,255);/^[A-Za-z][A-Za-z0-9_.]{0,254}$/.test(i)||p("NATIVE_WORKFLOW_EXPRESSION_PATH_INVALID",`${t}/path`);return}if(["eq","neq","gt","gte","lt","lte","in","contains"].includes(s)){Je(n.left,`${t}/left`,o+1),Je(n.right,`${t}/right`,o+1);return}if(["and","or"].includes(s)){let i=$(n.values,`${t}/values`,100);i.length===0&&p("NATIVE_WORKFLOW_EXPRESSION_EMPTY",`${t}/values`),i.forEach((c,r)=>Je(c,`${t}/values/${r}`,o+1));return}if(["not","exists"].includes(s)){Je(n.value,`${t}/value`,o+1);return}p("NATIVE_WORKFLOW_EXPRESSION_OPERATOR_INVALID",`${t}/op`)}}function Vi(e,t){L(e.schemaVersion,"openxiangda.workflow-binding/v2",`${t}/schemaVersion`),lt(e.workflowCode,`${t}/workflowCode`);let o=g(e.bindings,`${t}/bindings`);Object.keys(o).length>200&&p("NATIVE_WORKFLOW_BINDING_LIMIT_EXCEEDED",`${t}/bindings`);for(let[n,s]of Object.entries(o)){Ht(n,`${t}/bindings/${n}`);let i=g(s,`${t}/bindings/${n}`),c=R(i.provider,`${t}/bindings/${n}/provider`,64);["fixed_users","initiator","input_users","form_field_users","department_supervisor","app_role","app_role_in_scope","business_relation","previous_node_actor","initiator_select","application_provider"].includes(c)||p("NATIVE_WORKFLOW_BINDING_PROVIDER_INVALID",`${t}/bindings/${n}/provider`),c==="fixed_users"&&$(i.users,`${t}/bindings/${n}/users`,200).length===0&&p("NATIVE_WORKFLOW_BINDING_USERS_REQUIRED",`${t}/bindings/${n}/users`),["input_users","form_field_users"].includes(c)&&R(i.inputPath,`${t}/bindings/${n}/inputPath`,255),["app_role","app_role_in_scope","initiator_select"].includes(c)&&w(i.roleCode,`${t}/bindings/${n}/roleCode`),c==="department_supervisor"&&R(i.departmentIdFrom,`${t}/bindings/${n}/departmentIdFrom`,255),c==="application_provider"&&w(i.providerCode,`${t}/bindings/${n}/providerCode`)}}function wi(e,t,o){L(t.workflowCode,e.code,`${o}/workflowCode`);let n=g(t.bindings,`${o}/bindings`);for(let[s,i]of Object.entries(g(e.nodes,`${o}/nodes`))){let c=g(i,`${o}/nodes/${s}`);c.kind==="approval"&&!n[c.binding]&&p("NATIVE_WORKFLOW_BINDING_REFERENCE_MISSING",`${o}/nodes/${s}/binding`)}}function Fi(e,t,o){let n=g(t.routeManifest,"/contracts/routeManifest"),s=g(e.routeManifest,"/contracts/routeManifest"),i=new Map;for(let E of $(o.data?.resources,"/config/data/resources",100)){let d=g(E,"/config/data/resources");i.set(String(d.code||""),d)}let c=new Set($(s.routes,"/contracts/routeManifest/routes",1e3).map(E=>String(g(E,"/contracts/routeManifest/routes").code||""))),r=[];for(let E of $(n.routes,"/contracts/routeManifest/routes",1e3)){let d=g(E,"/contracts/routeManifest/routes"),u=String(d.kind||"");if(u!=="resource-records"&&u!=="resource-submit")continue;let m=String(d.resourceCode||""),l=i.get(m);l||p("NATIVE_ROUTE_MANIFEST_RESOURCE_UNKNOWN","/contracts/routeManifest/routes");let N=`user.${m}.${u==="resource-records"?"records":"submit"}`;L(String(d.code||""),N,"/contracts/routeManifest/routes/code");let _=u==="resource-records"?"read":"create",I=String(g(l.capabilities,"/config/data/resources/capabilities")[_]||"");for(let T of["desktop","mobile"]){let b=g(d[T],`/contracts/routeManifest/routes/${T}`),C=T==="mobile"?"/m/my/":"/my/",O=u==="resource-records"?`${C}${m}`:`${C}${m}/submit`;L(String(b.path||""),O,`/contracts/routeManifest/routes/${T}/path`),L(String(b.capability||""),I,`/contracts/routeManifest/routes/${T}/capability`),L(String(b.routeCode||""),`${N}.${T}`,`/contracts/routeManifest/routes/${T}/routeCode`)}(c.has(N)||r.some(T=>String(T.code)===N))&&p("NATIVE_ROUTE_MANIFEST_DUPLICATE","/contracts/routeManifest/routes/code"),r.push(d)}if(!r.length)return;s.routes=$([...s.routes,...r],"/contracts/routeManifest/routes",1e3).sort((E,d)=>ae(String(g(E,"x").code||""),String(g(d,"x").code||"")));let a=String(g(n.rootEntry,"x").code||"");if(r.find(E=>String(E.code)===a&&E.kind==="resource-records")){let E=g(n.rootEntry,"x");s.rootEntry={code:a,desktop:String(E.desktop||""),mobile:String(E.mobile||"")}}s.digest=ee({schemaVersion:s.schemaVersion,appCode:s.appCode,devicePolicy:s.devicePolicy,rootEntry:s.rootEntry,authentication:s.authentication,routes:s.routes})}function ye(e,t,o){let n=g(e,t);y(n,["schemaVersion","appCode","code","name","schema","surface","invariants","decimalReservationLifecycle","uniqueKeys","capabilities","dataPolicyCode","fieldPolicies"],t,!0),L(n.schemaVersion,"openxiangda.data-resource/v2",`${t}/schemaVersion`),L(n.appCode,o,`${t}/appCode`);let s=z(n.code,`${t}/code`),i=R(n.name,`${t}/name`,255),c=g(n.schema,`${t}/schema`);y(c,["fields"],`${t}/schema`);let r,a,f,E;try{f=Vt(n.decimalReservationLifecycle,`${t}/decimalReservationLifecycle`),r=It(c.fields,`${t}/schema/fields`),E=Sn(n.uniqueKeys,r,`${t}/uniqueKeys`),a=on(n.invariants,r,`${t}/invariants`),$t(n.surface,r,`${t}/surface`)}catch(l){throw(l instanceof _e||l instanceof De||l instanceof je)&&p(l.code,l.pointer),l}let d=new Set(r.map(l=>l.code)),u=g(n.capabilities,`${t}/capabilities`);y(u,["read","create","update","delete"],`${t}/capabilities`);let m=g(n.fieldPolicies,`${t}/fieldPolicies`);for(let[l,A]of Object.entries(m)){!d.has(l)&&!ve(l)&&p("NATIVE_DATA_FIELD_POLICY_FIELD_MISSING",`${t}/fieldPolicies/${l}`);let N=`${t}/fieldPolicies/${l}`,_=g(A,N);ve(l)&&(y(_,["read"],N,!0),(!Array.isArray(_.read)||_.read.length>20||_.read.some(I=>typeof I!="string"||!I.trim())||new Set(_.read).size!==_.read.length)&&p("NATIVE_DATA_AUDIT_READ_POLICY_INVALID",`${N}/read`)),y(_,["read","create","update","mask"],N,!0),_.mask!==void 0&&!["omit","null"].includes(_.mask)&&p("NATIVE_DATA_FIELD_POLICY_MASK_INVALID",`${N}/mask`)}return{...n,code:s,name:i,schema:{fields:r},...n.invariants===void 0?{}:{invariants:a},...f?{decimalReservationLifecycle:f}:{},...E!==void 0?{uniqueKeys:E}:{},capabilities:u,fieldPolicies:m}}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,o])=>({code:t,kind:"platform",name:o,source:"platform"}))]}function Qn(e,t,o,n){let s=e.toString("utf8"),i;try{i=JSON.parse(s)}catch{p(o,t)}let c=g(i,t);return Q(c)!==s&&p(n,t),c}function Zn(e,t){let o=0,n=(s,i,c)=>{if(o+=1,o>Us&&p("NATIVE_ARTIFACT_NODE_LIMIT_EXCEEDED",i),c>xs&&p("NATIVE_ARTIFACT_DEPTH_LIMIT_EXCEEDED",i),typeof s=="string"){Buffer.byteLength(s)>jt&&p("NATIVE_ARTIFACT_STRING_LIMIT_EXCEEDED",i);return}if(Array.isArray(s)){s.forEach((r,a)=>n(r,`${i}/${a}`,c+1));return}if(!(!s||typeof s!="object"))for(let[r,a]of Object.entries(s))["__proto__","prototype","constructor"].includes(r)&&p("NATIVE_ARTIFACT_DANGEROUS_KEY",`${i}/${r}`),vi(r)&&p("NATIVE_ARTIFACT_RUNTIME_FIELD_FORBIDDEN",`${i}/${r}`),n(a,`${i}/${r}`,c+1)};n(e,t,0)}function vi(e){return["environmentKey","environmentId","secretValue","ciphertext","oauthClient","oauthClientId","oauthClientSecret","signingSecret","kubernetesNamespace","nodePort","productionUrl"].includes(e)}function Ve(e){return{value:e,digest:ee(e)}}function eo(e,t,o,n){typeof e!="string"&&!Buffer.isBuffer(e)&&!(e instanceof Uint8Array)&&p("NATIVE_ARTIFACT_BYTES_REQUIRED",o);let s=Buffer.isBuffer(e)?e:Buffer.from(e);return s.byteLength===0&&p("NATIVE_ARTIFACT_EMPTY",o),s.byteLength>t&&p(n,o),s}function to(e,t,o,n){let s=at.createHash("sha256").update(e).digest("hex");at.timingSafeEqual(Buffer.from(s),Buffer.from(t))||p(n,o)}function g(e,t){return(!e||typeof e!="object"||Array.isArray(e))&&p("NATIVE_OBJECT_REQUIRED",t),e}function $(e,t,o){return Array.isArray(e)||p("NATIVE_ARRAY_REQUIRED",t),e.length>o&&p("NATIVE_ARRAY_LIMIT_EXCEEDED",t),e}function F(e,t,o){let n=$(e,t,o).map((s,i)=>R(s,`${t}/${i}`,255));return new Set(n).size!==n.length&&p("NATIVE_ARRAY_DUPLICATE",t),n}function R(e,t,o){return(typeof e!="string"||e.length===0||e.length>o)&&p("NATIVE_STRING_INVALID",t),e}function Kt(e,t,o){return(typeof e!="string"||e.length>o)&&p("NATIVE_STRING_INVALID",t),e}function w(e,t){let o=R(e,t,128);return Cs.test(o)||p("NATIVE_CODE_INVALID",t),o}function z(e,t){let o=R(e,t,64);return Os.test(o)||p("NATIVE_RESOURCE_CODE_INVALID",t),o}function B(e,t){let o=R(e,t,63);return ys.test(o)||p("NATIVE_FIELD_CODE_INVALID",t),o}function lt(e,t){let o=R(e,t,128);return hs.test(o)||p("NATIVE_WORKFLOW_CODE_INVALID",t),o}function Ht(e,t){let o=R(e,t,128);return Ss.test(o)||p("NATIVE_WORKFLOW_BINDING_CODE_INVALID",t),o}function Ne(e,t,o){let n=R(e,t,255);return Ts.test(n)||p("NATIVE_CAPABILITY_CODE_INVALID",t),!n.startsWith(`app:${o}:`)&&!Io(o).some(s=>s.code===n)&&p("NATIVE_CAPABILITY_APP_MISMATCH",t),n}function le(e,t){let o=R(e,t,2048);return(!o.startsWith("/")||o.startsWith("//")||o.includes("..")||o.includes("?")||o.includes("#"))&&p("NATIVE_ABSOLUTE_PATH_INVALID",t),o}function we(e,t){return(!Number.isInteger(e)||Number(e)<1)&&p("NATIVE_POSITIVE_INTEGER_REQUIRED",t),Number(e)}function Z(e,t,o,n){return(!Number.isInteger(e)||Number(e)<o||Number(e)>n)&&p("NATIVE_INTEGER_OUT_OF_RANGE",t),Number(e)}function Fe(e,t){return typeof e!="boolean"&&p("NATIVE_BOOLEAN_REQUIRED",t),e}function zt(e,t){let o=R(e,t,64).toLowerCase();return gs.test(o)||p("NATIVE_DIGEST_INVALID",t),o}function L(e,t,o){e!==t&&p("NATIVE_VALUE_MISMATCH",o)}function y(e,t,o,n=!1){let s=new Set([...t,...Array.isArray(n)?n:[]]);for(let i of Object.keys(e))s.has(i)||p("NATIVE_PROPERTY_UNKNOWN",`${o}/${i}`);if(n!==!0)for(let i of t)Object.prototype.hasOwnProperty.call(e,i)||p("NATIVE_PROPERTY_REQUIRED",`${o}/${i}`)}function X(e,t){return[...e].sort((o,n)=>ae(t(o),t(n)))}function M(e){return[...new Set(e)].sort(ae)}function no(e){return[...new Set(e)].sort((t,o)=>t-o)}function ae(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 Gt(e,t,o){if(Ut(e,t))return o;if(Array.isArray(e)&&Array.isArray(t)){let n=Math.max(e.length,t.length);for(let s=0;s<n;s+=1)if(!Ut(e[s],t[s]))return Gt(e[s],t[s],`${o}/${s}`)}if(e&&t&&typeof e=="object"&&typeof t=="object"&&!Array.isArray(e)&&!Array.isArray(t)){let n=M([...Object.keys(e),...Object.keys(t)]);for(let s of n){let i=e[s],c=t[s];if(!Ut(i,c))return Gt(i,c,`${o}/${s}`)}}return o}function Ut(e,t){return e===void 0||t===void 0?e===t:Q(e)===Q(t)}function p(e,t,o={}){throw new Jt(e,t,o)}var oa="11b63ff00b2ac05e4e27e0b7fd8111fa6f36b6773f5090e1ff17f36d8861cd19";export{sn as DATA_AUDIT_METADATA_FIELDS,Mt as DATA_EVENT_TYPES_V2,wo as DATA_SYSTEM_SORT_FIELD_CODES,ke as ManagedConcurrencyContractError,oa as NATIVE_CONFIGURATION_VALIDATOR_DIGEST,Y as NATIVE_CONTRACT_CAPACITY_V2,Pr as NATIVE_DATA_POLICY_EXPRESSION_MAX_CLAUSES,wr as NATIVE_DATA_POLICY_EXPRESSION_MAX_DEPTH,Fr as NATIVE_DATA_POLICY_EXPRESSION_MAX_GROUP_ITEMS,vr as NATIVE_DATA_POLICY_EXPRESSION_MAX_LEAVES,Lr as NATIVE_DATA_POLICY_EXPRESSION_MAX_OCCURRENCES,Fo as NATIVE_DATA_QUERY_OPERATORS_V2,Cr as NATIVE_UNIQUE_KEY_MAX_BYTES,hn as NATIVE_UNIQUE_KEY_NORMALIZERS,Jt as NativeConfigurationCompilerError,_e as NativeDataFieldContractV2Error,Be as NativeDataPolicyExpressionV2Error,De as NativeDecimalLifecycleContractError,kt as NativeEventActionContractError,Ft as NativeScopeSourceFieldPathV2Error,je as NativeUniqueKeyContractError,To as OPENXIANGDA_NATIVE_DATA_FIELD_TYPES_V2,Te as OPENXIANGDA_NATIVE_DATA_SURFACE_KEYS_V2,bt as OPENXIANGDA_NATIVE_DRAFT_STATE_KEYS_V2,At as OPENXIANGDA_NATIVE_SYSTEM_FIELDS_V2,ki as OPENXIANGDA_NATIVE_SYSTEM_FIELD_MAP_V2,Bt as WORKFLOW_EVENT_TYPES_V2,ta as compileNativeApplicationConfiguration,Fn as compileNativeEventAction,Js as compileNativeEventCapturePlansV2,Bs as compileRequiredPlatformCapabilitiesV3,rn as hasDataAuditReadPolicy,ve as isDataAuditMetadataField,an as isDataSystemSortField,Mi as isNativeDataQueryOperatorV2,Ye as isNativeMultiValueFieldV2,gr as materializeNativeDataQueryPathTypesV2,st as nativeDataPolicyExpressionLeavesV2,xn as nativeDataPolicyExpressionToCnfV2,Nr as nativeDataQueryPathPlanV2,Ji as nativeFieldAggregatePlanV2,cr as nativeFieldColumnDefinitionV2,dr as nativeFieldDefaultSqlV2,lr as nativeFieldHasDefaultV2,_r as nativeFieldIndexStatementsV2,Ke as nativeFieldRequiresCreateInputV2,pr as nativeFieldSequenceGrantStatementsV2,fr as nativeFieldSequenceOwnershipStatementsV2,ur as nativeFieldSequenceStatementsV2,un as nativeFieldSupportsFilterV2,Bi as nativeFieldSupportsOperatorV2,Tt as nativeFieldSupportsSearchV2,Le as nativeFieldSupportsSortV2,ln as nativeOperatorsForFieldV2,ts as nativePhysicalFieldV2,ar as nativePhysicalFieldsV2,Ce as nativePhysicalObjectNameV2,Ir as nativeScopeSourceFieldValueV2,$n as nativeScopeSourceGrantPathSupportedV2,vt as nativeScopeSourceSubjectPathSupportedV2,Er as nativeSubtableConstraintStatementsV2,br as nativeUniqueKeysJsonSchema,Vt as parseDecimalReservationLifecycle,It as parseNativeDataFieldsV2,on as parseNativeDataResourceInvariantsV2,Sn as parseNativeUniqueKeys,Rt as projectNativeDataResourceViewV2,se as quoteNativeIdentifierV2,xe as resolveNativeScopeSourceFieldPathV2,Nn as validateDecimalReservationLifecycles,mn as validateManagedConcurrency,_n as validateNativeDataDraftStateV2,nn as validateNativeDataResourceReferencesV2,$t as validateNativeDataResourceSurfaceV2,Pn as validateWorkflowInstanceCommandPolicies,Sr as workflowInstanceCommandDeadlineError,hr as workflowInstanceTerminateCapabilityAllowed,vn as workflowPolicyTimestamp};
|