decocms 2.178.0 → 2.178.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client/assets/{AlertCircle-DOAxiEBN.js → AlertCircle-12chRuly.js} +1 -1
- package/dist/client/assets/{AlignLeft-CRMPlioa.js → AlignLeft-_LT9deOt.js} +1 -1
- package/dist/client/assets/{ArrowDown-xJyK-tRR.js → ArrowDown-7rbX3zqZ.js} +1 -1
- package/dist/client/assets/{ArrowLeft-B-tpcvF0.js → ArrowLeft-erI8s3G2.js} +1 -1
- package/dist/client/assets/{ArrowUp-BO7WH9Uq.js → ArrowUp-DoIG5eQh.js} +1 -1
- package/dist/client/assets/{Building02-D30T2TCD.js → Building02-Dr7IyBdv.js} +1 -1
- package/dist/client/assets/{Check-BTP9VTUM.js → Check-DW8AVFkq.js} +1 -1
- package/dist/client/assets/{CheckCircle-DoZ7ERyW.js → CheckCircle-hBpanOsI.js} +1 -1
- package/dist/client/assets/{CheckSquare-Dbh9CJyx.js → CheckSquare-Cr3IzSXp.js} +1 -1
- package/dist/client/assets/{CheckVerified02-CyloHbYs.js → CheckVerified02-r17ymUCs.js} +1 -1
- package/dist/client/assets/{ChevronDown-CLapIRmf.js → ChevronDown-BIRGQoZ5.js} +1 -1
- package/dist/client/assets/{ChevronLeft-CMUbV0KP.js → ChevronLeft-D-e7F7Gj.js} +1 -1
- package/dist/client/assets/{ChevronRight-DWZgTrde.js → ChevronRight-DsjLlugM.js} +1 -1
- package/dist/client/assets/{ChevronUp-DGOtRvEF.js → ChevronUp-Bi3NMXzv.js} +1 -1
- package/dist/client/assets/{Clock-BYjyd9hX.js → Clock-D4xJnA3P.js} +1 -1
- package/dist/client/assets/{Code01-BkNgeom6.js → Code01-YGq5QwlZ.js} +1 -1
- package/dist/client/assets/{Container-D7IaxBn4.js → Container-DHyMOW_p.js} +1 -1
- package/dist/client/assets/{Copy01-BJ5f3Ft8.js → Copy01-DkcjIGiS.js} +1 -1
- package/dist/client/assets/{Dataflow03-DE7FXw07.js → Dataflow03-CD3eo8oO.js} +1 -1
- package/dist/client/assets/{DotsHorizontal-BFhhKBhk.js → DotsHorizontal-CjYGc80C.js} +1 -1
- package/dist/client/assets/{DotsVertical-CmyZ1eER.js → DotsVertical-2nyye7GD.js} +1 -1
- package/dist/client/assets/{Download01-C0zy7iAO.js → Download01-BvtNZalG.js} +1 -1
- package/dist/client/assets/{Edit01-BsJ32les.js → Edit01-CoeKfJ-u.js} +1 -1
- package/dist/client/assets/{Edit05-BD2d2k-5.js → Edit05-CbbEzOoe.js} +1 -1
- package/dist/client/assets/{Eye-B3PAdhmZ.js → Eye-hBqNQHpc.js} +1 -1
- package/dist/client/assets/{EyeOff-_G9JY6d-.js → EyeOff-CJoTkAtN.js} +1 -1
- package/dist/client/assets/{File02-CAND2NHE.js → File02-D19u2hUl.js} +1 -1
- package/dist/client/assets/{File06-Bvs2lp94.js → File06-Bp4ioOvR.js} +1 -1
- package/dist/client/assets/{FilterLines-D-lo1vJH.js → FilterLines-Dvk7BhWf.js} +1 -1
- package/dist/client/assets/{Globe01-jlGiKRJ-.js → Globe01-B8Ib7knn.js} +1 -1
- package/dist/client/assets/{Globe02-DpkPR1qQ.js → Globe02-wRhoc1N5.js} +1 -1
- package/dist/client/assets/{Grid01-Bootsry8.js → Grid01-C5e9ReQ4.js} +1 -1
- package/dist/client/assets/{Home02-Cn5GN0Zh.js → Home02-JZJR9jmQ.js} +1 -1
- package/dist/client/assets/{Image01-BGiNuXLR.js → Image01-DjoSkYp_.js} +1 -1
- package/dist/client/assets/{Inbox01-QN0h6e9y.js → Inbox01-ClVaT7W5.js} +1 -1
- package/dist/client/assets/{InfoCircle-BlKvj0NG.js → InfoCircle-DzyfpQes.js} +1 -1
- package/dist/client/assets/{Key01-p6odXPoE.js → Key01-qNySmY39.js} +1 -1
- package/dist/client/assets/{LayersTwo01-Dj6OMOTN.js → LayersTwo01-dfSlQT0y.js} +1 -1
- package/dist/client/assets/{LayoutLeft-Bl9wlb-l.js → LayoutLeft-B2KZfn2n.js} +1 -1
- package/dist/client/assets/{Link01-GDNtvq6w.js → Link01-Cz_ZRKoB.js} +1 -1
- package/dist/client/assets/{LinkExternal01-Cmp1Jq7T.js → LinkExternal01-CKvCiQnV.js} +1 -1
- package/dist/client/assets/{List-BFzJ8d3-.js → List-NLa0AhO4.js} +1 -1
- package/dist/client/assets/{Loading01-Bgt2pWQu.js → Loading01-Bb8FCosd.js} +1 -1
- package/dist/client/assets/{Lock01-CrtAKCVY.js → Lock01-CnZITIks.js} +1 -1
- package/dist/client/assets/{Play-C6mSLsW0.js → Play-Bw5lQw7j.js} +1 -1
- package/dist/client/assets/{Plus-Bah3bfIq.js → Plus-CajZ9VfC.js} +1 -1
- package/dist/client/assets/{RefreshCcw01-D6TQ-sWU.js → RefreshCcw01-B_NTitRE.js} +1 -1
- package/dist/client/assets/{Save01-DMdPXvfp.js → Save01-8oEsqMkJ.js} +1 -1
- package/dist/client/assets/{SearchMd-CbNARIB_.js → SearchMd-eZWeU0sP.js} +1 -1
- package/dist/client/assets/{Settings01-ncSo0UF1.js → Settings01-ClPVpLPy.js} +1 -1
- package/dist/client/assets/{Shield01-jjVa8gNb.js → Shield01-N4ace-oo.js} +1 -1
- package/dist/client/assets/{Terminal-BkHJq74m.js → Terminal-CGwuP-_5.js} +1 -1
- package/dist/client/assets/{Tool01-CCSFIqz9.js → Tool01-D1m8i7Ez.js} +1 -1
- package/dist/client/assets/{Trash01-DJLT0hlL.js → Trash01-B_4PTwjI.js} +1 -1
- package/dist/client/assets/{Upload01-CrylBwgE.js → Upload01-CLIOr3Tj.js} +1 -1
- package/dist/client/assets/{Users03-ClHTtWuU.js → Users03-Bv-hUQkl.js} +1 -1
- package/dist/client/assets/{X-Dr3IGE6q.js → X-LzehymHS.js} +1 -1
- package/dist/client/assets/{XClose-CM_PUH0D.js → XClose-CcNXqPQc.js} +1 -1
- package/dist/client/assets/{Zap-DNAzZ691.js → Zap-BFN1DqIC.js} +1 -1
- package/dist/client/assets/{agent-connections-preview-D9yVR2mI.js → agent-connections-preview-3pYXfstj.js} +1 -1
- package/dist/client/assets/{agent-detail-D9yhjqjE.js → agent-detail-DMK-u3yi.js} +1 -1
- package/dist/client/assets/{agents-UYgbyoc-.js → agents-Wfe5dNfh.js} +1 -1
- package/dist/client/assets/{ai-providers-logos-CKXeyPmY.js → ai-providers-logos-CCp39UCk.js} +1 -1
- package/dist/client/assets/{alert-dialog-CGRFjIvo.js → alert-dialog-B_ae3oRt.js} +1 -1
- package/dist/client/assets/{auth-catchall-DJtyBhDQ.js → auth-catchall-DAx9m28t.js} +1 -1
- package/dist/client/assets/{automation-detail-Da-KIL0v.js → automation-detail-DfFkGT_5.js} +1 -1
- package/dist/client/assets/{automations-BBeFyOp2.js → automations-A8NOzTSS.js} +1 -1
- package/dist/client/assets/{avatar-B6y4oqG6.js → avatar-B2yArl-q.js} +1 -1
- package/dist/client/assets/{badge-BWsagPlP.js → badge-DtRom7JO.js} +1 -1
- package/dist/client/assets/{binder-BfA1Jrrc.js → binder-D4cqx_Kx.js} +1 -1
- package/dist/client/assets/{breadcrumb-D8mb9kpq.js → breadcrumb-C2RG4nAQ.js} +1 -1
- package/dist/client/assets/{card-C0MItTW_.js → card-B8qDZGCZ.js} +1 -1
- package/dist/client/assets/{checkbox-DUU3Nuea.js → checkbox-B1rexahu.js} +1 -1
- package/dist/client/assets/{collapsible-CtLdTa6t.js → collapsible-BtjeaBAE.js} +1 -1
- package/dist/client/assets/{collection-detail-DPIki4up.js → collection-detail-BaBGI9i2.js} +1 -1
- package/dist/client/assets/{collection-display-button-DdFInvSR.js → collection-display-button-CpVZ4wHm.js} +1 -1
- package/dist/client/assets/{collection-search-CGfzh4mC.js → collection-search-BYV7N3mr.js} +1 -1
- package/dist/client/assets/{collection-table-wrapper-DLe2aR6i.js → collection-table-wrapper-CHFJQd21.js} +1 -1
- package/dist/client/assets/{collection-tabs-DAHXpc2n.js → collection-tabs-CJEa3dRy.js} +1 -1
- package/dist/client/assets/{command-C4HnUxgr.js → command-Drksh_DO.js} +1 -1
- package/dist/client/assets/{connection-card-DRd8H1I5.js → connection-card-Bak2l1_M.js} +1 -1
- package/dist/client/assets/{connection-detail-MKWBWpRr.js → connection-detail-BKy2ZsS6.js} +1 -1
- package/dist/client/assets/{connections-CIQDC3QM.js → connections-Dxf4eIOE.js} +1 -1
- package/dist/client/assets/{constants-C6R-Odkq.js → constants-D7qXOYRn.js} +1 -1
- package/dist/client/assets/{context-BFTRA5vP.js → context-DxQMlFKC.js} +1 -1
- package/dist/client/assets/{create-organization-dialog-Bez2nZe0.js → create-organization-dialog-CNWB-72r.js} +1 -1
- package/dist/client/assets/{create-project-dialog-MCGuKGij.js → create-project-dialog-BeIY4Oy9.js} +1 -1
- package/dist/client/assets/{danger-D1zng7LS.js → danger-YWbxrjNq.js} +1 -1
- package/dist/client/assets/{danger-zone-DbcRzYYG.js → danger-zone-DGg0ZzSy.js} +1 -1
- package/dist/client/assets/{dependencies-B8EkZe-H.js → dependencies-DtAVTWu-.js} +1 -1
- package/dist/client/assets/{dialog-Bw5T2ogY.js → dialog-ChXYvlDt.js} +1 -1
- package/dist/client/assets/{dropdown-menu-Dan8nMb8.js → dropdown-menu-BxlQMXgW.js} +1 -1
- package/dist/client/assets/{dynamic-plugin-layout-BDxV3RAS.js → dynamic-plugin-layout-JpZTv0Ay.js} +1 -1
- package/dist/client/assets/{editable-task-title-wfBXYVIh.js → editable-task-title-Cm-uIwFs.js} +1 -1
- package/dist/client/assets/{empty-state-CoA3_x_6.js → empty-state-qLM_bVsv.js} +1 -1
- package/dist/client/assets/{empty-state-C1iyyf7G.js → empty-state-xIvMMy-_.js} +1 -1
- package/dist/client/assets/{env-vars-editor-CxyeKMFS.js → env-vars-editor-Yss1wn0m.js} +1 -1
- package/dist/client/assets/{extract-connection-data-C8ZedtM3.js → extract-connection-data-48N591A_.js} +1 -1
- package/dist/client/assets/{file-browser-CShFs9BG.js → file-browser-BbqpPFZK.js} +2 -2
- package/dist/client/assets/{form-B1LLlQBa.js → form-CaFPTMVC.js} +1 -1
- package/dist/client/assets/{general-Dnfj_B7U.js → general-DI9irVIQ.js} +1 -1
- package/dist/client/assets/{generate-id-WpAuYSZF.js → generate-id-BiV6m8fS.js} +1 -1
- package/dist/client/assets/{grid-view-PzYdekcz.js → grid-view-DurgUMuo.js} +1 -1
- package/dist/client/assets/{home-CKa-gWjN.js → home-CspK560n.js} +1 -1
- package/dist/client/assets/{index-lUO5B2Do.js → index-ChUIqRBi.js} +1 -1
- package/dist/client/assets/{index-D-AXXJqO.js → index-CqWJIMlG.js} +1 -1
- package/dist/client/assets/{index-CgSAwZ8g.js → index-CqtWW-Tq.js} +1 -1
- package/dist/client/assets/{index-DtZLm-Fz.js → index-CqyqI90F.js} +1 -1
- package/dist/client/assets/{index-BaVHKLOw.js → index-De1iYnQy.js} +1 -1
- package/dist/client/assets/{index-De7oAufQ.js → index-NjMxPJgF.js} +3 -3
- package/dist/client/assets/{index-BkxamE0W.js → index-TV8hw8s3.js} +1 -1
- package/dist/client/assets/{index-CVayrapI.js → index-YL7q5tyF.js} +1 -1
- package/dist/client/assets/{index-BFJo8BQ3.js → index-YRudAQp7.js} +1 -1
- package/dist/client/assets/{index-J5pIXVfD.js → index-yiVP4brl.js} +1 -1
- package/dist/client/assets/{index-OdE2HBl6.js → index-zWpUeKAz.js} +1 -1
- package/dist/client/assets/{infiniteQueryObserver-C7xXp1jr.js → infiniteQueryObserver-JZ0YxCW-.js} +1 -1
- package/dist/client/assets/{input-_VKm0O_1.js → input-B89sozd8.js} +1 -1
- package/dist/client/assets/{integration-icon-BkY1vh6I.js → integration-icon-BPVDVJvP.js} +1 -1
- package/dist/client/assets/{label-BhDDQ3-n.js → label-DkiEYJcU.js} +1 -1
- package/dist/client/assets/{layout-BIFV7MZL.js → layout-Cqn-h1Jz.js} +1 -1
- package/dist/client/assets/{layout-CZKgiZuG.js → layout-DcmGLVHZ.js} +1 -1
- package/dist/client/assets/{login-uo65TNIo.js → login-qT_ItpIx.js} +1 -1
- package/dist/client/assets/{logo-upload-CXS8-AgL.js → logo-upload-CoGaedUC.js} +1 -1
- package/dist/client/assets/{mcp-app-renderer-BcsrfZJp.js → mcp-app-renderer-By1mQEU9.js} +1 -1
- package/dist/client/assets/{mcp-server-card-Bp6C5W6n.js → mcp-server-card-B3Nrrgyk.js} +1 -1
- package/dist/client/assets/{mcp-server-detail-Ctbkl5jL.js → mcp-server-detail-DMfy0V9h.js} +2 -2
- package/dist/client/assets/{members-DCfL7gNX.js → members-Q81LXZu1.js} +1 -1
- package/dist/client/assets/{monaco-editor-DPC7_J-G.js → monaco-editor-ZB27PMAe.js} +1 -1
- package/dist/client/assets/{monitoring-ByXLzXVV.js → monitoring-C31A03PZ.js} +1 -1
- package/dist/client/assets/{monitoring-dashboard-edit-YR1gT6FF.js → monitoring-dashboard-edit-Dfi8Jxeb.js} +1 -1
- package/dist/client/assets/{monitoring-dashboard-view-BbtnIBfa.js → monitoring-dashboard-view-CxjxBHLW.js} +1 -1
- package/dist/client/assets/{monitoring-stats-row-Df9ANyzv.js → monitoring-stats-row-CAn-8pVZ.js} +1 -1
- package/dist/client/assets/{oauth-callback-DAQSPrcu.js → oauth-callback-B8DRnSok.js} +1 -1
- package/dist/client/assets/{oauth-callback-ai-provider-BM5LYNPq.js → oauth-callback-ai-provider-CsTCxPAY.js} +1 -1
- package/dist/client/assets/{org-ai-providers-6KYO-veN.js → org-ai-providers-DaYyItUL.js} +1 -1
- package/dist/client/assets/{page-JhhtSWZh.js → page-BjLk0DX_.js} +1 -1
- package/dist/client/assets/{page-30eMAMiN.js → page-C2I5Nlmu.js} +1 -1
- package/dist/client/assets/{plugin-empty-state-Cl2I2geD.js → plugin-empty-state-K02oXRNN.js} +1 -1
- package/dist/client/assets/{plugin-empty-state-R2BzERoW.js → plugin-empty-state-l30u7dec.js} +1 -1
- package/dist/client/assets/{plugin-header-Bakz3z0e.js → plugin-header-B_wkRb4Y.js} +1 -1
- package/dist/client/assets/{plugin-header-aEsNVQjp.js → plugin-header-CE-BhILm.js} +1 -1
- package/dist/client/assets/plugins-6p4XZdw1.js +1 -0
- package/dist/client/assets/{popover-D_qGIJiq.js → popover-Br8QkMK3.js} +1 -1
- package/dist/client/assets/{project-app-view-BFgEphLV.js → project-app-view-CRe7LVZk.js} +1 -1
- package/dist/client/assets/{project-layout-C8oyOOGc.js → project-layout-Bg1hlIaM.js} +1 -1
- package/dist/client/assets/{project-plugins-BVt_WzcU.js → project-plugins-BHOZZsH7.js} +1 -1
- package/dist/client/assets/{projects-list-C02pKlJj.js → projects-list-i4ZvUqtI.js} +1 -1
- package/dist/client/assets/{registry-layout-C-yQnDXG.js → registry-layout-DQV7LhSo.js} +1 -1
- package/dist/client/assets/{registry-utils-Dqc_kCiP.js → registry-utils-cjX9P5J9.js} +1 -1
- package/dist/client/assets/{reset-password-Cqvt_aDI.js → reset-password-Cgcrl5ZG.js} +1 -1
- package/dist/client/assets/{resizable-CO0Uh73H.js → resizable-Nu1SqaJD.js} +1 -1
- package/dist/client/assets/{save-actions-ju1vjafj.js → save-actions-CVl6VtT2.js} +1 -1
- package/dist/client/assets/{scroll-area-DL2xzsPP.js → scroll-area-BTJQ86Ry.js} +1 -1
- package/dist/client/assets/{select-B4liIMVc.js → select-Dx3T3-4n.js} +1 -1
- package/dist/client/assets/{select-virtual-mcp-CuflMlTt.js → select-virtual-mcp-BS537pmy.js} +1 -1
- package/dist/client/assets/{sheet-Cjr3EcYH.js → sheet-C3HM0Uwr.js} +1 -1
- package/dist/client/assets/{shell-layout-DfTROeX_.js → shell-layout-Bco0BFOl.js} +2 -2
- package/dist/client/assets/{sidebar-settings-BljNzJVO.js → sidebar-settings-JhN4X_jg.js} +1 -1
- package/dist/client/assets/{skeleton-Bt7MRTvB.js → skeleton-Cjm8s7CT.js} +1 -1
- package/dist/client/assets/{spinner-Cse1gKnw.js → spinner-Dzx7B3Jl.js} +1 -1
- package/dist/client/assets/{store-invite-D8XeTZbu.js → store-invite-BPcFU0aw.js} +1 -1
- package/dist/client/assets/{switch-DHS6rwq-.js → switch-CA_oYDia.js} +1 -1
- package/dist/client/assets/{table-BPkNFl3F.js → table-C-1rP_rt.js} +1 -1
- package/dist/client/assets/{tabs-D9xzXdQn.js → tabs-BSOe8gLq.js} +1 -1
- package/dist/client/assets/{task-status-DPcRgg7n.js → task-status-DYx9R7EL.js} +24 -24
- package/dist/client/assets/tasks-D1X8oLa3.js +1 -0
- package/dist/client/assets/{tasks-panel-i3VUreUx.js → tasks-panel-BJ3TfA-_.js} +1 -1
- package/dist/client/assets/{textarea-C_pKpP9s.js → textarea-DIJzFUWn.js} +1 -1
- package/dist/client/assets/{time-range-picker-BuykPBni.js → time-range-picker-CGBh-D6p.js} +1 -1
- package/dist/client/assets/{toggle-group-VpRSF_Gl.js → toggle-group-DlZGDyPQ.js} +1 -1
- package/dist/client/assets/{tools-list-DDFWIxxm.js → tools-list-D-T64862.js} +1 -1
- package/dist/client/assets/{tooltip-C4rlkzSj.js → tooltip-BJMSu0c2.js} +1 -1
- package/dist/client/assets/{topbar-portal-CF1YRovU.js → topbar-portal-ChPXVsi1.js} +1 -1
- package/dist/client/assets/{types-DQbIwrMI.js → types-BHeMLyAV.js} +1 -1
- package/dist/client/assets/{use-automations-C1HgdvUZ.js → use-automations-Bmw3x7Dk.js} +1 -1
- package/dist/client/assets/{use-collections-CN-KZdhF.js → use-collections-C0cYiFfV.js} +1 -1
- package/dist/client/assets/{use-connection-C4RNTGYe.js → use-connection-CHFdKnsr.js} +1 -1
- package/dist/client/assets/{use-copy-Cyun7kVE.js → use-copy-xhdji_Bl.js} +1 -1
- package/dist/client/assets/{use-create-virtual-mcp-4JnIm_fY.js → use-create-virtual-mcp-B7odZ_c3.js} +1 -1
- package/dist/client/assets/{use-infinite-scroll-B1b4xMpn.js → use-infinite-scroll-CPhZNIw7.js} +1 -1
- package/dist/client/assets/{use-install-from-registry-CytyaLQX.js → use-install-from-registry-BzwuBLOx.js} +1 -1
- package/dist/client/assets/{use-list-state-CCkxYz8q.js → use-list-state-CbsN6RbJ.js} +1 -1
- package/dist/client/assets/{use-mcp-prompts-BGZnglwN.js → use-mcp-prompts-Bel4H4rh.js} +1 -1
- package/dist/client/assets/{use-mcp-resources-DSKOWSEO.js → use-mcp-resources-qGdymfRz.js} +1 -1
- package/dist/client/assets/{use-mcp-tools-C2aTDAuJ.js → use-mcp-tools-BCZI_Wqc.js} +1 -1
- package/dist/client/assets/{use-members-DjL_-1xN.js → use-members-B4ncWtMV.js} +1 -1
- package/dist/client/assets/{use-mobile-CMHMyYVi.js → use-mobile-DOUfTohp.js} +1 -1
- package/dist/client/assets/{use-project-DxPDjIre.js → use-project-b5C3lq5-.js} +1 -1
- package/dist/client/assets/{use-store-discovery-BBXrVOcG.js → use-store-discovery-B402mTHd.js} +1 -1
- package/dist/client/assets/{use-view-mode-CXln2RGt.js → use-view-mode-ss3eRodO.js} +1 -1
- package/dist/client/assets/{use-virtual-mcp-AdVimCkX.js → use-virtual-mcp-BP6aaUzw.js} +1 -1
- package/dist/client/assets/useInfiniteQuery-BXDrDvlH.js +1 -0
- package/dist/client/assets/{useMutation-BDzOMrvq.js → useMutation-68NxhXCf.js} +1 -1
- package/dist/client/assets/useQuery-BYBCFxgb.js +1 -0
- package/dist/client/assets/useSuspenseInfiniteQuery-X3jXt04i.js +1 -0
- package/dist/client/assets/{user-DSh4pFej.js → user-iDZRuimU.js} +1 -1
- package/dist/client/assets/{workflow-mIahQD3R.js → workflow-CrrTPehP.js} +1 -1
- package/dist/client/index.html +1 -1
- package/dist/server/cli.js +2 -2
- package/dist/server/migrate.js +1 -1
- package/dist/server/node_modules/pg-cloudflare/README.md +112 -0
- package/dist/server/node_modules/pg-cloudflare/dist/empty.d.ts +2 -0
- package/dist/server/node_modules/pg-cloudflare/dist/empty.js +6 -0
- package/dist/server/node_modules/pg-cloudflare/dist/empty.js.map +1 -0
- package/dist/server/node_modules/pg-cloudflare/dist/index.d.ts +31 -0
- package/dist/server/node_modules/pg-cloudflare/dist/index.js +152 -0
- package/dist/server/node_modules/pg-cloudflare/dist/index.js.map +1 -0
- package/dist/server/node_modules/pg-cloudflare/esm/index.mjs +3 -0
- package/dist/server/node_modules/pg-cloudflare/package.json +39 -0
- package/dist/server/node_modules/pg-cloudflare/src/empty.ts +3 -0
- package/dist/server/node_modules/pg-cloudflare/src/index.ts +166 -0
- package/dist/server/node_modules/pg-cloudflare/src/types.d.ts +25 -0
- package/dist/server/node_modules/pg-connection-string/LICENSE +21 -0
- package/dist/server/node_modules/pg-connection-string/README.md +105 -0
- package/dist/server/node_modules/pg-connection-string/esm/index.mjs +8 -0
- package/dist/server/node_modules/pg-connection-string/index.d.ts +36 -0
- package/dist/server/node_modules/pg-connection-string/index.js +231 -0
- package/dist/server/node_modules/pg-connection-string/package.json +52 -0
- package/dist/server/node_modules/pg-int8/LICENSE +13 -0
- package/dist/server/node_modules/pg-int8/README.md +16 -0
- package/dist/server/node_modules/pg-int8/index.js +100 -0
- package/dist/server/node_modules/pg-int8/package.json +24 -0
- package/dist/server/node_modules/pg-pool/LICENSE +21 -0
- package/dist/server/node_modules/pg-pool/README.md +357 -0
- package/dist/server/node_modules/pg-pool/esm/index.mjs +5 -0
- package/dist/server/node_modules/pg-pool/index.js +517 -0
- package/dist/server/node_modules/pg-pool/package.json +51 -0
- package/dist/server/node_modules/pg-protocol/LICENSE +21 -0
- package/dist/server/node_modules/pg-protocol/README.md +3 -0
- package/dist/server/node_modules/pg-protocol/dist/b.d.ts +1 -0
- package/dist/server/node_modules/pg-protocol/dist/b.js +23 -0
- package/dist/server/node_modules/pg-protocol/dist/b.js.map +1 -0
- package/dist/server/node_modules/pg-protocol/dist/buffer-reader.d.ts +15 -0
- package/dist/server/node_modules/pg-protocol/dist/buffer-reader.js +55 -0
- package/dist/server/node_modules/pg-protocol/dist/buffer-reader.js.map +1 -0
- package/dist/server/node_modules/pg-protocol/dist/buffer-writer.d.ts +16 -0
- package/dist/server/node_modules/pg-protocol/dist/buffer-writer.js +81 -0
- package/dist/server/node_modules/pg-protocol/dist/buffer-writer.js.map +1 -0
- package/dist/server/node_modules/pg-protocol/dist/inbound-parser.test.d.ts +1 -0
- package/dist/server/node_modules/pg-protocol/dist/inbound-parser.test.js +530 -0
- package/dist/server/node_modules/pg-protocol/dist/inbound-parser.test.js.map +1 -0
- package/dist/server/node_modules/pg-protocol/dist/index.d.ts +6 -0
- package/dist/server/node_modules/pg-protocol/dist/index.js +15 -0
- package/dist/server/node_modules/pg-protocol/dist/index.js.map +1 -0
- package/dist/server/node_modules/pg-protocol/dist/messages.d.ts +162 -0
- package/dist/server/node_modules/pg-protocol/dist/messages.js +160 -0
- package/dist/server/node_modules/pg-protocol/dist/messages.js.map +1 -0
- package/dist/server/node_modules/pg-protocol/dist/outbound-serializer.test.d.ts +1 -0
- package/dist/server/node_modules/pg-protocol/dist/outbound-serializer.test.js +252 -0
- package/dist/server/node_modules/pg-protocol/dist/outbound-serializer.test.js.map +1 -0
- package/dist/server/node_modules/pg-protocol/dist/parser.d.ts +24 -0
- package/dist/server/node_modules/pg-protocol/dist/parser.js +324 -0
- package/dist/server/node_modules/pg-protocol/dist/parser.js.map +1 -0
- package/dist/server/node_modules/pg-protocol/dist/serializer.d.ts +42 -0
- package/dist/server/node_modules/pg-protocol/dist/serializer.js +189 -0
- package/dist/server/node_modules/pg-protocol/dist/serializer.js.map +1 -0
- package/dist/server/node_modules/pg-protocol/esm/index.js +11 -0
- package/dist/server/node_modules/pg-protocol/package.json +45 -0
- package/dist/server/node_modules/pg-protocol/src/b.ts +25 -0
- package/dist/server/node_modules/pg-protocol/src/buffer-reader.ts +58 -0
- package/dist/server/node_modules/pg-protocol/src/buffer-writer.ts +85 -0
- package/dist/server/node_modules/pg-protocol/src/inbound-parser.test.ts +575 -0
- package/dist/server/node_modules/pg-protocol/src/index.ts +11 -0
- package/dist/server/node_modules/pg-protocol/src/messages.ts +262 -0
- package/dist/server/node_modules/pg-protocol/src/outbound-serializer.test.ts +276 -0
- package/dist/server/node_modules/pg-protocol/src/parser.ts +413 -0
- package/dist/server/node_modules/pg-protocol/src/serializer.ts +274 -0
- package/dist/server/node_modules/pg-protocol/src/testing/buffer-list.ts +67 -0
- package/dist/server/node_modules/pg-protocol/src/testing/test-buffers.ts +166 -0
- package/dist/server/node_modules/pg-protocol/src/types/chunky.d.ts +1 -0
- package/dist/server/node_modules/pg-types/.travis.yml +7 -0
- package/dist/server/node_modules/pg-types/Makefile +14 -0
- package/dist/server/node_modules/pg-types/README.md +75 -0
- package/dist/server/node_modules/pg-types/index.d.ts +137 -0
- package/dist/server/node_modules/pg-types/index.js +47 -0
- package/dist/server/node_modules/pg-types/index.test-d.ts +21 -0
- package/dist/server/node_modules/pg-types/lib/arrayParser.js +11 -0
- package/dist/server/node_modules/pg-types/lib/binaryParsers.js +257 -0
- package/dist/server/node_modules/pg-types/lib/builtins.js +73 -0
- package/dist/server/node_modules/pg-types/lib/textParsers.js +215 -0
- package/dist/server/node_modules/pg-types/package.json +42 -0
- package/dist/server/node_modules/pg-types/test/index.js +24 -0
- package/dist/server/node_modules/pg-types/test/types.js +597 -0
- package/dist/server/node_modules/pgpass/README.md +74 -0
- package/dist/server/node_modules/pgpass/lib/helper.js +233 -0
- package/dist/server/node_modules/pgpass/lib/index.js +23 -0
- package/dist/server/node_modules/pgpass/package.json +41 -0
- package/dist/server/node_modules/postgres-array/index.d.ts +4 -0
- package/dist/server/node_modules/postgres-array/index.js +97 -0
- package/dist/server/node_modules/postgres-array/license +21 -0
- package/dist/server/node_modules/postgres-array/package.json +35 -0
- package/dist/server/node_modules/postgres-array/readme.md +43 -0
- package/dist/server/node_modules/postgres-bytea/index.js +33 -0
- package/dist/server/node_modules/postgres-bytea/license +21 -0
- package/dist/server/node_modules/postgres-bytea/package.json +34 -0
- package/dist/server/node_modules/postgres-bytea/readme.md +34 -0
- package/dist/server/node_modules/postgres-date/index.js +116 -0
- package/dist/server/node_modules/postgres-date/license +21 -0
- package/dist/server/node_modules/postgres-date/package.json +33 -0
- package/dist/server/node_modules/postgres-date/readme.md +49 -0
- package/dist/server/node_modules/postgres-interval/index.d.ts +20 -0
- package/dist/server/node_modules/postgres-interval/index.js +125 -0
- package/dist/server/node_modules/postgres-interval/license +21 -0
- package/dist/server/node_modules/postgres-interval/package.json +36 -0
- package/dist/server/node_modules/postgres-interval/readme.md +48 -0
- package/dist/server/node_modules/split2/LICENSE +13 -0
- package/dist/server/node_modules/split2/README.md +85 -0
- package/dist/server/node_modules/split2/bench.js +27 -0
- package/dist/server/node_modules/split2/index.js +141 -0
- package/dist/server/node_modules/split2/package.json +39 -0
- package/dist/server/node_modules/split2/test.js +409 -0
- package/dist/server/server.js +2 -2
- package/package.json +1 -1
- package/dist/client/assets/plugins-CJOgdAgY.js +0 -1
- package/dist/client/assets/tasks-CAcIEtSF.js +0 -1
- package/dist/client/assets/useInfiniteQuery-Dw4aF3nd.js +0 -1
- package/dist/client/assets/useQuery-CTePvczf.js +0 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-All2JJwt.js +0 -1
- package/dist/server/node_modules/pg/README.md +0 -95
- package/dist/server/node_modules/pg/esm/index.mjs +0 -20
- package/dist/server/node_modules/pg/lib/client.js +0 -743
- package/dist/server/node_modules/pg/lib/connection-parameters.js +0 -171
- package/dist/server/node_modules/pg/lib/connection.js +0 -221
- package/dist/server/node_modules/pg/lib/crypto/cert-signatures.js +0 -122
- package/dist/server/node_modules/pg/lib/crypto/sasl.js +0 -212
- package/dist/server/node_modules/pg/lib/crypto/utils-legacy.js +0 -43
- package/dist/server/node_modules/pg/lib/crypto/utils-webcrypto.js +0 -89
- package/dist/server/node_modules/pg/lib/crypto/utils.js +0 -9
- package/dist/server/node_modules/pg/lib/defaults.js +0 -91
- package/dist/server/node_modules/pg/lib/index.js +0 -73
- package/dist/server/node_modules/pg/lib/native/client.js +0 -323
- package/dist/server/node_modules/pg/lib/native/index.js +0 -2
- package/dist/server/node_modules/pg/lib/native/query.js +0 -165
- package/dist/server/node_modules/pg/lib/query.js +0 -252
- package/dist/server/node_modules/pg/lib/result.js +0 -109
- package/dist/server/node_modules/pg/lib/stream.js +0 -83
- package/dist/server/node_modules/pg/lib/type-overrides.js +0 -35
- package/dist/server/node_modules/pg/lib/utils.js +0 -217
- package/dist/server/node_modules/pg/package.json +0 -76
- /package/dist/server/node_modules/{pg → pg-cloudflare}/LICENSE +0 -0
|
@@ -0,0 +1,413 @@
|
|
|
1
|
+
import { TransformOptions } from 'stream'
|
|
2
|
+
import {
|
|
3
|
+
Mode,
|
|
4
|
+
bindComplete,
|
|
5
|
+
parseComplete,
|
|
6
|
+
closeComplete,
|
|
7
|
+
noData,
|
|
8
|
+
portalSuspended,
|
|
9
|
+
copyDone,
|
|
10
|
+
replicationStart,
|
|
11
|
+
emptyQuery,
|
|
12
|
+
ReadyForQueryMessage,
|
|
13
|
+
CommandCompleteMessage,
|
|
14
|
+
CopyDataMessage,
|
|
15
|
+
CopyResponse,
|
|
16
|
+
NotificationResponseMessage,
|
|
17
|
+
RowDescriptionMessage,
|
|
18
|
+
ParameterDescriptionMessage,
|
|
19
|
+
Field,
|
|
20
|
+
DataRowMessage,
|
|
21
|
+
ParameterStatusMessage,
|
|
22
|
+
BackendKeyDataMessage,
|
|
23
|
+
DatabaseError,
|
|
24
|
+
BackendMessage,
|
|
25
|
+
MessageName,
|
|
26
|
+
AuthenticationMD5Password,
|
|
27
|
+
NoticeMessage,
|
|
28
|
+
} from './messages'
|
|
29
|
+
import { BufferReader } from './buffer-reader'
|
|
30
|
+
|
|
31
|
+
// every message is prefixed with a single bye
|
|
32
|
+
const CODE_LENGTH = 1
|
|
33
|
+
// every message has an int32 length which includes itself but does
|
|
34
|
+
// NOT include the code in the length
|
|
35
|
+
const LEN_LENGTH = 4
|
|
36
|
+
|
|
37
|
+
const HEADER_LENGTH = CODE_LENGTH + LEN_LENGTH
|
|
38
|
+
|
|
39
|
+
// A placeholder for a `BackendMessage`’s length value that will be set after construction.
|
|
40
|
+
const LATEINIT_LENGTH = -1
|
|
41
|
+
|
|
42
|
+
export type Packet = {
|
|
43
|
+
code: number
|
|
44
|
+
packet: Buffer
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
const emptyBuffer = Buffer.allocUnsafe(0)
|
|
48
|
+
|
|
49
|
+
type StreamOptions = TransformOptions & {
|
|
50
|
+
mode: Mode
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
const enum MessageCodes {
|
|
54
|
+
DataRow = 0x44, // D
|
|
55
|
+
ParseComplete = 0x31, // 1
|
|
56
|
+
BindComplete = 0x32, // 2
|
|
57
|
+
CloseComplete = 0x33, // 3
|
|
58
|
+
CommandComplete = 0x43, // C
|
|
59
|
+
ReadyForQuery = 0x5a, // Z
|
|
60
|
+
NoData = 0x6e, // n
|
|
61
|
+
NotificationResponse = 0x41, // A
|
|
62
|
+
AuthenticationResponse = 0x52, // R
|
|
63
|
+
ParameterStatus = 0x53, // S
|
|
64
|
+
BackendKeyData = 0x4b, // K
|
|
65
|
+
ErrorMessage = 0x45, // E
|
|
66
|
+
NoticeMessage = 0x4e, // N
|
|
67
|
+
RowDescriptionMessage = 0x54, // T
|
|
68
|
+
ParameterDescriptionMessage = 0x74, // t
|
|
69
|
+
PortalSuspended = 0x73, // s
|
|
70
|
+
ReplicationStart = 0x57, // W
|
|
71
|
+
EmptyQuery = 0x49, // I
|
|
72
|
+
CopyIn = 0x47, // G
|
|
73
|
+
CopyOut = 0x48, // H
|
|
74
|
+
CopyDone = 0x63, // c
|
|
75
|
+
CopyData = 0x64, // d
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
export type MessageCallback = (msg: BackendMessage) => void
|
|
79
|
+
|
|
80
|
+
export class Parser {
|
|
81
|
+
private buffer: Buffer = emptyBuffer
|
|
82
|
+
private bufferLength: number = 0
|
|
83
|
+
private bufferOffset: number = 0
|
|
84
|
+
private reader = new BufferReader()
|
|
85
|
+
private mode: Mode
|
|
86
|
+
|
|
87
|
+
constructor(opts?: StreamOptions) {
|
|
88
|
+
if (opts?.mode === 'binary') {
|
|
89
|
+
throw new Error('Binary mode not supported yet')
|
|
90
|
+
}
|
|
91
|
+
this.mode = opts?.mode || 'text'
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
public parse(buffer: Buffer, callback: MessageCallback) {
|
|
95
|
+
this.mergeBuffer(buffer)
|
|
96
|
+
const bufferFullLength = this.bufferOffset + this.bufferLength
|
|
97
|
+
let offset = this.bufferOffset
|
|
98
|
+
while (offset + HEADER_LENGTH <= bufferFullLength) {
|
|
99
|
+
// code is 1 byte long - it identifies the message type
|
|
100
|
+
const code = this.buffer[offset]
|
|
101
|
+
// length is 1 Uint32BE - it is the length of the message EXCLUDING the code
|
|
102
|
+
const length = this.buffer.readUInt32BE(offset + CODE_LENGTH)
|
|
103
|
+
const fullMessageLength = CODE_LENGTH + length
|
|
104
|
+
if (fullMessageLength + offset <= bufferFullLength) {
|
|
105
|
+
const message = this.handlePacket(offset + HEADER_LENGTH, code, length, this.buffer)
|
|
106
|
+
callback(message)
|
|
107
|
+
offset += fullMessageLength
|
|
108
|
+
} else {
|
|
109
|
+
break
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
if (offset === bufferFullLength) {
|
|
113
|
+
// No more use for the buffer
|
|
114
|
+
this.buffer = emptyBuffer
|
|
115
|
+
this.bufferLength = 0
|
|
116
|
+
this.bufferOffset = 0
|
|
117
|
+
} else {
|
|
118
|
+
// Adjust the cursors of remainingBuffer
|
|
119
|
+
this.bufferLength = bufferFullLength - offset
|
|
120
|
+
this.bufferOffset = offset
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
private mergeBuffer(buffer: Buffer): void {
|
|
125
|
+
if (this.bufferLength > 0) {
|
|
126
|
+
const newLength = this.bufferLength + buffer.byteLength
|
|
127
|
+
const newFullLength = newLength + this.bufferOffset
|
|
128
|
+
if (newFullLength > this.buffer.byteLength) {
|
|
129
|
+
// We can't concat the new buffer with the remaining one
|
|
130
|
+
let newBuffer: Buffer
|
|
131
|
+
if (newLength <= this.buffer.byteLength && this.bufferOffset >= this.bufferLength) {
|
|
132
|
+
// We can move the relevant part to the beginning of the buffer instead of allocating a new buffer
|
|
133
|
+
newBuffer = this.buffer
|
|
134
|
+
} else {
|
|
135
|
+
// Allocate a new larger buffer
|
|
136
|
+
let newBufferLength = this.buffer.byteLength * 2
|
|
137
|
+
while (newLength >= newBufferLength) {
|
|
138
|
+
newBufferLength *= 2
|
|
139
|
+
}
|
|
140
|
+
newBuffer = Buffer.allocUnsafe(newBufferLength)
|
|
141
|
+
}
|
|
142
|
+
// Move the remaining buffer to the new one
|
|
143
|
+
this.buffer.copy(newBuffer, 0, this.bufferOffset, this.bufferOffset + this.bufferLength)
|
|
144
|
+
this.buffer = newBuffer
|
|
145
|
+
this.bufferOffset = 0
|
|
146
|
+
}
|
|
147
|
+
// Concat the new buffer with the remaining one
|
|
148
|
+
buffer.copy(this.buffer, this.bufferOffset + this.bufferLength)
|
|
149
|
+
this.bufferLength = newLength
|
|
150
|
+
} else {
|
|
151
|
+
this.buffer = buffer
|
|
152
|
+
this.bufferOffset = 0
|
|
153
|
+
this.bufferLength = buffer.byteLength
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
private handlePacket(offset: number, code: number, length: number, bytes: Buffer): BackendMessage {
|
|
158
|
+
const { reader } = this
|
|
159
|
+
|
|
160
|
+
// NOTE: This undesirably retains the buffer in `this.reader` if the `parse*Message` calls below throw. However, those should only throw in the case of a protocol error, which normally results in the reader being discarded.
|
|
161
|
+
reader.setBuffer(offset, bytes)
|
|
162
|
+
|
|
163
|
+
let message: BackendMessage
|
|
164
|
+
|
|
165
|
+
switch (code) {
|
|
166
|
+
case MessageCodes.BindComplete:
|
|
167
|
+
message = bindComplete
|
|
168
|
+
break
|
|
169
|
+
case MessageCodes.ParseComplete:
|
|
170
|
+
message = parseComplete
|
|
171
|
+
break
|
|
172
|
+
case MessageCodes.CloseComplete:
|
|
173
|
+
message = closeComplete
|
|
174
|
+
break
|
|
175
|
+
case MessageCodes.NoData:
|
|
176
|
+
message = noData
|
|
177
|
+
break
|
|
178
|
+
case MessageCodes.PortalSuspended:
|
|
179
|
+
message = portalSuspended
|
|
180
|
+
break
|
|
181
|
+
case MessageCodes.CopyDone:
|
|
182
|
+
message = copyDone
|
|
183
|
+
break
|
|
184
|
+
case MessageCodes.ReplicationStart:
|
|
185
|
+
message = replicationStart
|
|
186
|
+
break
|
|
187
|
+
case MessageCodes.EmptyQuery:
|
|
188
|
+
message = emptyQuery
|
|
189
|
+
break
|
|
190
|
+
case MessageCodes.DataRow:
|
|
191
|
+
message = parseDataRowMessage(reader)
|
|
192
|
+
break
|
|
193
|
+
case MessageCodes.CommandComplete:
|
|
194
|
+
message = parseCommandCompleteMessage(reader)
|
|
195
|
+
break
|
|
196
|
+
case MessageCodes.ReadyForQuery:
|
|
197
|
+
message = parseReadyForQueryMessage(reader)
|
|
198
|
+
break
|
|
199
|
+
case MessageCodes.NotificationResponse:
|
|
200
|
+
message = parseNotificationMessage(reader)
|
|
201
|
+
break
|
|
202
|
+
case MessageCodes.AuthenticationResponse:
|
|
203
|
+
message = parseAuthenticationResponse(reader, length)
|
|
204
|
+
break
|
|
205
|
+
case MessageCodes.ParameterStatus:
|
|
206
|
+
message = parseParameterStatusMessage(reader)
|
|
207
|
+
break
|
|
208
|
+
case MessageCodes.BackendKeyData:
|
|
209
|
+
message = parseBackendKeyData(reader)
|
|
210
|
+
break
|
|
211
|
+
case MessageCodes.ErrorMessage:
|
|
212
|
+
message = parseErrorMessage(reader, 'error')
|
|
213
|
+
break
|
|
214
|
+
case MessageCodes.NoticeMessage:
|
|
215
|
+
message = parseErrorMessage(reader, 'notice')
|
|
216
|
+
break
|
|
217
|
+
case MessageCodes.RowDescriptionMessage:
|
|
218
|
+
message = parseRowDescriptionMessage(reader)
|
|
219
|
+
break
|
|
220
|
+
case MessageCodes.ParameterDescriptionMessage:
|
|
221
|
+
message = parseParameterDescriptionMessage(reader)
|
|
222
|
+
break
|
|
223
|
+
case MessageCodes.CopyIn:
|
|
224
|
+
message = parseCopyInMessage(reader)
|
|
225
|
+
break
|
|
226
|
+
case MessageCodes.CopyOut:
|
|
227
|
+
message = parseCopyOutMessage(reader)
|
|
228
|
+
break
|
|
229
|
+
case MessageCodes.CopyData:
|
|
230
|
+
message = parseCopyData(reader, length)
|
|
231
|
+
break
|
|
232
|
+
default:
|
|
233
|
+
return new DatabaseError('received invalid response: ' + code.toString(16), length, 'error')
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
reader.setBuffer(0, emptyBuffer)
|
|
237
|
+
|
|
238
|
+
message.length = length
|
|
239
|
+
return message
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
const parseReadyForQueryMessage = (reader: BufferReader) => {
|
|
244
|
+
const status = reader.string(1)
|
|
245
|
+
return new ReadyForQueryMessage(LATEINIT_LENGTH, status)
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
const parseCommandCompleteMessage = (reader: BufferReader) => {
|
|
249
|
+
const text = reader.cstring()
|
|
250
|
+
return new CommandCompleteMessage(LATEINIT_LENGTH, text)
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
const parseCopyData = (reader: BufferReader, length: number) => {
|
|
254
|
+
const chunk = reader.bytes(length - 4)
|
|
255
|
+
return new CopyDataMessage(LATEINIT_LENGTH, chunk)
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
const parseCopyInMessage = (reader: BufferReader) => parseCopyMessage(reader, 'copyInResponse')
|
|
259
|
+
|
|
260
|
+
const parseCopyOutMessage = (reader: BufferReader) => parseCopyMessage(reader, 'copyOutResponse')
|
|
261
|
+
|
|
262
|
+
const parseCopyMessage = (reader: BufferReader, messageName: MessageName) => {
|
|
263
|
+
const isBinary = reader.byte() !== 0
|
|
264
|
+
const columnCount = reader.int16()
|
|
265
|
+
const message = new CopyResponse(LATEINIT_LENGTH, messageName, isBinary, columnCount)
|
|
266
|
+
for (let i = 0; i < columnCount; i++) {
|
|
267
|
+
message.columnTypes[i] = reader.int16()
|
|
268
|
+
}
|
|
269
|
+
return message
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
const parseNotificationMessage = (reader: BufferReader) => {
|
|
273
|
+
const processId = reader.int32()
|
|
274
|
+
const channel = reader.cstring()
|
|
275
|
+
const payload = reader.cstring()
|
|
276
|
+
return new NotificationResponseMessage(LATEINIT_LENGTH, processId, channel, payload)
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
const parseRowDescriptionMessage = (reader: BufferReader) => {
|
|
280
|
+
const fieldCount = reader.int16()
|
|
281
|
+
const message = new RowDescriptionMessage(LATEINIT_LENGTH, fieldCount)
|
|
282
|
+
for (let i = 0; i < fieldCount; i++) {
|
|
283
|
+
message.fields[i] = parseField(reader)
|
|
284
|
+
}
|
|
285
|
+
return message
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
const parseField = (reader: BufferReader) => {
|
|
289
|
+
const name = reader.cstring()
|
|
290
|
+
const tableID = reader.uint32()
|
|
291
|
+
const columnID = reader.int16()
|
|
292
|
+
const dataTypeID = reader.uint32()
|
|
293
|
+
const dataTypeSize = reader.int16()
|
|
294
|
+
const dataTypeModifier = reader.int32()
|
|
295
|
+
const mode = reader.int16() === 0 ? 'text' : 'binary'
|
|
296
|
+
return new Field(name, tableID, columnID, dataTypeID, dataTypeSize, dataTypeModifier, mode)
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
const parseParameterDescriptionMessage = (reader: BufferReader) => {
|
|
300
|
+
const parameterCount = reader.int16()
|
|
301
|
+
const message = new ParameterDescriptionMessage(LATEINIT_LENGTH, parameterCount)
|
|
302
|
+
for (let i = 0; i < parameterCount; i++) {
|
|
303
|
+
message.dataTypeIDs[i] = reader.int32()
|
|
304
|
+
}
|
|
305
|
+
return message
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
const parseDataRowMessage = (reader: BufferReader) => {
|
|
309
|
+
const fieldCount = reader.int16()
|
|
310
|
+
const fields: any[] = new Array(fieldCount)
|
|
311
|
+
for (let i = 0; i < fieldCount; i++) {
|
|
312
|
+
const len = reader.int32()
|
|
313
|
+
// a -1 for length means the value of the field is null
|
|
314
|
+
fields[i] = len === -1 ? null : reader.string(len)
|
|
315
|
+
}
|
|
316
|
+
return new DataRowMessage(LATEINIT_LENGTH, fields)
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
const parseParameterStatusMessage = (reader: BufferReader) => {
|
|
320
|
+
const name = reader.cstring()
|
|
321
|
+
const value = reader.cstring()
|
|
322
|
+
return new ParameterStatusMessage(LATEINIT_LENGTH, name, value)
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
const parseBackendKeyData = (reader: BufferReader) => {
|
|
326
|
+
const processID = reader.int32()
|
|
327
|
+
const secretKey = reader.int32()
|
|
328
|
+
return new BackendKeyDataMessage(LATEINIT_LENGTH, processID, secretKey)
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
const parseAuthenticationResponse = (reader: BufferReader, length: number) => {
|
|
332
|
+
const code = reader.int32()
|
|
333
|
+
// TODO(bmc): maybe better types here
|
|
334
|
+
const message: BackendMessage & any = {
|
|
335
|
+
name: 'authenticationOk',
|
|
336
|
+
length,
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
switch (code) {
|
|
340
|
+
case 0: // AuthenticationOk
|
|
341
|
+
break
|
|
342
|
+
case 3: // AuthenticationCleartextPassword
|
|
343
|
+
if (message.length === 8) {
|
|
344
|
+
message.name = 'authenticationCleartextPassword'
|
|
345
|
+
}
|
|
346
|
+
break
|
|
347
|
+
case 5: // AuthenticationMD5Password
|
|
348
|
+
if (message.length === 12) {
|
|
349
|
+
message.name = 'authenticationMD5Password'
|
|
350
|
+
const salt = reader.bytes(4)
|
|
351
|
+
return new AuthenticationMD5Password(LATEINIT_LENGTH, salt)
|
|
352
|
+
}
|
|
353
|
+
break
|
|
354
|
+
case 10: // AuthenticationSASL
|
|
355
|
+
{
|
|
356
|
+
message.name = 'authenticationSASL'
|
|
357
|
+
message.mechanisms = []
|
|
358
|
+
let mechanism: string
|
|
359
|
+
do {
|
|
360
|
+
mechanism = reader.cstring()
|
|
361
|
+
if (mechanism) {
|
|
362
|
+
message.mechanisms.push(mechanism)
|
|
363
|
+
}
|
|
364
|
+
} while (mechanism)
|
|
365
|
+
}
|
|
366
|
+
break
|
|
367
|
+
case 11: // AuthenticationSASLContinue
|
|
368
|
+
message.name = 'authenticationSASLContinue'
|
|
369
|
+
message.data = reader.string(length - 8)
|
|
370
|
+
break
|
|
371
|
+
case 12: // AuthenticationSASLFinal
|
|
372
|
+
message.name = 'authenticationSASLFinal'
|
|
373
|
+
message.data = reader.string(length - 8)
|
|
374
|
+
break
|
|
375
|
+
default:
|
|
376
|
+
throw new Error('Unknown authenticationOk message type ' + code)
|
|
377
|
+
}
|
|
378
|
+
return message
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
const parseErrorMessage = (reader: BufferReader, name: MessageName) => {
|
|
382
|
+
const fields: Record<string, string> = {}
|
|
383
|
+
let fieldType = reader.string(1)
|
|
384
|
+
while (fieldType !== '\0') {
|
|
385
|
+
fields[fieldType] = reader.cstring()
|
|
386
|
+
fieldType = reader.string(1)
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
const messageValue = fields.M
|
|
390
|
+
|
|
391
|
+
const message =
|
|
392
|
+
name === 'notice'
|
|
393
|
+
? new NoticeMessage(LATEINIT_LENGTH, messageValue)
|
|
394
|
+
: new DatabaseError(messageValue, LATEINIT_LENGTH, name)
|
|
395
|
+
|
|
396
|
+
message.severity = fields.S
|
|
397
|
+
message.code = fields.C
|
|
398
|
+
message.detail = fields.D
|
|
399
|
+
message.hint = fields.H
|
|
400
|
+
message.position = fields.P
|
|
401
|
+
message.internalPosition = fields.p
|
|
402
|
+
message.internalQuery = fields.q
|
|
403
|
+
message.where = fields.W
|
|
404
|
+
message.schema = fields.s
|
|
405
|
+
message.table = fields.t
|
|
406
|
+
message.column = fields.c
|
|
407
|
+
message.dataType = fields.d
|
|
408
|
+
message.constraint = fields.n
|
|
409
|
+
message.file = fields.F
|
|
410
|
+
message.line = fields.L
|
|
411
|
+
message.routine = fields.R
|
|
412
|
+
return message
|
|
413
|
+
}
|
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
import { Writer } from './buffer-writer'
|
|
2
|
+
|
|
3
|
+
const enum code {
|
|
4
|
+
startup = 0x70,
|
|
5
|
+
query = 0x51,
|
|
6
|
+
parse = 0x50,
|
|
7
|
+
bind = 0x42,
|
|
8
|
+
execute = 0x45,
|
|
9
|
+
flush = 0x48,
|
|
10
|
+
sync = 0x53,
|
|
11
|
+
end = 0x58,
|
|
12
|
+
close = 0x43,
|
|
13
|
+
describe = 0x44,
|
|
14
|
+
copyFromChunk = 0x64,
|
|
15
|
+
copyDone = 0x63,
|
|
16
|
+
copyFail = 0x66,
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
const writer = new Writer()
|
|
20
|
+
|
|
21
|
+
const startup = (opts: Record<string, string>): Buffer => {
|
|
22
|
+
// protocol version
|
|
23
|
+
writer.addInt16(3).addInt16(0)
|
|
24
|
+
for (const key of Object.keys(opts)) {
|
|
25
|
+
writer.addCString(key).addCString(opts[key])
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
writer.addCString('client_encoding').addCString('UTF8')
|
|
29
|
+
|
|
30
|
+
const bodyBuffer = writer.addCString('').flush()
|
|
31
|
+
// this message is sent without a code
|
|
32
|
+
|
|
33
|
+
const length = bodyBuffer.length + 4
|
|
34
|
+
|
|
35
|
+
return new Writer().addInt32(length).add(bodyBuffer).flush()
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
const requestSsl = (): Buffer => {
|
|
39
|
+
const response = Buffer.allocUnsafe(8)
|
|
40
|
+
response.writeInt32BE(8, 0)
|
|
41
|
+
response.writeInt32BE(80877103, 4)
|
|
42
|
+
return response
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
const password = (password: string): Buffer => {
|
|
46
|
+
return writer.addCString(password).flush(code.startup)
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
const sendSASLInitialResponseMessage = function (mechanism: string, initialResponse: string): Buffer {
|
|
50
|
+
// 0x70 = 'p'
|
|
51
|
+
writer.addCString(mechanism).addInt32(Buffer.byteLength(initialResponse)).addString(initialResponse)
|
|
52
|
+
|
|
53
|
+
return writer.flush(code.startup)
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
const sendSCRAMClientFinalMessage = function (additionalData: string): Buffer {
|
|
57
|
+
return writer.addString(additionalData).flush(code.startup)
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
const query = (text: string): Buffer => {
|
|
61
|
+
return writer.addCString(text).flush(code.query)
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
type ParseOpts = {
|
|
65
|
+
name?: string
|
|
66
|
+
types?: number[]
|
|
67
|
+
text: string
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
const emptyArray: any[] = []
|
|
71
|
+
|
|
72
|
+
const parse = (query: ParseOpts): Buffer => {
|
|
73
|
+
// expect something like this:
|
|
74
|
+
// { name: 'queryName',
|
|
75
|
+
// text: 'select * from blah',
|
|
76
|
+
// types: ['int8', 'bool'] }
|
|
77
|
+
|
|
78
|
+
// normalize missing query names to allow for null
|
|
79
|
+
const name = query.name || ''
|
|
80
|
+
if (name.length > 63) {
|
|
81
|
+
console.error('Warning! Postgres only supports 63 characters for query names.')
|
|
82
|
+
console.error('You supplied %s (%s)', name, name.length)
|
|
83
|
+
console.error('This can cause conflicts and silent errors executing queries')
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
const types = query.types || emptyArray
|
|
87
|
+
|
|
88
|
+
const len = types.length
|
|
89
|
+
|
|
90
|
+
const buffer = writer
|
|
91
|
+
.addCString(name) // name of query
|
|
92
|
+
.addCString(query.text) // actual query text
|
|
93
|
+
.addInt16(len)
|
|
94
|
+
|
|
95
|
+
for (let i = 0; i < len; i++) {
|
|
96
|
+
buffer.addInt32(types[i])
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
return writer.flush(code.parse)
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
type ValueMapper = (param: any, index: number) => any
|
|
103
|
+
|
|
104
|
+
type BindOpts = {
|
|
105
|
+
portal?: string
|
|
106
|
+
binary?: boolean
|
|
107
|
+
statement?: string
|
|
108
|
+
values?: any[]
|
|
109
|
+
// optional map from JS value to postgres value per parameter
|
|
110
|
+
valueMapper?: ValueMapper
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
const paramWriter = new Writer()
|
|
114
|
+
|
|
115
|
+
// make this a const enum so typescript will inline the value
|
|
116
|
+
const enum ParamType {
|
|
117
|
+
STRING = 0,
|
|
118
|
+
BINARY = 1,
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
const writeValues = function (values: any[], valueMapper?: ValueMapper): void {
|
|
122
|
+
for (let i = 0; i < values.length; i++) {
|
|
123
|
+
const mappedVal = valueMapper ? valueMapper(values[i], i) : values[i]
|
|
124
|
+
if (mappedVal == null) {
|
|
125
|
+
// add the param type (string) to the writer
|
|
126
|
+
writer.addInt16(ParamType.STRING)
|
|
127
|
+
// write -1 to the param writer to indicate null
|
|
128
|
+
paramWriter.addInt32(-1)
|
|
129
|
+
} else if (mappedVal instanceof Buffer) {
|
|
130
|
+
// add the param type (binary) to the writer
|
|
131
|
+
writer.addInt16(ParamType.BINARY)
|
|
132
|
+
// add the buffer to the param writer
|
|
133
|
+
paramWriter.addInt32(mappedVal.length)
|
|
134
|
+
paramWriter.add(mappedVal)
|
|
135
|
+
} else {
|
|
136
|
+
// add the param type (string) to the writer
|
|
137
|
+
writer.addInt16(ParamType.STRING)
|
|
138
|
+
paramWriter.addInt32(Buffer.byteLength(mappedVal))
|
|
139
|
+
paramWriter.addString(mappedVal)
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
const bind = (config: BindOpts = {}): Buffer => {
|
|
145
|
+
// normalize config
|
|
146
|
+
const portal = config.portal || ''
|
|
147
|
+
const statement = config.statement || ''
|
|
148
|
+
const binary = config.binary || false
|
|
149
|
+
const values = config.values || emptyArray
|
|
150
|
+
const len = values.length
|
|
151
|
+
|
|
152
|
+
writer.addCString(portal).addCString(statement)
|
|
153
|
+
writer.addInt16(len)
|
|
154
|
+
|
|
155
|
+
writeValues(values, config.valueMapper)
|
|
156
|
+
|
|
157
|
+
writer.addInt16(len)
|
|
158
|
+
writer.add(paramWriter.flush())
|
|
159
|
+
|
|
160
|
+
// all results use the same format code
|
|
161
|
+
writer.addInt16(1)
|
|
162
|
+
// format code
|
|
163
|
+
writer.addInt16(binary ? ParamType.BINARY : ParamType.STRING)
|
|
164
|
+
return writer.flush(code.bind)
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
type ExecOpts = {
|
|
168
|
+
portal?: string
|
|
169
|
+
rows?: number
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
const emptyExecute = Buffer.from([code.execute, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00])
|
|
173
|
+
|
|
174
|
+
const execute = (config?: ExecOpts): Buffer => {
|
|
175
|
+
// this is the happy path for most queries
|
|
176
|
+
if (!config || (!config.portal && !config.rows)) {
|
|
177
|
+
return emptyExecute
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
const portal = config.portal || ''
|
|
181
|
+
const rows = config.rows || 0
|
|
182
|
+
|
|
183
|
+
const portalLength = Buffer.byteLength(portal)
|
|
184
|
+
const len = 4 + portalLength + 1 + 4
|
|
185
|
+
// one extra bit for code
|
|
186
|
+
const buff = Buffer.allocUnsafe(1 + len)
|
|
187
|
+
buff[0] = code.execute
|
|
188
|
+
buff.writeInt32BE(len, 1)
|
|
189
|
+
buff.write(portal, 5, 'utf-8')
|
|
190
|
+
buff[portalLength + 5] = 0 // null terminate portal cString
|
|
191
|
+
buff.writeUInt32BE(rows, buff.length - 4)
|
|
192
|
+
return buff
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
const cancel = (processID: number, secretKey: number): Buffer => {
|
|
196
|
+
const buffer = Buffer.allocUnsafe(16)
|
|
197
|
+
buffer.writeInt32BE(16, 0)
|
|
198
|
+
buffer.writeInt16BE(1234, 4)
|
|
199
|
+
buffer.writeInt16BE(5678, 6)
|
|
200
|
+
buffer.writeInt32BE(processID, 8)
|
|
201
|
+
buffer.writeInt32BE(secretKey, 12)
|
|
202
|
+
return buffer
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
type PortalOpts = {
|
|
206
|
+
type: 'S' | 'P'
|
|
207
|
+
name?: string
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
const cstringMessage = (code: code, string: string): Buffer => {
|
|
211
|
+
const stringLen = Buffer.byteLength(string)
|
|
212
|
+
const len = 4 + stringLen + 1
|
|
213
|
+
// one extra bit for code
|
|
214
|
+
const buffer = Buffer.allocUnsafe(1 + len)
|
|
215
|
+
buffer[0] = code
|
|
216
|
+
buffer.writeInt32BE(len, 1)
|
|
217
|
+
buffer.write(string, 5, 'utf-8')
|
|
218
|
+
buffer[len] = 0 // null terminate cString
|
|
219
|
+
return buffer
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
const emptyDescribePortal = writer.addCString('P').flush(code.describe)
|
|
223
|
+
const emptyDescribeStatement = writer.addCString('S').flush(code.describe)
|
|
224
|
+
|
|
225
|
+
const describe = (msg: PortalOpts): Buffer => {
|
|
226
|
+
return msg.name
|
|
227
|
+
? cstringMessage(code.describe, `${msg.type}${msg.name || ''}`)
|
|
228
|
+
: msg.type === 'P'
|
|
229
|
+
? emptyDescribePortal
|
|
230
|
+
: emptyDescribeStatement
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
const close = (msg: PortalOpts): Buffer => {
|
|
234
|
+
const text = `${msg.type}${msg.name || ''}`
|
|
235
|
+
return cstringMessage(code.close, text)
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
const copyData = (chunk: Buffer): Buffer => {
|
|
239
|
+
return writer.add(chunk).flush(code.copyFromChunk)
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
const copyFail = (message: string): Buffer => {
|
|
243
|
+
return cstringMessage(code.copyFail, message)
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
const codeOnlyBuffer = (code: code): Buffer => Buffer.from([code, 0x00, 0x00, 0x00, 0x04])
|
|
247
|
+
|
|
248
|
+
const flushBuffer = codeOnlyBuffer(code.flush)
|
|
249
|
+
const syncBuffer = codeOnlyBuffer(code.sync)
|
|
250
|
+
const endBuffer = codeOnlyBuffer(code.end)
|
|
251
|
+
const copyDoneBuffer = codeOnlyBuffer(code.copyDone)
|
|
252
|
+
|
|
253
|
+
const serialize = {
|
|
254
|
+
startup,
|
|
255
|
+
password,
|
|
256
|
+
requestSsl,
|
|
257
|
+
sendSASLInitialResponseMessage,
|
|
258
|
+
sendSCRAMClientFinalMessage,
|
|
259
|
+
query,
|
|
260
|
+
parse,
|
|
261
|
+
bind,
|
|
262
|
+
execute,
|
|
263
|
+
describe,
|
|
264
|
+
close,
|
|
265
|
+
flush: () => flushBuffer,
|
|
266
|
+
sync: () => syncBuffer,
|
|
267
|
+
end: () => endBuffer,
|
|
268
|
+
copyData,
|
|
269
|
+
copyDone: () => copyDoneBuffer,
|
|
270
|
+
copyFail,
|
|
271
|
+
cancel,
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
export { serialize }
|