decocms 2.172.2 → 2.173.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client/assets/{AlertCircle-ClrGTaOd.js → AlertCircle-BoncS6LP.js} +1 -1
- package/dist/client/assets/{AlignLeft-CDH2kHzq.js → AlignLeft-DBFp0-N7.js} +1 -1
- package/dist/client/assets/{ArrowDown-DlYdW6Y7.js → ArrowDown-C3BzPPYX.js} +1 -1
- package/dist/client/assets/{ArrowLeft-DusSg6k7.js → ArrowLeft-BJzvklmo.js} +1 -1
- package/dist/client/assets/{ArrowUp-BadPbvy3.js → ArrowUp-C6T9wa52.js} +1 -1
- package/dist/client/assets/{Check-D47qqsWi.js → Check-D28ZRrsv.js} +1 -1
- package/dist/client/assets/{CheckCircle-CM5PTjhy.js → CheckCircle-ItsEMznk.js} +1 -1
- package/dist/client/assets/{CheckDone01-DU8levxk.js → CheckDone01-Cc3wOEJd.js} +1 -1
- package/dist/client/assets/{CheckVerified02-CACpEsSD.js → CheckVerified02-Dvd1EdLV.js} +1 -1
- package/dist/client/assets/{ChevronDown-CmFoa-MN.js → ChevronDown-D9EMTJdI.js} +1 -1
- package/dist/client/assets/{ChevronLeft-BBZtRY0q.js → ChevronLeft-6LF5odkw.js} +1 -1
- package/dist/client/assets/{ChevronRight-Ccc_Sjed.js → ChevronRight-6oHy3GR0.js} +1 -1
- package/dist/client/assets/{ChevronUp-JcxjaYTK.js → ChevronUp-iKqBRKww.js} +1 -1
- package/dist/client/assets/{Clock-DvBllXAe.js → Clock-DKgv7FMl.js} +1 -1
- package/dist/client/assets/{Code01-D384qtrJ.js → Code01-D874vQ1j.js} +1 -1
- package/dist/client/assets/{Coins01-q-yLaV-s.js → Coins01-CHKCanND.js} +1 -1
- package/dist/client/assets/{Container-BgIU6bWo.js → Container-v7Lu1WNT.js} +1 -1
- package/dist/client/assets/{Copy01-sKED-vLj.js → Copy01-D3an2EO3.js} +1 -1
- package/dist/client/assets/{Dataflow03-D3htYp-N.js → Dataflow03-C1gtqNGI.js} +1 -1
- package/dist/client/assets/{DotsHorizontal-azkhUMft.js → DotsHorizontal-BUWy0q6M.js} +1 -1
- package/dist/client/assets/{DotsVertical-Dt48o-Bq.js → DotsVertical-teVTiLQ2.js} +1 -1
- package/dist/client/assets/{Download01-Dp-HI0LA.js → Download01-DFr_zgIP.js} +1 -1
- package/dist/client/assets/{Edit01-C-PQ-7gV.js → Edit01-BIu4og98.js} +1 -1
- package/dist/client/assets/{Edit05-CTabXUvX.js → Edit05-hkZ8uhSL.js} +1 -1
- package/dist/client/assets/{Eye-BeIr8Vzd.js → Eye-BKxgN9Ci.js} +1 -1
- package/dist/client/assets/{EyeOff-Du1k40Nm.js → EyeOff-CAEuyJy8.js} +1 -1
- package/dist/client/assets/{File02-Bo9eFHTr.js → File02-Cpr-39PX.js} +1 -1
- package/dist/client/assets/{File06-BMW8ao_w.js → File06-9lDkVwq5.js} +1 -1
- package/dist/client/assets/{FilterLines-DqaELPn1.js → FilterLines-DBXa2xhp.js} +1 -1
- package/dist/client/assets/{Globe01-ISMTzK2m.js → Globe01-Dzq2G0hT.js} +1 -1
- package/dist/client/assets/{Globe02-BY9KQM8G.js → Globe02-cnnmW-yP.js} +1 -1
- package/dist/client/assets/{Grid01-kGaUg_cc.js → Grid01-B8Hz8XFZ.js} +1 -1
- package/dist/client/assets/{Hash02-DDXDI8ry.js → Hash02-CQioUpKU.js} +1 -1
- package/dist/client/assets/{Home02-BJ1pwYUW.js → Home02-Dhg6fiem.js} +1 -1
- package/dist/client/assets/{Image01-D1cm-3FQ.js → Image01-exfB-slY.js} +1 -1
- package/dist/client/assets/{Inbox01-BEwYpwmE.js → Inbox01-Bw2rff6F.js} +1 -1
- package/dist/client/assets/{InfoCircle-Cn8apf8U.js → InfoCircle-BzkuJise.js} +1 -1
- package/dist/client/assets/{Key01-CEedyU25.js → Key01-echsPc8T.js} +1 -1
- package/dist/client/assets/{LayersTwo01-BTT9GgdG.js → LayersTwo01-HSSB0HBk.js} +1 -1
- package/dist/client/assets/{LayoutLeft-bKrytFeq.js → LayoutLeft-CsdSAGAc.js} +1 -1
- package/dist/client/assets/{Link01-C_y_eRnq.js → Link01-DqBjIV11.js} +1 -1
- package/dist/client/assets/{LinkExternal01-Cjuepk2Y.js → LinkExternal01-BiHdSj-G.js} +1 -1
- package/dist/client/assets/{List-Bz4PLQWX.js → List-CCSmMits.js} +1 -1
- package/dist/client/assets/{Loading01-Ds_yIlBt.js → Loading01-R4lTIOmc.js} +1 -1
- package/dist/client/assets/{Lock01-r4p0TJqu.js → Lock01-BtcVHLM1.js} +1 -1
- package/dist/client/assets/{Play-Btzdao8L.js → Play-CeCy0kkp.js} +1 -1
- package/dist/client/assets/{Plus-Cln26t9k.js → Plus-BPhP6AwU.js} +1 -1
- package/dist/client/assets/{RefreshCcw01-B05f0aP-.js → RefreshCcw01-BpP2wWfT.js} +1 -1
- package/dist/client/assets/{Save01-BanXz4II.js → Save01-Go0UNRDT.js} +1 -1
- package/dist/client/assets/{SearchMd-C32DAy1s.js → SearchMd-DYtqpNhS.js} +1 -1
- package/dist/client/assets/{Settings01-C0PXfLqi.js → Settings01-DLXMaJiZ.js} +1 -1
- package/dist/client/assets/{Shield01-CCHp_zdi.js → Shield01-BPEMPVyT.js} +1 -1
- package/dist/client/assets/{Terminal-DcTm6ji-.js → Terminal-DvdwlySH.js} +1 -1
- package/dist/client/assets/{Trash01-DK1y3dZk.js → Trash01-11PM8hCT.js} +1 -1
- package/dist/client/assets/{Upload01-D2MbAzFl.js → Upload01-s0dK95gX.js} +1 -1
- package/dist/client/assets/{Users03-Ch2G4iRo.js → Users03-Bn5Ina1h.js} +1 -1
- package/dist/client/assets/{X-BeNP8bdc.js → X-C1gVOX-K.js} +1 -1
- package/dist/client/assets/{XCircle-C4Z1TBLP.js → XCircle-D_WssbjQ.js} +1 -1
- package/dist/client/assets/{XClose-ByRUZPAd.js → XClose-CzgfsXpl.js} +1 -1
- package/dist/client/assets/{Zap-BdI1rdNQ.js → Zap-rjtLs8AB.js} +1 -1
- package/dist/client/assets/{agent-connections-preview-B3lSJXbc.js → agent-connections-preview-B2zSeYmN.js} +1 -1
- package/dist/client/assets/{agent-detail-BE2wTwjO.js → agent-detail-C1YSF6Hq.js} +1 -1
- package/dist/client/assets/{agents-v7yFskYw.js → agents-DXzQUsKT.js} +1 -1
- package/dist/client/assets/{alert-dialog-BzmriYXD.js → alert-dialog-wQYrtq_g.js} +1 -1
- package/dist/client/assets/{auth-catchall-Cn7HOage.js → auth-catchall-BZlDikmp.js} +1 -1
- package/dist/client/assets/{automation-detail-3dPYUMP4.js → automation-detail-PwcSF1F0.js} +1 -1
- package/dist/client/assets/{automations-ByAliss3.js → automations-CTICk2Dp.js} +1 -1
- package/dist/client/assets/{avatar-VLsj4w_k.js → avatar-XKo1hvHY.js} +1 -1
- package/dist/client/assets/{badge-CQLalkEE.js → badge-BEyO0T03.js} +1 -1
- package/dist/client/assets/{binder-BCOcjrHc.js → binder-D-EP4Rws.js} +1 -1
- package/dist/client/assets/{breadcrumb-CtHpt1Hj.js → breadcrumb-BSZlBaPP.js} +1 -1
- package/dist/client/assets/{card-Dg8bSF1g.js → card-Cq808vu1.js} +1 -1
- package/dist/client/assets/{chart-CIIYUfQq.js → chart-DNqGB3ic.js} +1 -1
- package/dist/client/assets/{checkbox-5OPx-kaV.js → checkbox-D1_FXNWD.js} +1 -1
- package/dist/client/assets/{collapsible-DLZfoTEM.js → collapsible-wDXCk9xP.js} +1 -1
- package/dist/client/assets/{collection-detail-Bb3JCZHo.js → collection-detail-CsiVX8xV.js} +1 -1
- package/dist/client/assets/{collection-display-button-DV49rNbI.js → collection-display-button-yOA8wYm8.js} +1 -1
- package/dist/client/assets/{collection-search-BHtDjvQL.js → collection-search-C0Xdyimh.js} +1 -1
- package/dist/client/assets/{collection-tab-C9b9XvN2.js → collection-tab-C4posZLi.js} +1 -1
- package/dist/client/assets/{collection-table-wrapper-BgavezLW.js → collection-table-wrapper-BjxWZ4Q4.js} +1 -1
- package/dist/client/assets/{collection-tabs-DMmhv_1g.js → collection-tabs-Bdn3rWHw.js} +1 -1
- package/dist/client/assets/{command-DDZ63V3H.js → command-BO0v9Sf_.js} +1 -1
- package/dist/client/assets/{connect-DVhMOx8A.js → connect-DFz_0Mcc.js} +1 -1
- package/dist/client/assets/{connection-card-B8Ku_xnQ.js → connection-card-Iw1tldfy.js} +1 -1
- package/dist/client/assets/{connection-detail-CRo734HG.js → connection-detail-BX76SiPq.js} +1 -1
- package/dist/client/assets/{connection-status-CHkDe4eX.js → connection-status-BPCtNzAX.js} +1 -1
- package/dist/client/assets/{connections-CcoPNKjM.js → connections-Dzct8UZO.js} +1 -1
- package/dist/client/assets/{constants-m_OMiYqO.js → constants-BJq0sg2N.js} +1 -1
- package/dist/client/assets/constants-CYoMn_-y.js +1 -0
- package/dist/client/assets/{context-CcNCVCjQ.js → context-30W0NRWC.js} +1 -1
- package/dist/client/assets/{create-organization-dialog-DI-d1926.js → create-organization-dialog-qEzwR9y0.js} +1 -1
- package/dist/client/assets/{create-project-dialog-DCdoTB_M.js → create-project-dialog-CL4W5SGR.js} +1 -1
- package/dist/client/assets/{danger-BxsYXYff.js → danger-C5I4O3c5.js} +1 -1
- package/dist/client/assets/{danger-zone-CtWw91XF.js → danger-zone-BRN9nPUd.js} +1 -1
- package/dist/client/assets/{dependencies-Bqe9XWvV.js → dependencies-BMgtEL4Y.js} +1 -1
- package/dist/client/assets/{dialog-CYxmdCAY.js → dialog-DtQJmLgU.js} +1 -1
- package/dist/client/assets/{dropdown-menu-B2-TC2ID.js → dropdown-menu-Dh14MX71.js} +1 -1
- package/dist/client/assets/{dynamic-plugin-layout-B179FmFO.js → dynamic-plugin-layout-BgreQ4An.js} +1 -1
- package/dist/client/assets/{editable-task-title-CboTctFV.js → editable-task-title-aeTfEW-D.js} +1 -1
- package/dist/client/assets/{empty-state-QAJJHSPh.js → empty-state-ChTznqc5.js} +1 -1
- package/dist/client/assets/{empty-state-DyAFrOdp.js → empty-state-DehivavO.js} +1 -1
- package/dist/client/assets/{env-vars-editor-C3IuaF3S.js → env-vars-editor-DuCm8QB_.js} +1 -1
- package/dist/client/assets/{extract-connection-data-Cir4onx8.js → extract-connection-data-is00SRVb.js} +1 -1
- package/dist/client/assets/{file-browser-B3Xjj9S3.js → file-browser-BGVmEICO.js} +2 -2
- package/dist/client/assets/{form-BD_Oipqm.js → form-AwZCFVNc.js} +1 -1
- package/dist/client/assets/{general-CYb7i3K7.js → general-FbFo9Qid.js} +1 -1
- package/dist/client/assets/{grid-view-sbwQx6r5.js → grid-view-BqKnb9Io.js} +1 -1
- package/dist/client/assets/{home-B_gsL057.js → home-B--5foK8.js} +1 -1
- package/dist/client/assets/{icon-picker-BRNi8Awo.js → icon-picker-DIH_A1bl.js} +1 -1
- package/dist/client/assets/{index-Bs1-6MBJ.js → index--v47KjFS.js} +3 -3
- package/dist/client/assets/{index-Brmwx3QP.js → index-23ha-EiC.js} +1 -1
- package/dist/client/assets/{index-BCllOtlC.js → index-B67pQy0t.js} +1 -1
- package/dist/client/assets/{index-Dnjtu_kb.js → index-C1rNFCdf.js} +1 -1
- package/dist/client/assets/{index-DB_UqrMB.js → index-CRBE07YF.js} +1 -1
- package/dist/client/assets/{index-CvQBntDd.js → index-CUQZow0Z.js} +1 -1
- package/dist/client/assets/{index-CqNVEhLV.js → index-DLQk7Ahb.js} +1 -1
- package/dist/client/assets/{index-Cta5OAsO.css → index-DmrxmdhV.css} +1 -1
- package/dist/client/assets/{index-Cy5NxMqm.js → index-DnEhhRJ4.js} +1 -1
- package/dist/client/assets/{index-BDDekZH-.js → index-DrRz1QdK.js} +1 -1
- package/dist/client/assets/{index-DJ850qZq.js → index-oFBA5kHq.js} +1 -1
- package/dist/client/assets/{infiniteQueryObserver-BCxJZiPx.js → infiniteQueryObserver-Bv6Q8uee.js} +1 -1
- package/dist/client/assets/{input-oo9dNDtJ.js → input-B43ueF_6.js} +1 -1
- package/dist/client/assets/{integration-icon-BxDprz4-.js → integration-icon-jSV9a6uH.js} +1 -1
- package/dist/client/assets/{label-Ow7deF1V.js → label-Bp2-MH_v.js} +1 -1
- package/dist/client/assets/{layout-D-gNHDgT.js → layout-CHhBOues.js} +1 -1
- package/dist/client/assets/{layout-0-CpWJ4q.js → layout-ChV6hmvw.js} +1 -1
- package/dist/client/assets/{login-DMiDY1PH.js → login-DujtqNSP.js} +1 -1
- package/dist/client/assets/{logo-upload-DGm5nNR_.js → logo-upload-CFiX7Ocr.js} +1 -1
- package/dist/client/assets/{markdown-CC_Pgtlw.js → markdown-CHm0rLGk.js} +1 -1
- package/dist/client/assets/{mcp-app-renderer-eiwTuNJm.js → mcp-app-renderer-C9PcNeIF.js} +1 -1
- package/dist/client/assets/{mcp-server-card-ZHSZs_kf.js → mcp-server-card-BVdsLKTg.js} +1 -1
- package/dist/client/assets/{mcp-server-detail-DjKWYtHQ.js → mcp-server-detail-hWzz0p7M.js} +2 -2
- package/dist/client/assets/{members-CGtMoiYA.js → members-Dw7k8W_H.js} +1 -1
- package/dist/client/assets/{monaco-editor-DFgX2f59.js → monaco-editor-O-cJeAC7.js} +1 -1
- package/dist/client/assets/{monitoring-CQa1Ybic.js → monitoring-C_GmEx18.js} +1 -1
- package/dist/client/assets/{monitoring-dashboard-edit-CtdirIJ7.js → monitoring-dashboard-edit-Db8dSzpX.js} +1 -1
- package/dist/client/assets/{monitoring-dashboard-view-BzmmgyM6.js → monitoring-dashboard-view-DncdutYs.js} +1 -1
- package/dist/client/assets/{oauth-callback-BBrt_ccP.js → oauth-callback-D-e5bR0R.js} +1 -1
- package/dist/client/assets/{oauth-callback-ai-provider-B0mK5DTc.js → oauth-callback-ai-provider-DfwJ0j8l.js} +1 -1
- package/dist/client/assets/{org-ai-providers-2oudOR3a.js → org-ai-providers-BB_Kk_yW.js} +1 -1
- package/dist/client/assets/{page-BpUENCQ3.js → page-BHcE-IsW.js} +1 -1
- package/dist/client/assets/{page-Cm8DLHRx.js → page-DIduNonD.js} +1 -1
- package/dist/client/assets/{plugin-empty-state-D4HrModi.js → plugin-empty-state-CGg9Zobz.js} +1 -1
- package/dist/client/assets/{plugin-empty-state-D4jNxBX5.js → plugin-empty-state-DF5DjKQn.js} +1 -1
- package/dist/client/assets/{plugin-header-Bd2q22iA.js → plugin-header-CwOisLLl.js} +1 -1
- package/dist/client/assets/{plugin-header-hexKC2z7.js → plugin-header-oOJ_SB7i.js} +1 -1
- package/dist/client/assets/plugins-D61XA0e1.js +1 -0
- package/dist/client/assets/{popover-BQwql0No.js → popover-CRGn9IqN.js} +1 -1
- package/dist/client/assets/{project-app-view-CWpHCZKH.js → project-app-view-C6bFj2jv.js} +1 -1
- package/dist/client/assets/{project-layout-CZw982Go.js → project-layout-xuVkDUgj.js} +1 -1
- package/dist/client/assets/{project-plugins-C6LqmbaN.js → project-plugins-BtJagofo.js} +1 -1
- package/dist/client/assets/{projects-list-n35yk1kw.js → projects-list-rUiZxv6z.js} +1 -1
- package/dist/client/assets/{readme-viewer-C4a15ScG.js → readme-viewer-CgvhJVTC.js} +1 -1
- package/dist/client/assets/{registry-layout-BXxLm88S.js → registry-layout-BYOMcr5d.js} +1 -1
- package/dist/client/assets/{registry-utils-8JbjeIg2.js → registry-utils-DRlaL1TA.js} +1 -1
- package/dist/client/assets/{reports-layout-DDT7TPDK.js → reports-layout-BZCASsb2.js} +1 -1
- package/dist/client/assets/{reset-password-C8mz9-pn.js → reset-password-ptCGMW1Q.js} +1 -1
- package/dist/client/assets/{resizable-BEGLyBcY.js → resizable-BipYny0A.js} +1 -1
- package/dist/client/assets/{save-actions-tJMaBMCr.js → save-actions-6CE1ypPt.js} +1 -1
- package/dist/client/assets/{scroll-area-zXI7Mnta.js → scroll-area-CvC7l56a.js} +1 -1
- package/dist/client/assets/{select-DE-s_uro.js → select-1qCYmo_Z.js} +1 -1
- package/dist/client/assets/{select-virtual-mcp-3UuH5RYu.js → select-virtual-mcp-t9uZXeiE.js} +1 -1
- package/dist/client/assets/shell-layout-DS537tct.js +3 -0
- package/dist/client/assets/{sidebar-settings-BleCcXqd.js → sidebar-settings-Gn9QDCS3.js} +1 -1
- package/dist/client/assets/{skeleton-FXjthcRm.js → skeleton-Vs0ahWNW.js} +1 -1
- package/dist/client/assets/{spinner-LkGFTHYs.js → spinner-DY37bQ6b.js} +1 -1
- package/dist/client/assets/{store-invite-DY166hBP.js → store-invite-CZ47dQJt.js} +1 -1
- package/dist/client/assets/{switch-CmbZgNTQ.js → switch-ChOmwFAU.js} +1 -1
- package/dist/client/assets/{table-DQFo79Pa.js → table-Ds5hcAfV.js} +1 -1
- package/dist/client/assets/{tabs-VJ4cZZ6Y.js → tabs-Dpw2g7MT.js} +1 -1
- package/dist/client/assets/{task-status-Cp67IvSc.js → task-status-BEYFiOcg.js} +21 -21
- package/dist/client/assets/tasks-CdG9QSFK.js +1 -0
- package/dist/client/assets/{tasks-panel-BcHTmaRp.js → tasks-panel-B9E0VzsT.js} +1 -1
- package/dist/client/assets/{textarea-_fKX6fkc.js → textarea-C-fRxR1X.js} +1 -1
- package/dist/client/assets/{time-range-picker-CwXbYm21.js → time-range-picker-DLfN0bYQ.js} +1 -1
- package/dist/client/assets/{toggle-group-CG-mSzeH.js → toggle-group-BwEgndSj.js} +1 -1
- package/dist/client/assets/{tools-list-BqjA8cpd.js → tools-list-DzGfMYwE.js} +1 -1
- package/dist/client/assets/{tooltip-DvMIj9Vl.js → tooltip-B2CdQ2bN.js} +1 -1
- package/dist/client/assets/{topbar-portal-8N6OCP_q.js → topbar-portal-C72-23Dd.js} +1 -1
- package/dist/client/assets/{types-co6EnWx4.js → types-CixwvVqB.js} +1 -1
- package/dist/client/assets/{use-automations-CmbPeGrO.js → use-automations-D8qaeage.js} +1 -1
- package/dist/client/assets/{use-binding-BDoLJ3NJ.js → use-binding-C6wyTPOH.js} +1 -1
- package/dist/client/assets/{use-collections-BWCPG3qv.js → use-collections-CobBqkkk.js} +1 -1
- package/dist/client/assets/{use-connection-DNxPUHEC.js → use-connection-CUBEGKKv.js} +1 -1
- package/dist/client/assets/{use-copy-B6Vhad-4.js → use-copy-CCW7WupY.js} +1 -1
- package/dist/client/assets/{use-create-virtual-mcp-CsD8b5oZ.js → use-create-virtual-mcp-44rNe9r4.js} +1 -1
- package/dist/client/assets/{use-install-from-registry-rVBF9_Ya.js → use-install-from-registry-B6Xy7L7O.js} +1 -1
- package/dist/client/assets/{use-list-state-CxptnZc8.js → use-list-state-DmSf1SxJ.js} +1 -1
- package/dist/client/assets/{use-llm-Cx0n4D2y.js → use-llm-CgNJSzil.js} +1 -1
- package/dist/client/assets/{use-local-storage-BO16s_mB.js → use-local-storage-B5rcvGp1.js} +1 -1
- package/dist/client/assets/{use-mcp-prompts-El8F9wfP.js → use-mcp-prompts-CWXp4Vto.js} +1 -1
- package/dist/client/assets/{use-mcp-resources-CQM51ISF.js → use-mcp-resources-CdviUNt8.js} +1 -1
- package/dist/client/assets/{use-mcp-tools-CGAtxBQr.js → use-mcp-tools-DhfUlmve.js} +1 -1
- package/dist/client/assets/{use-members-C5Abj3Nl.js → use-members-D-zu9EQ4.js} +1 -1
- package/dist/client/assets/{use-mobile-CMPROSym.js → use-mobile-DfdfcC2T.js} +1 -1
- package/dist/client/assets/{use-project-D1HuJpb-.js → use-project-FOWgS7Lo.js} +1 -1
- package/dist/client/assets/{use-view-mode-DtcqFKqx.js → use-view-mode-bhKhl_no.js} +1 -1
- package/dist/client/assets/{use-virtual-mcp-HJi07IrH.js → use-virtual-mcp-D_pRY4Y5.js} +1 -1
- package/dist/client/assets/useInfiniteQuery-VDF7Rw4W.js +1 -0
- package/dist/client/assets/{useMutation-C7wTU_P1.js → useMutation-BK2VTSKG.js} +1 -1
- package/dist/client/assets/useQuery-WdhzaCOu.js +1 -0
- package/dist/client/assets/useSuspenseInfiniteQuery-B49n2iIj.js +1 -0
- package/dist/client/assets/{user-CL49YHal.js → user-D7ZGT9n7.js} +1 -1
- package/dist/client/assets/{workflow-se3doO0e.js → workflow-BlmkM3G6.js} +1 -1
- package/dist/client/index.html +2 -2
- package/dist/server/node_modules/pg/README.md +95 -0
- package/dist/server/node_modules/pg/esm/index.mjs +20 -0
- package/dist/server/node_modules/pg/lib/client.js +743 -0
- package/dist/server/node_modules/pg/lib/connection-parameters.js +171 -0
- package/dist/server/node_modules/pg/lib/connection.js +221 -0
- package/dist/server/node_modules/pg/lib/crypto/cert-signatures.js +122 -0
- package/dist/server/node_modules/pg/lib/crypto/sasl.js +212 -0
- package/dist/server/node_modules/pg/lib/crypto/utils-legacy.js +43 -0
- package/dist/server/node_modules/pg/lib/crypto/utils-webcrypto.js +89 -0
- package/dist/server/node_modules/pg/lib/crypto/utils.js +9 -0
- package/dist/server/node_modules/pg/lib/defaults.js +91 -0
- package/dist/server/node_modules/pg/lib/index.js +73 -0
- package/dist/server/node_modules/pg/lib/native/client.js +323 -0
- package/dist/server/node_modules/pg/lib/native/index.js +2 -0
- package/dist/server/node_modules/pg/lib/native/query.js +165 -0
- package/dist/server/node_modules/pg/lib/query.js +252 -0
- package/dist/server/node_modules/pg/lib/result.js +109 -0
- package/dist/server/node_modules/pg/lib/stream.js +83 -0
- package/dist/server/node_modules/pg/lib/type-overrides.js +35 -0
- package/dist/server/node_modules/pg/lib/utils.js +217 -0
- package/dist/server/node_modules/pg/package.json +76 -0
- package/dist/server/node_modules/postgres-date/index.js +116 -0
- package/dist/server/node_modules/{postgres-interval → postgres-date}/package.json +8 -11
- package/dist/server/node_modules/postgres-date/readme.md +49 -0
- package/package.json +1 -1
- package/dist/client/assets/constants-BRaJPJag.js +0 -1
- package/dist/client/assets/plugins-BfhzI-KM.js +0 -1
- package/dist/client/assets/shell-layout-DwAcy6I2.js +0 -3
- package/dist/client/assets/tasks-D4G9J1eF.js +0 -1
- package/dist/client/assets/useInfiniteQuery-C05JDjpl.js +0 -1
- package/dist/client/assets/useQuery-wPyHm29j.js +0 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-9yayOuFY.js +0 -1
- package/dist/server/node_modules/async-exit-hook/CHANGELOG.md +0 -62
- package/dist/server/node_modules/async-exit-hook/index.js +0 -171
- package/dist/server/node_modules/async-exit-hook/license +0 -21
- package/dist/server/node_modules/async-exit-hook/package.json +0 -66
- package/dist/server/node_modules/async-exit-hook/readme.md +0 -118
- package/dist/server/node_modules/pg-cloudflare/README.md +0 -112
- package/dist/server/node_modules/pg-cloudflare/dist/empty.d.ts +0 -2
- package/dist/server/node_modules/pg-cloudflare/dist/empty.js +0 -6
- package/dist/server/node_modules/pg-cloudflare/dist/empty.js.map +0 -1
- package/dist/server/node_modules/pg-cloudflare/dist/index.d.ts +0 -31
- package/dist/server/node_modules/pg-cloudflare/dist/index.js +0 -152
- package/dist/server/node_modules/pg-cloudflare/dist/index.js.map +0 -1
- package/dist/server/node_modules/pg-cloudflare/esm/index.mjs +0 -3
- package/dist/server/node_modules/pg-cloudflare/package.json +0 -39
- package/dist/server/node_modules/pg-cloudflare/src/empty.ts +0 -3
- package/dist/server/node_modules/pg-cloudflare/src/index.ts +0 -166
- package/dist/server/node_modules/pg-cloudflare/src/types.d.ts +0 -25
- package/dist/server/node_modules/pg-connection-string/LICENSE +0 -21
- package/dist/server/node_modules/pg-connection-string/README.md +0 -105
- package/dist/server/node_modules/pg-connection-string/esm/index.mjs +0 -8
- package/dist/server/node_modules/pg-connection-string/index.d.ts +0 -36
- package/dist/server/node_modules/pg-connection-string/index.js +0 -231
- package/dist/server/node_modules/pg-connection-string/package.json +0 -52
- package/dist/server/node_modules/pg-types/.travis.yml +0 -7
- package/dist/server/node_modules/pg-types/Makefile +0 -14
- package/dist/server/node_modules/pg-types/README.md +0 -75
- package/dist/server/node_modules/pg-types/index.d.ts +0 -137
- package/dist/server/node_modules/pg-types/index.js +0 -47
- package/dist/server/node_modules/pg-types/index.test-d.ts +0 -21
- package/dist/server/node_modules/pg-types/lib/arrayParser.js +0 -11
- package/dist/server/node_modules/pg-types/lib/binaryParsers.js +0 -257
- package/dist/server/node_modules/pg-types/lib/builtins.js +0 -73
- package/dist/server/node_modules/pg-types/lib/textParsers.js +0 -215
- package/dist/server/node_modules/pg-types/package.json +0 -42
- package/dist/server/node_modules/pg-types/test/index.js +0 -24
- package/dist/server/node_modules/pg-types/test/types.js +0 -597
- package/dist/server/node_modules/postgres-interval/index.d.ts +0 -20
- package/dist/server/node_modules/postgres-interval/index.js +0 -125
- package/dist/server/node_modules/postgres-interval/readme.md +0 -48
- /package/dist/server/node_modules/{pg-cloudflare → pg}/LICENSE +0 -0
- /package/dist/server/node_modules/{postgres-interval → postgres-date}/license +0 -0
|
@@ -0,0 +1,743 @@
|
|
|
1
|
+
const EventEmitter = require('events').EventEmitter
|
|
2
|
+
const utils = require('./utils')
|
|
3
|
+
const nodeUtils = require('util')
|
|
4
|
+
const sasl = require('./crypto/sasl')
|
|
5
|
+
const TypeOverrides = require('./type-overrides')
|
|
6
|
+
|
|
7
|
+
const ConnectionParameters = require('./connection-parameters')
|
|
8
|
+
const Query = require('./query')
|
|
9
|
+
const defaults = require('./defaults')
|
|
10
|
+
const Connection = require('./connection')
|
|
11
|
+
const crypto = require('./crypto/utils')
|
|
12
|
+
|
|
13
|
+
const activeQueryDeprecationNotice = nodeUtils.deprecate(
|
|
14
|
+
() => {},
|
|
15
|
+
'Client.activeQuery is deprecated and will be removed in pg@9.0'
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
const queryQueueDeprecationNotice = nodeUtils.deprecate(
|
|
19
|
+
() => {},
|
|
20
|
+
'Client.queryQueue is deprecated and will be removed in pg@9.0.'
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
const pgPassDeprecationNotice = nodeUtils.deprecate(
|
|
24
|
+
() => {},
|
|
25
|
+
'pgpass support is deprecated and will be removed in pg@9.0. ' +
|
|
26
|
+
'You can provide an async function as the password property to the Client/Pool constructor that returns a password instead. Within this function you can call the pgpass module in your own code.'
|
|
27
|
+
)
|
|
28
|
+
|
|
29
|
+
const byoPromiseDeprecationNotice = nodeUtils.deprecate(
|
|
30
|
+
() => {},
|
|
31
|
+
'Passing a custom Promise implementation to the Client/Pool constructor is deprecated and will be removed in pg@9.0.'
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
const queryQueueLengthDeprecationNotice = nodeUtils.deprecate(
|
|
35
|
+
() => {},
|
|
36
|
+
'Calling client.query() when the client is already executing a query is deprecated and will be removed in pg@9.0. Use async/await or an external async flow control mechanism instead.'
|
|
37
|
+
)
|
|
38
|
+
|
|
39
|
+
class Client extends EventEmitter {
|
|
40
|
+
constructor(config) {
|
|
41
|
+
super()
|
|
42
|
+
|
|
43
|
+
this.connectionParameters = new ConnectionParameters(config)
|
|
44
|
+
this.user = this.connectionParameters.user
|
|
45
|
+
this.database = this.connectionParameters.database
|
|
46
|
+
this.port = this.connectionParameters.port
|
|
47
|
+
this.host = this.connectionParameters.host
|
|
48
|
+
|
|
49
|
+
// "hiding" the password so it doesn't show up in stack traces
|
|
50
|
+
// or if the client is console.logged
|
|
51
|
+
Object.defineProperty(this, 'password', {
|
|
52
|
+
configurable: true,
|
|
53
|
+
enumerable: false,
|
|
54
|
+
writable: true,
|
|
55
|
+
value: this.connectionParameters.password,
|
|
56
|
+
})
|
|
57
|
+
|
|
58
|
+
this.replication = this.connectionParameters.replication
|
|
59
|
+
|
|
60
|
+
const c = config || {}
|
|
61
|
+
|
|
62
|
+
if (c.Promise) {
|
|
63
|
+
byoPromiseDeprecationNotice()
|
|
64
|
+
}
|
|
65
|
+
this._Promise = c.Promise || global.Promise
|
|
66
|
+
this._types = new TypeOverrides(c.types)
|
|
67
|
+
this._ending = false
|
|
68
|
+
this._ended = false
|
|
69
|
+
this._connecting = false
|
|
70
|
+
this._connected = false
|
|
71
|
+
this._connectionError = false
|
|
72
|
+
this._queryable = true
|
|
73
|
+
this._activeQuery = null
|
|
74
|
+
|
|
75
|
+
this.enableChannelBinding = Boolean(c.enableChannelBinding) // set true to use SCRAM-SHA-256-PLUS when offered
|
|
76
|
+
this.connection =
|
|
77
|
+
c.connection ||
|
|
78
|
+
new Connection({
|
|
79
|
+
stream: c.stream,
|
|
80
|
+
ssl: this.connectionParameters.ssl,
|
|
81
|
+
keepAlive: c.keepAlive || false,
|
|
82
|
+
keepAliveInitialDelayMillis: c.keepAliveInitialDelayMillis || 0,
|
|
83
|
+
encoding: this.connectionParameters.client_encoding || 'utf8',
|
|
84
|
+
})
|
|
85
|
+
this._queryQueue = []
|
|
86
|
+
this.binary = c.binary || defaults.binary
|
|
87
|
+
this.processID = null
|
|
88
|
+
this.secretKey = null
|
|
89
|
+
this.ssl = this.connectionParameters.ssl || false
|
|
90
|
+
// As with Password, make SSL->Key (the private key) non-enumerable.
|
|
91
|
+
// It won't show up in stack traces
|
|
92
|
+
// or if the client is console.logged
|
|
93
|
+
if (this.ssl && this.ssl.key) {
|
|
94
|
+
Object.defineProperty(this.ssl, 'key', {
|
|
95
|
+
enumerable: false,
|
|
96
|
+
})
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
this._connectionTimeoutMillis = c.connectionTimeoutMillis || 0
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
get activeQuery() {
|
|
103
|
+
activeQueryDeprecationNotice()
|
|
104
|
+
return this._activeQuery
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
set activeQuery(val) {
|
|
108
|
+
activeQueryDeprecationNotice()
|
|
109
|
+
this._activeQuery = val
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
_getActiveQuery() {
|
|
113
|
+
return this._activeQuery
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
_errorAllQueries(err) {
|
|
117
|
+
const enqueueError = (query) => {
|
|
118
|
+
process.nextTick(() => {
|
|
119
|
+
query.handleError(err, this.connection)
|
|
120
|
+
})
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
const activeQuery = this._getActiveQuery()
|
|
124
|
+
if (activeQuery) {
|
|
125
|
+
enqueueError(activeQuery)
|
|
126
|
+
this._activeQuery = null
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
this._queryQueue.forEach(enqueueError)
|
|
130
|
+
this._queryQueue.length = 0
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
_connect(callback) {
|
|
134
|
+
const self = this
|
|
135
|
+
const con = this.connection
|
|
136
|
+
this._connectionCallback = callback
|
|
137
|
+
|
|
138
|
+
if (this._connecting || this._connected) {
|
|
139
|
+
const err = new Error('Client has already been connected. You cannot reuse a client.')
|
|
140
|
+
process.nextTick(() => {
|
|
141
|
+
callback(err)
|
|
142
|
+
})
|
|
143
|
+
return
|
|
144
|
+
}
|
|
145
|
+
this._connecting = true
|
|
146
|
+
|
|
147
|
+
if (this._connectionTimeoutMillis > 0) {
|
|
148
|
+
this.connectionTimeoutHandle = setTimeout(() => {
|
|
149
|
+
con._ending = true
|
|
150
|
+
con.stream.destroy(new Error('timeout expired'))
|
|
151
|
+
}, this._connectionTimeoutMillis)
|
|
152
|
+
|
|
153
|
+
if (this.connectionTimeoutHandle.unref) {
|
|
154
|
+
this.connectionTimeoutHandle.unref()
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
if (this.host && this.host.indexOf('/') === 0) {
|
|
159
|
+
con.connect(this.host + '/.s.PGSQL.' + this.port)
|
|
160
|
+
} else {
|
|
161
|
+
con.connect(this.port, this.host)
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
// once connection is established send startup message
|
|
165
|
+
con.on('connect', function () {
|
|
166
|
+
if (self.ssl) {
|
|
167
|
+
con.requestSsl()
|
|
168
|
+
} else {
|
|
169
|
+
con.startup(self.getStartupConf())
|
|
170
|
+
}
|
|
171
|
+
})
|
|
172
|
+
|
|
173
|
+
con.on('sslconnect', function () {
|
|
174
|
+
con.startup(self.getStartupConf())
|
|
175
|
+
})
|
|
176
|
+
|
|
177
|
+
this._attachListeners(con)
|
|
178
|
+
|
|
179
|
+
con.once('end', () => {
|
|
180
|
+
const error = this._ending ? new Error('Connection terminated') : new Error('Connection terminated unexpectedly')
|
|
181
|
+
|
|
182
|
+
clearTimeout(this.connectionTimeoutHandle)
|
|
183
|
+
this._errorAllQueries(error)
|
|
184
|
+
this._ended = true
|
|
185
|
+
|
|
186
|
+
if (!this._ending) {
|
|
187
|
+
// if the connection is ended without us calling .end()
|
|
188
|
+
// on this client then we have an unexpected disconnection
|
|
189
|
+
// treat this as an error unless we've already emitted an error
|
|
190
|
+
// during connection.
|
|
191
|
+
if (this._connecting && !this._connectionError) {
|
|
192
|
+
if (this._connectionCallback) {
|
|
193
|
+
this._connectionCallback(error)
|
|
194
|
+
} else {
|
|
195
|
+
this._handleErrorEvent(error)
|
|
196
|
+
}
|
|
197
|
+
} else if (!this._connectionError) {
|
|
198
|
+
this._handleErrorEvent(error)
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
process.nextTick(() => {
|
|
203
|
+
this.emit('end')
|
|
204
|
+
})
|
|
205
|
+
})
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
connect(callback) {
|
|
209
|
+
if (callback) {
|
|
210
|
+
this._connect(callback)
|
|
211
|
+
return
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
return new this._Promise((resolve, reject) => {
|
|
215
|
+
this._connect((error) => {
|
|
216
|
+
if (error) {
|
|
217
|
+
reject(error)
|
|
218
|
+
} else {
|
|
219
|
+
resolve(this)
|
|
220
|
+
}
|
|
221
|
+
})
|
|
222
|
+
})
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
_attachListeners(con) {
|
|
226
|
+
// password request handling
|
|
227
|
+
con.on('authenticationCleartextPassword', this._handleAuthCleartextPassword.bind(this))
|
|
228
|
+
// password request handling
|
|
229
|
+
con.on('authenticationMD5Password', this._handleAuthMD5Password.bind(this))
|
|
230
|
+
// password request handling (SASL)
|
|
231
|
+
con.on('authenticationSASL', this._handleAuthSASL.bind(this))
|
|
232
|
+
con.on('authenticationSASLContinue', this._handleAuthSASLContinue.bind(this))
|
|
233
|
+
con.on('authenticationSASLFinal', this._handleAuthSASLFinal.bind(this))
|
|
234
|
+
con.on('backendKeyData', this._handleBackendKeyData.bind(this))
|
|
235
|
+
con.on('error', this._handleErrorEvent.bind(this))
|
|
236
|
+
con.on('errorMessage', this._handleErrorMessage.bind(this))
|
|
237
|
+
con.on('readyForQuery', this._handleReadyForQuery.bind(this))
|
|
238
|
+
con.on('notice', this._handleNotice.bind(this))
|
|
239
|
+
con.on('rowDescription', this._handleRowDescription.bind(this))
|
|
240
|
+
con.on('dataRow', this._handleDataRow.bind(this))
|
|
241
|
+
con.on('portalSuspended', this._handlePortalSuspended.bind(this))
|
|
242
|
+
con.on('emptyQuery', this._handleEmptyQuery.bind(this))
|
|
243
|
+
con.on('commandComplete', this._handleCommandComplete.bind(this))
|
|
244
|
+
con.on('parseComplete', this._handleParseComplete.bind(this))
|
|
245
|
+
con.on('copyInResponse', this._handleCopyInResponse.bind(this))
|
|
246
|
+
con.on('copyData', this._handleCopyData.bind(this))
|
|
247
|
+
con.on('notification', this._handleNotification.bind(this))
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
_getPassword(cb) {
|
|
251
|
+
const con = this.connection
|
|
252
|
+
if (typeof this.password === 'function') {
|
|
253
|
+
this._Promise
|
|
254
|
+
.resolve()
|
|
255
|
+
.then(() => this.password(this.connectionParameters))
|
|
256
|
+
.then((pass) => {
|
|
257
|
+
if (pass !== undefined) {
|
|
258
|
+
if (typeof pass !== 'string') {
|
|
259
|
+
con.emit('error', new TypeError('Password must be a string'))
|
|
260
|
+
return
|
|
261
|
+
}
|
|
262
|
+
this.connectionParameters.password = this.password = pass
|
|
263
|
+
} else {
|
|
264
|
+
this.connectionParameters.password = this.password = null
|
|
265
|
+
}
|
|
266
|
+
cb()
|
|
267
|
+
})
|
|
268
|
+
.catch((err) => {
|
|
269
|
+
con.emit('error', err)
|
|
270
|
+
})
|
|
271
|
+
} else if (this.password !== null) {
|
|
272
|
+
cb()
|
|
273
|
+
} else {
|
|
274
|
+
try {
|
|
275
|
+
const pgPass = require('pgpass')
|
|
276
|
+
pgPass(this.connectionParameters, (pass) => {
|
|
277
|
+
if (undefined !== pass) {
|
|
278
|
+
pgPassDeprecationNotice()
|
|
279
|
+
this.connectionParameters.password = this.password = pass
|
|
280
|
+
}
|
|
281
|
+
cb()
|
|
282
|
+
})
|
|
283
|
+
} catch (e) {
|
|
284
|
+
this.emit('error', e)
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
_handleAuthCleartextPassword(msg) {
|
|
290
|
+
this._getPassword(() => {
|
|
291
|
+
this.connection.password(this.password)
|
|
292
|
+
})
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
_handleAuthMD5Password(msg) {
|
|
296
|
+
this._getPassword(async () => {
|
|
297
|
+
try {
|
|
298
|
+
const hashedPassword = await crypto.postgresMd5PasswordHash(this.user, this.password, msg.salt)
|
|
299
|
+
this.connection.password(hashedPassword)
|
|
300
|
+
} catch (e) {
|
|
301
|
+
this.emit('error', e)
|
|
302
|
+
}
|
|
303
|
+
})
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
_handleAuthSASL(msg) {
|
|
307
|
+
this._getPassword(() => {
|
|
308
|
+
try {
|
|
309
|
+
this.saslSession = sasl.startSession(msg.mechanisms, this.enableChannelBinding && this.connection.stream)
|
|
310
|
+
this.connection.sendSASLInitialResponseMessage(this.saslSession.mechanism, this.saslSession.response)
|
|
311
|
+
} catch (err) {
|
|
312
|
+
this.connection.emit('error', err)
|
|
313
|
+
}
|
|
314
|
+
})
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
async _handleAuthSASLContinue(msg) {
|
|
318
|
+
try {
|
|
319
|
+
await sasl.continueSession(
|
|
320
|
+
this.saslSession,
|
|
321
|
+
this.password,
|
|
322
|
+
msg.data,
|
|
323
|
+
this.enableChannelBinding && this.connection.stream
|
|
324
|
+
)
|
|
325
|
+
this.connection.sendSCRAMClientFinalMessage(this.saslSession.response)
|
|
326
|
+
} catch (err) {
|
|
327
|
+
this.connection.emit('error', err)
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
_handleAuthSASLFinal(msg) {
|
|
332
|
+
try {
|
|
333
|
+
sasl.finalizeSession(this.saslSession, msg.data)
|
|
334
|
+
this.saslSession = null
|
|
335
|
+
} catch (err) {
|
|
336
|
+
this.connection.emit('error', err)
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
_handleBackendKeyData(msg) {
|
|
341
|
+
this.processID = msg.processID
|
|
342
|
+
this.secretKey = msg.secretKey
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
_handleReadyForQuery(msg) {
|
|
346
|
+
if (this._connecting) {
|
|
347
|
+
this._connecting = false
|
|
348
|
+
this._connected = true
|
|
349
|
+
clearTimeout(this.connectionTimeoutHandle)
|
|
350
|
+
|
|
351
|
+
// process possible callback argument to Client#connect
|
|
352
|
+
if (this._connectionCallback) {
|
|
353
|
+
this._connectionCallback(null, this)
|
|
354
|
+
// remove callback for proper error handling
|
|
355
|
+
// after the connect event
|
|
356
|
+
this._connectionCallback = null
|
|
357
|
+
}
|
|
358
|
+
this.emit('connect')
|
|
359
|
+
}
|
|
360
|
+
const activeQuery = this._getActiveQuery()
|
|
361
|
+
this._activeQuery = null
|
|
362
|
+
this.readyForQuery = true
|
|
363
|
+
if (activeQuery) {
|
|
364
|
+
activeQuery.handleReadyForQuery(this.connection)
|
|
365
|
+
}
|
|
366
|
+
this._pulseQueryQueue()
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
// if we receive an error event or error message
|
|
370
|
+
// during the connection process we handle it here
|
|
371
|
+
_handleErrorWhileConnecting(err) {
|
|
372
|
+
if (this._connectionError) {
|
|
373
|
+
// TODO(bmc): this is swallowing errors - we shouldn't do this
|
|
374
|
+
return
|
|
375
|
+
}
|
|
376
|
+
this._connectionError = true
|
|
377
|
+
clearTimeout(this.connectionTimeoutHandle)
|
|
378
|
+
if (this._connectionCallback) {
|
|
379
|
+
return this._connectionCallback(err)
|
|
380
|
+
}
|
|
381
|
+
this.emit('error', err)
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
// if we're connected and we receive an error event from the connection
|
|
385
|
+
// this means the socket is dead - do a hard abort of all queries and emit
|
|
386
|
+
// the socket error on the client as well
|
|
387
|
+
_handleErrorEvent(err) {
|
|
388
|
+
if (this._connecting) {
|
|
389
|
+
return this._handleErrorWhileConnecting(err)
|
|
390
|
+
}
|
|
391
|
+
this._queryable = false
|
|
392
|
+
this._errorAllQueries(err)
|
|
393
|
+
this.emit('error', err)
|
|
394
|
+
}
|
|
395
|
+
|
|
396
|
+
// handle error messages from the postgres backend
|
|
397
|
+
_handleErrorMessage(msg) {
|
|
398
|
+
if (this._connecting) {
|
|
399
|
+
return this._handleErrorWhileConnecting(msg)
|
|
400
|
+
}
|
|
401
|
+
const activeQuery = this._getActiveQuery()
|
|
402
|
+
|
|
403
|
+
if (!activeQuery) {
|
|
404
|
+
this._handleErrorEvent(msg)
|
|
405
|
+
return
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
this._activeQuery = null
|
|
409
|
+
activeQuery.handleError(msg, this.connection)
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
_handleRowDescription(msg) {
|
|
413
|
+
const activeQuery = this._getActiveQuery()
|
|
414
|
+
if (activeQuery == null) {
|
|
415
|
+
const error = new Error('Received unexpected rowDescription message from backend.')
|
|
416
|
+
this._handleErrorEvent(error)
|
|
417
|
+
return
|
|
418
|
+
}
|
|
419
|
+
// delegate rowDescription to active query
|
|
420
|
+
activeQuery.handleRowDescription(msg)
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
_handleDataRow(msg) {
|
|
424
|
+
const activeQuery = this._getActiveQuery()
|
|
425
|
+
if (activeQuery == null) {
|
|
426
|
+
const error = new Error('Received unexpected dataRow message from backend.')
|
|
427
|
+
this._handleErrorEvent(error)
|
|
428
|
+
return
|
|
429
|
+
}
|
|
430
|
+
// delegate dataRow to active query
|
|
431
|
+
activeQuery.handleDataRow(msg)
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
_handlePortalSuspended(msg) {
|
|
435
|
+
const activeQuery = this._getActiveQuery()
|
|
436
|
+
if (activeQuery == null) {
|
|
437
|
+
const error = new Error('Received unexpected portalSuspended message from backend.')
|
|
438
|
+
this._handleErrorEvent(error)
|
|
439
|
+
return
|
|
440
|
+
}
|
|
441
|
+
// delegate portalSuspended to active query
|
|
442
|
+
activeQuery.handlePortalSuspended(this.connection)
|
|
443
|
+
}
|
|
444
|
+
|
|
445
|
+
_handleEmptyQuery(msg) {
|
|
446
|
+
const activeQuery = this._getActiveQuery()
|
|
447
|
+
if (activeQuery == null) {
|
|
448
|
+
const error = new Error('Received unexpected emptyQuery message from backend.')
|
|
449
|
+
this._handleErrorEvent(error)
|
|
450
|
+
return
|
|
451
|
+
}
|
|
452
|
+
// delegate emptyQuery to active query
|
|
453
|
+
activeQuery.handleEmptyQuery(this.connection)
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
_handleCommandComplete(msg) {
|
|
457
|
+
const activeQuery = this._getActiveQuery()
|
|
458
|
+
if (activeQuery == null) {
|
|
459
|
+
const error = new Error('Received unexpected commandComplete message from backend.')
|
|
460
|
+
this._handleErrorEvent(error)
|
|
461
|
+
return
|
|
462
|
+
}
|
|
463
|
+
// delegate commandComplete to active query
|
|
464
|
+
activeQuery.handleCommandComplete(msg, this.connection)
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
_handleParseComplete() {
|
|
468
|
+
const activeQuery = this._getActiveQuery()
|
|
469
|
+
if (activeQuery == null) {
|
|
470
|
+
const error = new Error('Received unexpected parseComplete message from backend.')
|
|
471
|
+
this._handleErrorEvent(error)
|
|
472
|
+
return
|
|
473
|
+
}
|
|
474
|
+
// if a prepared statement has a name and properly parses
|
|
475
|
+
// we track that its already been executed so we don't parse
|
|
476
|
+
// it again on the same client
|
|
477
|
+
if (activeQuery.name) {
|
|
478
|
+
this.connection.parsedStatements[activeQuery.name] = activeQuery.text
|
|
479
|
+
}
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
_handleCopyInResponse(msg) {
|
|
483
|
+
const activeQuery = this._getActiveQuery()
|
|
484
|
+
if (activeQuery == null) {
|
|
485
|
+
const error = new Error('Received unexpected copyInResponse message from backend.')
|
|
486
|
+
this._handleErrorEvent(error)
|
|
487
|
+
return
|
|
488
|
+
}
|
|
489
|
+
activeQuery.handleCopyInResponse(this.connection)
|
|
490
|
+
}
|
|
491
|
+
|
|
492
|
+
_handleCopyData(msg) {
|
|
493
|
+
const activeQuery = this._getActiveQuery()
|
|
494
|
+
if (activeQuery == null) {
|
|
495
|
+
const error = new Error('Received unexpected copyData message from backend.')
|
|
496
|
+
this._handleErrorEvent(error)
|
|
497
|
+
return
|
|
498
|
+
}
|
|
499
|
+
activeQuery.handleCopyData(msg, this.connection)
|
|
500
|
+
}
|
|
501
|
+
|
|
502
|
+
_handleNotification(msg) {
|
|
503
|
+
this.emit('notification', msg)
|
|
504
|
+
}
|
|
505
|
+
|
|
506
|
+
_handleNotice(msg) {
|
|
507
|
+
this.emit('notice', msg)
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
getStartupConf() {
|
|
511
|
+
const params = this.connectionParameters
|
|
512
|
+
|
|
513
|
+
const data = {
|
|
514
|
+
user: params.user,
|
|
515
|
+
database: params.database,
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
const appName = params.application_name || params.fallback_application_name
|
|
519
|
+
if (appName) {
|
|
520
|
+
data.application_name = appName
|
|
521
|
+
}
|
|
522
|
+
if (params.replication) {
|
|
523
|
+
data.replication = '' + params.replication
|
|
524
|
+
}
|
|
525
|
+
if (params.statement_timeout) {
|
|
526
|
+
data.statement_timeout = String(parseInt(params.statement_timeout, 10))
|
|
527
|
+
}
|
|
528
|
+
if (params.lock_timeout) {
|
|
529
|
+
data.lock_timeout = String(parseInt(params.lock_timeout, 10))
|
|
530
|
+
}
|
|
531
|
+
if (params.idle_in_transaction_session_timeout) {
|
|
532
|
+
data.idle_in_transaction_session_timeout = String(parseInt(params.idle_in_transaction_session_timeout, 10))
|
|
533
|
+
}
|
|
534
|
+
if (params.options) {
|
|
535
|
+
data.options = params.options
|
|
536
|
+
}
|
|
537
|
+
|
|
538
|
+
return data
|
|
539
|
+
}
|
|
540
|
+
|
|
541
|
+
cancel(client, query) {
|
|
542
|
+
if (client.activeQuery === query) {
|
|
543
|
+
const con = this.connection
|
|
544
|
+
|
|
545
|
+
if (this.host && this.host.indexOf('/') === 0) {
|
|
546
|
+
con.connect(this.host + '/.s.PGSQL.' + this.port)
|
|
547
|
+
} else {
|
|
548
|
+
con.connect(this.port, this.host)
|
|
549
|
+
}
|
|
550
|
+
|
|
551
|
+
// once connection is established send cancel message
|
|
552
|
+
con.on('connect', function () {
|
|
553
|
+
con.cancel(client.processID, client.secretKey)
|
|
554
|
+
})
|
|
555
|
+
} else if (client._queryQueue.indexOf(query) !== -1) {
|
|
556
|
+
client._queryQueue.splice(client._queryQueue.indexOf(query), 1)
|
|
557
|
+
}
|
|
558
|
+
}
|
|
559
|
+
|
|
560
|
+
setTypeParser(oid, format, parseFn) {
|
|
561
|
+
return this._types.setTypeParser(oid, format, parseFn)
|
|
562
|
+
}
|
|
563
|
+
|
|
564
|
+
getTypeParser(oid, format) {
|
|
565
|
+
return this._types.getTypeParser(oid, format)
|
|
566
|
+
}
|
|
567
|
+
|
|
568
|
+
// escapeIdentifier and escapeLiteral moved to utility functions & exported
|
|
569
|
+
// on PG
|
|
570
|
+
// re-exported here for backwards compatibility
|
|
571
|
+
escapeIdentifier(str) {
|
|
572
|
+
return utils.escapeIdentifier(str)
|
|
573
|
+
}
|
|
574
|
+
|
|
575
|
+
escapeLiteral(str) {
|
|
576
|
+
return utils.escapeLiteral(str)
|
|
577
|
+
}
|
|
578
|
+
|
|
579
|
+
_pulseQueryQueue() {
|
|
580
|
+
if (this.readyForQuery === true) {
|
|
581
|
+
this._activeQuery = this._queryQueue.shift()
|
|
582
|
+
const activeQuery = this._getActiveQuery()
|
|
583
|
+
if (activeQuery) {
|
|
584
|
+
this.readyForQuery = false
|
|
585
|
+
this.hasExecuted = true
|
|
586
|
+
|
|
587
|
+
const queryError = activeQuery.submit(this.connection)
|
|
588
|
+
if (queryError) {
|
|
589
|
+
process.nextTick(() => {
|
|
590
|
+
activeQuery.handleError(queryError, this.connection)
|
|
591
|
+
this.readyForQuery = true
|
|
592
|
+
this._pulseQueryQueue()
|
|
593
|
+
})
|
|
594
|
+
}
|
|
595
|
+
} else if (this.hasExecuted) {
|
|
596
|
+
this._activeQuery = null
|
|
597
|
+
this.emit('drain')
|
|
598
|
+
}
|
|
599
|
+
}
|
|
600
|
+
}
|
|
601
|
+
|
|
602
|
+
query(config, values, callback) {
|
|
603
|
+
// can take in strings, config object or query object
|
|
604
|
+
let query
|
|
605
|
+
let result
|
|
606
|
+
let readTimeout
|
|
607
|
+
let readTimeoutTimer
|
|
608
|
+
let queryCallback
|
|
609
|
+
|
|
610
|
+
if (config === null || config === undefined) {
|
|
611
|
+
throw new TypeError('Client was passed a null or undefined query')
|
|
612
|
+
} else if (typeof config.submit === 'function') {
|
|
613
|
+
readTimeout = config.query_timeout || this.connectionParameters.query_timeout
|
|
614
|
+
result = query = config
|
|
615
|
+
if (!query.callback) {
|
|
616
|
+
if (typeof values === 'function') {
|
|
617
|
+
query.callback = values
|
|
618
|
+
} else if (callback) {
|
|
619
|
+
query.callback = callback
|
|
620
|
+
}
|
|
621
|
+
}
|
|
622
|
+
} else {
|
|
623
|
+
readTimeout = config.query_timeout || this.connectionParameters.query_timeout
|
|
624
|
+
query = new Query(config, values, callback)
|
|
625
|
+
if (!query.callback) {
|
|
626
|
+
result = new this._Promise((resolve, reject) => {
|
|
627
|
+
query.callback = (err, res) => (err ? reject(err) : resolve(res))
|
|
628
|
+
}).catch((err) => {
|
|
629
|
+
// replace the stack trace that leads to `TCP.onStreamRead` with one that leads back to the
|
|
630
|
+
// application that created the query
|
|
631
|
+
Error.captureStackTrace(err)
|
|
632
|
+
throw err
|
|
633
|
+
})
|
|
634
|
+
}
|
|
635
|
+
}
|
|
636
|
+
|
|
637
|
+
if (readTimeout) {
|
|
638
|
+
queryCallback = query.callback || (() => {})
|
|
639
|
+
|
|
640
|
+
readTimeoutTimer = setTimeout(() => {
|
|
641
|
+
const error = new Error('Query read timeout')
|
|
642
|
+
|
|
643
|
+
process.nextTick(() => {
|
|
644
|
+
query.handleError(error, this.connection)
|
|
645
|
+
})
|
|
646
|
+
|
|
647
|
+
queryCallback(error)
|
|
648
|
+
|
|
649
|
+
// we already returned an error,
|
|
650
|
+
// just do nothing if query completes
|
|
651
|
+
query.callback = () => {}
|
|
652
|
+
|
|
653
|
+
// Remove from queue
|
|
654
|
+
const index = this._queryQueue.indexOf(query)
|
|
655
|
+
if (index > -1) {
|
|
656
|
+
this._queryQueue.splice(index, 1)
|
|
657
|
+
}
|
|
658
|
+
|
|
659
|
+
this._pulseQueryQueue()
|
|
660
|
+
}, readTimeout)
|
|
661
|
+
|
|
662
|
+
query.callback = (err, res) => {
|
|
663
|
+
clearTimeout(readTimeoutTimer)
|
|
664
|
+
queryCallback(err, res)
|
|
665
|
+
}
|
|
666
|
+
}
|
|
667
|
+
|
|
668
|
+
if (this.binary && !query.binary) {
|
|
669
|
+
query.binary = true
|
|
670
|
+
}
|
|
671
|
+
|
|
672
|
+
if (query._result && !query._result._types) {
|
|
673
|
+
query._result._types = this._types
|
|
674
|
+
}
|
|
675
|
+
|
|
676
|
+
if (!this._queryable) {
|
|
677
|
+
process.nextTick(() => {
|
|
678
|
+
query.handleError(new Error('Client has encountered a connection error and is not queryable'), this.connection)
|
|
679
|
+
})
|
|
680
|
+
return result
|
|
681
|
+
}
|
|
682
|
+
|
|
683
|
+
if (this._ending) {
|
|
684
|
+
process.nextTick(() => {
|
|
685
|
+
query.handleError(new Error('Client was closed and is not queryable'), this.connection)
|
|
686
|
+
})
|
|
687
|
+
return result
|
|
688
|
+
}
|
|
689
|
+
|
|
690
|
+
if (this._queryQueue.length > 0) {
|
|
691
|
+
queryQueueLengthDeprecationNotice()
|
|
692
|
+
}
|
|
693
|
+
this._queryQueue.push(query)
|
|
694
|
+
this._pulseQueryQueue()
|
|
695
|
+
return result
|
|
696
|
+
}
|
|
697
|
+
|
|
698
|
+
ref() {
|
|
699
|
+
this.connection.ref()
|
|
700
|
+
}
|
|
701
|
+
|
|
702
|
+
unref() {
|
|
703
|
+
this.connection.unref()
|
|
704
|
+
}
|
|
705
|
+
|
|
706
|
+
end(cb) {
|
|
707
|
+
this._ending = true
|
|
708
|
+
|
|
709
|
+
// if we have never connected, then end is a noop, callback immediately
|
|
710
|
+
if (!this.connection._connecting || this._ended) {
|
|
711
|
+
if (cb) {
|
|
712
|
+
cb()
|
|
713
|
+
} else {
|
|
714
|
+
return this._Promise.resolve()
|
|
715
|
+
}
|
|
716
|
+
}
|
|
717
|
+
|
|
718
|
+
if (this._getActiveQuery() || !this._queryable) {
|
|
719
|
+
// if we have an active query we need to force a disconnect
|
|
720
|
+
// on the socket - otherwise a hung query could block end forever
|
|
721
|
+
this.connection.stream.destroy()
|
|
722
|
+
} else {
|
|
723
|
+
this.connection.end()
|
|
724
|
+
}
|
|
725
|
+
|
|
726
|
+
if (cb) {
|
|
727
|
+
this.connection.once('end', cb)
|
|
728
|
+
} else {
|
|
729
|
+
return new this._Promise((resolve) => {
|
|
730
|
+
this.connection.once('end', resolve)
|
|
731
|
+
})
|
|
732
|
+
}
|
|
733
|
+
}
|
|
734
|
+
get queryQueue() {
|
|
735
|
+
queryQueueDeprecationNotice()
|
|
736
|
+
return this._queryQueue
|
|
737
|
+
}
|
|
738
|
+
}
|
|
739
|
+
|
|
740
|
+
// expose a Query constructor
|
|
741
|
+
Client.Query = Query
|
|
742
|
+
|
|
743
|
+
module.exports = Client
|