@mcp-z/mcp-sheets 1.0.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.
Files changed (363) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +181 -0
  3. package/bin/server.js +5 -0
  4. package/dist/cjs/constants.d.cts +7 -0
  5. package/dist/cjs/constants.d.ts +7 -0
  6. package/dist/cjs/constants.js +18 -0
  7. package/dist/cjs/constants.js.map +1 -0
  8. package/dist/cjs/index.d.cts +8 -0
  9. package/dist/cjs/index.d.ts +8 -0
  10. package/dist/cjs/index.js +314 -0
  11. package/dist/cjs/index.js.map +1 -0
  12. package/dist/cjs/lib/create-store.d.cts +2 -0
  13. package/dist/cjs/lib/create-store.d.ts +2 -0
  14. package/dist/cjs/lib/create-store.js +166 -0
  15. package/dist/cjs/lib/create-store.js.map +1 -0
  16. package/dist/cjs/mcp/index.d.cts +3 -0
  17. package/dist/cjs/mcp/index.d.ts +3 -0
  18. package/dist/cjs/mcp/index.js +66 -0
  19. package/dist/cjs/mcp/index.js.map +1 -0
  20. package/dist/cjs/mcp/prompts/a1-notation.d.cts +19 -0
  21. package/dist/cjs/mcp/prompts/a1-notation.d.ts +19 -0
  22. package/dist/cjs/mcp/prompts/a1-notation.js +169 -0
  23. package/dist/cjs/mcp/prompts/a1-notation.js.map +1 -0
  24. package/dist/cjs/mcp/prompts/index.d.cts +1 -0
  25. package/dist/cjs/mcp/prompts/index.d.ts +1 -0
  26. package/dist/cjs/mcp/prompts/index.js +17 -0
  27. package/dist/cjs/mcp/prompts/index.js.map +1 -0
  28. package/dist/cjs/mcp/resources/index.d.cts +1 -0
  29. package/dist/cjs/mcp/resources/index.d.ts +1 -0
  30. package/dist/cjs/mcp/resources/index.js +17 -0
  31. package/dist/cjs/mcp/resources/index.js.map +1 -0
  32. package/dist/cjs/mcp/resources/spreadsheet.d.cts +2 -0
  33. package/dist/cjs/mcp/resources/spreadsheet.d.ts +2 -0
  34. package/dist/cjs/mcp/resources/spreadsheet.js +258 -0
  35. package/dist/cjs/mcp/resources/spreadsheet.js.map +1 -0
  36. package/dist/cjs/mcp/tools/cells-format.d.cts +144 -0
  37. package/dist/cjs/mcp/tools/cells-format.d.ts +144 -0
  38. package/dist/cjs/mcp/tools/cells-format.js +484 -0
  39. package/dist/cjs/mcp/tools/cells-format.js.map +1 -0
  40. package/dist/cjs/mcp/tools/chart-create.d.cts +94 -0
  41. package/dist/cjs/mcp/tools/chart-create.d.ts +94 -0
  42. package/dist/cjs/mcp/tools/chart-create.js +575 -0
  43. package/dist/cjs/mcp/tools/chart-create.js.map +1 -0
  44. package/dist/cjs/mcp/tools/columns-get.d.cts +55 -0
  45. package/dist/cjs/mcp/tools/columns-get.d.ts +55 -0
  46. package/dist/cjs/mcp/tools/columns-get.js +289 -0
  47. package/dist/cjs/mcp/tools/columns-get.js.map +1 -0
  48. package/dist/cjs/mcp/tools/columns-update.d.cts +86 -0
  49. package/dist/cjs/mcp/tools/columns-update.d.ts +86 -0
  50. package/dist/cjs/mcp/tools/columns-update.js +482 -0
  51. package/dist/cjs/mcp/tools/columns-update.js.map +1 -0
  52. package/dist/cjs/mcp/tools/csv-get-columns.d.cts +43 -0
  53. package/dist/cjs/mcp/tools/csv-get-columns.d.ts +43 -0
  54. package/dist/cjs/mcp/tools/csv-get-columns.js +386 -0
  55. package/dist/cjs/mcp/tools/csv-get-columns.js.map +1 -0
  56. package/dist/cjs/mcp/tools/dimensions-batch-update.d.cts +118 -0
  57. package/dist/cjs/mcp/tools/dimensions-batch-update.d.ts +118 -0
  58. package/dist/cjs/mcp/tools/dimensions-batch-update.js +504 -0
  59. package/dist/cjs/mcp/tools/dimensions-batch-update.js.map +1 -0
  60. package/dist/cjs/mcp/tools/dimensions-move.d.cts +86 -0
  61. package/dist/cjs/mcp/tools/dimensions-move.d.ts +86 -0
  62. package/dist/cjs/mcp/tools/dimensions-move.js +359 -0
  63. package/dist/cjs/mcp/tools/dimensions-move.js.map +1 -0
  64. package/dist/cjs/mcp/tools/index.d.cts +26 -0
  65. package/dist/cjs/mcp/tools/index.d.ts +26 -0
  66. package/dist/cjs/mcp/tools/index.js +122 -0
  67. package/dist/cjs/mcp/tools/index.js.map +1 -0
  68. package/dist/cjs/mcp/tools/lib/dimension-operations.d.cts +48 -0
  69. package/dist/cjs/mcp/tools/lib/dimension-operations.d.ts +48 -0
  70. package/dist/cjs/mcp/tools/lib/dimension-operations.js +177 -0
  71. package/dist/cjs/mcp/tools/lib/dimension-operations.js.map +1 -0
  72. package/dist/cjs/mcp/tools/rows-append.d.cts +58 -0
  73. package/dist/cjs/mcp/tools/rows-append.d.ts +58 -0
  74. package/dist/cjs/mcp/tools/rows-append.js +335 -0
  75. package/dist/cjs/mcp/tools/rows-append.js.map +1 -0
  76. package/dist/cjs/mcp/tools/rows-csv-append.d.cts +67 -0
  77. package/dist/cjs/mcp/tools/rows-csv-append.d.ts +67 -0
  78. package/dist/cjs/mcp/tools/rows-csv-append.js +859 -0
  79. package/dist/cjs/mcp/tools/rows-csv-append.js.map +1 -0
  80. package/dist/cjs/mcp/tools/rows-get.d.cts +56 -0
  81. package/dist/cjs/mcp/tools/rows-get.d.ts +56 -0
  82. package/dist/cjs/mcp/tools/rows-get.js +292 -0
  83. package/dist/cjs/mcp/tools/rows-get.js.map +1 -0
  84. package/dist/cjs/mcp/tools/sheet-copy-to.d.cts +68 -0
  85. package/dist/cjs/mcp/tools/sheet-copy-to.d.ts +68 -0
  86. package/dist/cjs/mcp/tools/sheet-copy-to.js +341 -0
  87. package/dist/cjs/mcp/tools/sheet-copy-to.js.map +1 -0
  88. package/dist/cjs/mcp/tools/sheet-copy.d.cts +80 -0
  89. package/dist/cjs/mcp/tools/sheet-copy.d.ts +80 -0
  90. package/dist/cjs/mcp/tools/sheet-copy.js +394 -0
  91. package/dist/cjs/mcp/tools/sheet-copy.js.map +1 -0
  92. package/dist/cjs/mcp/tools/sheet-create.d.cts +56 -0
  93. package/dist/cjs/mcp/tools/sheet-create.d.ts +56 -0
  94. package/dist/cjs/mcp/tools/sheet-create.js +283 -0
  95. package/dist/cjs/mcp/tools/sheet-create.js.map +1 -0
  96. package/dist/cjs/mcp/tools/sheet-delete.d.cts +62 -0
  97. package/dist/cjs/mcp/tools/sheet-delete.d.ts +62 -0
  98. package/dist/cjs/mcp/tools/sheet-delete.js +341 -0
  99. package/dist/cjs/mcp/tools/sheet-delete.js.map +1 -0
  100. package/dist/cjs/mcp/tools/sheet-find.d.cts +48 -0
  101. package/dist/cjs/mcp/tools/sheet-find.d.ts +48 -0
  102. package/dist/cjs/mcp/tools/sheet-find.js +261 -0
  103. package/dist/cjs/mcp/tools/sheet-find.js.map +1 -0
  104. package/dist/cjs/mcp/tools/sheet-rename.d.cts +60 -0
  105. package/dist/cjs/mcp/tools/sheet-rename.d.ts +60 -0
  106. package/dist/cjs/mcp/tools/sheet-rename.js +305 -0
  107. package/dist/cjs/mcp/tools/sheet-rename.js.map +1 -0
  108. package/dist/cjs/mcp/tools/spreadsheet-copy.d.cts +58 -0
  109. package/dist/cjs/mcp/tools/spreadsheet-copy.d.ts +58 -0
  110. package/dist/cjs/mcp/tools/spreadsheet-copy.js +319 -0
  111. package/dist/cjs/mcp/tools/spreadsheet-copy.js.map +1 -0
  112. package/dist/cjs/mcp/tools/spreadsheet-create.d.cts +52 -0
  113. package/dist/cjs/mcp/tools/spreadsheet-create.d.ts +52 -0
  114. package/dist/cjs/mcp/tools/spreadsheet-create.js +270 -0
  115. package/dist/cjs/mcp/tools/spreadsheet-create.js.map +1 -0
  116. package/dist/cjs/mcp/tools/spreadsheet-find.d.cts +58 -0
  117. package/dist/cjs/mcp/tools/spreadsheet-find.d.ts +58 -0
  118. package/dist/cjs/mcp/tools/spreadsheet-find.js +334 -0
  119. package/dist/cjs/mcp/tools/spreadsheet-find.js.map +1 -0
  120. package/dist/cjs/mcp/tools/spreadsheet-rename.d.cts +56 -0
  121. package/dist/cjs/mcp/tools/spreadsheet-rename.d.ts +56 -0
  122. package/dist/cjs/mcp/tools/spreadsheet-rename.js +289 -0
  123. package/dist/cjs/mcp/tools/spreadsheet-rename.js.map +1 -0
  124. package/dist/cjs/mcp/tools/validation-set.d.cts +144 -0
  125. package/dist/cjs/mcp/tools/validation-set.d.ts +144 -0
  126. package/dist/cjs/mcp/tools/validation-set.js +564 -0
  127. package/dist/cjs/mcp/tools/validation-set.js.map +1 -0
  128. package/dist/cjs/mcp/tools/values-batch-update.d.cts +102 -0
  129. package/dist/cjs/mcp/tools/values-batch-update.d.ts +102 -0
  130. package/dist/cjs/mcp/tools/values-batch-update.js +409 -0
  131. package/dist/cjs/mcp/tools/values-batch-update.js.map +1 -0
  132. package/dist/cjs/mcp/tools/values-clear.d.cts +56 -0
  133. package/dist/cjs/mcp/tools/values-clear.d.ts +56 -0
  134. package/dist/cjs/mcp/tools/values-clear.js +308 -0
  135. package/dist/cjs/mcp/tools/values-clear.js.map +1 -0
  136. package/dist/cjs/mcp/tools/values-csv-update.d.cts +75 -0
  137. package/dist/cjs/mcp/tools/values-csv-update.d.ts +75 -0
  138. package/dist/cjs/mcp/tools/values-csv-update.js +500 -0
  139. package/dist/cjs/mcp/tools/values-csv-update.js.map +1 -0
  140. package/dist/cjs/mcp/tools/values-replace.d.cts +68 -0
  141. package/dist/cjs/mcp/tools/values-replace.d.ts +68 -0
  142. package/dist/cjs/mcp/tools/values-replace.js +378 -0
  143. package/dist/cjs/mcp/tools/values-replace.js.map +1 -0
  144. package/dist/cjs/mcp/tools/values-search.d.cts +74 -0
  145. package/dist/cjs/mcp/tools/values-search.d.ts +74 -0
  146. package/dist/cjs/mcp/tools/values-search.js +470 -0
  147. package/dist/cjs/mcp/tools/values-search.js.map +1 -0
  148. package/dist/cjs/package.json +1 -0
  149. package/dist/cjs/schemas/index.d.cts +14 -0
  150. package/dist/cjs/schemas/index.d.ts +14 -0
  151. package/dist/cjs/schemas/index.js +64 -0
  152. package/dist/cjs/schemas/index.js.map +1 -0
  153. package/dist/cjs/setup/config.d.cts +44 -0
  154. package/dist/cjs/setup/config.d.ts +44 -0
  155. package/dist/cjs/setup/config.js +201 -0
  156. package/dist/cjs/setup/config.js.map +1 -0
  157. package/dist/cjs/setup/http.d.cts +8 -0
  158. package/dist/cjs/setup/http.d.ts +8 -0
  159. package/dist/cjs/setup/http.js +260 -0
  160. package/dist/cjs/setup/http.js.map +1 -0
  161. package/dist/cjs/setup/index.d.cts +5 -0
  162. package/dist/cjs/setup/index.d.ts +5 -0
  163. package/dist/cjs/setup/index.js +46 -0
  164. package/dist/cjs/setup/index.js.map +1 -0
  165. package/dist/cjs/setup/oauth-google.d.cts +54 -0
  166. package/dist/cjs/setup/oauth-google.d.ts +54 -0
  167. package/dist/cjs/setup/oauth-google.js +332 -0
  168. package/dist/cjs/setup/oauth-google.js.map +1 -0
  169. package/dist/cjs/setup/runtime.d.cts +10 -0
  170. package/dist/cjs/setup/runtime.d.ts +10 -0
  171. package/dist/cjs/setup/runtime.js +353 -0
  172. package/dist/cjs/setup/runtime.js.map +1 -0
  173. package/dist/cjs/setup/stdio.d.cts +7 -0
  174. package/dist/cjs/setup/stdio.d.ts +7 -0
  175. package/dist/cjs/setup/stdio.js +239 -0
  176. package/dist/cjs/setup/stdio.js.map +1 -0
  177. package/dist/cjs/spreadsheet/column-utilities.d.cts +1 -0
  178. package/dist/cjs/spreadsheet/column-utilities.d.ts +1 -0
  179. package/dist/cjs/spreadsheet/column-utilities.js +21 -0
  180. package/dist/cjs/spreadsheet/column-utilities.js.map +1 -0
  181. package/dist/cjs/spreadsheet/csv-streaming.d.cts +19 -0
  182. package/dist/cjs/spreadsheet/csv-streaming.d.ts +19 -0
  183. package/dist/cjs/spreadsheet/csv-streaming.js +188 -0
  184. package/dist/cjs/spreadsheet/csv-streaming.js.map +1 -0
  185. package/dist/cjs/spreadsheet/data-operations.d.cts +115 -0
  186. package/dist/cjs/spreadsheet/data-operations.d.ts +115 -0
  187. package/dist/cjs/spreadsheet/data-operations.js +1515 -0
  188. package/dist/cjs/spreadsheet/data-operations.js.map +1 -0
  189. package/dist/cjs/spreadsheet/deduplication-utils.d.cts +31 -0
  190. package/dist/cjs/spreadsheet/deduplication-utils.d.ts +31 -0
  191. package/dist/cjs/spreadsheet/deduplication-utils.js +65 -0
  192. package/dist/cjs/spreadsheet/deduplication-utils.js.map +1 -0
  193. package/dist/cjs/spreadsheet/range-operations.d.cts +184 -0
  194. package/dist/cjs/spreadsheet/range-operations.d.ts +184 -0
  195. package/dist/cjs/spreadsheet/range-operations.js +672 -0
  196. package/dist/cjs/spreadsheet/range-operations.js.map +1 -0
  197. package/dist/cjs/spreadsheet/sheet-operations.d.cts +30 -0
  198. package/dist/cjs/spreadsheet/sheet-operations.d.ts +30 -0
  199. package/dist/cjs/spreadsheet/sheet-operations.js +811 -0
  200. package/dist/cjs/spreadsheet/sheet-operations.js.map +1 -0
  201. package/dist/cjs/spreadsheet/spreadsheet-management.d.cts +21 -0
  202. package/dist/cjs/spreadsheet/spreadsheet-management.d.ts +21 -0
  203. package/dist/cjs/spreadsheet/spreadsheet-management.js +310 -0
  204. package/dist/cjs/spreadsheet/spreadsheet-management.js.map +1 -0
  205. package/dist/cjs/types.d.cts +53 -0
  206. package/dist/cjs/types.d.ts +53 -0
  207. package/dist/cjs/types.js +5 -0
  208. package/dist/cjs/types.js.map +1 -0
  209. package/dist/esm/constants.d.ts +7 -0
  210. package/dist/esm/constants.js +7 -0
  211. package/dist/esm/constants.js.map +1 -0
  212. package/dist/esm/index.d.ts +8 -0
  213. package/dist/esm/index.js +34 -0
  214. package/dist/esm/index.js.map +1 -0
  215. package/dist/esm/lib/create-store.d.ts +2 -0
  216. package/dist/esm/lib/create-store.js +6 -0
  217. package/dist/esm/lib/create-store.js.map +1 -0
  218. package/dist/esm/mcp/index.d.ts +3 -0
  219. package/dist/esm/mcp/index.js +6 -0
  220. package/dist/esm/mcp/index.js.map +1 -0
  221. package/dist/esm/mcp/prompts/a1-notation.d.ts +19 -0
  222. package/dist/esm/mcp/prompts/a1-notation.js +49 -0
  223. package/dist/esm/mcp/prompts/a1-notation.js.map +1 -0
  224. package/dist/esm/mcp/prompts/index.d.ts +1 -0
  225. package/dist/esm/mcp/prompts/index.js +1 -0
  226. package/dist/esm/mcp/prompts/index.js.map +1 -0
  227. package/dist/esm/mcp/resources/index.d.ts +1 -0
  228. package/dist/esm/mcp/resources/index.js +1 -0
  229. package/dist/esm/mcp/resources/index.js.map +1 -0
  230. package/dist/esm/mcp/resources/spreadsheet.d.ts +2 -0
  231. package/dist/esm/mcp/resources/spreadsheet.js +88 -0
  232. package/dist/esm/mcp/resources/spreadsheet.js.map +1 -0
  233. package/dist/esm/mcp/tools/cells-format.d.ts +144 -0
  234. package/dist/esm/mcp/tools/cells-format.js +288 -0
  235. package/dist/esm/mcp/tools/cells-format.js.map +1 -0
  236. package/dist/esm/mcp/tools/chart-create.d.ts +94 -0
  237. package/dist/esm/mcp/tools/chart-create.js +408 -0
  238. package/dist/esm/mcp/tools/chart-create.js.map +1 -0
  239. package/dist/esm/mcp/tools/columns-get.d.ts +55 -0
  240. package/dist/esm/mcp/tools/columns-get.js +113 -0
  241. package/dist/esm/mcp/tools/columns-get.js.map +1 -0
  242. package/dist/esm/mcp/tools/columns-update.d.ts +86 -0
  243. package/dist/esm/mcp/tools/columns-update.js +296 -0
  244. package/dist/esm/mcp/tools/columns-update.js.map +1 -0
  245. package/dist/esm/mcp/tools/csv-get-columns.d.ts +43 -0
  246. package/dist/esm/mcp/tools/csv-get-columns.js +95 -0
  247. package/dist/esm/mcp/tools/csv-get-columns.js.map +1 -0
  248. package/dist/esm/mcp/tools/dimensions-batch-update.d.ts +118 -0
  249. package/dist/esm/mcp/tools/dimensions-batch-update.js +321 -0
  250. package/dist/esm/mcp/tools/dimensions-batch-update.js.map +1 -0
  251. package/dist/esm/mcp/tools/dimensions-move.d.ts +86 -0
  252. package/dist/esm/mcp/tools/dimensions-move.js +183 -0
  253. package/dist/esm/mcp/tools/dimensions-move.js.map +1 -0
  254. package/dist/esm/mcp/tools/index.d.ts +26 -0
  255. package/dist/esm/mcp/tools/index.js +26 -0
  256. package/dist/esm/mcp/tools/index.js.map +1 -0
  257. package/dist/esm/mcp/tools/lib/dimension-operations.d.ts +48 -0
  258. package/dist/esm/mcp/tools/lib/dimension-operations.js +93 -0
  259. package/dist/esm/mcp/tools/lib/dimension-operations.js.map +1 -0
  260. package/dist/esm/mcp/tools/rows-append.d.ts +58 -0
  261. package/dist/esm/mcp/tools/rows-append.js +151 -0
  262. package/dist/esm/mcp/tools/rows-append.js.map +1 -0
  263. package/dist/esm/mcp/tools/rows-csv-append.d.ts +67 -0
  264. package/dist/esm/mcp/tools/rows-csv-append.js +342 -0
  265. package/dist/esm/mcp/tools/rows-csv-append.js.map +1 -0
  266. package/dist/esm/mcp/tools/rows-get.d.ts +56 -0
  267. package/dist/esm/mcp/tools/rows-get.js +116 -0
  268. package/dist/esm/mcp/tools/rows-get.js.map +1 -0
  269. package/dist/esm/mcp/tools/sheet-copy-to.d.ts +68 -0
  270. package/dist/esm/mcp/tools/sheet-copy-to.js +156 -0
  271. package/dist/esm/mcp/tools/sheet-copy-to.js.map +1 -0
  272. package/dist/esm/mcp/tools/sheet-copy.d.ts +80 -0
  273. package/dist/esm/mcp/tools/sheet-copy.js +177 -0
  274. package/dist/esm/mcp/tools/sheet-copy.js.map +1 -0
  275. package/dist/esm/mcp/tools/sheet-create.d.ts +56 -0
  276. package/dist/esm/mcp/tools/sheet-create.js +110 -0
  277. package/dist/esm/mcp/tools/sheet-create.js.map +1 -0
  278. package/dist/esm/mcp/tools/sheet-delete.d.ts +62 -0
  279. package/dist/esm/mcp/tools/sheet-delete.js +125 -0
  280. package/dist/esm/mcp/tools/sheet-delete.js.map +1 -0
  281. package/dist/esm/mcp/tools/sheet-find.d.ts +48 -0
  282. package/dist/esm/mcp/tools/sheet-find.js +90 -0
  283. package/dist/esm/mcp/tools/sheet-find.js.map +1 -0
  284. package/dist/esm/mcp/tools/sheet-rename.d.ts +60 -0
  285. package/dist/esm/mcp/tools/sheet-rename.js +128 -0
  286. package/dist/esm/mcp/tools/sheet-rename.js.map +1 -0
  287. package/dist/esm/mcp/tools/spreadsheet-copy.d.ts +58 -0
  288. package/dist/esm/mcp/tools/spreadsheet-copy.js +117 -0
  289. package/dist/esm/mcp/tools/spreadsheet-copy.js.map +1 -0
  290. package/dist/esm/mcp/tools/spreadsheet-create.d.ts +52 -0
  291. package/dist/esm/mcp/tools/spreadsheet-create.js +97 -0
  292. package/dist/esm/mcp/tools/spreadsheet-create.js.map +1 -0
  293. package/dist/esm/mcp/tools/spreadsheet-find.d.ts +58 -0
  294. package/dist/esm/mcp/tools/spreadsheet-find.js +113 -0
  295. package/dist/esm/mcp/tools/spreadsheet-find.js.map +1 -0
  296. package/dist/esm/mcp/tools/spreadsheet-rename.d.ts +56 -0
  297. package/dist/esm/mcp/tools/spreadsheet-rename.js +112 -0
  298. package/dist/esm/mcp/tools/spreadsheet-rename.js.map +1 -0
  299. package/dist/esm/mcp/tools/validation-set.d.ts +144 -0
  300. package/dist/esm/mcp/tools/validation-set.js +366 -0
  301. package/dist/esm/mcp/tools/validation-set.js.map +1 -0
  302. package/dist/esm/mcp/tools/values-batch-update.d.ts +102 -0
  303. package/dist/esm/mcp/tools/values-batch-update.js +224 -0
  304. package/dist/esm/mcp/tools/values-batch-update.js.map +1 -0
  305. package/dist/esm/mcp/tools/values-clear.d.ts +56 -0
  306. package/dist/esm/mcp/tools/values-clear.js +131 -0
  307. package/dist/esm/mcp/tools/values-clear.js.map +1 -0
  308. package/dist/esm/mcp/tools/values-csv-update.d.ts +75 -0
  309. package/dist/esm/mcp/tools/values-csv-update.js +202 -0
  310. package/dist/esm/mcp/tools/values-csv-update.js.map +1 -0
  311. package/dist/esm/mcp/tools/values-replace.d.ts +68 -0
  312. package/dist/esm/mcp/tools/values-replace.js +171 -0
  313. package/dist/esm/mcp/tools/values-replace.js.map +1 -0
  314. package/dist/esm/mcp/tools/values-search.d.ts +74 -0
  315. package/dist/esm/mcp/tools/values-search.js +229 -0
  316. package/dist/esm/mcp/tools/values-search.js.map +1 -0
  317. package/dist/esm/package.json +1 -0
  318. package/dist/esm/schemas/index.d.ts +14 -0
  319. package/dist/esm/schemas/index.js +35 -0
  320. package/dist/esm/schemas/index.js.map +1 -0
  321. package/dist/esm/setup/config.d.ts +44 -0
  322. package/dist/esm/setup/config.js +151 -0
  323. package/dist/esm/setup/config.js.map +1 -0
  324. package/dist/esm/setup/http.d.ts +8 -0
  325. package/dist/esm/setup/http.js +54 -0
  326. package/dist/esm/setup/http.js.map +1 -0
  327. package/dist/esm/setup/index.d.ts +5 -0
  328. package/dist/esm/setup/index.js +5 -0
  329. package/dist/esm/setup/index.js.map +1 -0
  330. package/dist/esm/setup/oauth-google.d.ts +54 -0
  331. package/dist/esm/setup/oauth-google.js +142 -0
  332. package/dist/esm/setup/oauth-google.js.map +1 -0
  333. package/dist/esm/setup/runtime.d.ts +10 -0
  334. package/dist/esm/setup/runtime.js +84 -0
  335. package/dist/esm/setup/runtime.js.map +1 -0
  336. package/dist/esm/setup/stdio.d.ts +7 -0
  337. package/dist/esm/setup/stdio.js +38 -0
  338. package/dist/esm/setup/stdio.js.map +1 -0
  339. package/dist/esm/spreadsheet/column-utilities.d.ts +1 -0
  340. package/dist/esm/spreadsheet/column-utilities.js +10 -0
  341. package/dist/esm/spreadsheet/column-utilities.js.map +1 -0
  342. package/dist/esm/spreadsheet/csv-streaming.d.ts +19 -0
  343. package/dist/esm/spreadsheet/csv-streaming.js +43 -0
  344. package/dist/esm/spreadsheet/csv-streaming.js.map +1 -0
  345. package/dist/esm/spreadsheet/data-operations.d.ts +115 -0
  346. package/dist/esm/spreadsheet/data-operations.js +712 -0
  347. package/dist/esm/spreadsheet/data-operations.js.map +1 -0
  348. package/dist/esm/spreadsheet/deduplication-utils.d.ts +31 -0
  349. package/dist/esm/spreadsheet/deduplication-utils.js +54 -0
  350. package/dist/esm/spreadsheet/deduplication-utils.js.map +1 -0
  351. package/dist/esm/spreadsheet/range-operations.d.ts +184 -0
  352. package/dist/esm/spreadsheet/range-operations.js +591 -0
  353. package/dist/esm/spreadsheet/range-operations.js.map +1 -0
  354. package/dist/esm/spreadsheet/sheet-operations.d.ts +30 -0
  355. package/dist/esm/spreadsheet/sheet-operations.js +359 -0
  356. package/dist/esm/spreadsheet/sheet-operations.js.map +1 -0
  357. package/dist/esm/spreadsheet/spreadsheet-management.d.ts +21 -0
  358. package/dist/esm/spreadsheet/spreadsheet-management.js +73 -0
  359. package/dist/esm/spreadsheet/spreadsheet-management.js.map +1 -0
  360. package/dist/esm/types.d.ts +53 -0
  361. package/dist/esm/types.js +1 -0
  362. package/dist/esm/types.js.map +1 -0
  363. package/package.json +108 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/kevin/Dev/Projects/ai/mcp-z/servers/mcp-sheets/src/setup/index.ts"],"sourcesContent":["export { createConfig, parseConfig } from './config.js';\nexport { createHTTPServer } from './http.js';\nexport { createOAuthAdapters } from './oauth-google.js';\nexport * from './runtime.js';\nexport { createStdioServer } from './stdio.js';\n"],"names":["createConfig","parseConfig","createHTTPServer","createOAuthAdapters","createStdioServer"],"mappings":"AAAA,SAASA,YAAY,EAAEC,WAAW,QAAQ,cAAc;AACxD,SAASC,gBAAgB,QAAQ,YAAY;AAC7C,SAASC,mBAAmB,QAAQ,oBAAoB;AACxD,cAAc,eAAe;AAC7B,SAASC,iBAAiB,QAAQ,aAAa"}
@@ -0,0 +1,54 @@
1
+ import { type AuthEmailProvider } from '@mcp-z/oauth';
2
+ import type { CachedToken } from '@mcp-z/oauth-google';
3
+ import { DcrOAuthProvider, LoopbackOAuthProvider, ServiceAccountProvider } from '@mcp-z/oauth-google';
4
+ import type { Logger, PromptModule, ToolModule } from '@mcp-z/server';
5
+ import type { Router } from 'express';
6
+ import type { Keyv } from 'keyv';
7
+ import type { ServerConfig } from '../types.js';
8
+ /**
9
+ * Gmail OAuth runtime dependencies.
10
+ */
11
+ export interface OAuthRuntimeDeps {
12
+ logger: Logger;
13
+ tokenStore: Keyv<CachedToken>;
14
+ dcrStore?: Keyv<unknown>;
15
+ }
16
+ /**
17
+ * Auth middleware helpers used to wrap MCP modules.
18
+ */
19
+ export interface AuthMiddleware {
20
+ withToolAuth<T extends {
21
+ name: string;
22
+ config: unknown;
23
+ handler: unknown;
24
+ }>(module: T): T;
25
+ withResourceAuth<T extends {
26
+ name: string;
27
+ template?: unknown;
28
+ config?: unknown;
29
+ handler: unknown;
30
+ }>(module: T): T;
31
+ withPromptAuth<T extends {
32
+ name: string;
33
+ config: unknown;
34
+ handler: unknown;
35
+ }>(module: T): T;
36
+ }
37
+ /**
38
+ * Result returned by createOAuthAdapters.
39
+ */
40
+ export interface OAuthAdapters {
41
+ primary: LoopbackOAuthProvider | ServiceAccountProvider | DcrOAuthProvider;
42
+ middleware: AuthMiddleware;
43
+ authAdapter: AuthEmailProvider;
44
+ accountTools: ToolModule[];
45
+ accountPrompts: PromptModule[];
46
+ dcrRouter?: Router;
47
+ }
48
+ /**
49
+ * Create Sheets OAuth adapters and helpers.
50
+ *
51
+ * @param config Sheets server configuration.
52
+ * @param deps Runtime dependencies (logger, token store, optional DCR store).
53
+ */
54
+ export declare function createOAuthAdapters(config: ServerConfig, deps: OAuthRuntimeDeps, baseUrl?: string): Promise<OAuthAdapters>;
@@ -0,0 +1,142 @@
1
+ import { AccountServer } from '@mcp-z/oauth';
2
+ import { createDcrRouter, DcrOAuthProvider, LoopbackOAuthProvider, ServiceAccountProvider } from '@mcp-z/oauth-google';
3
+ import { GOOGLE_SCOPE } from '../constants.js';
4
+ /**
5
+ * Create Sheets OAuth adapters and helpers.
6
+ *
7
+ * @param config Sheets server configuration.
8
+ * @param deps Runtime dependencies (logger, token store, optional DCR store).
9
+ */ export async function createOAuthAdapters(config, deps, baseUrl) {
10
+ const { logger, tokenStore, dcrStore } = deps;
11
+ const oauthStaticConfig = {
12
+ service: config.name,
13
+ clientId: config.clientId,
14
+ clientSecret: config.clientSecret,
15
+ scope: GOOGLE_SCOPE,
16
+ auth: config.auth,
17
+ headless: config.headless,
18
+ redirectUri: config.transport.type === 'stdio' ? undefined : config.redirectUri,
19
+ ...config.serviceAccountKeyFile && {
20
+ serviceAccountKeyFile: config.serviceAccountKeyFile
21
+ },
22
+ ...baseUrl && {
23
+ baseUrl
24
+ }
25
+ };
26
+ let primary;
27
+ if (oauthStaticConfig.auth === 'dcr') {
28
+ logger.debug('Creating DCR provider', {
29
+ service: oauthStaticConfig.service
30
+ });
31
+ if (!dcrStore) {
32
+ throw new Error('DCR mode requires dcrStore to be configured');
33
+ }
34
+ if (!oauthStaticConfig.baseUrl) {
35
+ throw new Error('DCR mode requires baseUrl to be configured');
36
+ }
37
+ primary = new DcrOAuthProvider({
38
+ clientId: oauthStaticConfig.clientId,
39
+ ...oauthStaticConfig.clientSecret && {
40
+ clientSecret: oauthStaticConfig.clientSecret
41
+ },
42
+ scope: oauthStaticConfig.scope,
43
+ verifyEndpoint: `${oauthStaticConfig.baseUrl}/oauth/verify`,
44
+ logger
45
+ });
46
+ const dcrRouter = createDcrRouter({
47
+ store: dcrStore,
48
+ issuerUrl: oauthStaticConfig.baseUrl,
49
+ baseUrl: oauthStaticConfig.baseUrl,
50
+ scopesSupported: oauthStaticConfig.scope.split(' '),
51
+ clientConfig: {
52
+ clientId: oauthStaticConfig.clientId,
53
+ ...oauthStaticConfig.clientSecret && {
54
+ clientSecret: oauthStaticConfig.clientSecret
55
+ }
56
+ }
57
+ });
58
+ const middleware = primary.authMiddleware();
59
+ const authAdapter = {
60
+ getUserEmail: ()=>{
61
+ throw new Error('DCR mode does not support getUserEmail - tokens are provided via bearer auth');
62
+ }
63
+ };
64
+ return {
65
+ primary,
66
+ middleware: middleware,
67
+ authAdapter,
68
+ accountTools: [],
69
+ accountPrompts: [],
70
+ dcrRouter
71
+ };
72
+ }
73
+ if (oauthStaticConfig.auth === 'service-account') {
74
+ if (!oauthStaticConfig.serviceAccountKeyFile) {
75
+ throw new Error('Service account key file is required when auth mode is "service-account". Set GOOGLE_SERVICE_ACCOUNT_KEY_FILE environment variable or use --service-account-key-file flag.');
76
+ }
77
+ logger.debug('Creating service account provider', {
78
+ service: oauthStaticConfig.service
79
+ });
80
+ primary = new ServiceAccountProvider({
81
+ keyFilePath: oauthStaticConfig.serviceAccountKeyFile,
82
+ scopes: oauthStaticConfig.scope.split(' '),
83
+ logger
84
+ });
85
+ } else {
86
+ logger.debug('Creating loopback OAuth provider', {
87
+ service: oauthStaticConfig.service
88
+ });
89
+ primary = new LoopbackOAuthProvider({
90
+ service: oauthStaticConfig.service,
91
+ clientId: oauthStaticConfig.clientId,
92
+ clientSecret: oauthStaticConfig.clientSecret,
93
+ scope: oauthStaticConfig.scope,
94
+ headless: oauthStaticConfig.headless,
95
+ logger,
96
+ tokenStore,
97
+ ...oauthStaticConfig.redirectUri !== undefined && {
98
+ redirectUri: oauthStaticConfig.redirectUri
99
+ }
100
+ });
101
+ }
102
+ const authAdapter = {
103
+ getUserEmail: (accountId)=>primary.getUserEmail(accountId),
104
+ ...'authenticateNewAccount' in primary && primary.authenticateNewAccount ? {
105
+ authenticateNewAccount: ()=>{
106
+ var _primary_authenticateNewAccount;
107
+ return (_primary_authenticateNewAccount = primary.authenticateNewAccount) === null || _primary_authenticateNewAccount === void 0 ? void 0 : _primary_authenticateNewAccount.call(primary);
108
+ }
109
+ } : {}
110
+ };
111
+ let middleware;
112
+ let accountTools;
113
+ let accountPrompts;
114
+ if (oauthStaticConfig.auth === 'service-account') {
115
+ middleware = primary.authMiddleware();
116
+ accountTools = [];
117
+ accountPrompts = [];
118
+ logger.debug('Service account mode - no account tools', {
119
+ service: oauthStaticConfig.service
120
+ });
121
+ } else {
122
+ middleware = primary.authMiddleware();
123
+ const result = AccountServer.createLoopback({
124
+ service: oauthStaticConfig.service,
125
+ store: tokenStore,
126
+ logger,
127
+ auth: authAdapter
128
+ });
129
+ accountTools = result.tools;
130
+ accountPrompts = result.prompts;
131
+ logger.debug('Loopback OAuth (multi-account mode)', {
132
+ service: oauthStaticConfig.service
133
+ });
134
+ }
135
+ return {
136
+ primary,
137
+ middleware: middleware,
138
+ authAdapter,
139
+ accountTools,
140
+ accountPrompts
141
+ };
142
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/kevin/Dev/Projects/ai/mcp-z/servers/mcp-sheets/src/setup/oauth-google.ts"],"sourcesContent":["import { AccountServer, type AuthEmailProvider } from '@mcp-z/oauth';\nimport type { CachedToken } from '@mcp-z/oauth-google';\nimport { createDcrRouter, DcrOAuthProvider, LoopbackOAuthProvider, ServiceAccountProvider } from '@mcp-z/oauth-google';\nimport type { Logger, PromptModule, ToolModule } from '@mcp-z/server';\nimport type { Router } from 'express';\nimport type { Keyv } from 'keyv';\nimport { GOOGLE_SCOPE } from '../constants.ts';\nimport type { ServerConfig } from '../types.js';\n\n/**\n * Gmail OAuth runtime dependencies.\n */\nexport interface OAuthRuntimeDeps {\n logger: Logger;\n tokenStore: Keyv<CachedToken>;\n dcrStore?: Keyv<unknown>;\n}\n\n/**\n * Auth middleware helpers used to wrap MCP modules.\n */\nexport interface AuthMiddleware {\n withToolAuth<T extends { name: string; config: unknown; handler: unknown }>(module: T): T;\n withResourceAuth<T extends { name: string; template?: unknown; config?: unknown; handler: unknown }>(module: T): T;\n withPromptAuth<T extends { name: string; config: unknown; handler: unknown }>(module: T): T;\n}\n\n/**\n * Result returned by createOAuthAdapters.\n */\nexport interface OAuthAdapters {\n primary: LoopbackOAuthProvider | ServiceAccountProvider | DcrOAuthProvider;\n middleware: AuthMiddleware;\n authAdapter: AuthEmailProvider;\n accountTools: ToolModule[];\n accountPrompts: PromptModule[];\n dcrRouter?: Router;\n}\n\n/**\n * Create Sheets OAuth adapters and helpers.\n *\n * @param config Sheets server configuration.\n * @param deps Runtime dependencies (logger, token store, optional DCR store).\n */\nexport async function createOAuthAdapters(config: ServerConfig, deps: OAuthRuntimeDeps, baseUrl?: string): Promise<OAuthAdapters> {\n const { logger, tokenStore, dcrStore } = deps;\n const oauthStaticConfig = {\n service: config.name,\n clientId: config.clientId,\n clientSecret: config.clientSecret,\n scope: GOOGLE_SCOPE,\n auth: config.auth,\n headless: config.headless,\n redirectUri: config.transport.type === 'stdio' ? undefined : config.redirectUri,\n ...(config.serviceAccountKeyFile && { serviceAccountKeyFile: config.serviceAccountKeyFile }),\n ...(baseUrl && { baseUrl }),\n };\n\n let primary: LoopbackOAuthProvider | ServiceAccountProvider | DcrOAuthProvider;\n\n if (oauthStaticConfig.auth === 'dcr') {\n logger.debug('Creating DCR provider', { service: oauthStaticConfig.service });\n\n if (!dcrStore) {\n throw new Error('DCR mode requires dcrStore to be configured');\n }\n if (!oauthStaticConfig.baseUrl) {\n throw new Error('DCR mode requires baseUrl to be configured');\n }\n\n primary = new DcrOAuthProvider({\n clientId: oauthStaticConfig.clientId,\n ...(oauthStaticConfig.clientSecret && { clientSecret: oauthStaticConfig.clientSecret }),\n scope: oauthStaticConfig.scope,\n verifyEndpoint: `${oauthStaticConfig.baseUrl}/oauth/verify`,\n logger,\n });\n\n const dcrRouter = createDcrRouter({\n store: dcrStore,\n issuerUrl: oauthStaticConfig.baseUrl,\n baseUrl: oauthStaticConfig.baseUrl,\n scopesSupported: oauthStaticConfig.scope.split(' '),\n clientConfig: {\n clientId: oauthStaticConfig.clientId,\n ...(oauthStaticConfig.clientSecret && { clientSecret: oauthStaticConfig.clientSecret }),\n },\n });\n\n const middleware = primary.authMiddleware();\n const authAdapter: AuthEmailProvider = {\n getUserEmail: () => {\n throw new Error('DCR mode does not support getUserEmail - tokens are provided via bearer auth');\n },\n };\n\n return {\n primary,\n middleware: middleware as unknown as AuthMiddleware,\n authAdapter,\n accountTools: [],\n accountPrompts: [],\n dcrRouter,\n };\n }\n\n if (oauthStaticConfig.auth === 'service-account') {\n if (!oauthStaticConfig.serviceAccountKeyFile) {\n throw new Error('Service account key file is required when auth mode is \"service-account\". Set GOOGLE_SERVICE_ACCOUNT_KEY_FILE environment variable or use --service-account-key-file flag.');\n }\n\n logger.debug('Creating service account provider', { service: oauthStaticConfig.service });\n primary = new ServiceAccountProvider({\n keyFilePath: oauthStaticConfig.serviceAccountKeyFile,\n scopes: oauthStaticConfig.scope.split(' '),\n logger,\n });\n } else {\n logger.debug('Creating loopback OAuth provider', { service: oauthStaticConfig.service });\n primary = new LoopbackOAuthProvider({\n service: oauthStaticConfig.service,\n clientId: oauthStaticConfig.clientId,\n clientSecret: oauthStaticConfig.clientSecret,\n scope: oauthStaticConfig.scope,\n headless: oauthStaticConfig.headless,\n logger,\n tokenStore,\n ...(oauthStaticConfig.redirectUri !== undefined && { redirectUri: oauthStaticConfig.redirectUri }),\n });\n }\n\n const authAdapter: AuthEmailProvider = {\n getUserEmail: (accountId) => primary.getUserEmail(accountId),\n ...('authenticateNewAccount' in primary && primary.authenticateNewAccount\n ? {\n authenticateNewAccount: () => primary.authenticateNewAccount?.(),\n }\n : {}),\n };\n\n let middleware: ReturnType<LoopbackOAuthProvider['authMiddleware']>;\n let accountTools: ToolModule[];\n let accountPrompts: PromptModule[];\n\n if (oauthStaticConfig.auth === 'service-account') {\n middleware = primary.authMiddleware();\n accountTools = [];\n accountPrompts = [];\n logger.debug('Service account mode - no account tools', { service: oauthStaticConfig.service });\n } else {\n middleware = primary.authMiddleware();\n\n const result = AccountServer.createLoopback({\n service: oauthStaticConfig.service,\n store: tokenStore,\n logger,\n auth: authAdapter,\n });\n accountTools = result.tools as ToolModule[];\n accountPrompts = result.prompts as PromptModule[];\n logger.debug('Loopback OAuth (multi-account mode)', { service: oauthStaticConfig.service });\n }\n\n return {\n primary,\n middleware: middleware as unknown as AuthMiddleware,\n authAdapter,\n accountTools,\n accountPrompts,\n };\n}\n"],"names":["AccountServer","createDcrRouter","DcrOAuthProvider","LoopbackOAuthProvider","ServiceAccountProvider","GOOGLE_SCOPE","createOAuthAdapters","config","deps","baseUrl","logger","tokenStore","dcrStore","oauthStaticConfig","service","name","clientId","clientSecret","scope","auth","headless","redirectUri","transport","type","undefined","serviceAccountKeyFile","primary","debug","Error","verifyEndpoint","dcrRouter","store","issuerUrl","scopesSupported","split","clientConfig","middleware","authMiddleware","authAdapter","getUserEmail","accountTools","accountPrompts","keyFilePath","scopes","accountId","authenticateNewAccount","result","createLoopback","tools","prompts"],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { CachedToken } from '@mcp-z/oauth-google';
2
+ import type { Logger, MiddlewareLayer } from '@mcp-z/server';
3
+ import type { CommonRuntime, RuntimeOverrides, ServerConfig } from '../types.js';
4
+ import { type OAuthAdapters } from './oauth-google.js';
5
+ export declare function createLogger(config: ServerConfig): Logger;
6
+ export declare function createTokenStore(baseDir: string): Promise<import("keyv").Keyv<CachedToken>>;
7
+ export declare function createDcrStore(baseDir: string, required: boolean): Promise<import("keyv").Keyv<unknown>>;
8
+ export declare function createAuthLayer(authMiddleware: OAuthAdapters['middleware']): MiddlewareLayer;
9
+ export declare function createLoggingLayer(logger: Logger): MiddlewareLayer;
10
+ export declare function createDefaultRuntime(config: ServerConfig, overrides?: RuntimeOverrides): Promise<CommonRuntime>;
@@ -0,0 +1,84 @@
1
+ import { sanitizeForLoggingFormatter } from '@mcp-z/oauth';
2
+ import { createLoggingMiddleware } from '@mcp-z/server';
3
+ import * as fs from 'fs';
4
+ import * as path from 'path';
5
+ import pino from 'pino';
6
+ import createStore from '../lib/create-store.js';
7
+ import * as mcp from '../mcp/index.js';
8
+ import { createOAuthAdapters } from './oauth-google.js';
9
+ export function createLogger(config) {
10
+ var _config_logLevel;
11
+ const hasStdio = config.transport.type === 'stdio';
12
+ const logsPath = path.join(config.baseDir, 'logs', `${config.name}.log`);
13
+ if (hasStdio) fs.mkdirSync(path.dirname(logsPath), {
14
+ recursive: true
15
+ });
16
+ return pino({
17
+ level: (_config_logLevel = config.logLevel) !== null && _config_logLevel !== void 0 ? _config_logLevel : 'info',
18
+ formatters: sanitizeForLoggingFormatter()
19
+ }, hasStdio ? pino.destination({
20
+ dest: logsPath,
21
+ sync: false
22
+ }) : pino.destination(1));
23
+ }
24
+ export async function createTokenStore(baseDir) {
25
+ const storeUri = process.env.STORE_URI || `file://${path.join(baseDir, 'tokens.json')}`;
26
+ return createStore(storeUri);
27
+ }
28
+ export async function createDcrStore(baseDir, required) {
29
+ if (!required) return undefined;
30
+ const dcrStoreUri = process.env.DCR_STORE_URI || `file://${path.join(baseDir, 'dcr.json')}`;
31
+ return createStore(dcrStoreUri);
32
+ }
33
+ export function createAuthLayer(authMiddleware) {
34
+ return {
35
+ withTool: authMiddleware.withToolAuth,
36
+ withResource: authMiddleware.withResourceAuth,
37
+ withPrompt: authMiddleware.withPromptAuth
38
+ };
39
+ }
40
+ export function createLoggingLayer(logger) {
41
+ const logging = createLoggingMiddleware({
42
+ logger
43
+ });
44
+ return {
45
+ withTool: logging.withToolLogging,
46
+ withResource: logging.withResourceLogging,
47
+ withPrompt: logging.withPromptLogging
48
+ };
49
+ }
50
+ export async function createDefaultRuntime(config, overrides) {
51
+ var _config_baseUrl, _ref, _ref1;
52
+ if (config.auth === 'dcr' && config.transport.type !== 'http') throw new Error('DCR mode requires an HTTP transport');
53
+ const logger = createLogger(config);
54
+ const tokenStore = await createTokenStore(config.baseDir);
55
+ const baseUrl = (_config_baseUrl = config.baseUrl) !== null && _config_baseUrl !== void 0 ? _config_baseUrl : config.transport.type === 'http' && config.transport.port ? `http://localhost:${config.transport.port}` : undefined;
56
+ const dcrStore = await createDcrStore(config.baseDir, config.auth === 'dcr');
57
+ const oauthAdapters = await createOAuthAdapters(config, {
58
+ logger,
59
+ tokenStore,
60
+ dcrStore
61
+ }, baseUrl);
62
+ const deps = {
63
+ config,
64
+ logger,
65
+ tokenStore,
66
+ oauthAdapters,
67
+ baseUrl
68
+ };
69
+ const createDomainModules = (_ref = overrides === null || overrides === void 0 ? void 0 : overrides.createDomainModules) !== null && _ref !== void 0 ? _ref : ()=>({
70
+ tools: Object.values(mcp.toolFactories).map((factory)=>factory()),
71
+ resources: Object.values(mcp.resourceFactories).map((factory)=>factory()),
72
+ prompts: Object.values(mcp.promptFactories).map((factory)=>factory())
73
+ });
74
+ const middlewareFactories = (_ref1 = overrides === null || overrides === void 0 ? void 0 : overrides.middlewareFactories) !== null && _ref1 !== void 0 ? _ref1 : [
75
+ ()=>createAuthLayer(oauthAdapters.middleware),
76
+ ()=>createLoggingLayer(logger)
77
+ ];
78
+ return {
79
+ deps,
80
+ middlewareFactories,
81
+ createDomainModules,
82
+ close: async ()=>{}
83
+ };
84
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/kevin/Dev/Projects/ai/mcp-z/servers/mcp-sheets/src/setup/runtime.ts"],"sourcesContent":["import { sanitizeForLoggingFormatter } from '@mcp-z/oauth';\nimport type { CachedToken } from '@mcp-z/oauth-google';\nimport type { Logger, MiddlewareLayer } from '@mcp-z/server';\nimport { createLoggingMiddleware } from '@mcp-z/server';\nimport * as fs from 'fs';\nimport * as path from 'path';\nimport pino from 'pino';\nimport createStore from '../lib/create-store.js';\nimport * as mcp from '../mcp/index.js';\nimport type { CommonRuntime, RuntimeDeps, RuntimeOverrides, ServerConfig } from '../types.js';\nimport { createOAuthAdapters, type OAuthAdapters } from './oauth-google.js';\n\nexport function createLogger(config: ServerConfig): Logger {\n const hasStdio = config.transport.type === 'stdio';\n const logsPath = path.join(config.baseDir, 'logs', `${config.name}.log`);\n if (hasStdio) fs.mkdirSync(path.dirname(logsPath), { recursive: true });\n return pino({ level: config.logLevel ?? 'info', formatters: sanitizeForLoggingFormatter() }, hasStdio ? pino.destination({ dest: logsPath, sync: false }) : pino.destination(1));\n}\n\nexport async function createTokenStore(baseDir: string) {\n const storeUri = process.env.STORE_URI || `file://${path.join(baseDir, 'tokens.json')}`;\n return createStore<CachedToken>(storeUri);\n}\n\nexport async function createDcrStore(baseDir: string, required: boolean) {\n if (!required) return undefined;\n const dcrStoreUri = process.env.DCR_STORE_URI || `file://${path.join(baseDir, 'dcr.json')}`;\n return createStore<unknown>(dcrStoreUri);\n}\n\nexport function createAuthLayer(authMiddleware: OAuthAdapters['middleware']): MiddlewareLayer {\n return {\n withTool: authMiddleware.withToolAuth,\n withResource: authMiddleware.withResourceAuth,\n withPrompt: authMiddleware.withPromptAuth,\n };\n}\n\nexport function createLoggingLayer(logger: Logger): MiddlewareLayer {\n const logging = createLoggingMiddleware({ logger });\n return {\n withTool: logging.withToolLogging,\n withResource: logging.withResourceLogging,\n withPrompt: logging.withPromptLogging,\n };\n}\n\nexport async function createDefaultRuntime(config: ServerConfig, overrides?: RuntimeOverrides): Promise<CommonRuntime> {\n if (config.auth === 'dcr' && config.transport.type !== 'http') throw new Error('DCR mode requires an HTTP transport');\n\n const logger = createLogger(config);\n const tokenStore = await createTokenStore(config.baseDir);\n const baseUrl = config.baseUrl ?? (config.transport.type === 'http' && config.transport.port ? `http://localhost:${config.transport.port}` : undefined);\n const dcrStore = await createDcrStore(config.baseDir, config.auth === 'dcr');\n const oauthAdapters = await createOAuthAdapters(config, { logger, tokenStore, dcrStore }, baseUrl);\n const deps: RuntimeDeps = { config, logger, tokenStore, oauthAdapters, baseUrl };\n const createDomainModules =\n overrides?.createDomainModules ??\n (() => ({\n tools: Object.values(mcp.toolFactories).map((factory) => factory()),\n resources: Object.values(mcp.resourceFactories).map((factory) => factory()),\n prompts: Object.values(mcp.promptFactories).map((factory) => factory()),\n }));\n const middlewareFactories = overrides?.middlewareFactories ?? [() => createAuthLayer(oauthAdapters.middleware), () => createLoggingLayer(logger)];\n\n return {\n deps,\n middlewareFactories,\n createDomainModules,\n close: async () => {},\n };\n}\n"],"names":["sanitizeForLoggingFormatter","createLoggingMiddleware","fs","path","pino","createStore","mcp","createOAuthAdapters","createLogger","config","hasStdio","transport","type","logsPath","join","baseDir","name","mkdirSync","dirname","recursive","level","logLevel","formatters","destination","dest","sync","createTokenStore","storeUri","process","env","STORE_URI","createDcrStore","required","undefined","dcrStoreUri","DCR_STORE_URI","createAuthLayer","authMiddleware","withTool","withToolAuth","withResource","withResourceAuth","withPrompt","withPromptAuth","createLoggingLayer","logger","logging","withToolLogging","withResourceLogging","withPromptLogging","createDefaultRuntime","overrides","auth","Error","tokenStore","baseUrl","port","dcrStore","oauthAdapters","deps","createDomainModules","tools","Object","values","toolFactories","map","factory","resources","resourceFactories","prompts","promptFactories","middlewareFactories","middleware","close"],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import type { RuntimeOverrides, ServerConfig } from '../types.js';
3
+ export declare function createStdioServer(config: ServerConfig, overrides?: RuntimeOverrides): Promise<{
4
+ mcpServer: McpServer;
5
+ logger: import("@mcp-z/server").Logger;
6
+ close: () => Promise<void>;
7
+ }>;
@@ -0,0 +1,38 @@
1
+ import { composeMiddleware, connectStdio, registerPrompts, registerResources, registerTools } from '@mcp-z/server';
2
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
3
+ import { createDefaultRuntime } from './runtime.js';
4
+ export async function createStdioServer(config, overrides) {
5
+ const runtime = await createDefaultRuntime(config, overrides);
6
+ const modules = runtime.createDomainModules();
7
+ const layers = runtime.middlewareFactories.map((factory)=>factory(runtime.deps));
8
+ const composed = composeMiddleware(modules, layers);
9
+ const logger = runtime.deps.logger;
10
+ const tools = [
11
+ ...composed.tools,
12
+ ...runtime.deps.oauthAdapters.accountTools
13
+ ];
14
+ const prompts = [
15
+ ...composed.prompts,
16
+ ...runtime.deps.oauthAdapters.accountPrompts
17
+ ];
18
+ const mcpServer = new McpServer({
19
+ name: config.name,
20
+ version: config.version
21
+ });
22
+ registerTools(mcpServer, tools);
23
+ registerResources(mcpServer, composed.resources);
24
+ registerPrompts(mcpServer, prompts);
25
+ logger.info(`Starting ${config.name} MCP server (stdio)`);
26
+ const { close } = await connectStdio(mcpServer, {
27
+ logger
28
+ });
29
+ logger.info('stdio transport ready');
30
+ return {
31
+ mcpServer,
32
+ logger,
33
+ close: async ()=>{
34
+ await close();
35
+ await runtime.close();
36
+ }
37
+ };
38
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/kevin/Dev/Projects/ai/mcp-z/servers/mcp-sheets/src/setup/stdio.ts"],"sourcesContent":["import { composeMiddleware, connectStdio, registerPrompts, registerResources, registerTools } from '@mcp-z/server';\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';\nimport type { RuntimeOverrides, ServerConfig } from '../types.js';\nimport { createDefaultRuntime } from './runtime.js';\n\nexport async function createStdioServer(config: ServerConfig, overrides?: RuntimeOverrides) {\n const runtime = await createDefaultRuntime(config, overrides);\n const modules = runtime.createDomainModules();\n const layers = runtime.middlewareFactories.map((factory) => factory(runtime.deps));\n const composed = composeMiddleware(modules, layers);\n const logger = runtime.deps.logger;\n\n const tools = [...composed.tools, ...runtime.deps.oauthAdapters.accountTools];\n const prompts = [...composed.prompts, ...runtime.deps.oauthAdapters.accountPrompts];\n\n const mcpServer = new McpServer({ name: config.name, version: config.version });\n registerTools(mcpServer, tools);\n registerResources(mcpServer, composed.resources);\n registerPrompts(mcpServer, prompts);\n\n logger.info(`Starting ${config.name} MCP server (stdio)`);\n const { close } = await connectStdio(mcpServer, { logger });\n logger.info('stdio transport ready');\n\n return {\n mcpServer,\n logger,\n close: async () => {\n await close();\n await runtime.close();\n },\n };\n}\n"],"names":["composeMiddleware","connectStdio","registerPrompts","registerResources","registerTools","McpServer","createDefaultRuntime","createStdioServer","config","overrides","runtime","modules","createDomainModules","layers","middlewareFactories","map","factory","deps","composed","logger","tools","oauthAdapters","accountTools","prompts","accountPrompts","mcpServer","name","version","resources","info","close"],"mappings":"AAAA,SAASA,iBAAiB,EAAEC,YAAY,EAAEC,eAAe,EAAEC,iBAAiB,EAAEC,aAAa,QAAQ,gBAAgB;AACnH,SAASC,SAAS,QAAQ,0CAA0C;AAEpE,SAASC,oBAAoB,QAAQ,eAAe;AAEpD,OAAO,eAAeC,kBAAkBC,MAAoB,EAAEC,SAA4B;IACxF,MAAMC,UAAU,MAAMJ,qBAAqBE,QAAQC;IACnD,MAAME,UAAUD,QAAQE,mBAAmB;IAC3C,MAAMC,SAASH,QAAQI,mBAAmB,CAACC,GAAG,CAAC,CAACC,UAAYA,QAAQN,QAAQO,IAAI;IAChF,MAAMC,WAAWlB,kBAAkBW,SAASE;IAC5C,MAAMM,SAAST,QAAQO,IAAI,CAACE,MAAM;IAElC,MAAMC,QAAQ;WAAIF,SAASE,KAAK;WAAKV,QAAQO,IAAI,CAACI,aAAa,CAACC,YAAY;KAAC;IAC7E,MAAMC,UAAU;WAAIL,SAASK,OAAO;WAAKb,QAAQO,IAAI,CAACI,aAAa,CAACG,cAAc;KAAC;IAEnF,MAAMC,YAAY,IAAIpB,UAAU;QAAEqB,MAAMlB,OAAOkB,IAAI;QAAEC,SAASnB,OAAOmB,OAAO;IAAC;IAC7EvB,cAAcqB,WAAWL;IACzBjB,kBAAkBsB,WAAWP,SAASU,SAAS;IAC/C1B,gBAAgBuB,WAAWF;IAE3BJ,OAAOU,IAAI,CAAC,CAAC,SAAS,EAAErB,OAAOkB,IAAI,CAAC,mBAAmB,CAAC;IACxD,MAAM,EAAEI,KAAK,EAAE,GAAG,MAAM7B,aAAawB,WAAW;QAAEN;IAAO;IACzDA,OAAOU,IAAI,CAAC;IAEZ,OAAO;QACLJ;QACAN;QACAW,OAAO;YACL,MAAMA;YACN,MAAMpB,QAAQoB,KAAK;QACrB;IACF;AACF"}
@@ -0,0 +1 @@
1
+ export declare function a1Col(colIndex: number): string;
@@ -0,0 +1,10 @@
1
+ export function a1Col(colIndex) {
2
+ let col = '';
3
+ let i = colIndex;
4
+ while(i > 0){
5
+ const rem = (i - 1) % 26;
6
+ col = String.fromCharCode(65 + rem) + col;
7
+ i = Math.floor((i - 1) / 26);
8
+ }
9
+ return col;
10
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/kevin/Dev/Projects/ai/mcp-z/servers/mcp-sheets/src/spreadsheet/column-utilities.ts"],"sourcesContent":["export function a1Col(colIndex: number): string {\n let col = '';\n let i = colIndex;\n while (i > 0) {\n const rem = (i - 1) % 26;\n col = String.fromCharCode(65 + rem) + col;\n i = Math.floor((i - 1) / 26);\n }\n return col;\n}\n"],"names":["a1Col","colIndex","col","i","rem","String","fromCharCode","Math","floor"],"mappings":"AAAA,OAAO,SAASA,MAAMC,QAAgB;IACpC,IAAIC,MAAM;IACV,IAAIC,IAAIF;IACR,MAAOE,IAAI,EAAG;QACZ,MAAMC,MAAM,AAACD,CAAAA,IAAI,CAAA,IAAK;QACtBD,MAAMG,OAAOC,YAAY,CAAC,KAAKF,OAAOF;QACtCC,IAAII,KAAKC,KAAK,CAAC,AAACL,CAAAA,IAAI,CAAA,IAAK;IAC3B;IACA,OAAOD;AACT"}
@@ -0,0 +1,19 @@
1
+ /** Streaming CSV parsing utilities for memory-efficient large file processing */
2
+ import { Readable } from 'stream';
3
+ /**
4
+ * Get readable stream from CSV URI
5
+ *
6
+ * Memory efficiency:
7
+ * - file:// URIs stream directly from disk
8
+ * - http:// URIs stream directly from response (no temp files!)
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * const readStream = await getCsvReadStream(csvUri);
13
+ * const parser = readStream.pipe(parse({ columns: true }));
14
+ * for await (const record of parser) {
15
+ * // Process record
16
+ * }
17
+ * ```
18
+ */
19
+ export declare function getCsvReadStream(csvUri: string): Promise<Readable>;
@@ -0,0 +1,43 @@
1
+ /** Streaming CSV parsing utilities for memory-efficient large file processing */ import { createReadStream } from 'fs';
2
+ import { resolve } from 'path';
3
+ import { Readable } from 'stream';
4
+ /**
5
+ * Get readable stream from CSV URI
6
+ *
7
+ * Memory efficiency:
8
+ * - file:// URIs stream directly from disk
9
+ * - http:// URIs stream directly from response (no temp files!)
10
+ *
11
+ * @example
12
+ * ```ts
13
+ * const readStream = await getCsvReadStream(csvUri);
14
+ * const parser = readStream.pipe(parse({ columns: true }));
15
+ * for await (const record of parser) {
16
+ * // Process record
17
+ * }
18
+ * ```
19
+ */ export async function getCsvReadStream(csvUri) {
20
+ if (csvUri.startsWith('file://')) {
21
+ // Local file - stream directly from disk
22
+ const filePath = csvUri.replace('file://', '');
23
+ const resolvedPath = resolve(filePath);
24
+ return createReadStream(resolvedPath, {
25
+ encoding: 'utf-8'
26
+ });
27
+ }
28
+ if (csvUri.startsWith('http://') || csvUri.startsWith('https://')) {
29
+ // Remote file - stream directly from fetch response
30
+ const response = await fetch(csvUri);
31
+ if (!response.ok) {
32
+ throw new Error(`Failed to fetch CSV from ${csvUri}: ${response.statusText}`);
33
+ }
34
+ if (!response.body) {
35
+ throw new Error(`No response body from ${csvUri}`);
36
+ }
37
+ // Convert web stream to Node.js stream
38
+ // response.body is ReadableStream<Uint8Array> from fetch API
39
+ // Cast to Node.js ReadableStream type for compatibility with Readable.fromWeb
40
+ return Readable.fromWeb(response.body);
41
+ }
42
+ throw new Error(`Invalid CSV URI: ${csvUri}. Must start with file://, http://, or https://`);
43
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["/Users/kevin/Dev/Projects/ai/mcp-z/servers/mcp-sheets/src/spreadsheet/csv-streaming.ts"],"sourcesContent":["/** Streaming CSV parsing utilities for memory-efficient large file processing */\n\nimport { createReadStream } from 'fs';\nimport { resolve } from 'path';\nimport { Readable } from 'stream';\nimport type { ReadableStream as NodeReadableStream } from 'stream/web';\n\n/**\n * Get readable stream from CSV URI\n *\n * Memory efficiency:\n * - file:// URIs stream directly from disk\n * - http:// URIs stream directly from response (no temp files!)\n *\n * @example\n * ```ts\n * const readStream = await getCsvReadStream(csvUri);\n * const parser = readStream.pipe(parse({ columns: true }));\n * for await (const record of parser) {\n * // Process record\n * }\n * ```\n */\nexport async function getCsvReadStream(csvUri: string): Promise<Readable> {\n if (csvUri.startsWith('file://')) {\n // Local file - stream directly from disk\n const filePath = csvUri.replace('file://', '');\n const resolvedPath = resolve(filePath);\n return createReadStream(resolvedPath, { encoding: 'utf-8' });\n }\n\n if (csvUri.startsWith('http://') || csvUri.startsWith('https://')) {\n // Remote file - stream directly from fetch response\n const response = await fetch(csvUri);\n if (!response.ok) {\n throw new Error(`Failed to fetch CSV from ${csvUri}: ${response.statusText}`);\n }\n\n if (!response.body) {\n throw new Error(`No response body from ${csvUri}`);\n }\n\n // Convert web stream to Node.js stream\n // response.body is ReadableStream<Uint8Array> from fetch API\n // Cast to Node.js ReadableStream type for compatibility with Readable.fromWeb\n return Readable.fromWeb(response.body as unknown as NodeReadableStream<Uint8Array>);\n }\n\n throw new Error(`Invalid CSV URI: ${csvUri}. Must start with file://, http://, or https://`);\n}\n"],"names":["createReadStream","resolve","Readable","getCsvReadStream","csvUri","startsWith","filePath","replace","resolvedPath","encoding","response","fetch","ok","Error","statusText","body","fromWeb"],"mappings":"AAAA,+EAA+E,GAE/E,SAASA,gBAAgB,QAAQ,KAAK;AACtC,SAASC,OAAO,QAAQ,OAAO;AAC/B,SAASC,QAAQ,QAAQ,SAAS;AAGlC;;;;;;;;;;;;;;;CAeC,GACD,OAAO,eAAeC,iBAAiBC,MAAc;IACnD,IAAIA,OAAOC,UAAU,CAAC,YAAY;QAChC,yCAAyC;QACzC,MAAMC,WAAWF,OAAOG,OAAO,CAAC,WAAW;QAC3C,MAAMC,eAAeP,QAAQK;QAC7B,OAAON,iBAAiBQ,cAAc;YAAEC,UAAU;QAAQ;IAC5D;IAEA,IAAIL,OAAOC,UAAU,CAAC,cAAcD,OAAOC,UAAU,CAAC,aAAa;QACjE,oDAAoD;QACpD,MAAMK,WAAW,MAAMC,MAAMP;QAC7B,IAAI,CAACM,SAASE,EAAE,EAAE;YAChB,MAAM,IAAIC,MAAM,CAAC,yBAAyB,EAAET,OAAO,EAAE,EAAEM,SAASI,UAAU,EAAE;QAC9E;QAEA,IAAI,CAACJ,SAASK,IAAI,EAAE;YAClB,MAAM,IAAIF,MAAM,CAAC,sBAAsB,EAAET,QAAQ;QACnD;QAEA,uCAAuC;QACvC,6DAA6D;QAC7D,8EAA8E;QAC9E,OAAOF,SAASc,OAAO,CAACN,SAASK,IAAI;IACvC;IAEA,MAAM,IAAIF,MAAM,CAAC,iBAAiB,EAAET,OAAO,+CAA+C,CAAC;AAC7F"}
@@ -0,0 +1,115 @@
1
+ import type { sheets_v4 } from 'googleapis';
2
+ import type { Logger } from '../types.js';
3
+ export type Cell = string | number | boolean | null | undefined;
4
+ export type Row = Cell[];
5
+ export interface ColumnMapping {
6
+ canonical: string;
7
+ sheet: string;
8
+ index: number;
9
+ }
10
+ export interface HeaderValidationResult {
11
+ valid: boolean;
12
+ missingColumns: string[];
13
+ extraColumns: string[];
14
+ mappings: ColumnMapping[];
15
+ }
16
+ export interface KeyGenerationStrategy {
17
+ keyColumns: string[];
18
+ useProviderIdLogic: boolean;
19
+ separator?: string;
20
+ }
21
+ export interface DataPartition {
22
+ toAppend: Row[];
23
+ toUpdate: Array<{
24
+ row: Row;
25
+ existingRowIndex: number;
26
+ }>;
27
+ skippedKeys: string[];
28
+ }
29
+ export interface BatchOperationResult {
30
+ updatedRows: number;
31
+ inserted: string[];
32
+ rowsSkipped: number;
33
+ errors?: string[];
34
+ }
35
+ export interface UpsertOptions {
36
+ keyStrategy: KeyGenerationStrategy;
37
+ allowUpdates: boolean;
38
+ batchSize?: number;
39
+ valueInputOption?: 'RAW' | 'USER_ENTERED';
40
+ }
41
+ export declare function discoverHeader(sheets: sheets_v4.Sheets, spreadsheetId: string, sheetTitle: string): Promise<string[]>;
42
+ export declare function validateAndMapHeaders(sheetHeaders: string[], canonicalHeaders: string[], requiredColumns?: string[]): HeaderValidationResult;
43
+ /** Ensures consistent key generation across all functions */
44
+ export declare function generateRowKey(row: Row, header: string[], strategy: KeyGenerationStrategy): string;
45
+ export declare function validateRowKeys(rows: Row[], header: string[], strategy: KeyGenerationStrategy): {
46
+ valid: boolean;
47
+ duplicateKeys: string[];
48
+ keyMap: Map<string, number[]>;
49
+ };
50
+ export declare function appendRows(sheets: sheets_v4.Sheets, params: {
51
+ spreadsheetId: string;
52
+ sheetTitle: string;
53
+ rows?: unknown[];
54
+ keySet?: Set<string> | null;
55
+ keyColumns?: string[];
56
+ header?: string[];
57
+ logger: Logger;
58
+ }): Promise<{
59
+ updatedRows: number;
60
+ inserted: string[];
61
+ rowsSkipped?: number;
62
+ }>;
63
+ export declare function appendRows(sheets: sheets_v4.Sheets, params: {
64
+ spreadsheetId: string;
65
+ sheetRef: string;
66
+ rows?: unknown[];
67
+ keySet?: Set<string> | null;
68
+ keyColumns?: string[];
69
+ header?: string[];
70
+ logger: Logger;
71
+ }): Promise<{
72
+ updatedRows: number;
73
+ inserted: string[];
74
+ rowsSkipped?: number;
75
+ }>;
76
+ export declare function mapRowsToHeader({ rows, header, canonical }: {
77
+ rows?: Row[];
78
+ header?: string[];
79
+ canonical?: string[];
80
+ }): Row[];
81
+ export declare function snapshotHeaderAndKeys(sheets: sheets_v4.Sheets, spreadsheetId: string, sheetTitle: string, keyColumns?: string[], keyStrategy?: Partial<KeyGenerationStrategy>): Promise<{
82
+ header: string[];
83
+ keySet: Set<string>;
84
+ keyIndices: number[];
85
+ }>;
86
+ /** Tracks row positions for updates in addition to keys */
87
+ export declare function snapshotHeaderKeysAndPositions(sheets: sheets_v4.Sheets, spreadsheetId: string, sheetTitle: string, keyColumns?: string[], keyStrategy?: Partial<KeyGenerationStrategy>): Promise<{
88
+ header: string[];
89
+ keySet: Set<string>;
90
+ keyToRowMap: Map<string, number>;
91
+ keyIndices: number[];
92
+ }>;
93
+ /**
94
+ * Partitions data into updates vs appends based on existing keys with row position tracking
95
+ */
96
+ export declare function partitionDataForUpsert(rows: Row[], header: string[], keyStrategy: KeyGenerationStrategy, existingKeys: Set<string>, allowUpdates?: boolean, keyToRowMap?: Map<string, number>): DataPartition;
97
+ /**
98
+ * Performs batch updates on existing rows using batchUpdate API
99
+ */
100
+ export declare function performBatchUpdates(sheets: sheets_v4.Sheets, spreadsheetId: string, sheetTitle: string, updates: Array<{
101
+ row: Row;
102
+ existingRowIndex: number;
103
+ }>, header: string[], batchSize: number, valueInputOption: 'RAW' | 'USER_ENTERED'): Promise<{
104
+ updatedRows: number;
105
+ errors?: string[];
106
+ }>;
107
+ export declare function upsertByKey(sheets: sheets_v4.Sheets, { spreadsheetId, sheetTitle, sheetRef, rows, canonicalHeaders, options, logger, }: {
108
+ spreadsheetId: string;
109
+ sheetTitle?: string;
110
+ sheetRef?: string;
111
+ rows: Row[];
112
+ canonicalHeaders?: string[];
113
+ options: UpsertOptions;
114
+ logger: Logger;
115
+ }): Promise<BatchOperationResult>;