parasut-node-sdk-mcp 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 (274) hide show
  1. package/.github/workflows/deploy.yaml +51 -0
  2. package/.github/workflows/npm-publish.yml +71 -0
  3. package/.travis.yml +15 -0
  4. package/.yo-rc.json +11 -0
  5. package/LICENSE +21 -0
  6. package/README.md +187 -0
  7. package/gulpfile.js +50 -0
  8. package/package.json +42 -0
  9. package/packages/parasut-mcp-server/README.md +312 -0
  10. package/packages/parasut-mcp-server/dist/client.d.ts +24 -0
  11. package/packages/parasut-mcp-server/dist/client.d.ts.map +1 -0
  12. package/packages/parasut-mcp-server/dist/client.js +46 -0
  13. package/packages/parasut-mcp-server/dist/client.js.map +1 -0
  14. package/packages/parasut-mcp-server/dist/config.d.ts +39 -0
  15. package/packages/parasut-mcp-server/dist/config.d.ts.map +1 -0
  16. package/packages/parasut-mcp-server/dist/config.js +74 -0
  17. package/packages/parasut-mcp-server/dist/config.js.map +1 -0
  18. package/packages/parasut-mcp-server/dist/index.d.ts +21 -0
  19. package/packages/parasut-mcp-server/dist/index.d.ts.map +1 -0
  20. package/packages/parasut-mcp-server/dist/index.js +26 -0
  21. package/packages/parasut-mcp-server/dist/index.js.map +1 -0
  22. package/packages/parasut-mcp-server/dist/server.d.ts +17 -0
  23. package/packages/parasut-mcp-server/dist/server.d.ts.map +1 -0
  24. package/packages/parasut-mcp-server/dist/server.js +61 -0
  25. package/packages/parasut-mcp-server/dist/server.js.map +1 -0
  26. package/packages/parasut-mcp-server/dist/tools/bills.d.ts +13 -0
  27. package/packages/parasut-mcp-server/dist/tools/bills.d.ts.map +1 -0
  28. package/packages/parasut-mcp-server/dist/tools/bills.js +387 -0
  29. package/packages/parasut-mcp-server/dist/tools/bills.js.map +1 -0
  30. package/packages/parasut-mcp-server/dist/tools/contacts.d.ts +13 -0
  31. package/packages/parasut-mcp-server/dist/tools/contacts.d.ts.map +1 -0
  32. package/packages/parasut-mcp-server/dist/tools/contacts.js +522 -0
  33. package/packages/parasut-mcp-server/dist/tools/contacts.js.map +1 -0
  34. package/packages/parasut-mcp-server/dist/tools/edocuments.d.ts +13 -0
  35. package/packages/parasut-mcp-server/dist/tools/edocuments.d.ts.map +1 -0
  36. package/packages/parasut-mcp-server/dist/tools/edocuments.js +514 -0
  37. package/packages/parasut-mcp-server/dist/tools/edocuments.js.map +1 -0
  38. package/packages/parasut-mcp-server/dist/tools/financial.d.ts +13 -0
  39. package/packages/parasut-mcp-server/dist/tools/financial.d.ts.map +1 -0
  40. package/packages/parasut-mcp-server/dist/tools/financial.js +321 -0
  41. package/packages/parasut-mcp-server/dist/tools/financial.js.map +1 -0
  42. package/packages/parasut-mcp-server/dist/tools/index.d.ts +19 -0
  43. package/packages/parasut-mcp-server/dist/tools/index.d.ts.map +1 -0
  44. package/packages/parasut-mcp-server/dist/tools/index.js +132 -0
  45. package/packages/parasut-mcp-server/dist/tools/index.js.map +1 -0
  46. package/packages/parasut-mcp-server/dist/tools/inventory.d.ts +11 -0
  47. package/packages/parasut-mcp-server/dist/tools/inventory.d.ts.map +1 -0
  48. package/packages/parasut-mcp-server/dist/tools/inventory.js +143 -0
  49. package/packages/parasut-mcp-server/dist/tools/inventory.js.map +1 -0
  50. package/packages/parasut-mcp-server/dist/tools/invoices.d.ts +16 -0
  51. package/packages/parasut-mcp-server/dist/tools/invoices.d.ts.map +1 -0
  52. package/packages/parasut-mcp-server/dist/tools/invoices.js +850 -0
  53. package/packages/parasut-mcp-server/dist/tools/invoices.js.map +1 -0
  54. package/packages/parasut-mcp-server/dist/tools/organization.d.ts +14 -0
  55. package/packages/parasut-mcp-server/dist/tools/organization.d.ts.map +1 -0
  56. package/packages/parasut-mcp-server/dist/tools/organization.js +377 -0
  57. package/packages/parasut-mcp-server/dist/tools/organization.js.map +1 -0
  58. package/packages/parasut-mcp-server/dist/tools/products.d.ts +13 -0
  59. package/packages/parasut-mcp-server/dist/tools/products.d.ts.map +1 -0
  60. package/packages/parasut-mcp-server/dist/tools/products.js +299 -0
  61. package/packages/parasut-mcp-server/dist/tools/products.js.map +1 -0
  62. package/packages/parasut-mcp-server/dist/utils/errors.d.ts +34 -0
  63. package/packages/parasut-mcp-server/dist/utils/errors.d.ts.map +1 -0
  64. package/packages/parasut-mcp-server/dist/utils/errors.js +217 -0
  65. package/packages/parasut-mcp-server/dist/utils/errors.js.map +1 -0
  66. package/packages/parasut-mcp-server/dist/utils/response.d.ts +94 -0
  67. package/packages/parasut-mcp-server/dist/utils/response.d.ts.map +1 -0
  68. package/packages/parasut-mcp-server/dist/utils/response.js +194 -0
  69. package/packages/parasut-mcp-server/dist/utils/response.js.map +1 -0
  70. package/packages/parasut-mcp-server/package-lock.json +2831 -0
  71. package/packages/parasut-mcp-server/package.json +70 -0
  72. package/packages/parasut-mcp-server/src/client.ts +55 -0
  73. package/packages/parasut-mcp-server/src/config.ts +99 -0
  74. package/packages/parasut-mcp-server/src/index.ts +27 -0
  75. package/packages/parasut-mcp-server/src/server.ts +79 -0
  76. package/packages/parasut-mcp-server/src/tools/bills.ts +416 -0
  77. package/packages/parasut-mcp-server/src/tools/contacts.ts +549 -0
  78. package/packages/parasut-mcp-server/src/tools/edocuments.ts +543 -0
  79. package/packages/parasut-mcp-server/src/tools/financial.ts +345 -0
  80. package/packages/parasut-mcp-server/src/tools/index.ts +158 -0
  81. package/packages/parasut-mcp-server/src/tools/inventory.ts +154 -0
  82. package/packages/parasut-mcp-server/src/tools/invoices.ts +905 -0
  83. package/packages/parasut-mcp-server/src/tools/organization.ts +405 -0
  84. package/packages/parasut-mcp-server/src/tools/products.ts +320 -0
  85. package/packages/parasut-mcp-server/src/utils/errors.ts +296 -0
  86. package/packages/parasut-mcp-server/src/utils/response.ts +280 -0
  87. package/packages/parasut-mcp-server/tsconfig.json +48 -0
  88. package/packages/parasut-node-sdk/README.md +393 -0
  89. package/packages/parasut-node-sdk/dist/client/HttpTransport.d.ts +92 -0
  90. package/packages/parasut-node-sdk/dist/client/HttpTransport.d.ts.map +1 -0
  91. package/packages/parasut-node-sdk/dist/client/HttpTransport.js +237 -0
  92. package/packages/parasut-node-sdk/dist/client/HttpTransport.js.map +1 -0
  93. package/packages/parasut-node-sdk/dist/client/JsonApi.d.ts +122 -0
  94. package/packages/parasut-node-sdk/dist/client/JsonApi.d.ts.map +1 -0
  95. package/packages/parasut-node-sdk/dist/client/JsonApi.js +192 -0
  96. package/packages/parasut-node-sdk/dist/client/JsonApi.js.map +1 -0
  97. package/packages/parasut-node-sdk/dist/client/OAuth.d.ts +117 -0
  98. package/packages/parasut-node-sdk/dist/client/OAuth.d.ts.map +1 -0
  99. package/packages/parasut-node-sdk/dist/client/OAuth.js +322 -0
  100. package/packages/parasut-node-sdk/dist/client/OAuth.js.map +1 -0
  101. package/packages/parasut-node-sdk/dist/client/ParasutClient.d.ts +198 -0
  102. package/packages/parasut-node-sdk/dist/client/ParasutClient.d.ts.map +1 -0
  103. package/packages/parasut-node-sdk/dist/client/ParasutClient.js +334 -0
  104. package/packages/parasut-node-sdk/dist/client/ParasutClient.js.map +1 -0
  105. package/packages/parasut-node-sdk/dist/client/QueryBuilder.d.ts +115 -0
  106. package/packages/parasut-node-sdk/dist/client/QueryBuilder.d.ts.map +1 -0
  107. package/packages/parasut-node-sdk/dist/client/QueryBuilder.js +206 -0
  108. package/packages/parasut-node-sdk/dist/client/QueryBuilder.js.map +1 -0
  109. package/packages/parasut-node-sdk/dist/client/RateLimiter.d.ts +77 -0
  110. package/packages/parasut-node-sdk/dist/client/RateLimiter.d.ts.map +1 -0
  111. package/packages/parasut-node-sdk/dist/client/RateLimiter.js +142 -0
  112. package/packages/parasut-node-sdk/dist/client/RateLimiter.js.map +1 -0
  113. package/packages/parasut-node-sdk/dist/client/RetryHandler.d.ts +88 -0
  114. package/packages/parasut-node-sdk/dist/client/RetryHandler.d.ts.map +1 -0
  115. package/packages/parasut-node-sdk/dist/client/RetryHandler.js +125 -0
  116. package/packages/parasut-node-sdk/dist/client/RetryHandler.js.map +1 -0
  117. package/packages/parasut-node-sdk/dist/client/errors.d.ts +87 -0
  118. package/packages/parasut-node-sdk/dist/client/errors.d.ts.map +1 -0
  119. package/packages/parasut-node-sdk/dist/client/errors.js +153 -0
  120. package/packages/parasut-node-sdk/dist/client/errors.js.map +1 -0
  121. package/packages/parasut-node-sdk/dist/generated/operations.d.ts +157 -0
  122. package/packages/parasut-node-sdk/dist/generated/operations.d.ts.map +1 -0
  123. package/packages/parasut-node-sdk/dist/generated/operations.js +1285 -0
  124. package/packages/parasut-node-sdk/dist/generated/operations.js.map +1 -0
  125. package/packages/parasut-node-sdk/dist/generated/types.d.ts +1743 -0
  126. package/packages/parasut-node-sdk/dist/generated/types.d.ts.map +1 -0
  127. package/packages/parasut-node-sdk/dist/generated/types.js +6 -0
  128. package/packages/parasut-node-sdk/dist/generated/types.js.map +1 -0
  129. package/packages/parasut-node-sdk/dist/index.d.ts +49 -0
  130. package/packages/parasut-node-sdk/dist/index.d.ts.map +1 -0
  131. package/packages/parasut-node-sdk/dist/index.js +91 -0
  132. package/packages/parasut-node-sdk/dist/index.js.map +1 -0
  133. package/packages/parasut-node-sdk/dist/resources/BaseResource.d.ts +143 -0
  134. package/packages/parasut-node-sdk/dist/resources/BaseResource.d.ts.map +1 -0
  135. package/packages/parasut-node-sdk/dist/resources/BaseResource.js +148 -0
  136. package/packages/parasut-node-sdk/dist/resources/BaseResource.js.map +1 -0
  137. package/packages/parasut-node-sdk/dist/resources/accounts.d.ts +71 -0
  138. package/packages/parasut-node-sdk/dist/resources/accounts.d.ts.map +1 -0
  139. package/packages/parasut-node-sdk/dist/resources/accounts.js +43 -0
  140. package/packages/parasut-node-sdk/dist/resources/accounts.js.map +1 -0
  141. package/packages/parasut-node-sdk/dist/resources/bankFees.d.ts +52 -0
  142. package/packages/parasut-node-sdk/dist/resources/bankFees.d.ts.map +1 -0
  143. package/packages/parasut-node-sdk/dist/resources/bankFees.js +25 -0
  144. package/packages/parasut-node-sdk/dist/resources/bankFees.js.map +1 -0
  145. package/packages/parasut-node-sdk/dist/resources/contacts.d.ts +62 -0
  146. package/packages/parasut-node-sdk/dist/resources/contacts.d.ts.map +1 -0
  147. package/packages/parasut-node-sdk/dist/resources/contacts.js +43 -0
  148. package/packages/parasut-node-sdk/dist/resources/contacts.js.map +1 -0
  149. package/packages/parasut-node-sdk/dist/resources/eArchives.d.ts +125 -0
  150. package/packages/parasut-node-sdk/dist/resources/eArchives.d.ts.map +1 -0
  151. package/packages/parasut-node-sdk/dist/resources/eArchives.js +100 -0
  152. package/packages/parasut-node-sdk/dist/resources/eArchives.js.map +1 -0
  153. package/packages/parasut-node-sdk/dist/resources/eInvoiceInboxes.d.ts +48 -0
  154. package/packages/parasut-node-sdk/dist/resources/eInvoiceInboxes.d.ts.map +1 -0
  155. package/packages/parasut-node-sdk/dist/resources/eInvoiceInboxes.js +46 -0
  156. package/packages/parasut-node-sdk/dist/resources/eInvoiceInboxes.js.map +1 -0
  157. package/packages/parasut-node-sdk/dist/resources/eInvoices.d.ts +104 -0
  158. package/packages/parasut-node-sdk/dist/resources/eInvoices.d.ts.map +1 -0
  159. package/packages/parasut-node-sdk/dist/resources/eInvoices.js +72 -0
  160. package/packages/parasut-node-sdk/dist/resources/eInvoices.js.map +1 -0
  161. package/packages/parasut-node-sdk/dist/resources/eSmms.d.ts +73 -0
  162. package/packages/parasut-node-sdk/dist/resources/eSmms.d.ts.map +1 -0
  163. package/packages/parasut-node-sdk/dist/resources/eSmms.js +59 -0
  164. package/packages/parasut-node-sdk/dist/resources/eSmms.js.map +1 -0
  165. package/packages/parasut-node-sdk/dist/resources/employees.d.ts +37 -0
  166. package/packages/parasut-node-sdk/dist/resources/employees.d.ts.map +1 -0
  167. package/packages/parasut-node-sdk/dist/resources/employees.js +31 -0
  168. package/packages/parasut-node-sdk/dist/resources/employees.js.map +1 -0
  169. package/packages/parasut-node-sdk/dist/resources/index.d.ts +26 -0
  170. package/packages/parasut-node-sdk/dist/resources/index.d.ts.map +1 -0
  171. package/packages/parasut-node-sdk/dist/resources/index.js +35 -0
  172. package/packages/parasut-node-sdk/dist/resources/index.js.map +1 -0
  173. package/packages/parasut-node-sdk/dist/resources/inventoryLevels.d.ts +25 -0
  174. package/packages/parasut-node-sdk/dist/resources/inventoryLevels.d.ts.map +1 -0
  175. package/packages/parasut-node-sdk/dist/resources/inventoryLevels.js +22 -0
  176. package/packages/parasut-node-sdk/dist/resources/inventoryLevels.js.map +1 -0
  177. package/packages/parasut-node-sdk/dist/resources/itemCategories.d.ts +31 -0
  178. package/packages/parasut-node-sdk/dist/resources/itemCategories.d.ts.map +1 -0
  179. package/packages/parasut-node-sdk/dist/resources/itemCategories.js +22 -0
  180. package/packages/parasut-node-sdk/dist/resources/itemCategories.js.map +1 -0
  181. package/packages/parasut-node-sdk/dist/resources/products.d.ts +50 -0
  182. package/packages/parasut-node-sdk/dist/resources/products.d.ts.map +1 -0
  183. package/packages/parasut-node-sdk/dist/resources/products.js +31 -0
  184. package/packages/parasut-node-sdk/dist/resources/products.js.map +1 -0
  185. package/packages/parasut-node-sdk/dist/resources/purchaseBills.d.ts +105 -0
  186. package/packages/parasut-node-sdk/dist/resources/purchaseBills.d.ts.map +1 -0
  187. package/packages/parasut-node-sdk/dist/resources/purchaseBills.js +67 -0
  188. package/packages/parasut-node-sdk/dist/resources/purchaseBills.js.map +1 -0
  189. package/packages/parasut-node-sdk/dist/resources/salaries.d.ts +50 -0
  190. package/packages/parasut-node-sdk/dist/resources/salaries.d.ts.map +1 -0
  191. package/packages/parasut-node-sdk/dist/resources/salaries.js +25 -0
  192. package/packages/parasut-node-sdk/dist/resources/salaries.js.map +1 -0
  193. package/packages/parasut-node-sdk/dist/resources/salesInvoices.d.ts +137 -0
  194. package/packages/parasut-node-sdk/dist/resources/salesInvoices.d.ts.map +1 -0
  195. package/packages/parasut-node-sdk/dist/resources/salesInvoices.js +84 -0
  196. package/packages/parasut-node-sdk/dist/resources/salesInvoices.js.map +1 -0
  197. package/packages/parasut-node-sdk/dist/resources/salesOffers.d.ts +72 -0
  198. package/packages/parasut-node-sdk/dist/resources/salesOffers.d.ts.map +1 -0
  199. package/packages/parasut-node-sdk/dist/resources/salesOffers.js +66 -0
  200. package/packages/parasut-node-sdk/dist/resources/salesOffers.js.map +1 -0
  201. package/packages/parasut-node-sdk/dist/resources/shipmentDocuments.d.ts +26 -0
  202. package/packages/parasut-node-sdk/dist/resources/shipmentDocuments.d.ts.map +1 -0
  203. package/packages/parasut-node-sdk/dist/resources/shipmentDocuments.js +16 -0
  204. package/packages/parasut-node-sdk/dist/resources/shipmentDocuments.js.map +1 -0
  205. package/packages/parasut-node-sdk/dist/resources/stockMovements.d.ts +27 -0
  206. package/packages/parasut-node-sdk/dist/resources/stockMovements.d.ts.map +1 -0
  207. package/packages/parasut-node-sdk/dist/resources/stockMovements.js +16 -0
  208. package/packages/parasut-node-sdk/dist/resources/stockMovements.js.map +1 -0
  209. package/packages/parasut-node-sdk/dist/resources/tags.d.ts +22 -0
  210. package/packages/parasut-node-sdk/dist/resources/tags.d.ts.map +1 -0
  211. package/packages/parasut-node-sdk/dist/resources/tags.js +16 -0
  212. package/packages/parasut-node-sdk/dist/resources/tags.js.map +1 -0
  213. package/packages/parasut-node-sdk/dist/resources/taxes.d.ts +50 -0
  214. package/packages/parasut-node-sdk/dist/resources/taxes.d.ts.map +1 -0
  215. package/packages/parasut-node-sdk/dist/resources/taxes.js +25 -0
  216. package/packages/parasut-node-sdk/dist/resources/taxes.js.map +1 -0
  217. package/packages/parasut-node-sdk/dist/resources/trackableJobs.d.ts +72 -0
  218. package/packages/parasut-node-sdk/dist/resources/trackableJobs.d.ts.map +1 -0
  219. package/packages/parasut-node-sdk/dist/resources/trackableJobs.js +108 -0
  220. package/packages/parasut-node-sdk/dist/resources/trackableJobs.js.map +1 -0
  221. package/packages/parasut-node-sdk/dist/resources/transactions.d.ts +26 -0
  222. package/packages/parasut-node-sdk/dist/resources/transactions.d.ts.map +1 -0
  223. package/packages/parasut-node-sdk/dist/resources/transactions.js +16 -0
  224. package/packages/parasut-node-sdk/dist/resources/transactions.js.map +1 -0
  225. package/packages/parasut-node-sdk/package-lock.json +4030 -0
  226. package/packages/parasut-node-sdk/package.json +71 -0
  227. package/packages/parasut-node-sdk/scripts/generate-types.ts +495 -0
  228. package/packages/parasut-node-sdk/src/client/HttpTransport.ts +334 -0
  229. package/packages/parasut-node-sdk/src/client/JsonApi.ts +314 -0
  230. package/packages/parasut-node-sdk/src/client/OAuth.ts +446 -0
  231. package/packages/parasut-node-sdk/src/client/ParasutClient.ts +423 -0
  232. package/packages/parasut-node-sdk/src/client/QueryBuilder.ts +292 -0
  233. package/packages/parasut-node-sdk/src/client/RateLimiter.ts +190 -0
  234. package/packages/parasut-node-sdk/src/client/RetryHandler.ts +216 -0
  235. package/packages/parasut-node-sdk/src/client/errors.ts +209 -0
  236. package/packages/parasut-node-sdk/src/generated/operations.ts +1454 -0
  237. package/packages/parasut-node-sdk/src/generated/types.ts +1856 -0
  238. package/packages/parasut-node-sdk/src/index.ts +235 -0
  239. package/packages/parasut-node-sdk/src/resources/BaseResource.ts +275 -0
  240. package/packages/parasut-node-sdk/src/resources/accounts.ts +108 -0
  241. package/packages/parasut-node-sdk/src/resources/bankFees.ts +74 -0
  242. package/packages/parasut-node-sdk/src/resources/contacts.ts +96 -0
  243. package/packages/parasut-node-sdk/src/resources/eArchives.ts +202 -0
  244. package/packages/parasut-node-sdk/src/resources/eInvoiceInboxes.ts +78 -0
  245. package/packages/parasut-node-sdk/src/resources/eInvoices.ts +166 -0
  246. package/packages/parasut-node-sdk/src/resources/eSmms.ts +132 -0
  247. package/packages/parasut-node-sdk/src/resources/employees.ts +69 -0
  248. package/packages/parasut-node-sdk/src/resources/index.ts +44 -0
  249. package/packages/parasut-node-sdk/src/resources/inventoryLevels.ts +45 -0
  250. package/packages/parasut-node-sdk/src/resources/itemCategories.ts +49 -0
  251. package/packages/parasut-node-sdk/src/resources/products.ts +78 -0
  252. package/packages/parasut-node-sdk/src/resources/purchaseBills.ts +162 -0
  253. package/packages/parasut-node-sdk/src/resources/salaries.ts +72 -0
  254. package/packages/parasut-node-sdk/src/resources/salesInvoices.ts +194 -0
  255. package/packages/parasut-node-sdk/src/resources/salesOffers.ts +149 -0
  256. package/packages/parasut-node-sdk/src/resources/shipmentDocuments.ts +40 -0
  257. package/packages/parasut-node-sdk/src/resources/stockMovements.ts +41 -0
  258. package/packages/parasut-node-sdk/src/resources/tags.ts +32 -0
  259. package/packages/parasut-node-sdk/src/resources/taxes.ts +68 -0
  260. package/packages/parasut-node-sdk/src/resources/trackableJobs.ts +167 -0
  261. package/packages/parasut-node-sdk/src/resources/transactions.ts +40 -0
  262. package/packages/parasut-node-sdk/tsconfig.json +47 -0
  263. package/scripts/build.js +14 -0
  264. package/scripts/deploy-branch.js +16 -0
  265. package/spec/README.md +24 -0
  266. package/spec/code_samples/README.md +9 -0
  267. package/spec/swagger.yaml +19616 -0
  268. package/web/CNAME +1 -0
  269. package/web/custom.css +34 -0
  270. package/web/favicon.ico +0 -0
  271. package/web/favicon.png +0 -0
  272. package/web/index.html +26 -0
  273. package/web/logo.png +0 -0
  274. package/web/v4.html +3 -0
@@ -0,0 +1,71 @@
1
+ {
2
+ "name": "@yigitkonur/parasut-node-sdk",
3
+ "version": "1.0.0",
4
+ "description": "Unofficial Type-safe TypeScript SDK for the Paraşüt API v4 - Turkish accounting and invoicing. Not affiliated with Paraşüt.",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "import": "./dist/index.js",
11
+ "types": "./dist/index.d.ts"
12
+ }
13
+ },
14
+ "files": [
15
+ "dist",
16
+ "README.md"
17
+ ],
18
+ "engines": {
19
+ "node": ">=18.0.0"
20
+ },
21
+ "scripts": {
22
+ "build": "tsc",
23
+ "dev": "tsc --watch",
24
+ "generate": "tsx scripts/generate-types.ts",
25
+ "test": "vitest run",
26
+ "test:watch": "vitest",
27
+ "lint": "eslint src --ext .ts",
28
+ "typecheck": "tsc --noEmit",
29
+ "prepublishOnly": "npm run build"
30
+ },
31
+ "keywords": [
32
+ "parasut",
33
+ "paraşüt",
34
+ "accounting",
35
+ "invoice",
36
+ "e-fatura",
37
+ "e-arsiv",
38
+ "e-invoice",
39
+ "turkey",
40
+ "api",
41
+ "sdk",
42
+ "typescript",
43
+ "json-api",
44
+ "oauth",
45
+ "muhasebe",
46
+ "fatura",
47
+ "unofficial"
48
+ ],
49
+ "author": "Yigit Konur <yigit@konur.dev>",
50
+ "license": "MIT",
51
+ "homepage": "https://github.com/yigitkonur/parasut-node-sdk#readme",
52
+ "repository": {
53
+ "type": "git",
54
+ "url": "git+https://github.com/yigitkonur/parasut-node-sdk.git"
55
+ },
56
+ "bugs": {
57
+ "url": "https://github.com/yigitkonur/parasut-node-sdk/issues"
58
+ },
59
+ "devDependencies": {
60
+ "@types/node": "^20.10.0",
61
+ "eslint": "^8.55.0",
62
+ "@typescript-eslint/eslint-plugin": "^6.13.0",
63
+ "@typescript-eslint/parser": "^6.13.0",
64
+ "tsx": "^4.6.0",
65
+ "typescript": "^5.3.0",
66
+ "vitest": "^1.0.0",
67
+ "yaml": "^2.3.0"
68
+ },
69
+ "peerDependencies": {},
70
+ "dependencies": {}
71
+ }
@@ -0,0 +1,495 @@
1
+ #!/usr/bin/env tsx
2
+ /**
3
+ * Type Generation Script
4
+ *
5
+ * Parses the Paraşüt swagger.yaml and generates TypeScript types.
6
+ * Run with: npm run generate
7
+ */
8
+
9
+ import { readFileSync, writeFileSync, mkdirSync } from 'node:fs';
10
+ import { dirname, resolve } from 'node:path';
11
+ import { fileURLToPath } from 'node:url';
12
+ import { parse as parseYaml } from 'yaml';
13
+
14
+ const __filename = fileURLToPath(import.meta.url);
15
+ const __dirname = dirname(__filename);
16
+
17
+ // Paths
18
+ const SWAGGER_PATH = resolve(__dirname, '../../../spec/swagger.yaml');
19
+ const OUTPUT_DIR = resolve(__dirname, '../src/generated');
20
+ const TYPES_OUTPUT = resolve(OUTPUT_DIR, 'types.ts');
21
+ const OPERATIONS_OUTPUT = resolve(OUTPUT_DIR, 'operations.ts');
22
+
23
+ // Type mapping from Swagger to TypeScript
24
+ const TYPE_MAP: Record<string, string> = {
25
+ string: 'string',
26
+ integer: 'number',
27
+ number: 'number',
28
+ boolean: 'boolean',
29
+ object: 'Record<string, unknown>',
30
+ array: 'unknown[]',
31
+ };
32
+
33
+ interface SwaggerSpec {
34
+ paths: Record<string, PathItem>;
35
+ definitions: Record<string, SchemaObject>;
36
+ }
37
+
38
+ interface PathItem {
39
+ parameters?: ParameterObject[];
40
+ get?: OperationObject;
41
+ post?: OperationObject;
42
+ put?: OperationObject;
43
+ patch?: OperationObject;
44
+ delete?: OperationObject;
45
+ }
46
+
47
+ interface OperationObject {
48
+ operationId: string;
49
+ tags?: string[];
50
+ summary?: string;
51
+ description?: string;
52
+ parameters?: ParameterObject[];
53
+ responses?: Record<string, ResponseObject>;
54
+ }
55
+
56
+ interface ParameterObject {
57
+ name: string;
58
+ in: 'query' | 'path' | 'body' | 'header';
59
+ type?: string;
60
+ description?: string;
61
+ required?: boolean;
62
+ default?: unknown;
63
+ schema?: SchemaObject;
64
+ enum?: string[];
65
+ }
66
+
67
+ interface ResponseObject {
68
+ description?: string;
69
+ schema?: SchemaObject;
70
+ }
71
+
72
+ interface SchemaObject {
73
+ type?: string;
74
+ format?: string;
75
+ description?: string;
76
+ readOnly?: boolean;
77
+ enum?: string[];
78
+ items?: SchemaObject;
79
+ properties?: Record<string, SchemaObject>;
80
+ required?: string[];
81
+ $ref?: string;
82
+ maxLength?: number;
83
+ }
84
+
85
+ interface OperationInfo {
86
+ operationId: string;
87
+ method: string;
88
+ path: string;
89
+ tag: string;
90
+ summary: string;
91
+ hasCompanyId: boolean;
92
+ pathParams: string[];
93
+ queryParams: QueryParam[];
94
+ bodyParam?: string;
95
+ responseType: string | null;
96
+ successStatus: number;
97
+ }
98
+
99
+ interface QueryParam {
100
+ name: string;
101
+ type: string;
102
+ required: boolean;
103
+ description?: string;
104
+ default?: unknown;
105
+ }
106
+
107
+ // Helpers
108
+ function pascalCase(str: string): string {
109
+ return str
110
+ .replace(/[-_](.)/g, (_, c: string) => c.toUpperCase())
111
+ .replace(/^(.)/, (_, c: string) => c.toUpperCase());
112
+ }
113
+
114
+ function camelCase(str: string): string {
115
+ const pascal = pascalCase(str);
116
+ return pascal.charAt(0).toLowerCase() + pascal.slice(1);
117
+ }
118
+
119
+ /**
120
+ * Check if a string is a valid JS identifier (can be used without quotes)
121
+ */
122
+ function isValidIdentifier(str: string): boolean {
123
+ return /^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(str);
124
+ }
125
+
126
+ /**
127
+ * Format a property key - quote if it contains special characters
128
+ */
129
+ function formatPropertyKey(key: string): string {
130
+ if (isValidIdentifier(key)) {
131
+ return key;
132
+ }
133
+ return `'${key}'`;
134
+ }
135
+
136
+ function resolveRef(ref: string): string {
137
+ // #/definitions/Account -> Account
138
+ return ref.replace('#/definitions/', '');
139
+ }
140
+
141
+ function swaggerTypeToTs(schema: SchemaObject, definitions: Record<string, SchemaObject>): string {
142
+ if (schema.$ref) {
143
+ return resolveRef(schema.$ref);
144
+ }
145
+
146
+ if (schema.enum) {
147
+ return schema.enum.map((v) => `'${v}'`).join(' | ');
148
+ }
149
+
150
+ if (schema.type === 'array') {
151
+ if (schema.items) {
152
+ const itemType = swaggerTypeToTs(schema.items, definitions);
153
+ return `${itemType}[]`;
154
+ }
155
+ return 'unknown[]';
156
+ }
157
+
158
+ if (schema.type === 'object' && schema.properties) {
159
+ const props = Object.entries(schema.properties)
160
+ .map(([key, prop]) => {
161
+ const optional = !schema.required?.includes(key) ? '?' : '';
162
+ const type = swaggerTypeToTs(prop, definitions);
163
+ return ` ${key}${optional}: ${type};`;
164
+ })
165
+ .join('\n');
166
+ return `{\n${props}\n}`;
167
+ }
168
+
169
+ return TYPE_MAP[schema.type ?? 'string'] ?? 'unknown';
170
+ }
171
+
172
+ function generateDefinitionType(
173
+ name: string,
174
+ schema: SchemaObject,
175
+ definitions: Record<string, SchemaObject>
176
+ ): string {
177
+ const lines: string[] = [];
178
+
179
+ if (schema.description) {
180
+ lines.push(`/** ${schema.description} */`);
181
+ }
182
+
183
+ if (schema.type === 'object' && schema.properties) {
184
+ lines.push(`export interface ${name} {`);
185
+
186
+ for (const [propName, propSchema] of Object.entries(schema.properties)) {
187
+ const required = schema.required?.includes(propName);
188
+ const readonly = propSchema.readOnly ? 'readonly ' : '';
189
+ let type = swaggerTypeToTs(propSchema, definitions);
190
+
191
+ // Quote property names with special characters
192
+ const key = formatPropertyKey(propName);
193
+ const optional = isValidIdentifier(propName) ? (required ? '' : '?') : '';
194
+
195
+ // Add description as JSDoc
196
+ if (propSchema.description) {
197
+ lines.push(` /** ${propSchema.description} */`);
198
+ }
199
+
200
+ lines.push(` ${readonly}${key}${optional}: ${type};`);
201
+ }
202
+
203
+ lines.push('}');
204
+ } else {
205
+ // Type alias for simple types
206
+ const type = swaggerTypeToTs(schema, definitions);
207
+ lines.push(`export type ${name} = ${type};`);
208
+ }
209
+
210
+ return lines.join('\n');
211
+ }
212
+
213
+ function extractOperations(spec: SwaggerSpec): OperationInfo[] {
214
+ const operations: OperationInfo[] = [];
215
+
216
+ for (const [path, pathItem] of Object.entries(spec.paths)) {
217
+ const pathParams = path.match(/\{([^}]+)\}/g)?.map((p) => p.slice(1, -1)) ?? [];
218
+ const hasCompanyId = pathParams.includes('company_id');
219
+
220
+ for (const method of ['get', 'post', 'put', 'patch', 'delete'] as const) {
221
+ const operation = pathItem[method];
222
+ if (!operation || !operation.operationId) continue;
223
+
224
+ // Merge path-level and operation-level parameters
225
+ const allParams = [...(pathItem.parameters ?? []), ...(operation.parameters ?? [])];
226
+
227
+ // Extract query parameters
228
+ const queryParams: QueryParam[] = allParams
229
+ .filter((p) => p.in === 'query')
230
+ .map((p) => ({
231
+ name: p.name,
232
+ type: p.enum ? p.enum.map((v) => `'${v}'`).join(' | ') : TYPE_MAP[p.type ?? 'string'] ?? 'string',
233
+ required: p.required ?? false,
234
+ description: p.description,
235
+ default: p.default,
236
+ }));
237
+
238
+ // Extract body parameter type
239
+ const bodyParam = allParams.find((p) => p.in === 'body');
240
+ let bodyType: string | undefined;
241
+ if (bodyParam?.schema) {
242
+ if (bodyParam.schema.$ref) {
243
+ bodyType = resolveRef(bodyParam.schema.$ref);
244
+ } else if (bodyParam.name) {
245
+ bodyType = pascalCase(bodyParam.name) + 'Input';
246
+ }
247
+ }
248
+
249
+ // Find success response type
250
+ let responseType: string | null = null;
251
+ let successStatus = 200;
252
+ const responses = operation.responses ?? {};
253
+
254
+ for (const [status, response] of Object.entries(responses)) {
255
+ const statusNum = parseInt(status, 10);
256
+ if (statusNum >= 200 && statusNum < 300 && response.schema) {
257
+ successStatus = statusNum;
258
+ if (response.schema.$ref) {
259
+ responseType = resolveRef(response.schema.$ref);
260
+ } else if (response.schema.properties?.data) {
261
+ const dataProp = response.schema.properties.data;
262
+ if (dataProp.$ref) {
263
+ responseType = resolveRef(dataProp.$ref);
264
+ } else if (dataProp.type === 'array' && dataProp.items?.$ref) {
265
+ responseType = resolveRef(dataProp.items.$ref) + '[]';
266
+ }
267
+ }
268
+ break;
269
+ }
270
+ }
271
+
272
+ operations.push({
273
+ operationId: operation.operationId,
274
+ method: method.toUpperCase(),
275
+ path,
276
+ tag: operation.tags?.[0] ?? 'Default',
277
+ summary: operation.summary ?? '',
278
+ hasCompanyId,
279
+ pathParams: pathParams.filter((p) => p !== 'company_id'),
280
+ queryParams,
281
+ bodyParam: bodyType,
282
+ responseType,
283
+ successStatus,
284
+ });
285
+ }
286
+ }
287
+
288
+ return operations;
289
+ }
290
+
291
+ function generateTypesFile(definitions: Record<string, SchemaObject>): string {
292
+ const lines: string[] = [
293
+ '/**',
294
+ ' * Auto-generated TypeScript types from Paraşüt Swagger spec.',
295
+ ' * DO NOT EDIT MANUALLY - run `npm run generate` instead.',
296
+ ' */',
297
+ '',
298
+ '// ============================================================================',
299
+ '// Common Types',
300
+ '// ============================================================================',
301
+ '',
302
+ '/** Pagination metadata for list responses */',
303
+ 'export interface ListMeta {',
304
+ ' current_page: number;',
305
+ ' total_pages: number;',
306
+ ' total_count: number;',
307
+ '}',
308
+ '',
309
+ '/** API error response */',
310
+ 'export interface ApiError {',
311
+ ' title: string;',
312
+ ' detail: string;',
313
+ '}',
314
+ '',
315
+ '/** JSON:API relationship (single) */',
316
+ 'export interface Relationship {',
317
+ ' data: {',
318
+ ' id: string;',
319
+ ' type: string;',
320
+ ' } | null;',
321
+ '}',
322
+ '',
323
+ '/** JSON:API relationship (multiple) */',
324
+ 'export interface RelationshipMany {',
325
+ ' data: Array<{',
326
+ ' id: string;',
327
+ ' type: string;',
328
+ ' }>;',
329
+ '}',
330
+ '',
331
+ '/** Base JSON:API resource */',
332
+ 'export interface JsonApiResource<TAttributes = Record<string, unknown>, TRelationships = Record<string, unknown>> {',
333
+ ' id: string;',
334
+ ' type: string;',
335
+ ' attributes: TAttributes;',
336
+ ' relationships?: TRelationships;',
337
+ '}',
338
+ '',
339
+ '/** JSON:API single resource response */',
340
+ 'export interface JsonApiResponse<T> {',
341
+ ' data: T;',
342
+ ' included?: JsonApiResource[];',
343
+ '}',
344
+ '',
345
+ '/** JSON:API list response */',
346
+ 'export interface JsonApiListResponse<T> {',
347
+ ' data: T[];',
348
+ ' meta: ListMeta;',
349
+ ' included?: JsonApiResource[];',
350
+ '}',
351
+ '',
352
+ '// ============================================================================',
353
+ '// Resource Types (Generated from definitions)',
354
+ '// ============================================================================',
355
+ '',
356
+ ];
357
+
358
+ // Sort definitions for consistent output
359
+ const sortedNames = Object.keys(definitions).sort();
360
+
361
+ for (const name of sortedNames) {
362
+ const schema = definitions[name];
363
+ if (!schema) continue;
364
+
365
+ // Skip Error and ListMeta as we define them manually
366
+ if (name === 'Error' || name === 'ListMeta') continue;
367
+
368
+ const typeCode = generateDefinitionType(name, schema, definitions);
369
+ lines.push(typeCode);
370
+ lines.push('');
371
+ }
372
+
373
+ return lines.join('\n');
374
+ }
375
+
376
+ function generateOperationsFile(operations: OperationInfo[]): string {
377
+ const lines: string[] = [
378
+ '/**',
379
+ ' * Auto-generated operation metadata from Paraşüt Swagger spec.',
380
+ ' * DO NOT EDIT MANUALLY - run `npm run generate` instead.',
381
+ ' */',
382
+ '',
383
+ 'export interface OperationMeta {',
384
+ ' operationId: string;',
385
+ ' method: string;',
386
+ ' path: string;',
387
+ ' tag: string;',
388
+ ' summary: string;',
389
+ ' hasCompanyId: boolean;',
390
+ ' pathParams: string[];',
391
+ ' successStatus: number;',
392
+ '}',
393
+ '',
394
+ 'export const OPERATIONS: Record<string, OperationMeta> = {',
395
+ ];
396
+
397
+ for (const op of operations) {
398
+ const key = formatPropertyKey(op.operationId);
399
+ lines.push(` ${key}: {`);
400
+ lines.push(` operationId: '${op.operationId}',`);
401
+ lines.push(` method: '${op.method}',`);
402
+ lines.push(` path: '${op.path}',`);
403
+ lines.push(` tag: '${op.tag}',`);
404
+ lines.push(` summary: '${op.summary.replace(/'/g, "\\'")}',`);
405
+ lines.push(` hasCompanyId: ${op.hasCompanyId},`);
406
+ lines.push(` pathParams: [${op.pathParams.map((p) => `'${p}'`).join(', ')}],`);
407
+ lines.push(` successStatus: ${op.successStatus},`);
408
+ lines.push(` },`);
409
+ }
410
+
411
+ lines.push('};');
412
+ lines.push('');
413
+
414
+ // Group operations by tag for easy resource mapping
415
+ const byTag = new Map<string, OperationInfo[]>();
416
+ for (const op of operations) {
417
+ const tag = op.tag;
418
+ if (!byTag.has(tag)) {
419
+ byTag.set(tag, []);
420
+ }
421
+ byTag.get(tag)!.push(op);
422
+ }
423
+
424
+ lines.push('/** Operations grouped by resource tag */');
425
+ lines.push('export const OPERATIONS_BY_TAG: Record<string, string[]> = {');
426
+ for (const [tag, ops] of byTag) {
427
+ const opIds = ops.map((o) => `'${o.operationId}'`).join(', ');
428
+ lines.push(` '${tag}': [${opIds}],`);
429
+ }
430
+ lines.push('};');
431
+ lines.push('');
432
+
433
+ // Generate filter types per resource
434
+ lines.push('// ============================================================================');
435
+ lines.push('// Filter Types per Resource');
436
+ lines.push('// ============================================================================');
437
+ lines.push('');
438
+
439
+ for (const [tag, ops] of byTag) {
440
+ const listOp = ops.find((o) => o.operationId.startsWith('list'));
441
+ if (listOp && listOp.queryParams.length > 0) {
442
+ const filterParams = listOp.queryParams.filter((p) => p.name.startsWith('filter['));
443
+ if (filterParams.length > 0) {
444
+ const resourceName = pascalCase(tag);
445
+ lines.push(`export interface ${resourceName}Filters {`);
446
+ for (const param of filterParams) {
447
+ // Extract filter name: filter[name] -> name
448
+ const filterName = param.name.replace('filter[', '').replace(']', '');
449
+ const key = formatPropertyKey(filterName);
450
+ const optional = isValidIdentifier(filterName) ? '?' : '';
451
+ lines.push(` /** ${param.description ?? ''} */`);
452
+ lines.push(` ${key}${optional}: ${param.type};`);
453
+ }
454
+ lines.push('}');
455
+ lines.push('');
456
+ }
457
+ }
458
+ }
459
+
460
+ return lines.join('\n');
461
+ }
462
+
463
+ // Main execution
464
+ function main() {
465
+ console.log('🔧 Generating types from swagger.yaml...\n');
466
+
467
+ // Read and parse swagger
468
+ console.log('📖 Reading swagger spec...');
469
+ const swaggerContent = readFileSync(SWAGGER_PATH, 'utf-8');
470
+ const spec = parseYaml(swaggerContent) as SwaggerSpec;
471
+
472
+ console.log(` Found ${Object.keys(spec.definitions).length} definitions`);
473
+ console.log(` Found ${Object.keys(spec.paths).length} paths`);
474
+
475
+ // Ensure output directory exists
476
+ mkdirSync(OUTPUT_DIR, { recursive: true });
477
+
478
+ // Generate types
479
+ console.log('\n📝 Generating types.ts...');
480
+ const typesContent = generateTypesFile(spec.definitions);
481
+ writeFileSync(TYPES_OUTPUT, typesContent, 'utf-8');
482
+ console.log(` Written to ${TYPES_OUTPUT}`);
483
+
484
+ // Extract and generate operations
485
+ console.log('\n📝 Generating operations.ts...');
486
+ const operations = extractOperations(spec);
487
+ console.log(` Found ${operations.length} operations`);
488
+ const operationsContent = generateOperationsFile(operations);
489
+ writeFileSync(OPERATIONS_OUTPUT, operationsContent, 'utf-8');
490
+ console.log(` Written to ${OPERATIONS_OUTPUT}`);
491
+
492
+ console.log('\n✅ Type generation complete!');
493
+ }
494
+
495
+ main();