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.
Files changed (340) hide show
  1. package/dist/client/assets/{AlertCircle-DOAxiEBN.js → AlertCircle-12chRuly.js} +1 -1
  2. package/dist/client/assets/{AlignLeft-CRMPlioa.js → AlignLeft-_LT9deOt.js} +1 -1
  3. package/dist/client/assets/{ArrowDown-xJyK-tRR.js → ArrowDown-7rbX3zqZ.js} +1 -1
  4. package/dist/client/assets/{ArrowLeft-B-tpcvF0.js → ArrowLeft-erI8s3G2.js} +1 -1
  5. package/dist/client/assets/{ArrowUp-BO7WH9Uq.js → ArrowUp-DoIG5eQh.js} +1 -1
  6. package/dist/client/assets/{Building02-D30T2TCD.js → Building02-Dr7IyBdv.js} +1 -1
  7. package/dist/client/assets/{Check-BTP9VTUM.js → Check-DW8AVFkq.js} +1 -1
  8. package/dist/client/assets/{CheckCircle-DoZ7ERyW.js → CheckCircle-hBpanOsI.js} +1 -1
  9. package/dist/client/assets/{CheckSquare-Dbh9CJyx.js → CheckSquare-Cr3IzSXp.js} +1 -1
  10. package/dist/client/assets/{CheckVerified02-CyloHbYs.js → CheckVerified02-r17ymUCs.js} +1 -1
  11. package/dist/client/assets/{ChevronDown-CLapIRmf.js → ChevronDown-BIRGQoZ5.js} +1 -1
  12. package/dist/client/assets/{ChevronLeft-CMUbV0KP.js → ChevronLeft-D-e7F7Gj.js} +1 -1
  13. package/dist/client/assets/{ChevronRight-DWZgTrde.js → ChevronRight-DsjLlugM.js} +1 -1
  14. package/dist/client/assets/{ChevronUp-DGOtRvEF.js → ChevronUp-Bi3NMXzv.js} +1 -1
  15. package/dist/client/assets/{Clock-BYjyd9hX.js → Clock-D4xJnA3P.js} +1 -1
  16. package/dist/client/assets/{Code01-BkNgeom6.js → Code01-YGq5QwlZ.js} +1 -1
  17. package/dist/client/assets/{Container-D7IaxBn4.js → Container-DHyMOW_p.js} +1 -1
  18. package/dist/client/assets/{Copy01-BJ5f3Ft8.js → Copy01-DkcjIGiS.js} +1 -1
  19. package/dist/client/assets/{Dataflow03-DE7FXw07.js → Dataflow03-CD3eo8oO.js} +1 -1
  20. package/dist/client/assets/{DotsHorizontal-BFhhKBhk.js → DotsHorizontal-CjYGc80C.js} +1 -1
  21. package/dist/client/assets/{DotsVertical-CmyZ1eER.js → DotsVertical-2nyye7GD.js} +1 -1
  22. package/dist/client/assets/{Download01-C0zy7iAO.js → Download01-BvtNZalG.js} +1 -1
  23. package/dist/client/assets/{Edit01-BsJ32les.js → Edit01-CoeKfJ-u.js} +1 -1
  24. package/dist/client/assets/{Edit05-BD2d2k-5.js → Edit05-CbbEzOoe.js} +1 -1
  25. package/dist/client/assets/{Eye-B3PAdhmZ.js → Eye-hBqNQHpc.js} +1 -1
  26. package/dist/client/assets/{EyeOff-_G9JY6d-.js → EyeOff-CJoTkAtN.js} +1 -1
  27. package/dist/client/assets/{File02-CAND2NHE.js → File02-D19u2hUl.js} +1 -1
  28. package/dist/client/assets/{File06-Bvs2lp94.js → File06-Bp4ioOvR.js} +1 -1
  29. package/dist/client/assets/{FilterLines-D-lo1vJH.js → FilterLines-Dvk7BhWf.js} +1 -1
  30. package/dist/client/assets/{Globe01-jlGiKRJ-.js → Globe01-B8Ib7knn.js} +1 -1
  31. package/dist/client/assets/{Globe02-DpkPR1qQ.js → Globe02-wRhoc1N5.js} +1 -1
  32. package/dist/client/assets/{Grid01-Bootsry8.js → Grid01-C5e9ReQ4.js} +1 -1
  33. package/dist/client/assets/{Home02-Cn5GN0Zh.js → Home02-JZJR9jmQ.js} +1 -1
  34. package/dist/client/assets/{Image01-BGiNuXLR.js → Image01-DjoSkYp_.js} +1 -1
  35. package/dist/client/assets/{Inbox01-QN0h6e9y.js → Inbox01-ClVaT7W5.js} +1 -1
  36. package/dist/client/assets/{InfoCircle-BlKvj0NG.js → InfoCircle-DzyfpQes.js} +1 -1
  37. package/dist/client/assets/{Key01-p6odXPoE.js → Key01-qNySmY39.js} +1 -1
  38. package/dist/client/assets/{LayersTwo01-Dj6OMOTN.js → LayersTwo01-dfSlQT0y.js} +1 -1
  39. package/dist/client/assets/{LayoutLeft-Bl9wlb-l.js → LayoutLeft-B2KZfn2n.js} +1 -1
  40. package/dist/client/assets/{Link01-GDNtvq6w.js → Link01-Cz_ZRKoB.js} +1 -1
  41. package/dist/client/assets/{LinkExternal01-Cmp1Jq7T.js → LinkExternal01-CKvCiQnV.js} +1 -1
  42. package/dist/client/assets/{List-BFzJ8d3-.js → List-NLa0AhO4.js} +1 -1
  43. package/dist/client/assets/{Loading01-Bgt2pWQu.js → Loading01-Bb8FCosd.js} +1 -1
  44. package/dist/client/assets/{Lock01-CrtAKCVY.js → Lock01-CnZITIks.js} +1 -1
  45. package/dist/client/assets/{Play-C6mSLsW0.js → Play-Bw5lQw7j.js} +1 -1
  46. package/dist/client/assets/{Plus-Bah3bfIq.js → Plus-CajZ9VfC.js} +1 -1
  47. package/dist/client/assets/{RefreshCcw01-D6TQ-sWU.js → RefreshCcw01-B_NTitRE.js} +1 -1
  48. package/dist/client/assets/{Save01-DMdPXvfp.js → Save01-8oEsqMkJ.js} +1 -1
  49. package/dist/client/assets/{SearchMd-CbNARIB_.js → SearchMd-eZWeU0sP.js} +1 -1
  50. package/dist/client/assets/{Settings01-ncSo0UF1.js → Settings01-ClPVpLPy.js} +1 -1
  51. package/dist/client/assets/{Shield01-jjVa8gNb.js → Shield01-N4ace-oo.js} +1 -1
  52. package/dist/client/assets/{Terminal-BkHJq74m.js → Terminal-CGwuP-_5.js} +1 -1
  53. package/dist/client/assets/{Tool01-CCSFIqz9.js → Tool01-D1m8i7Ez.js} +1 -1
  54. package/dist/client/assets/{Trash01-DJLT0hlL.js → Trash01-B_4PTwjI.js} +1 -1
  55. package/dist/client/assets/{Upload01-CrylBwgE.js → Upload01-CLIOr3Tj.js} +1 -1
  56. package/dist/client/assets/{Users03-ClHTtWuU.js → Users03-Bv-hUQkl.js} +1 -1
  57. package/dist/client/assets/{X-Dr3IGE6q.js → X-LzehymHS.js} +1 -1
  58. package/dist/client/assets/{XClose-CM_PUH0D.js → XClose-CcNXqPQc.js} +1 -1
  59. package/dist/client/assets/{Zap-DNAzZ691.js → Zap-BFN1DqIC.js} +1 -1
  60. package/dist/client/assets/{agent-connections-preview-D9yVR2mI.js → agent-connections-preview-3pYXfstj.js} +1 -1
  61. package/dist/client/assets/{agent-detail-D9yhjqjE.js → agent-detail-DMK-u3yi.js} +1 -1
  62. package/dist/client/assets/{agents-UYgbyoc-.js → agents-Wfe5dNfh.js} +1 -1
  63. package/dist/client/assets/{ai-providers-logos-CKXeyPmY.js → ai-providers-logos-CCp39UCk.js} +1 -1
  64. package/dist/client/assets/{alert-dialog-CGRFjIvo.js → alert-dialog-B_ae3oRt.js} +1 -1
  65. package/dist/client/assets/{auth-catchall-DJtyBhDQ.js → auth-catchall-DAx9m28t.js} +1 -1
  66. package/dist/client/assets/{automation-detail-Da-KIL0v.js → automation-detail-DfFkGT_5.js} +1 -1
  67. package/dist/client/assets/{automations-BBeFyOp2.js → automations-A8NOzTSS.js} +1 -1
  68. package/dist/client/assets/{avatar-B6y4oqG6.js → avatar-B2yArl-q.js} +1 -1
  69. package/dist/client/assets/{badge-BWsagPlP.js → badge-DtRom7JO.js} +1 -1
  70. package/dist/client/assets/{binder-BfA1Jrrc.js → binder-D4cqx_Kx.js} +1 -1
  71. package/dist/client/assets/{breadcrumb-D8mb9kpq.js → breadcrumb-C2RG4nAQ.js} +1 -1
  72. package/dist/client/assets/{card-C0MItTW_.js → card-B8qDZGCZ.js} +1 -1
  73. package/dist/client/assets/{checkbox-DUU3Nuea.js → checkbox-B1rexahu.js} +1 -1
  74. package/dist/client/assets/{collapsible-CtLdTa6t.js → collapsible-BtjeaBAE.js} +1 -1
  75. package/dist/client/assets/{collection-detail-DPIki4up.js → collection-detail-BaBGI9i2.js} +1 -1
  76. package/dist/client/assets/{collection-display-button-DdFInvSR.js → collection-display-button-CpVZ4wHm.js} +1 -1
  77. package/dist/client/assets/{collection-search-CGfzh4mC.js → collection-search-BYV7N3mr.js} +1 -1
  78. package/dist/client/assets/{collection-table-wrapper-DLe2aR6i.js → collection-table-wrapper-CHFJQd21.js} +1 -1
  79. package/dist/client/assets/{collection-tabs-DAHXpc2n.js → collection-tabs-CJEa3dRy.js} +1 -1
  80. package/dist/client/assets/{command-C4HnUxgr.js → command-Drksh_DO.js} +1 -1
  81. package/dist/client/assets/{connection-card-DRd8H1I5.js → connection-card-Bak2l1_M.js} +1 -1
  82. package/dist/client/assets/{connection-detail-MKWBWpRr.js → connection-detail-BKy2ZsS6.js} +1 -1
  83. package/dist/client/assets/{connections-CIQDC3QM.js → connections-Dxf4eIOE.js} +1 -1
  84. package/dist/client/assets/{constants-C6R-Odkq.js → constants-D7qXOYRn.js} +1 -1
  85. package/dist/client/assets/{context-BFTRA5vP.js → context-DxQMlFKC.js} +1 -1
  86. package/dist/client/assets/{create-organization-dialog-Bez2nZe0.js → create-organization-dialog-CNWB-72r.js} +1 -1
  87. package/dist/client/assets/{create-project-dialog-MCGuKGij.js → create-project-dialog-BeIY4Oy9.js} +1 -1
  88. package/dist/client/assets/{danger-D1zng7LS.js → danger-YWbxrjNq.js} +1 -1
  89. package/dist/client/assets/{danger-zone-DbcRzYYG.js → danger-zone-DGg0ZzSy.js} +1 -1
  90. package/dist/client/assets/{dependencies-B8EkZe-H.js → dependencies-DtAVTWu-.js} +1 -1
  91. package/dist/client/assets/{dialog-Bw5T2ogY.js → dialog-ChXYvlDt.js} +1 -1
  92. package/dist/client/assets/{dropdown-menu-Dan8nMb8.js → dropdown-menu-BxlQMXgW.js} +1 -1
  93. package/dist/client/assets/{dynamic-plugin-layout-BDxV3RAS.js → dynamic-plugin-layout-JpZTv0Ay.js} +1 -1
  94. package/dist/client/assets/{editable-task-title-wfBXYVIh.js → editable-task-title-Cm-uIwFs.js} +1 -1
  95. package/dist/client/assets/{empty-state-CoA3_x_6.js → empty-state-qLM_bVsv.js} +1 -1
  96. package/dist/client/assets/{empty-state-C1iyyf7G.js → empty-state-xIvMMy-_.js} +1 -1
  97. package/dist/client/assets/{env-vars-editor-CxyeKMFS.js → env-vars-editor-Yss1wn0m.js} +1 -1
  98. package/dist/client/assets/{extract-connection-data-C8ZedtM3.js → extract-connection-data-48N591A_.js} +1 -1
  99. package/dist/client/assets/{file-browser-CShFs9BG.js → file-browser-BbqpPFZK.js} +2 -2
  100. package/dist/client/assets/{form-B1LLlQBa.js → form-CaFPTMVC.js} +1 -1
  101. package/dist/client/assets/{general-Dnfj_B7U.js → general-DI9irVIQ.js} +1 -1
  102. package/dist/client/assets/{generate-id-WpAuYSZF.js → generate-id-BiV6m8fS.js} +1 -1
  103. package/dist/client/assets/{grid-view-PzYdekcz.js → grid-view-DurgUMuo.js} +1 -1
  104. package/dist/client/assets/{home-CKa-gWjN.js → home-CspK560n.js} +1 -1
  105. package/dist/client/assets/{index-lUO5B2Do.js → index-ChUIqRBi.js} +1 -1
  106. package/dist/client/assets/{index-D-AXXJqO.js → index-CqWJIMlG.js} +1 -1
  107. package/dist/client/assets/{index-CgSAwZ8g.js → index-CqtWW-Tq.js} +1 -1
  108. package/dist/client/assets/{index-DtZLm-Fz.js → index-CqyqI90F.js} +1 -1
  109. package/dist/client/assets/{index-BaVHKLOw.js → index-De1iYnQy.js} +1 -1
  110. package/dist/client/assets/{index-De7oAufQ.js → index-NjMxPJgF.js} +3 -3
  111. package/dist/client/assets/{index-BkxamE0W.js → index-TV8hw8s3.js} +1 -1
  112. package/dist/client/assets/{index-CVayrapI.js → index-YL7q5tyF.js} +1 -1
  113. package/dist/client/assets/{index-BFJo8BQ3.js → index-YRudAQp7.js} +1 -1
  114. package/dist/client/assets/{index-J5pIXVfD.js → index-yiVP4brl.js} +1 -1
  115. package/dist/client/assets/{index-OdE2HBl6.js → index-zWpUeKAz.js} +1 -1
  116. package/dist/client/assets/{infiniteQueryObserver-C7xXp1jr.js → infiniteQueryObserver-JZ0YxCW-.js} +1 -1
  117. package/dist/client/assets/{input-_VKm0O_1.js → input-B89sozd8.js} +1 -1
  118. package/dist/client/assets/{integration-icon-BkY1vh6I.js → integration-icon-BPVDVJvP.js} +1 -1
  119. package/dist/client/assets/{label-BhDDQ3-n.js → label-DkiEYJcU.js} +1 -1
  120. package/dist/client/assets/{layout-BIFV7MZL.js → layout-Cqn-h1Jz.js} +1 -1
  121. package/dist/client/assets/{layout-CZKgiZuG.js → layout-DcmGLVHZ.js} +1 -1
  122. package/dist/client/assets/{login-uo65TNIo.js → login-qT_ItpIx.js} +1 -1
  123. package/dist/client/assets/{logo-upload-CXS8-AgL.js → logo-upload-CoGaedUC.js} +1 -1
  124. package/dist/client/assets/{mcp-app-renderer-BcsrfZJp.js → mcp-app-renderer-By1mQEU9.js} +1 -1
  125. package/dist/client/assets/{mcp-server-card-Bp6C5W6n.js → mcp-server-card-B3Nrrgyk.js} +1 -1
  126. package/dist/client/assets/{mcp-server-detail-Ctbkl5jL.js → mcp-server-detail-DMfy0V9h.js} +2 -2
  127. package/dist/client/assets/{members-DCfL7gNX.js → members-Q81LXZu1.js} +1 -1
  128. package/dist/client/assets/{monaco-editor-DPC7_J-G.js → monaco-editor-ZB27PMAe.js} +1 -1
  129. package/dist/client/assets/{monitoring-ByXLzXVV.js → monitoring-C31A03PZ.js} +1 -1
  130. package/dist/client/assets/{monitoring-dashboard-edit-YR1gT6FF.js → monitoring-dashboard-edit-Dfi8Jxeb.js} +1 -1
  131. package/dist/client/assets/{monitoring-dashboard-view-BbtnIBfa.js → monitoring-dashboard-view-CxjxBHLW.js} +1 -1
  132. package/dist/client/assets/{monitoring-stats-row-Df9ANyzv.js → monitoring-stats-row-CAn-8pVZ.js} +1 -1
  133. package/dist/client/assets/{oauth-callback-DAQSPrcu.js → oauth-callback-B8DRnSok.js} +1 -1
  134. package/dist/client/assets/{oauth-callback-ai-provider-BM5LYNPq.js → oauth-callback-ai-provider-CsTCxPAY.js} +1 -1
  135. package/dist/client/assets/{org-ai-providers-6KYO-veN.js → org-ai-providers-DaYyItUL.js} +1 -1
  136. package/dist/client/assets/{page-JhhtSWZh.js → page-BjLk0DX_.js} +1 -1
  137. package/dist/client/assets/{page-30eMAMiN.js → page-C2I5Nlmu.js} +1 -1
  138. package/dist/client/assets/{plugin-empty-state-Cl2I2geD.js → plugin-empty-state-K02oXRNN.js} +1 -1
  139. package/dist/client/assets/{plugin-empty-state-R2BzERoW.js → plugin-empty-state-l30u7dec.js} +1 -1
  140. package/dist/client/assets/{plugin-header-Bakz3z0e.js → plugin-header-B_wkRb4Y.js} +1 -1
  141. package/dist/client/assets/{plugin-header-aEsNVQjp.js → plugin-header-CE-BhILm.js} +1 -1
  142. package/dist/client/assets/plugins-6p4XZdw1.js +1 -0
  143. package/dist/client/assets/{popover-D_qGIJiq.js → popover-Br8QkMK3.js} +1 -1
  144. package/dist/client/assets/{project-app-view-BFgEphLV.js → project-app-view-CRe7LVZk.js} +1 -1
  145. package/dist/client/assets/{project-layout-C8oyOOGc.js → project-layout-Bg1hlIaM.js} +1 -1
  146. package/dist/client/assets/{project-plugins-BVt_WzcU.js → project-plugins-BHOZZsH7.js} +1 -1
  147. package/dist/client/assets/{projects-list-C02pKlJj.js → projects-list-i4ZvUqtI.js} +1 -1
  148. package/dist/client/assets/{registry-layout-C-yQnDXG.js → registry-layout-DQV7LhSo.js} +1 -1
  149. package/dist/client/assets/{registry-utils-Dqc_kCiP.js → registry-utils-cjX9P5J9.js} +1 -1
  150. package/dist/client/assets/{reset-password-Cqvt_aDI.js → reset-password-Cgcrl5ZG.js} +1 -1
  151. package/dist/client/assets/{resizable-CO0Uh73H.js → resizable-Nu1SqaJD.js} +1 -1
  152. package/dist/client/assets/{save-actions-ju1vjafj.js → save-actions-CVl6VtT2.js} +1 -1
  153. package/dist/client/assets/{scroll-area-DL2xzsPP.js → scroll-area-BTJQ86Ry.js} +1 -1
  154. package/dist/client/assets/{select-B4liIMVc.js → select-Dx3T3-4n.js} +1 -1
  155. package/dist/client/assets/{select-virtual-mcp-CuflMlTt.js → select-virtual-mcp-BS537pmy.js} +1 -1
  156. package/dist/client/assets/{sheet-Cjr3EcYH.js → sheet-C3HM0Uwr.js} +1 -1
  157. package/dist/client/assets/{shell-layout-DfTROeX_.js → shell-layout-Bco0BFOl.js} +2 -2
  158. package/dist/client/assets/{sidebar-settings-BljNzJVO.js → sidebar-settings-JhN4X_jg.js} +1 -1
  159. package/dist/client/assets/{skeleton-Bt7MRTvB.js → skeleton-Cjm8s7CT.js} +1 -1
  160. package/dist/client/assets/{spinner-Cse1gKnw.js → spinner-Dzx7B3Jl.js} +1 -1
  161. package/dist/client/assets/{store-invite-D8XeTZbu.js → store-invite-BPcFU0aw.js} +1 -1
  162. package/dist/client/assets/{switch-DHS6rwq-.js → switch-CA_oYDia.js} +1 -1
  163. package/dist/client/assets/{table-BPkNFl3F.js → table-C-1rP_rt.js} +1 -1
  164. package/dist/client/assets/{tabs-D9xzXdQn.js → tabs-BSOe8gLq.js} +1 -1
  165. package/dist/client/assets/{task-status-DPcRgg7n.js → task-status-DYx9R7EL.js} +24 -24
  166. package/dist/client/assets/tasks-D1X8oLa3.js +1 -0
  167. package/dist/client/assets/{tasks-panel-i3VUreUx.js → tasks-panel-BJ3TfA-_.js} +1 -1
  168. package/dist/client/assets/{textarea-C_pKpP9s.js → textarea-DIJzFUWn.js} +1 -1
  169. package/dist/client/assets/{time-range-picker-BuykPBni.js → time-range-picker-CGBh-D6p.js} +1 -1
  170. package/dist/client/assets/{toggle-group-VpRSF_Gl.js → toggle-group-DlZGDyPQ.js} +1 -1
  171. package/dist/client/assets/{tools-list-DDFWIxxm.js → tools-list-D-T64862.js} +1 -1
  172. package/dist/client/assets/{tooltip-C4rlkzSj.js → tooltip-BJMSu0c2.js} +1 -1
  173. package/dist/client/assets/{topbar-portal-CF1YRovU.js → topbar-portal-ChPXVsi1.js} +1 -1
  174. package/dist/client/assets/{types-DQbIwrMI.js → types-BHeMLyAV.js} +1 -1
  175. package/dist/client/assets/{use-automations-C1HgdvUZ.js → use-automations-Bmw3x7Dk.js} +1 -1
  176. package/dist/client/assets/{use-collections-CN-KZdhF.js → use-collections-C0cYiFfV.js} +1 -1
  177. package/dist/client/assets/{use-connection-C4RNTGYe.js → use-connection-CHFdKnsr.js} +1 -1
  178. package/dist/client/assets/{use-copy-Cyun7kVE.js → use-copy-xhdji_Bl.js} +1 -1
  179. package/dist/client/assets/{use-create-virtual-mcp-4JnIm_fY.js → use-create-virtual-mcp-B7odZ_c3.js} +1 -1
  180. package/dist/client/assets/{use-infinite-scroll-B1b4xMpn.js → use-infinite-scroll-CPhZNIw7.js} +1 -1
  181. package/dist/client/assets/{use-install-from-registry-CytyaLQX.js → use-install-from-registry-BzwuBLOx.js} +1 -1
  182. package/dist/client/assets/{use-list-state-CCkxYz8q.js → use-list-state-CbsN6RbJ.js} +1 -1
  183. package/dist/client/assets/{use-mcp-prompts-BGZnglwN.js → use-mcp-prompts-Bel4H4rh.js} +1 -1
  184. package/dist/client/assets/{use-mcp-resources-DSKOWSEO.js → use-mcp-resources-qGdymfRz.js} +1 -1
  185. package/dist/client/assets/{use-mcp-tools-C2aTDAuJ.js → use-mcp-tools-BCZI_Wqc.js} +1 -1
  186. package/dist/client/assets/{use-members-DjL_-1xN.js → use-members-B4ncWtMV.js} +1 -1
  187. package/dist/client/assets/{use-mobile-CMHMyYVi.js → use-mobile-DOUfTohp.js} +1 -1
  188. package/dist/client/assets/{use-project-DxPDjIre.js → use-project-b5C3lq5-.js} +1 -1
  189. package/dist/client/assets/{use-store-discovery-BBXrVOcG.js → use-store-discovery-B402mTHd.js} +1 -1
  190. package/dist/client/assets/{use-view-mode-CXln2RGt.js → use-view-mode-ss3eRodO.js} +1 -1
  191. package/dist/client/assets/{use-virtual-mcp-AdVimCkX.js → use-virtual-mcp-BP6aaUzw.js} +1 -1
  192. package/dist/client/assets/useInfiniteQuery-BXDrDvlH.js +1 -0
  193. package/dist/client/assets/{useMutation-BDzOMrvq.js → useMutation-68NxhXCf.js} +1 -1
  194. package/dist/client/assets/useQuery-BYBCFxgb.js +1 -0
  195. package/dist/client/assets/useSuspenseInfiniteQuery-X3jXt04i.js +1 -0
  196. package/dist/client/assets/{user-DSh4pFej.js → user-iDZRuimU.js} +1 -1
  197. package/dist/client/assets/{workflow-mIahQD3R.js → workflow-CrrTPehP.js} +1 -1
  198. package/dist/client/index.html +1 -1
  199. package/dist/server/cli.js +2 -2
  200. package/dist/server/migrate.js +1 -1
  201. package/dist/server/node_modules/pg-cloudflare/README.md +112 -0
  202. package/dist/server/node_modules/pg-cloudflare/dist/empty.d.ts +2 -0
  203. package/dist/server/node_modules/pg-cloudflare/dist/empty.js +6 -0
  204. package/dist/server/node_modules/pg-cloudflare/dist/empty.js.map +1 -0
  205. package/dist/server/node_modules/pg-cloudflare/dist/index.d.ts +31 -0
  206. package/dist/server/node_modules/pg-cloudflare/dist/index.js +152 -0
  207. package/dist/server/node_modules/pg-cloudflare/dist/index.js.map +1 -0
  208. package/dist/server/node_modules/pg-cloudflare/esm/index.mjs +3 -0
  209. package/dist/server/node_modules/pg-cloudflare/package.json +39 -0
  210. package/dist/server/node_modules/pg-cloudflare/src/empty.ts +3 -0
  211. package/dist/server/node_modules/pg-cloudflare/src/index.ts +166 -0
  212. package/dist/server/node_modules/pg-cloudflare/src/types.d.ts +25 -0
  213. package/dist/server/node_modules/pg-connection-string/LICENSE +21 -0
  214. package/dist/server/node_modules/pg-connection-string/README.md +105 -0
  215. package/dist/server/node_modules/pg-connection-string/esm/index.mjs +8 -0
  216. package/dist/server/node_modules/pg-connection-string/index.d.ts +36 -0
  217. package/dist/server/node_modules/pg-connection-string/index.js +231 -0
  218. package/dist/server/node_modules/pg-connection-string/package.json +52 -0
  219. package/dist/server/node_modules/pg-int8/LICENSE +13 -0
  220. package/dist/server/node_modules/pg-int8/README.md +16 -0
  221. package/dist/server/node_modules/pg-int8/index.js +100 -0
  222. package/dist/server/node_modules/pg-int8/package.json +24 -0
  223. package/dist/server/node_modules/pg-pool/LICENSE +21 -0
  224. package/dist/server/node_modules/pg-pool/README.md +357 -0
  225. package/dist/server/node_modules/pg-pool/esm/index.mjs +5 -0
  226. package/dist/server/node_modules/pg-pool/index.js +517 -0
  227. package/dist/server/node_modules/pg-pool/package.json +51 -0
  228. package/dist/server/node_modules/pg-protocol/LICENSE +21 -0
  229. package/dist/server/node_modules/pg-protocol/README.md +3 -0
  230. package/dist/server/node_modules/pg-protocol/dist/b.d.ts +1 -0
  231. package/dist/server/node_modules/pg-protocol/dist/b.js +23 -0
  232. package/dist/server/node_modules/pg-protocol/dist/b.js.map +1 -0
  233. package/dist/server/node_modules/pg-protocol/dist/buffer-reader.d.ts +15 -0
  234. package/dist/server/node_modules/pg-protocol/dist/buffer-reader.js +55 -0
  235. package/dist/server/node_modules/pg-protocol/dist/buffer-reader.js.map +1 -0
  236. package/dist/server/node_modules/pg-protocol/dist/buffer-writer.d.ts +16 -0
  237. package/dist/server/node_modules/pg-protocol/dist/buffer-writer.js +81 -0
  238. package/dist/server/node_modules/pg-protocol/dist/buffer-writer.js.map +1 -0
  239. package/dist/server/node_modules/pg-protocol/dist/inbound-parser.test.d.ts +1 -0
  240. package/dist/server/node_modules/pg-protocol/dist/inbound-parser.test.js +530 -0
  241. package/dist/server/node_modules/pg-protocol/dist/inbound-parser.test.js.map +1 -0
  242. package/dist/server/node_modules/pg-protocol/dist/index.d.ts +6 -0
  243. package/dist/server/node_modules/pg-protocol/dist/index.js +15 -0
  244. package/dist/server/node_modules/pg-protocol/dist/index.js.map +1 -0
  245. package/dist/server/node_modules/pg-protocol/dist/messages.d.ts +162 -0
  246. package/dist/server/node_modules/pg-protocol/dist/messages.js +160 -0
  247. package/dist/server/node_modules/pg-protocol/dist/messages.js.map +1 -0
  248. package/dist/server/node_modules/pg-protocol/dist/outbound-serializer.test.d.ts +1 -0
  249. package/dist/server/node_modules/pg-protocol/dist/outbound-serializer.test.js +252 -0
  250. package/dist/server/node_modules/pg-protocol/dist/outbound-serializer.test.js.map +1 -0
  251. package/dist/server/node_modules/pg-protocol/dist/parser.d.ts +24 -0
  252. package/dist/server/node_modules/pg-protocol/dist/parser.js +324 -0
  253. package/dist/server/node_modules/pg-protocol/dist/parser.js.map +1 -0
  254. package/dist/server/node_modules/pg-protocol/dist/serializer.d.ts +42 -0
  255. package/dist/server/node_modules/pg-protocol/dist/serializer.js +189 -0
  256. package/dist/server/node_modules/pg-protocol/dist/serializer.js.map +1 -0
  257. package/dist/server/node_modules/pg-protocol/esm/index.js +11 -0
  258. package/dist/server/node_modules/pg-protocol/package.json +45 -0
  259. package/dist/server/node_modules/pg-protocol/src/b.ts +25 -0
  260. package/dist/server/node_modules/pg-protocol/src/buffer-reader.ts +58 -0
  261. package/dist/server/node_modules/pg-protocol/src/buffer-writer.ts +85 -0
  262. package/dist/server/node_modules/pg-protocol/src/inbound-parser.test.ts +575 -0
  263. package/dist/server/node_modules/pg-protocol/src/index.ts +11 -0
  264. package/dist/server/node_modules/pg-protocol/src/messages.ts +262 -0
  265. package/dist/server/node_modules/pg-protocol/src/outbound-serializer.test.ts +276 -0
  266. package/dist/server/node_modules/pg-protocol/src/parser.ts +413 -0
  267. package/dist/server/node_modules/pg-protocol/src/serializer.ts +274 -0
  268. package/dist/server/node_modules/pg-protocol/src/testing/buffer-list.ts +67 -0
  269. package/dist/server/node_modules/pg-protocol/src/testing/test-buffers.ts +166 -0
  270. package/dist/server/node_modules/pg-protocol/src/types/chunky.d.ts +1 -0
  271. package/dist/server/node_modules/pg-types/.travis.yml +7 -0
  272. package/dist/server/node_modules/pg-types/Makefile +14 -0
  273. package/dist/server/node_modules/pg-types/README.md +75 -0
  274. package/dist/server/node_modules/pg-types/index.d.ts +137 -0
  275. package/dist/server/node_modules/pg-types/index.js +47 -0
  276. package/dist/server/node_modules/pg-types/index.test-d.ts +21 -0
  277. package/dist/server/node_modules/pg-types/lib/arrayParser.js +11 -0
  278. package/dist/server/node_modules/pg-types/lib/binaryParsers.js +257 -0
  279. package/dist/server/node_modules/pg-types/lib/builtins.js +73 -0
  280. package/dist/server/node_modules/pg-types/lib/textParsers.js +215 -0
  281. package/dist/server/node_modules/pg-types/package.json +42 -0
  282. package/dist/server/node_modules/pg-types/test/index.js +24 -0
  283. package/dist/server/node_modules/pg-types/test/types.js +597 -0
  284. package/dist/server/node_modules/pgpass/README.md +74 -0
  285. package/dist/server/node_modules/pgpass/lib/helper.js +233 -0
  286. package/dist/server/node_modules/pgpass/lib/index.js +23 -0
  287. package/dist/server/node_modules/pgpass/package.json +41 -0
  288. package/dist/server/node_modules/postgres-array/index.d.ts +4 -0
  289. package/dist/server/node_modules/postgres-array/index.js +97 -0
  290. package/dist/server/node_modules/postgres-array/license +21 -0
  291. package/dist/server/node_modules/postgres-array/package.json +35 -0
  292. package/dist/server/node_modules/postgres-array/readme.md +43 -0
  293. package/dist/server/node_modules/postgres-bytea/index.js +33 -0
  294. package/dist/server/node_modules/postgres-bytea/license +21 -0
  295. package/dist/server/node_modules/postgres-bytea/package.json +34 -0
  296. package/dist/server/node_modules/postgres-bytea/readme.md +34 -0
  297. package/dist/server/node_modules/postgres-date/index.js +116 -0
  298. package/dist/server/node_modules/postgres-date/license +21 -0
  299. package/dist/server/node_modules/postgres-date/package.json +33 -0
  300. package/dist/server/node_modules/postgres-date/readme.md +49 -0
  301. package/dist/server/node_modules/postgres-interval/index.d.ts +20 -0
  302. package/dist/server/node_modules/postgres-interval/index.js +125 -0
  303. package/dist/server/node_modules/postgres-interval/license +21 -0
  304. package/dist/server/node_modules/postgres-interval/package.json +36 -0
  305. package/dist/server/node_modules/postgres-interval/readme.md +48 -0
  306. package/dist/server/node_modules/split2/LICENSE +13 -0
  307. package/dist/server/node_modules/split2/README.md +85 -0
  308. package/dist/server/node_modules/split2/bench.js +27 -0
  309. package/dist/server/node_modules/split2/index.js +141 -0
  310. package/dist/server/node_modules/split2/package.json +39 -0
  311. package/dist/server/node_modules/split2/test.js +409 -0
  312. package/dist/server/server.js +2 -2
  313. package/package.json +1 -1
  314. package/dist/client/assets/plugins-CJOgdAgY.js +0 -1
  315. package/dist/client/assets/tasks-CAcIEtSF.js +0 -1
  316. package/dist/client/assets/useInfiniteQuery-Dw4aF3nd.js +0 -1
  317. package/dist/client/assets/useQuery-CTePvczf.js +0 -1
  318. package/dist/client/assets/useSuspenseInfiniteQuery-All2JJwt.js +0 -1
  319. package/dist/server/node_modules/pg/README.md +0 -95
  320. package/dist/server/node_modules/pg/esm/index.mjs +0 -20
  321. package/dist/server/node_modules/pg/lib/client.js +0 -743
  322. package/dist/server/node_modules/pg/lib/connection-parameters.js +0 -171
  323. package/dist/server/node_modules/pg/lib/connection.js +0 -221
  324. package/dist/server/node_modules/pg/lib/crypto/cert-signatures.js +0 -122
  325. package/dist/server/node_modules/pg/lib/crypto/sasl.js +0 -212
  326. package/dist/server/node_modules/pg/lib/crypto/utils-legacy.js +0 -43
  327. package/dist/server/node_modules/pg/lib/crypto/utils-webcrypto.js +0 -89
  328. package/dist/server/node_modules/pg/lib/crypto/utils.js +0 -9
  329. package/dist/server/node_modules/pg/lib/defaults.js +0 -91
  330. package/dist/server/node_modules/pg/lib/index.js +0 -73
  331. package/dist/server/node_modules/pg/lib/native/client.js +0 -323
  332. package/dist/server/node_modules/pg/lib/native/index.js +0 -2
  333. package/dist/server/node_modules/pg/lib/native/query.js +0 -165
  334. package/dist/server/node_modules/pg/lib/query.js +0 -252
  335. package/dist/server/node_modules/pg/lib/result.js +0 -109
  336. package/dist/server/node_modules/pg/lib/stream.js +0 -83
  337. package/dist/server/node_modules/pg/lib/type-overrides.js +0 -35
  338. package/dist/server/node_modules/pg/lib/utils.js +0 -217
  339. package/dist/server/node_modules/pg/package.json +0 -76
  340. /package/dist/server/node_modules/{pg → pg-cloudflare}/LICENSE +0 -0
@@ -0,0 +1,58 @@
1
+ export class BufferReader {
2
+ private buffer: Buffer = Buffer.allocUnsafe(0)
3
+
4
+ // TODO(bmc): support non-utf8 encoding?
5
+ private encoding: string = 'utf-8'
6
+
7
+ constructor(private offset: number = 0) {}
8
+
9
+ public setBuffer(offset: number, buffer: Buffer): void {
10
+ this.offset = offset
11
+ this.buffer = buffer
12
+ }
13
+
14
+ public int16(): number {
15
+ const result = this.buffer.readInt16BE(this.offset)
16
+ this.offset += 2
17
+ return result
18
+ }
19
+
20
+ public byte(): number {
21
+ const result = this.buffer[this.offset]
22
+ this.offset++
23
+ return result
24
+ }
25
+
26
+ public int32(): number {
27
+ const result = this.buffer.readInt32BE(this.offset)
28
+ this.offset += 4
29
+ return result
30
+ }
31
+
32
+ public uint32(): number {
33
+ const result = this.buffer.readUInt32BE(this.offset)
34
+ this.offset += 4
35
+ return result
36
+ }
37
+
38
+ public string(length: number): string {
39
+ const result = this.buffer.toString(this.encoding, this.offset, this.offset + length)
40
+ this.offset += length
41
+ return result
42
+ }
43
+
44
+ public cstring(): string {
45
+ const start = this.offset
46
+ let end = start
47
+ // eslint-disable-next-line no-empty
48
+ while (this.buffer[end++] !== 0) {}
49
+ this.offset = end
50
+ return this.buffer.toString(this.encoding, start, end - 1)
51
+ }
52
+
53
+ public bytes(length: number): Buffer {
54
+ const result = this.buffer.slice(this.offset, this.offset + length)
55
+ this.offset += length
56
+ return result
57
+ }
58
+ }
@@ -0,0 +1,85 @@
1
+ //binary data writer tuned for encoding binary specific to the postgres binary protocol
2
+
3
+ export class Writer {
4
+ private buffer: Buffer
5
+ private offset: number = 5
6
+ private headerPosition: number = 0
7
+ constructor(private size = 256) {
8
+ this.buffer = Buffer.allocUnsafe(size)
9
+ }
10
+
11
+ private ensure(size: number): void {
12
+ const remaining = this.buffer.length - this.offset
13
+ if (remaining < size) {
14
+ const oldBuffer = this.buffer
15
+ // exponential growth factor of around ~ 1.5
16
+ // https://stackoverflow.com/questions/2269063/buffer-growth-strategy
17
+ const newSize = oldBuffer.length + (oldBuffer.length >> 1) + size
18
+ this.buffer = Buffer.allocUnsafe(newSize)
19
+ oldBuffer.copy(this.buffer)
20
+ }
21
+ }
22
+
23
+ public addInt32(num: number): Writer {
24
+ this.ensure(4)
25
+ this.buffer[this.offset++] = (num >>> 24) & 0xff
26
+ this.buffer[this.offset++] = (num >>> 16) & 0xff
27
+ this.buffer[this.offset++] = (num >>> 8) & 0xff
28
+ this.buffer[this.offset++] = (num >>> 0) & 0xff
29
+ return this
30
+ }
31
+
32
+ public addInt16(num: number): Writer {
33
+ this.ensure(2)
34
+ this.buffer[this.offset++] = (num >>> 8) & 0xff
35
+ this.buffer[this.offset++] = (num >>> 0) & 0xff
36
+ return this
37
+ }
38
+
39
+ public addCString(string: string): Writer {
40
+ if (!string) {
41
+ this.ensure(1)
42
+ } else {
43
+ const len = Buffer.byteLength(string)
44
+ this.ensure(len + 1) // +1 for null terminator
45
+ this.buffer.write(string, this.offset, 'utf-8')
46
+ this.offset += len
47
+ }
48
+
49
+ this.buffer[this.offset++] = 0 // null terminator
50
+ return this
51
+ }
52
+
53
+ public addString(string: string = ''): Writer {
54
+ const len = Buffer.byteLength(string)
55
+ this.ensure(len)
56
+ this.buffer.write(string, this.offset)
57
+ this.offset += len
58
+ return this
59
+ }
60
+
61
+ public add(otherBuffer: Buffer): Writer {
62
+ this.ensure(otherBuffer.length)
63
+ otherBuffer.copy(this.buffer, this.offset)
64
+ this.offset += otherBuffer.length
65
+ return this
66
+ }
67
+
68
+ private join(code?: number): Buffer {
69
+ if (code) {
70
+ this.buffer[this.headerPosition] = code
71
+ //length is everything in this packet minus the code
72
+ const length = this.offset - (this.headerPosition + 1)
73
+ this.buffer.writeInt32BE(length, this.headerPosition + 1)
74
+ }
75
+ return this.buffer.slice(code ? 0 : 5, this.offset)
76
+ }
77
+
78
+ public flush(code?: number): Buffer {
79
+ const result = this.join(code)
80
+ this.offset = 5
81
+ this.headerPosition = 0
82
+ this.buffer = Buffer.allocUnsafe(this.size)
83
+ return result
84
+ }
85
+ }
@@ -0,0 +1,575 @@
1
+ import buffers from './testing/test-buffers'
2
+ import BufferList from './testing/buffer-list'
3
+ import { parse } from '.'
4
+ import assert from 'assert'
5
+ import { PassThrough } from 'stream'
6
+ import { BackendMessage } from './messages'
7
+ import { Parser } from './parser'
8
+
9
+ const authOkBuffer = buffers.authenticationOk()
10
+ const paramStatusBuffer = buffers.parameterStatus('client_encoding', 'UTF8')
11
+ const readyForQueryBuffer = buffers.readyForQuery()
12
+ const backendKeyDataBuffer = buffers.backendKeyData(1, 2)
13
+ const commandCompleteBuffer = buffers.commandComplete('SELECT 3')
14
+ const parseCompleteBuffer = buffers.parseComplete()
15
+ const bindCompleteBuffer = buffers.bindComplete()
16
+ const portalSuspendedBuffer = buffers.portalSuspended()
17
+
18
+ const row1 = {
19
+ name: 'id',
20
+ tableID: 1,
21
+ attributeNumber: 2,
22
+ dataTypeID: 3,
23
+ dataTypeSize: 4,
24
+ typeModifier: 5,
25
+ formatCode: 0,
26
+ }
27
+ const oneRowDescBuff = buffers.rowDescription([row1])
28
+ row1.name = 'bang'
29
+
30
+ const twoRowBuf = buffers.rowDescription([
31
+ row1,
32
+ {
33
+ name: 'whoah',
34
+ tableID: 10,
35
+ attributeNumber: 11,
36
+ dataTypeID: 12,
37
+ dataTypeSize: 13,
38
+ typeModifier: 14,
39
+ formatCode: 0,
40
+ },
41
+ ])
42
+
43
+ const rowWithBigOids = {
44
+ name: 'bigoid',
45
+ tableID: 3000000001,
46
+ attributeNumber: 2,
47
+ dataTypeID: 3000000003,
48
+ dataTypeSize: 4,
49
+ typeModifier: 5,
50
+ formatCode: 0,
51
+ }
52
+ const bigOidDescBuff = buffers.rowDescription([rowWithBigOids])
53
+
54
+ const emptyRowFieldBuf = buffers.dataRow([])
55
+
56
+ const oneFieldBuf = buffers.dataRow(['test'])
57
+
58
+ const expectedAuthenticationOkayMessage = {
59
+ name: 'authenticationOk',
60
+ length: 8,
61
+ }
62
+
63
+ const expectedParameterStatusMessage = {
64
+ name: 'parameterStatus',
65
+ parameterName: 'client_encoding',
66
+ parameterValue: 'UTF8',
67
+ length: 25,
68
+ }
69
+
70
+ const expectedBackendKeyDataMessage = {
71
+ name: 'backendKeyData',
72
+ processID: 1,
73
+ secretKey: 2,
74
+ }
75
+
76
+ const expectedReadyForQueryMessage = {
77
+ name: 'readyForQuery',
78
+ length: 5,
79
+ status: 'I',
80
+ }
81
+
82
+ const expectedCommandCompleteMessage = {
83
+ name: 'commandComplete',
84
+ length: 13,
85
+ text: 'SELECT 3',
86
+ }
87
+ const emptyRowDescriptionBuffer = new BufferList()
88
+ .addInt16(0) // number of fields
89
+ .join(true, 'T')
90
+
91
+ const expectedEmptyRowDescriptionMessage = {
92
+ name: 'rowDescription',
93
+ length: 6,
94
+ fieldCount: 0,
95
+ fields: [],
96
+ }
97
+ const expectedOneRowMessage = {
98
+ name: 'rowDescription',
99
+ length: 27,
100
+ fieldCount: 1,
101
+ fields: [
102
+ {
103
+ name: 'id',
104
+ tableID: 1,
105
+ columnID: 2,
106
+ dataTypeID: 3,
107
+ dataTypeSize: 4,
108
+ dataTypeModifier: 5,
109
+ format: 'text',
110
+ },
111
+ ],
112
+ }
113
+
114
+ const expectedTwoRowMessage = {
115
+ name: 'rowDescription',
116
+ length: 53,
117
+ fieldCount: 2,
118
+ fields: [
119
+ {
120
+ name: 'bang',
121
+ tableID: 1,
122
+ columnID: 2,
123
+ dataTypeID: 3,
124
+ dataTypeSize: 4,
125
+ dataTypeModifier: 5,
126
+ format: 'text',
127
+ },
128
+ {
129
+ name: 'whoah',
130
+ tableID: 10,
131
+ columnID: 11,
132
+ dataTypeID: 12,
133
+ dataTypeSize: 13,
134
+ dataTypeModifier: 14,
135
+ format: 'text',
136
+ },
137
+ ],
138
+ }
139
+ const expectedBigOidMessage = {
140
+ name: 'rowDescription',
141
+ length: 31,
142
+ fieldCount: 1,
143
+ fields: [
144
+ {
145
+ name: 'bigoid',
146
+ tableID: 3000000001,
147
+ columnID: 2,
148
+ dataTypeID: 3000000003,
149
+ dataTypeSize: 4,
150
+ dataTypeModifier: 5,
151
+ format: 'text',
152
+ },
153
+ ],
154
+ }
155
+
156
+ const emptyParameterDescriptionBuffer = new BufferList()
157
+ .addInt16(0) // number of parameters
158
+ .join(true, 't')
159
+
160
+ const oneParameterDescBuf = buffers.parameterDescription([1111])
161
+
162
+ const twoParameterDescBuf = buffers.parameterDescription([2222, 3333])
163
+
164
+ const expectedEmptyParameterDescriptionMessage = {
165
+ name: 'parameterDescription',
166
+ length: 6,
167
+ parameterCount: 0,
168
+ dataTypeIDs: [],
169
+ }
170
+
171
+ const expectedOneParameterMessage = {
172
+ name: 'parameterDescription',
173
+ length: 10,
174
+ parameterCount: 1,
175
+ dataTypeIDs: [1111],
176
+ }
177
+
178
+ const expectedTwoParameterMessage = {
179
+ name: 'parameterDescription',
180
+ length: 14,
181
+ parameterCount: 2,
182
+ dataTypeIDs: [2222, 3333],
183
+ }
184
+
185
+ const testForMessage = function (buffer: Buffer, expectedMessage: any) {
186
+ it('receives and parses ' + expectedMessage.name, async () => {
187
+ const messages = await parseBuffers([buffer])
188
+ const [lastMessage] = messages
189
+
190
+ for (const key in expectedMessage) {
191
+ assert.deepEqual((lastMessage as any)[key], expectedMessage[key])
192
+ }
193
+ })
194
+ }
195
+
196
+ const plainPasswordBuffer = buffers.authenticationCleartextPassword()
197
+ const md5PasswordBuffer = buffers.authenticationMD5Password()
198
+ const SASLBuffer = buffers.authenticationSASL()
199
+ const SASLContinueBuffer = buffers.authenticationSASLContinue()
200
+ const SASLFinalBuffer = buffers.authenticationSASLFinal()
201
+
202
+ const expectedPlainPasswordMessage = {
203
+ name: 'authenticationCleartextPassword',
204
+ }
205
+
206
+ const expectedMD5PasswordMessage = {
207
+ name: 'authenticationMD5Password',
208
+ salt: Buffer.from([1, 2, 3, 4]),
209
+ }
210
+
211
+ const expectedSASLMessage = {
212
+ name: 'authenticationSASL',
213
+ mechanisms: ['SCRAM-SHA-256'],
214
+ }
215
+
216
+ const expectedSASLContinueMessage = {
217
+ name: 'authenticationSASLContinue',
218
+ data: 'data',
219
+ }
220
+
221
+ const expectedSASLFinalMessage = {
222
+ name: 'authenticationSASLFinal',
223
+ data: 'data',
224
+ }
225
+
226
+ const notificationResponseBuffer = buffers.notification(4, 'hi', 'boom')
227
+ const expectedNotificationResponseMessage = {
228
+ name: 'notification',
229
+ processId: 4,
230
+ channel: 'hi',
231
+ payload: 'boom',
232
+ }
233
+
234
+ const parseBuffers = async (buffers: Buffer[]): Promise<BackendMessage[]> => {
235
+ const stream = new PassThrough()
236
+ for (const buffer of buffers) {
237
+ stream.write(buffer)
238
+ }
239
+ stream.end()
240
+ const msgs: BackendMessage[] = []
241
+ await parse(stream, (msg) => msgs.push(msg))
242
+ return msgs
243
+ }
244
+
245
+ describe('PgPacketStream', function () {
246
+ testForMessage(authOkBuffer, expectedAuthenticationOkayMessage)
247
+ testForMessage(plainPasswordBuffer, expectedPlainPasswordMessage)
248
+ testForMessage(md5PasswordBuffer, expectedMD5PasswordMessage)
249
+ testForMessage(SASLBuffer, expectedSASLMessage)
250
+ testForMessage(SASLContinueBuffer, expectedSASLContinueMessage)
251
+
252
+ // this exercises a found bug in the parser:
253
+ // https://github.com/brianc/node-postgres/pull/2210#issuecomment-627626084
254
+ // and adds a test which is deterministic, rather than relying on network packet chunking
255
+ const extendedSASLContinueBuffer = Buffer.concat([SASLContinueBuffer, Buffer.from([1, 2, 3, 4])])
256
+ testForMessage(extendedSASLContinueBuffer, expectedSASLContinueMessage)
257
+
258
+ testForMessage(SASLFinalBuffer, expectedSASLFinalMessage)
259
+
260
+ // this exercises a found bug in the parser:
261
+ // https://github.com/brianc/node-postgres/pull/2210#issuecomment-627626084
262
+ // and adds a test which is deterministic, rather than relying on network packet chunking
263
+ const extendedSASLFinalBuffer = Buffer.concat([SASLFinalBuffer, Buffer.from([1, 2, 4, 5])])
264
+ testForMessage(extendedSASLFinalBuffer, expectedSASLFinalMessage)
265
+
266
+ testForMessage(paramStatusBuffer, expectedParameterStatusMessage)
267
+ testForMessage(backendKeyDataBuffer, expectedBackendKeyDataMessage)
268
+ testForMessage(readyForQueryBuffer, expectedReadyForQueryMessage)
269
+ testForMessage(commandCompleteBuffer, expectedCommandCompleteMessage)
270
+ testForMessage(notificationResponseBuffer, expectedNotificationResponseMessage)
271
+ testForMessage(buffers.emptyQuery(), {
272
+ name: 'emptyQuery',
273
+ length: 4,
274
+ })
275
+
276
+ testForMessage(Buffer.from([0x6e, 0, 0, 0, 4]), {
277
+ name: 'noData',
278
+ })
279
+
280
+ describe('rowDescription messages', function () {
281
+ testForMessage(emptyRowDescriptionBuffer, expectedEmptyRowDescriptionMessage)
282
+ testForMessage(oneRowDescBuff, expectedOneRowMessage)
283
+ testForMessage(twoRowBuf, expectedTwoRowMessage)
284
+ testForMessage(bigOidDescBuff, expectedBigOidMessage)
285
+ })
286
+
287
+ describe('parameterDescription messages', function () {
288
+ testForMessage(emptyParameterDescriptionBuffer, expectedEmptyParameterDescriptionMessage)
289
+ testForMessage(oneParameterDescBuf, expectedOneParameterMessage)
290
+ testForMessage(twoParameterDescBuf, expectedTwoParameterMessage)
291
+ })
292
+
293
+ describe('parsing rows', function () {
294
+ describe('parsing empty row', function () {
295
+ testForMessage(emptyRowFieldBuf, {
296
+ name: 'dataRow',
297
+ fieldCount: 0,
298
+ })
299
+ })
300
+
301
+ describe('parsing data row with fields', function () {
302
+ testForMessage(oneFieldBuf, {
303
+ name: 'dataRow',
304
+ fieldCount: 1,
305
+ fields: ['test'],
306
+ })
307
+ })
308
+ })
309
+
310
+ describe('notice message', function () {
311
+ // this uses the same logic as error message
312
+ const buff = buffers.notice([{ type: 'C', value: 'code' }])
313
+ testForMessage(buff, {
314
+ name: 'notice',
315
+ code: 'code',
316
+ })
317
+ })
318
+
319
+ testForMessage(buffers.error([]), {
320
+ name: 'error',
321
+ })
322
+
323
+ describe('with all the fields', function () {
324
+ const buffer = buffers.error([
325
+ {
326
+ type: 'S',
327
+ value: 'ERROR',
328
+ },
329
+ {
330
+ type: 'C',
331
+ value: 'code',
332
+ },
333
+ {
334
+ type: 'M',
335
+ value: 'message',
336
+ },
337
+ {
338
+ type: 'D',
339
+ value: 'details',
340
+ },
341
+ {
342
+ type: 'H',
343
+ value: 'hint',
344
+ },
345
+ {
346
+ type: 'P',
347
+ value: '100',
348
+ },
349
+ {
350
+ type: 'p',
351
+ value: '101',
352
+ },
353
+ {
354
+ type: 'q',
355
+ value: 'query',
356
+ },
357
+ {
358
+ type: 'W',
359
+ value: 'where',
360
+ },
361
+ {
362
+ type: 'F',
363
+ value: 'file',
364
+ },
365
+ {
366
+ type: 'L',
367
+ value: 'line',
368
+ },
369
+ {
370
+ type: 'R',
371
+ value: 'routine',
372
+ },
373
+ {
374
+ type: 'Z', // ignored
375
+ value: 'alsdkf',
376
+ },
377
+ ])
378
+
379
+ testForMessage(buffer, {
380
+ name: 'error',
381
+ severity: 'ERROR',
382
+ code: 'code',
383
+ message: 'message',
384
+ detail: 'details',
385
+ hint: 'hint',
386
+ position: '100',
387
+ internalPosition: '101',
388
+ internalQuery: 'query',
389
+ where: 'where',
390
+ file: 'file',
391
+ line: 'line',
392
+ routine: 'routine',
393
+ })
394
+ })
395
+
396
+ testForMessage(parseCompleteBuffer, {
397
+ name: 'parseComplete',
398
+ })
399
+
400
+ testForMessage(bindCompleteBuffer, {
401
+ name: 'bindComplete',
402
+ })
403
+
404
+ testForMessage(bindCompleteBuffer, {
405
+ name: 'bindComplete',
406
+ })
407
+
408
+ testForMessage(buffers.closeComplete(), {
409
+ name: 'closeComplete',
410
+ })
411
+
412
+ describe('parses portal suspended message', function () {
413
+ testForMessage(portalSuspendedBuffer, {
414
+ name: 'portalSuspended',
415
+ })
416
+ })
417
+
418
+ describe('parses replication start message', function () {
419
+ testForMessage(Buffer.from([0x57, 0x00, 0x00, 0x00, 0x04]), {
420
+ name: 'replicationStart',
421
+ length: 4,
422
+ })
423
+ })
424
+
425
+ describe('copy', () => {
426
+ testForMessage(buffers.copyIn(0), {
427
+ name: 'copyInResponse',
428
+ length: 7,
429
+ binary: false,
430
+ columnTypes: [],
431
+ })
432
+
433
+ testForMessage(buffers.copyIn(2), {
434
+ name: 'copyInResponse',
435
+ length: 11,
436
+ binary: false,
437
+ columnTypes: [0, 1],
438
+ })
439
+
440
+ testForMessage(buffers.copyOut(0), {
441
+ name: 'copyOutResponse',
442
+ length: 7,
443
+ binary: false,
444
+ columnTypes: [],
445
+ })
446
+
447
+ testForMessage(buffers.copyOut(3), {
448
+ name: 'copyOutResponse',
449
+ length: 13,
450
+ binary: false,
451
+ columnTypes: [0, 1, 2],
452
+ })
453
+
454
+ testForMessage(buffers.copyDone(), {
455
+ name: 'copyDone',
456
+ length: 4,
457
+ })
458
+
459
+ testForMessage(buffers.copyData(Buffer.from([5, 6, 7])), {
460
+ name: 'copyData',
461
+ length: 7,
462
+ chunk: Buffer.from([5, 6, 7]),
463
+ })
464
+ })
465
+
466
+ // since the data message on a stream can randomly divide the incomming
467
+ // tcp packets anywhere, we need to make sure we can parse every single
468
+ // split on a tcp message
469
+ describe('split buffer, single message parsing', function () {
470
+ const fullBuffer = buffers.dataRow([null, 'bang', 'zug zug', null, '!'])
471
+
472
+ it('parses when full buffer comes in', async function () {
473
+ const messages = await parseBuffers([fullBuffer])
474
+ const message = messages[0] as any
475
+ assert.equal(message.fields.length, 5)
476
+ assert.equal(message.fields[0], null)
477
+ assert.equal(message.fields[1], 'bang')
478
+ assert.equal(message.fields[2], 'zug zug')
479
+ assert.equal(message.fields[3], null)
480
+ assert.equal(message.fields[4], '!')
481
+ })
482
+
483
+ const testMessageReceivedAfterSplitAt = async function (split: number) {
484
+ const firstBuffer = Buffer.alloc(fullBuffer.length - split)
485
+ const secondBuffer = Buffer.alloc(fullBuffer.length - firstBuffer.length)
486
+ fullBuffer.copy(firstBuffer, 0, 0)
487
+ fullBuffer.copy(secondBuffer, 0, firstBuffer.length)
488
+ const messages = await parseBuffers([firstBuffer, secondBuffer])
489
+ const message = messages[0] as any
490
+ assert.equal(message.fields.length, 5)
491
+ assert.equal(message.fields[0], null)
492
+ assert.equal(message.fields[1], 'bang')
493
+ assert.equal(message.fields[2], 'zug zug')
494
+ assert.equal(message.fields[3], null)
495
+ assert.equal(message.fields[4], '!')
496
+ }
497
+
498
+ it('parses when split in the middle', function () {
499
+ return testMessageReceivedAfterSplitAt(6)
500
+ })
501
+
502
+ it('parses when split at end', function () {
503
+ return testMessageReceivedAfterSplitAt(2)
504
+ })
505
+
506
+ it('parses when split at beginning', function () {
507
+ return Promise.all([
508
+ testMessageReceivedAfterSplitAt(fullBuffer.length - 2),
509
+ testMessageReceivedAfterSplitAt(fullBuffer.length - 1),
510
+ testMessageReceivedAfterSplitAt(fullBuffer.length - 5),
511
+ ])
512
+ })
513
+ })
514
+
515
+ describe('split buffer, multiple message parsing', function () {
516
+ const dataRowBuffer = buffers.dataRow(['!'])
517
+ const readyForQueryBuffer = buffers.readyForQuery()
518
+ const fullBuffer = Buffer.alloc(dataRowBuffer.length + readyForQueryBuffer.length)
519
+ dataRowBuffer.copy(fullBuffer, 0, 0)
520
+ readyForQueryBuffer.copy(fullBuffer, dataRowBuffer.length, 0)
521
+
522
+ const verifyMessages = function (messages: any[]) {
523
+ assert.strictEqual(messages.length, 2)
524
+ assert.deepEqual(messages[0], {
525
+ name: 'dataRow',
526
+ fieldCount: 1,
527
+ length: 11,
528
+ fields: ['!'],
529
+ })
530
+ assert.equal(messages[0].fields[0], '!')
531
+ assert.deepEqual(messages[1], {
532
+ name: 'readyForQuery',
533
+ length: 5,
534
+ status: 'I',
535
+ })
536
+ }
537
+ // sanity check
538
+ it('receives both messages when packet is not split', async function () {
539
+ const messages = await parseBuffers([fullBuffer])
540
+ verifyMessages(messages)
541
+ })
542
+
543
+ const splitAndVerifyTwoMessages = async function (split: number) {
544
+ const firstBuffer = Buffer.alloc(fullBuffer.length - split)
545
+ const secondBuffer = Buffer.alloc(fullBuffer.length - firstBuffer.length)
546
+ fullBuffer.copy(firstBuffer, 0, 0)
547
+ fullBuffer.copy(secondBuffer, 0, firstBuffer.length)
548
+ const messages = await parseBuffers([firstBuffer, secondBuffer])
549
+ verifyMessages(messages)
550
+ }
551
+
552
+ describe('receives both messages when packet is split', function () {
553
+ it('in the middle', function () {
554
+ return splitAndVerifyTwoMessages(11)
555
+ })
556
+ it('at the front', function () {
557
+ return Promise.all([
558
+ splitAndVerifyTwoMessages(fullBuffer.length - 1),
559
+ splitAndVerifyTwoMessages(fullBuffer.length - 4),
560
+ splitAndVerifyTwoMessages(fullBuffer.length - 6),
561
+ ])
562
+ })
563
+
564
+ it('at the end', function () {
565
+ return Promise.all([splitAndVerifyTwoMessages(8), splitAndVerifyTwoMessages(1)])
566
+ })
567
+ })
568
+ })
569
+
570
+ it('cleans up the reader after handling a packet', function () {
571
+ const parser = new Parser()
572
+ parser.parse(oneFieldBuf, () => {})
573
+ assert.strictEqual((parser as any).reader.buffer.byteLength, 0)
574
+ })
575
+ })