/* All material copyright ESRI, All Rights Reserved, unless otherwise specified. See https://js.arcgis.com/4.25/esri/copyright.txt for details. */ import"../geometry.js";import{id as e}from"../kernel.js";import t from"../request.js";import r from"../core/Error.js";import a from"../core/Logger.js";import o from"./knowledgeGraph/GraphQueryResult.js";import n from"./knowledgeGraph/GraphQueryStreamingResult.js";import d from"./knowledgeGraph/KnowledgeGraph.js";import{getWasmInterface as i}from"./knowledgeGraph/wasmInterface/knowledgeWasmAccess.js";import{setInputQuantizationParametersOnEncoder as s,setOutputQuantizationParametersOnEncoder as l,bindParamArrayToWasm as p,geometryToWasm as c,bindParamObjectToWasm as u}from"./knowledgeGraph/wasmInterface/queryToWasmEncodedFactories.js";import{inputQuantizationParemetersToWasmFormat as h,namedObjectToWasm as g}from"./knowledgeGraph/wasmInterface/updateToWasmEncodedFactories.js";import{wasmToDataModel as y}from"./knowledgeGraph/wasmInterface/wasmToDataModelFactories.js";import{decodedWasmObjToQueryResponseObj as w}from"./knowledgeGraph/wasmInterface/wasmToQueryResponseObjFactories.js";import{decoderToApplyEditsResponse as f}from"./knowledgeGraph/wasmInterface/wasmToUpdateResponseFactories.js";import m from"../geometry/Geometry.js";async function _(e,t,r){const a=`${e.url}/graph/applyEdits`;await M(e);const o=await Q(a,r);o.data.body=await A(t,e);return j(await fetch(o.data.url,o.data))}async function b(e,a,n){const d=`${e.url}/graph/query`,s=await t(d,{responseType:"array-buffer",query:{f:"pbf",openCypherQuery:a.openCypherQuery,...n?.query},signal:n?.signal,timeout:n?.timeout}),l=s.getHeader?.("content-type"),p=s.data;if(l?.includes("application/x-protobuf")){const t=new((await i()).GraphQueryDecoder);if(t.deleteLater(),e.dataModel)return new o({resultRows:C(t,p,e.dataModel)});throw new r("knowledge-graph:undefined-data-model","The KnowledgeGraph supplied did not have a data model")}throw new r("knowledge-graph:unexpected-server-response","server returned an unexpected response",{responseType:l,data:s.data})}async function k(e,t,a){const o=`${e.url}/graph/query`;await M(e);const d=await Q(o,a);d.data.body=await x(t,e);const i=await fetch(d.data.url,d.data);if(e.dataModel)return new n({resultRowsStream:await S(i,e.dataModel)});throw new r("knowledge-graph:undefined-data-model","The KnowledgeGraph supplied did not have a data model")}async function G(e,a,n){let d=a.typeCategoryFilter;"entity"===a.typeCategoryFilter?d="entities":"relationship"===a.typeCategoryFilter&&(d="relationships");const s=`${e.url}/graph/search`,l=await t(s,{responseType:"array-buffer",query:{f:"pbf",searchQuery:`"${a.searchQuery}"`,typeCategoryFilter:d,...n?.query},signal:n?.signal,timeout:n?.timeout}),p=l.getHeader?.("content-type"),c=l.data;if(p?.includes("application/x-protobuf")){const t=new((await i()).GraphQueryDecoder);if(t.deleteLater(),e.dataModel)return new o({resultRows:C(t,c,e.dataModel)});throw new r("knowledge-graph:undefined-data-model","The KnowledgeGraph supplied did not have a data model")}throw new r("knowledge-graph:unexpected-server-response","server returned an unexpected response",{responseType:p,data:l.data})}async function I(e,t,a){const o=`${e.url}/graph/search`;await M(e);const d=await Q(o,a);d.data.body=await q(t);const i=await fetch(d.data.url,d.data);if(e.dataModel)return new n({resultRowsStream:await S(i,e.dataModel)});throw new r("knowledge-graph:undefined-data-model","The KnowledgeGraph supplied did not have a data model")}async function E(e){const t=new d({url:e});return await v(t),t}async function v(e){e.dataModel=await R(e)}async function M(t){const r=e?.findCredential(t.url);r||(t.dataModel?await R(t):await v(t))}function F(e,t,a){if(0!==e.error_code)throw new r(t,a,{errorCode:e.error_code,errorMessage:e.error_message})}function T(e,t,r,a){null==t?r.set_param_key_value(e,""):"object"!=typeof t||t instanceof Date?r.set_param_key_value(e,t):t instanceof m?r.set_param_key_value(e,c(t,a)):t instanceof Array?r.set_param_key_value(e,p(t,a)):r.set_param_key_value(e,u(t,a))}async function A(e,t){if(t.dataModel||await v(t),!t.dataModel)throw new r("knowledge-graph:data-model-undefined","Encoding could not proceed because a data model was not provided and it could not be determined from the service");const a=await i(),o=!0,n=!!e.options?.cascadeDelete,d=new a.GraphApplyEditsEncoder(o,t.dataModel.objectIdField,t.dataModel.globalIdField,a.SpatialReferenceUtil.WGS84(),e.options?.inputQuantizationParameters?h(e.options?.inputQuantizationParameters):a.InputQuantizationUtil.WGS84_lossless());d.deleteLater(),d.cascade_delete=n;try{let o;e.entityAdds?.forEach((e=>{o=d.add_entity(g(e,a)),F(o,"knowledge-graph:applyEdits-encoding-failed","Attempting to encode the applyEdits - an entity failed to be added to the encoder")})),e.relationshipAdds?.forEach((e=>{if(!e.originId||!e.destinationId)throw new r("knowledge-graph:relationship-origin-destination-missing","When adding a new relationship, you must provide both an origin and destination globalid on the appropriate class property");t.dataModel?.originEntityGlobalIdField&&e.properties&&(e.properties[t.dataModel.originEntityGlobalIdField]=e.originId),t.dataModel?.destEntityGlobalIdField&&e.properties&&(e.properties[t.dataModel.destEntityGlobalIdField]=e.destinationId),o=d.add_relationship(g(e,a)),F(o,"knowledge-graph:applyEdits-encoding-failed","Attempting to encode the applyEdits - an relationship failed to be added to the encoder")})),e.entityUpdates?.forEach((e=>{if(!e.id)throw new r("knowledge-graph:entity-id-missing","When updating an entity or relationship, you must specify the id on the class level property");t.dataModel?.globalIdField&&e.properties&&(e.properties[t.dataModel.globalIdField]=e.id),o=d.update_entity(g(e,a)),F(o,"knowledge-graph:applyEdits-encoding-failed","Attempting to encode the applyEdits - an entity failed to be added to the encoder")})),e.relationshipUpdates?.forEach((e=>{if(!e.id)throw new r("knowledge-graph:relationship-id-missing","When updating an entity or relationship, you must specify the id on the class level property");t.dataModel?.globalIdField&&e.properties&&(e.properties[t.dataModel.globalIdField]=e.id),t.dataModel?.originEntityGlobalIdField&&e.properties&&e.originId&&(e.properties[t.dataModel.originEntityGlobalIdField]=e.originId),t.dataModel?.destEntityGlobalIdField&&e.properties&&e.destinationId&&(e.properties[t.dataModel.destEntityGlobalIdField]=e.destinationId),o=d.update_relationship(g(e,a)),F(o,"knowledge-graph:applyEdits-encoding-failed","Attempting to encode the applyEdits - a relationship failed to be added to the encoder")})),e.entityDeletes?.forEach((e=>{if(!e.typeName)throw new r("knowledge-graph:no-type-name","You must indicate the entity/relationship named object type to apply edits - delete");const t=d.make_delete_helper(e.typeName,!0);t.deleteLater(),e.ids?.forEach((e=>{if("string"!=typeof e)throw new r("knowledge-graph:id-type-mismatch","All delete Ids must be globalIds for Enterprise 11.0 ArcGIS Knowledge Services");t.delete_by_globalid(e)}))})),e.relationshipDeletes?.forEach((e=>{if(!e.typeName)throw new r("knowledge-graph:no-type-name","You must indicate the entity/relationship named object type to apply edits - delete");const t=d.make_delete_helper(e.typeName,!1);e.ids?.forEach((e=>{if("string"!=typeof e)throw new r("knowledge-graph:id-type-mismatch","All delete Ids must be globalIds for Enterprise 11.0 ArcGIS Knowledge Services");t.delete_by_globalid(e)}))})),d.encode()}catch(l){throw new r("knowledge-graph:applyEdits-encoding-failed","Attempting to encode the applyEdits failed",{error:l})}const s=d.get_encoding_result();return F(s.error,"knowledge-graph:applyEdits-encoding-failed","Attempting to encode the applyEdits failed"),s.get_byte_buffer()}async function x(e,t){const a=await i(),o=new a.GraphQueryRequestEncoder;if(o.deleteLater(),o.output_spatial_reference=a.SpatialReferenceUtil.WGS84(),o.open_cypher_query=e.openCypherQuery,e.bindParameters)for(const[r,i]of Object.entries(e.bindParameters))T(r,i,o,a);if(e.bindGeometryQuantizationParameters)s(e.bindGeometryQuantizationParameters,o);else{if(t.dataModel||await v(t),4326!==t.dataModel?.spatialReference?.wkid)throw new r("knowledge-graph:SR-quantization-mismatch","If the DataModel indicates a coordinate system other than WGS84, inputQuantizationParameters must be provided to the query encoder");o.input_quantization_parameters=a.InputQuantizationUtil.WGS84_lossless()}e.outputQuantizationParameters&&l(e.outputQuantizationParameters,o,a);try{o.encode()}catch(d){throw new r("knowledge-graph:query-encoding-failed","Attempting to encode the query failed",{error:d})}const n=o.get_encoding_result();if(0!==n.error.error_code)throw new r("knowledge-graph:query-encoding-failed","Attempting to encode the query failed",{errorCode:n.error.error_code,errorMessage:n.error.error_message});return n.get_byte_buffer()}async function q(e){const t=await i(),a=new t.GraphSearchRequestEncoder;if(a.deleteLater(),a.search_query=e.searchQuery,a.type_category_filter=t.esriNamedTypeCategory[e.typeCategoryFilter.toString()],!0===e.returnSearchContext&&(a.return_search_context=e.returnSearchContext),void 0!==e.start&&e.start>0&&(a.start_index=e.start),void 0!==e.num&&(a.max_num_results=e.num),void 0!==e.globalIdsFilter&&Array.isArray(e.globalIdsFilter)&&e.globalIdsFilter.length>0)try{a.set_globalids_filter(p(e.globalIdsFilter,t))}catch(n){throw new r("knowledge-graph:globalIds-format-error","Attempting to set globalids filter failed. This is usually caused by an incorrectly formatted UUID string",{error:n})}e.namedTypesFilter?.forEach((e=>{a.add_named_type_filter(e)}));try{a.encode()}catch(n){throw new r("knowledge-graph:search-encoding-failed","Attempting to encode the search failed",{error:n})}const o=a.get_encoding_result();if(0!==o.error.error_code)throw new r("knowledge-graph:search-encoding-failed","Attempting to encode the search failed",{errorCode:o.error.error_code,errorMessage:o.error.error_message});return o.get_byte_buffer()}async function Q(e,r){return t(e,{responseType:"native-request-init",method:"post",query:{f:"pbf",...r?.query},body:"x",headers:{"Content-Type":"application/octet-stream"},signal:r?.signal,timeout:r?.timeout})}async function j(e){const t=e.headers.get("content-type");if(t?.includes("application/x-protobuf")){const t=await e.arrayBuffer(),r=new((await i()).GraphApplyEditsDecoder);return r.deleteLater(),r.decode(new Uint8Array(t)),f(r)}throw new r("knowledge-graph:unexpected-server-response","server returned an unexpected response",{responseType:t,data:e.text()})}function C(e,t,a){e.push_buffer(new Uint8Array(t));const o=[];let n=0;for(;e.next_row();){n||(n=e.get_header_keys().size());const t=new Array(n);for(let r=0;r{if(d){let t;if(o.has_error()&&(t=new r("knowledge-graph:stream-decoding-error","One or more result rows were not successfully decoded",{errorCode:o.error.error_code,errorMessage:o.error.error_message})),a.releaseLock(),t)throw e.error(t),t;return void e.close()}const s=C(o,i,t);return s.length>0&&e.enqueue(s),n()}))}}})}throw new r("knowledge-graph:unexpected-server-response","server returned an unexpected response",{responseType:o,data:e.text()})}async function R(e){const a=`${e.url}/dataModel/queryDataModel`,o=await t(a,{responseType:"array-buffer",query:{f:"pbf"}}),n=o.getHeader?.("content-type"),d=o.data;if(n?.includes("application/x-protobuf")){const e=(await i()).decode_data_model_from_protocol_buffer(new Uint8Array(d));return y(e)}throw new r("knowledge-graph:unexpected-server-response","server returned an unexpected response",{responseType:n,data:o.data})}export{_ as executeApplyEdits,b as executeQuery,k as executeQueryStreaming,G as executeSearch,I as executeSearchStreaming,E as fetchKnowledgeGraph,v as refreshDataModel};