@seamapi/nextlove-sdk-generator 1.4.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 (287) hide show
  1. package/LICENSE.txt +20 -0
  2. package/README.md +16 -0
  3. package/index.d.ts +6 -0
  4. package/index.js +7 -0
  5. package/index.js.map +1 -0
  6. package/lib/cli.d.ts +2 -0
  7. package/lib/cli.js +53 -0
  8. package/lib/cli.js.map +1 -0
  9. package/lib/fs-util/index.d.ts +2 -0
  10. package/lib/fs-util/index.js +3 -0
  11. package/lib/fs-util/index.js.map +1 -0
  12. package/lib/fs-util/populate-fs.d.ts +1 -0
  13. package/lib/fs-util/populate-fs.js +11 -0
  14. package/lib/fs-util/populate-fs.js.map +1 -0
  15. package/lib/fs-util/write-fs.d.ts +1 -0
  16. package/lib/fs-util/write-fs.js +10 -0
  17. package/lib/fs-util/write-fs.js.map +1 -0
  18. package/lib/generate-csharp-sdk/codegen.d.ts +235 -0
  19. package/lib/generate-csharp-sdk/codegen.js +432 -0
  20. package/lib/generate-csharp-sdk/codegen.js.map +1 -0
  21. package/lib/generate-csharp-sdk/constants.d.ts +1 -0
  22. package/lib/generate-csharp-sdk/constants.js +2 -0
  23. package/lib/generate-csharp-sdk/constants.js.map +1 -0
  24. package/lib/generate-csharp-sdk/generate-csharp-sdk.d.ts +1 -0
  25. package/lib/generate-csharp-sdk/generate-csharp-sdk.js +81 -0
  26. package/lib/generate-csharp-sdk/generate-csharp-sdk.js.map +1 -0
  27. package/lib/generate-csharp-sdk/generate-csproj.d.ts +1 -0
  28. package/lib/generate-csharp-sdk/generate-csproj.js +45 -0
  29. package/lib/generate-csharp-sdk/generate-csproj.js.map +1 -0
  30. package/lib/generate-csharp-sdk/templates/dataclass.d.ts +24 -0
  31. package/lib/generate-csharp-sdk/templates/dataclass.js +468 -0
  32. package/lib/generate-csharp-sdk/templates/dataclass.js.map +1 -0
  33. package/lib/generate-csharp-sdk/templates/fs/csharp-testing.sln +34 -0
  34. package/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/ApiResponse.cs +159 -0
  35. package/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/ClientUtils.cs +280 -0
  36. package/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/ExceptionFactory.cs +12 -0
  37. package/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/GlobalSeamRequestConfiguration.cs +60 -0
  38. package/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/HttpMethod.cs +29 -0
  39. package/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/IAsynchronousSeam.cs +142 -0
  40. package/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/IReadableSeamRequestConfiguration.cs +68 -0
  41. package/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/ISynchronousSeam.cs +103 -0
  42. package/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/Multimap.cs +286 -0
  43. package/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/RequestOptions.cs +74 -0
  44. package/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/RetryConfiguration.cs +21 -0
  45. package/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/Seam.cs +1070 -0
  46. package/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/SeamException.cs +64 -0
  47. package/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/SeamRequestConfiguration.cs +662 -0
  48. package/lib/generate-csharp-sdk/templates/fs/src/Seam/Model/AsbtractModelSchema.cs +62 -0
  49. package/lib/generate-php-sdk/generate-php-sdk.d.ts +1 -0
  50. package/lib/generate-php-sdk/generate-php-sdk.js +127 -0
  51. package/lib/generate-php-sdk/generate-php-sdk.js.map +1 -0
  52. package/lib/generate-php-sdk/index.d.ts +1 -0
  53. package/lib/generate-php-sdk/index.js +2 -0
  54. package/lib/generate-php-sdk/index.js.map +1 -0
  55. package/lib/generate-php-sdk/templates/composer.json.template.d.ts +2 -0
  56. package/lib/generate-php-sdk/templates/composer.json.template.js +25 -0
  57. package/lib/generate-php-sdk/templates/composer.json.template.js.map +1 -0
  58. package/lib/generate-php-sdk/templates/env.example.template.d.ts +2 -0
  59. package/lib/generate-php-sdk/templates/env.example.template.js +4 -0
  60. package/lib/generate-php-sdk/templates/env.example.template.js.map +1 -0
  61. package/lib/generate-php-sdk/templates/gitignore.template.d.ts +2 -0
  62. package/lib/generate-php-sdk/templates/gitignore.template.js +6 -0
  63. package/lib/generate-php-sdk/templates/gitignore.template.js.map +1 -0
  64. package/lib/generate-php-sdk/templates/package.json.template.d.ts +2 -0
  65. package/lib/generate-php-sdk/templates/package.json.template.js +12 -0
  66. package/lib/generate-php-sdk/templates/package.json.template.js.map +1 -0
  67. package/lib/generate-php-sdk/templates/readme.md.template.d.ts +2 -0
  68. package/lib/generate-php-sdk/templates/readme.md.template.js +86 -0
  69. package/lib/generate-php-sdk/templates/readme.md.template.js.map +1 -0
  70. package/lib/generate-php-sdk/templates/smoke-test.template.d.ts +2 -0
  71. package/lib/generate-php-sdk/templates/smoke-test.template.js +30 -0
  72. package/lib/generate-php-sdk/templates/smoke-test.template.js.map +1 -0
  73. package/lib/generate-php-sdk/templates/test-fixture.template.d.ts +2 -0
  74. package/lib/generate-php-sdk/templates/test-fixture.template.js +21 -0
  75. package/lib/generate-php-sdk/templates/test-fixture.template.js.map +1 -0
  76. package/lib/generate-php-sdk/utils/deep-extract-resource-object-schemas.d.ts +16 -0
  77. package/lib/generate-php-sdk/utils/deep-extract-resource-object-schemas.js +97 -0
  78. package/lib/generate-php-sdk/utils/deep-extract-resource-object-schemas.js.map +1 -0
  79. package/lib/generate-php-sdk/utils/deep-flatten-one-of-and-all-of-schema.d.ts +2 -0
  80. package/lib/generate-php-sdk/utils/deep-flatten-one-of-and-all-of-schema.js +95 -0
  81. package/lib/generate-php-sdk/utils/deep-flatten-one-of-and-all-of-schema.js.map +1 -0
  82. package/lib/generate-php-sdk/utils/generate-resource-object-class.d.ts +8 -0
  83. package/lib/generate-php-sdk/utils/generate-resource-object-class.js +73 -0
  84. package/lib/generate-php-sdk/utils/generate-resource-object-class.js.map +1 -0
  85. package/lib/generate-php-sdk/utils/generate-seam-client.d.ts +7 -0
  86. package/lib/generate-php-sdk/utils/generate-seam-client.js +103 -0
  87. package/lib/generate-php-sdk/utils/generate-seam-client.js.map +1 -0
  88. package/lib/generate-php-sdk/utils/get-php-type.d.ts +1 -0
  89. package/lib/generate-php-sdk/utils/get-php-type.js +17 -0
  90. package/lib/generate-php-sdk/utils/get-php-type.js.map +1 -0
  91. package/lib/generate-php-sdk/utils/php-client.d.ts +31 -0
  92. package/lib/generate-php-sdk/utils/php-client.js +130 -0
  93. package/lib/generate-php-sdk/utils/php-client.js.map +1 -0
  94. package/lib/generate-python-sdk/class-file.d.ts +20 -0
  95. package/lib/generate-python-sdk/class-file.js +75 -0
  96. package/lib/generate-python-sdk/class-file.js.map +1 -0
  97. package/lib/generate-python-sdk/generate-python-sdk.d.ts +1 -0
  98. package/lib/generate-python-sdk/generate-python-sdk.js +117 -0
  99. package/lib/generate-python-sdk/generate-python-sdk.js.map +1 -0
  100. package/lib/generate-python-sdk/index.d.ts +1 -0
  101. package/lib/generate-python-sdk/index.js +2 -0
  102. package/lib/generate-python-sdk/index.js.map +1 -0
  103. package/lib/generate-python-sdk/map-python-type.d.ts +2 -0
  104. package/lib/generate-python-sdk/map-python-type.js +26 -0
  105. package/lib/generate-python-sdk/map-python-type.js.map +1 -0
  106. package/lib/generate-python-sdk/templates/conftest.py.template.d.ts +2 -0
  107. package/lib/generate-python-sdk/templates/conftest.py.template.js +12 -0
  108. package/lib/generate-python-sdk/templates/conftest.py.template.js.map +1 -0
  109. package/lib/generate-python-sdk/templates/pyproject.toml.template.d.ts +2 -0
  110. package/lib/generate-python-sdk/templates/pyproject.toml.template.js +21 -0
  111. package/lib/generate-python-sdk/templates/pyproject.toml.template.js.map +1 -0
  112. package/lib/generate-python-sdk/templates/readme.md.template.d.ts +2 -0
  113. package/lib/generate-python-sdk/templates/readme.md.template.js +48 -0
  114. package/lib/generate-python-sdk/templates/readme.md.template.js.map +1 -0
  115. package/lib/generate-python-sdk/templates/routes.py.template.d.ts +2 -0
  116. package/lib/generate-python-sdk/templates/routes.py.template.js +13 -0
  117. package/lib/generate-python-sdk/templates/routes.py.template.js.map +1 -0
  118. package/lib/generate-python-sdk/templates/seam.py.template.d.ts +2 -0
  119. package/lib/generate-python-sdk/templates/seam.py.template.js +74 -0
  120. package/lib/generate-python-sdk/templates/seam.py.template.js.map +1 -0
  121. package/lib/generate-python-sdk/templates/snippets/abstract-routes.template.d.ts +2 -0
  122. package/lib/generate-python-sdk/templates/snippets/abstract-routes.template.js +9 -0
  123. package/lib/generate-python-sdk/templates/snippets/abstract-routes.template.js.map +1 -0
  124. package/lib/generate-python-sdk/templates/snippets/abstract-seam.template.d.ts +2 -0
  125. package/lib/generate-python-sdk/templates/snippets/abstract-seam.template.js +9 -0
  126. package/lib/generate-python-sdk/templates/snippets/abstract-seam.template.js.map +1 -0
  127. package/lib/generate-python-sdk/templates/snippets/resource-dataclass.template.d.ts +5 -0
  128. package/lib/generate-python-sdk/templates/snippets/resource-dataclass.template.js +10 -0
  129. package/lib/generate-python-sdk/templates/snippets/resource-dataclass.template.js.map +1 -0
  130. package/lib/generate-python-sdk/templates/test_smoke.py.template.d.ts +2 -0
  131. package/lib/generate-python-sdk/templates/test_smoke.py.template.js +13 -0
  132. package/lib/generate-python-sdk/templates/test_smoke.py.template.js.map +1 -0
  133. package/lib/generate-python-sdk/templates/utils/deep_attr_dict.py.template.d.ts +2 -0
  134. package/lib/generate-python-sdk/templates/utils/deep_attr_dict.py.template.js +28 -0
  135. package/lib/generate-python-sdk/templates/utils/deep_attr_dict.py.template.js.map +1 -0
  136. package/lib/generate-ruby-sdk/generate-ruby-sdk.d.ts +1 -0
  137. package/lib/generate-ruby-sdk/generate-ruby-sdk.js +132 -0
  138. package/lib/generate-ruby-sdk/generate-ruby-sdk.js.map +1 -0
  139. package/lib/generate-ruby-sdk/index.d.ts +1 -0
  140. package/lib/generate-ruby-sdk/index.js +2 -0
  141. package/lib/generate-ruby-sdk/index.js.map +1 -0
  142. package/lib/generate-ruby-sdk/request.rb.template.d.ts +1 -0
  143. package/lib/generate-ruby-sdk/request.rb.template.js +2 -0
  144. package/lib/generate-ruby-sdk/request.rb.template.js.map +1 -0
  145. package/lib/generate-ruby-sdk/ruby-client.d.ts +35 -0
  146. package/lib/generate-ruby-sdk/ruby-client.js +59 -0
  147. package/lib/generate-ruby-sdk/ruby-client.js.map +1 -0
  148. package/lib/generate-ruby-sdk/templates/base_client.rb.template.d.ts +2 -0
  149. package/lib/generate-ruby-sdk/templates/base_client.rb.template.js +22 -0
  150. package/lib/generate-ruby-sdk/templates/base_client.rb.template.js.map +1 -0
  151. package/lib/generate-ruby-sdk/templates/base_resource.rb.template.d.ts +2 -0
  152. package/lib/generate-ruby-sdk/templates/base_resource.rb.template.js +59 -0
  153. package/lib/generate-ruby-sdk/templates/base_resource.rb.template.js.map +1 -0
  154. package/lib/generate-ruby-sdk/templates/client.rb.template.d.ts +2 -0
  155. package/lib/generate-ruby-sdk/templates/client.rb.template.js +74 -0
  156. package/lib/generate-ruby-sdk/templates/client.rb.template.js.map +1 -0
  157. package/lib/generate-ruby-sdk/templates/gemfile.template.d.ts +2 -0
  158. package/lib/generate-ruby-sdk/templates/gemfile.template.js +7 -0
  159. package/lib/generate-ruby-sdk/templates/gemfile.template.js.map +1 -0
  160. package/lib/generate-ruby-sdk/templates/logger.rb.template.d.ts +2 -0
  161. package/lib/generate-ruby-sdk/templates/logger.rb.template.js +13 -0
  162. package/lib/generate-ruby-sdk/templates/logger.rb.template.js.map +1 -0
  163. package/lib/generate-ruby-sdk/templates/rakefile.template.d.ts +2 -0
  164. package/lib/generate-ruby-sdk/templates/rakefile.template.js +23 -0
  165. package/lib/generate-ruby-sdk/templates/rakefile.template.js.map +1 -0
  166. package/lib/generate-ruby-sdk/templates/readme.md.template.d.ts +2 -0
  167. package/lib/generate-ruby-sdk/templates/readme.md.template.js +184 -0
  168. package/lib/generate-ruby-sdk/templates/readme.md.template.js.map +1 -0
  169. package/lib/generate-ruby-sdk/templates/request.rb.template.d.ts +2 -0
  170. package/lib/generate-ruby-sdk/templates/request.rb.template.js +71 -0
  171. package/lib/generate-ruby-sdk/templates/request.rb.template.js.map +1 -0
  172. package/lib/generate-ruby-sdk/templates/resource_error.rb.template.d.ts +2 -0
  173. package/lib/generate-ruby-sdk/templates/resource_error.rb.template.js +8 -0
  174. package/lib/generate-ruby-sdk/templates/resource_error.rb.template.js.map +1 -0
  175. package/lib/generate-ruby-sdk/templates/resource_errors_support.rb.template.d.ts +2 -0
  176. package/lib/generate-ruby-sdk/templates/resource_errors_support.rb.template.js +10 -0
  177. package/lib/generate-ruby-sdk/templates/resource_errors_support.rb.template.js.map +1 -0
  178. package/lib/generate-ruby-sdk/templates/resource_warning.rb.template.d.ts +2 -0
  179. package/lib/generate-ruby-sdk/templates/resource_warning.rb.template.js +8 -0
  180. package/lib/generate-ruby-sdk/templates/resource_warning.rb.template.js.map +1 -0
  181. package/lib/generate-ruby-sdk/templates/resource_warnings_support.rb.template.d.ts +2 -0
  182. package/lib/generate-ruby-sdk/templates/resource_warnings_support.rb.template.js +10 -0
  183. package/lib/generate-ruby-sdk/templates/resource_warnings_support.rb.template.js.map +1 -0
  184. package/lib/generate-ruby-sdk/templates/seamapi.gemspec.template.d.ts +2 -0
  185. package/lib/generate-ruby-sdk/templates/seamapi.gemspec.template.js +41 -0
  186. package/lib/generate-ruby-sdk/templates/seamapi.gemspec.template.js.map +1 -0
  187. package/lib/generate-ruby-sdk/templates/snippets/resource.rb.template.d.ts +6 -0
  188. package/lib/generate-ruby-sdk/templates/snippets/resource.rb.template.js +15 -0
  189. package/lib/generate-ruby-sdk/templates/snippets/resource.rb.template.js.map +1 -0
  190. package/lib/generate-ruby-sdk/templates/version.rb.template.d.ts +2 -0
  191. package/lib/generate-ruby-sdk/templates/version.rb.template.js +6 -0
  192. package/lib/generate-ruby-sdk/templates/version.rb.template.js.map +1 -0
  193. package/lib/index.d.ts +2 -0
  194. package/lib/index.js +3 -0
  195. package/lib/index.js.map +1 -0
  196. package/lib/openapi/flatten-obj-schema.d.ts +5 -0
  197. package/lib/openapi/flatten-obj-schema.js +86 -0
  198. package/lib/openapi/flatten-obj-schema.js.map +1 -0
  199. package/lib/openapi/get-parameter-and-response-schema.d.ts +20 -0
  200. package/lib/openapi/get-parameter-and-response-schema.js +42 -0
  201. package/lib/openapi/get-parameter-and-response-schema.js.map +1 -0
  202. package/lib/openapi/index.d.ts +2 -0
  203. package/lib/openapi/index.js +3 -0
  204. package/lib/openapi/index.js.map +1 -0
  205. package/lib/types.d.ts +91 -0
  206. package/lib/types.js +2 -0
  207. package/lib/types.js.map +1 -0
  208. package/package.json +95 -0
  209. package/src/index.ts +6 -0
  210. package/src/lib/cli.ts +71 -0
  211. package/src/lib/fs-util/index.ts +2 -0
  212. package/src/lib/fs-util/populate-fs.ts +14 -0
  213. package/src/lib/fs-util/write-fs.ts +10 -0
  214. package/src/lib/generate-csharp-sdk/codegen.ts +648 -0
  215. package/src/lib/generate-csharp-sdk/constants.ts +1 -0
  216. package/src/lib/generate-csharp-sdk/generate-csharp-sdk.ts +126 -0
  217. package/src/lib/generate-csharp-sdk/generate-csproj.ts +45 -0
  218. package/src/lib/generate-csharp-sdk/templates/dataclass.ts +973 -0
  219. package/src/lib/generate-csharp-sdk/templates/fs/csharp-testing.sln +34 -0
  220. package/src/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/ApiResponse.cs +159 -0
  221. package/src/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/ClientUtils.cs +280 -0
  222. package/src/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/ExceptionFactory.cs +12 -0
  223. package/src/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/GlobalSeamRequestConfiguration.cs +60 -0
  224. package/src/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/HttpMethod.cs +29 -0
  225. package/src/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/IAsynchronousSeam.cs +142 -0
  226. package/src/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/IReadableSeamRequestConfiguration.cs +68 -0
  227. package/src/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/ISynchronousSeam.cs +103 -0
  228. package/src/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/Multimap.cs +286 -0
  229. package/src/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/RequestOptions.cs +74 -0
  230. package/src/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/RetryConfiguration.cs +21 -0
  231. package/src/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/Seam.cs +1070 -0
  232. package/src/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/SeamException.cs +64 -0
  233. package/src/lib/generate-csharp-sdk/templates/fs/src/Seam/Client/SeamRequestConfiguration.cs +662 -0
  234. package/src/lib/generate-csharp-sdk/templates/fs/src/Seam/Model/AsbtractModelSchema.cs +62 -0
  235. package/src/lib/generate-php-sdk/generate-php-sdk.ts +176 -0
  236. package/src/lib/generate-php-sdk/index.ts +1 -0
  237. package/src/lib/generate-php-sdk/templates/composer.json.template.ts +24 -0
  238. package/src/lib/generate-php-sdk/templates/env.example.template.ts +3 -0
  239. package/src/lib/generate-php-sdk/templates/gitignore.template.ts +5 -0
  240. package/src/lib/generate-php-sdk/templates/package.json.template.ts +11 -0
  241. package/src/lib/generate-php-sdk/templates/readme.md.template.ts +85 -0
  242. package/src/lib/generate-php-sdk/templates/smoke-test.template.ts +29 -0
  243. package/src/lib/generate-php-sdk/templates/test-fixture.template.ts +20 -0
  244. package/src/lib/generate-php-sdk/utils/deep-extract-resource-object-schemas.ts +160 -0
  245. package/src/lib/generate-php-sdk/utils/deep-flatten-one-of-and-all-of-schema.ts +128 -0
  246. package/src/lib/generate-php-sdk/utils/generate-resource-object-class.ts +105 -0
  247. package/src/lib/generate-php-sdk/utils/generate-seam-client.ts +115 -0
  248. package/src/lib/generate-php-sdk/utils/get-php-type.ts +21 -0
  249. package/src/lib/generate-php-sdk/utils/php-client.ts +189 -0
  250. package/src/lib/generate-python-sdk/class-file.ts +114 -0
  251. package/src/lib/generate-python-sdk/generate-python-sdk.ts +147 -0
  252. package/src/lib/generate-python-sdk/index.ts +1 -0
  253. package/src/lib/generate-python-sdk/map-python-type.ts +29 -0
  254. package/src/lib/generate-python-sdk/templates/conftest.py.template.ts +11 -0
  255. package/src/lib/generate-python-sdk/templates/pyproject.toml.template.ts +20 -0
  256. package/src/lib/generate-python-sdk/templates/readme.md.template.ts +47 -0
  257. package/src/lib/generate-python-sdk/templates/routes.py.template.ts +13 -0
  258. package/src/lib/generate-python-sdk/templates/seam.py.template.ts +73 -0
  259. package/src/lib/generate-python-sdk/templates/snippets/abstract-routes.template.ts +9 -0
  260. package/src/lib/generate-python-sdk/templates/snippets/abstract-seam.template.ts +8 -0
  261. package/src/lib/generate-python-sdk/templates/snippets/resource-dataclass.template.ts +15 -0
  262. package/src/lib/generate-python-sdk/templates/test_smoke.py.template.ts +12 -0
  263. package/src/lib/generate-python-sdk/templates/utils/deep_attr_dict.py.template.ts +27 -0
  264. package/src/lib/generate-ruby-sdk/generate-ruby-sdk.ts +153 -0
  265. package/src/lib/generate-ruby-sdk/index.ts +1 -0
  266. package/src/lib/generate-ruby-sdk/request.rb.template.ts +0 -0
  267. package/src/lib/generate-ruby-sdk/ruby-client.ts +81 -0
  268. package/src/lib/generate-ruby-sdk/templates/base_client.rb.template.ts +21 -0
  269. package/src/lib/generate-ruby-sdk/templates/base_resource.rb.template.ts +58 -0
  270. package/src/lib/generate-ruby-sdk/templates/client.rb.template.ts +73 -0
  271. package/src/lib/generate-ruby-sdk/templates/gemfile.template.ts +6 -0
  272. package/src/lib/generate-ruby-sdk/templates/logger.rb.template.ts +12 -0
  273. package/src/lib/generate-ruby-sdk/templates/rakefile.template.ts +22 -0
  274. package/src/lib/generate-ruby-sdk/templates/readme.md.template.ts +183 -0
  275. package/src/lib/generate-ruby-sdk/templates/request.rb.template.ts +70 -0
  276. package/src/lib/generate-ruby-sdk/templates/resource_error.rb.template.ts +7 -0
  277. package/src/lib/generate-ruby-sdk/templates/resource_errors_support.rb.template.ts +9 -0
  278. package/src/lib/generate-ruby-sdk/templates/resource_warning.rb.template.ts +7 -0
  279. package/src/lib/generate-ruby-sdk/templates/resource_warnings_support.rb.template.ts +9 -0
  280. package/src/lib/generate-ruby-sdk/templates/seamapi.gemspec.template.ts +40 -0
  281. package/src/lib/generate-ruby-sdk/templates/snippets/resource.rb.template.ts +24 -0
  282. package/src/lib/generate-ruby-sdk/templates/version.rb.template.ts +5 -0
  283. package/src/lib/index.ts +2 -0
  284. package/src/lib/openapi/flatten-obj-schema.ts +124 -0
  285. package/src/lib/openapi/get-parameter-and-response-schema.ts +59 -0
  286. package/src/lib/openapi/index.ts +2 -0
  287. package/src/lib/types.ts +96 -0
@@ -0,0 +1,21 @@
1
+ export default () => `# frozen_string_literal: true
2
+
3
+ module Seam
4
+ module Clients
5
+ class BaseClient
6
+ attr_accessor :client
7
+
8
+ def initialize(client)
9
+ @client = client
10
+ end
11
+
12
+ def request_seam_object(*attrs)
13
+ client.request_seam_object(*attrs)
14
+ end
15
+
16
+ def request_seam(*attrs)
17
+ client.request_seam(*attrs)
18
+ end
19
+ end
20
+ end
21
+ end`
@@ -0,0 +1,58 @@
1
+ export default () => `# frozen_string_literal: true
2
+
3
+ module Seam
4
+ class BaseResource
5
+ attr_accessor :data, :client
6
+
7
+ def initialize(data, client = nil)
8
+ @data = data
9
+ @client = client
10
+
11
+ @data.each do |key, value|
12
+ instance_variable_set("@#{key}", value)
13
+ end
14
+ end
15
+
16
+ def update_from_response(data)
17
+ @data = data
18
+ @data.each do |key, value|
19
+ instance_variable_set("@#{key}", value)
20
+ end
21
+ end
22
+
23
+ def self.load_from_response(data, client = nil)
24
+ if data.is_a?(Array)
25
+ data.map { |d| new(d, client) }
26
+ else
27
+ new(data, client)
28
+ end
29
+ end
30
+
31
+ def inspect
32
+ "<#{self.class.name}:#{"0x00%x" % (object_id << 1)}\n" + # rubocop:disable Style/StringConcatenation, Style/FormatString
33
+ instance_variables
34
+ .map { |k| k.to_s.sub("@", "") }
35
+ .filter { |k| k != "data" and k != "client" and respond_to? k }
36
+ .map { |k| " #{k}=#{send(k).inspect}" }
37
+ .join("\n") + ">"
38
+ end
39
+
40
+ def self.date_accessor(*attrs)
41
+ attrs.each do |attr|
42
+ define_method(attr) do
43
+ value = instance_variable_get("@#{attr}")
44
+
45
+ raise "No value for #{attr} set" if value.nil?
46
+
47
+ parse_datetime(value)
48
+ end
49
+ end
50
+ end
51
+
52
+ protected
53
+
54
+ def parse_datetime(value)
55
+ Time.parse(value)
56
+ end
57
+ end
58
+ end`
@@ -0,0 +1,73 @@
1
+ export default () => `# frozen_string_literal: true
2
+
3
+ module Seam
4
+ class Client
5
+ attr_accessor :api_key, :base_uri, :debug
6
+
7
+ def initialize(api_key: nil, base_uri: "https://connect.getseam.com", debug: false)
8
+ @api_key = api_key || ENV.fetch("SEAM_API_KEY", nil)
9
+ @base_uri = base_uri
10
+ @debug = debug
11
+
12
+ raise ArgumentError, "SEAM_API_KEY not found in environment, and api_key not provided" unless @api_key
13
+ end
14
+
15
+ def health
16
+ request_seam(:get, "/health")
17
+ end
18
+
19
+ def locks
20
+ @locks ||= Seam::Clients::Locks.new(self)
21
+ end
22
+
23
+ def devices
24
+ @devices ||= Seam::Clients::Devices.new(self)
25
+ end
26
+
27
+ def unmanaged_devices
28
+ @unmanaged_devices ||= Seam::Clients::UnmanagedDevices.new(self)
29
+ end
30
+
31
+ def action_attempts
32
+ @action_attempts ||= Seam::Clients::ActionAttempts.new(self)
33
+ end
34
+
35
+ def access_codes
36
+ @access_codes ||= Seam::Clients::AccessCodes.new(self)
37
+ end
38
+
39
+ def connect_webviews
40
+ @connect_webviews ||= Seam::Clients::ConnectWebviews.new(self)
41
+ end
42
+
43
+ def connected_accounts
44
+ @connected_accounts ||= Seam::Clients::ConnectedAccounts.new(self)
45
+ end
46
+
47
+ def workspaces
48
+ @workspaces ||= Seam::Clients::Workspaces.new(self)
49
+ end
50
+
51
+ def events
52
+ @events ||= Seam::Clients::Events.new(self)
53
+ end
54
+
55
+ def request_seam_object(method, path, klass, inner_object, config = {})
56
+ response = request_seam(method, path, config)
57
+
58
+ data = response[inner_object]
59
+
60
+ klass.load_from_response(data, self)
61
+ end
62
+
63
+ def request_seam(method, path, config = {})
64
+ Seam::Request.new(
65
+ api_key: api_key,
66
+ base_uri: base_uri,
67
+ debug: debug
68
+ ).perform(
69
+ method, path, config
70
+ )
71
+ end
72
+ end
73
+ end`
@@ -0,0 +1,6 @@
1
+ export default () => `# frozen_string_literal: true
2
+
3
+ source "https://rubygems.org"
4
+
5
+ # Specify your gem's dependencies in seamapi.gemspec.
6
+ gemspec`
@@ -0,0 +1,12 @@
1
+ export default () => `# frozen_string_literal: true
2
+
3
+ require "logger"
4
+
5
+ module Seam
6
+ class Logger
7
+ def self.info(message)
8
+ logger = ::Logger.new($stdout)
9
+ logger.info(message)
10
+ end
11
+ end
12
+ end`
@@ -0,0 +1,22 @@
1
+ export default () => `# frozen_string_literal: true
2
+
3
+ require "bundler/gem_tasks"
4
+ require "rspec/core/rake_task"
5
+ require "standard/rake"
6
+
7
+ RSpec::Core::RakeTask.new(:spec)
8
+
9
+ task default: %i[lint test]
10
+
11
+ task test: "spec"
12
+ task lint: "standard"
13
+ task format: "standard:fix"
14
+
15
+ desc "Open an interactive ruby console"
16
+ task :console do
17
+ require "irb"
18
+ require "bundler/setup"
19
+ require "seamapi"
20
+ ARGV.clear
21
+ IRB.start
22
+ end`
@@ -0,0 +1,183 @@
1
+ export default () => `# Seam API Ruby SDK
2
+
3
+ [![RubyGems.org](https://img.shields.io/gem/v/seamapi)](https://rubygems.org/gems/seamapi)
4
+ [![GitHub Actions](https://github.com/seamapi/ruby/workflows/main/badge.svg)](https://github.com/seamapi/ruby/actions)
5
+ [![Docs](https://img.shields.io/badge/docs-latest-blue)](https://docs.seam.co/)
6
+
7
+ Official interface to the [Seam Connect API].
8
+
9
+ [Seam Connect API]: https://docs.seam.co/
10
+
11
+ ## Description
12
+
13
+ This SDK provides convenient access to the [Seam Connect API] for Ruby applications.
14
+
15
+ This library includes:
16
+
17
+ - A predefined set of classes for API resources that
18
+ initialize themselves dynamically from API responses.
19
+ - Methods for all [Seam API endpoints](https://docs.seam.co/latest/api-clients/overview).
20
+ - Simplified asynchronous flows, e.g., listening for events or actions to finish.
21
+
22
+ [Seam API endpoints]: https://docs.seam.co/latest/api-endpoints/overview
23
+
24
+ ## Installation
25
+
26
+ Add this as a dependency to your project using [Bundler] with
27
+
28
+ \`\`\`
29
+ $ bundle add seamapi
30
+ \`\`\`
31
+
32
+ [bundler]: https://bundler.io/
33
+
34
+ ## Usage
35
+
36
+ _Refer to the [Seam Connect API documentation][Seam Connect API]._
37
+
38
+ ### Requirements
39
+
40
+ - Ruby version 3 or later.
41
+ - An API Key generated via the [Seam Dashboard].
42
+
43
+ [Seam Dashboard]: https://dashboard.getseam.com
44
+
45
+ ### Example
46
+
47
+ \`\`\`ruby
48
+ seam = Seam::Client.new(api_key: "MY_SEAM_API_KEY")
49
+ devices = seam.devices.list
50
+ my_door = devices.first
51
+ seam.locks.unlock(my_door).wait_until_finished
52
+ \`\`\`
53
+
54
+ ## Development and Testing
55
+
56
+ ### Quickstart
57
+
58
+ \`\`\`
59
+ $ git clone https://github.com/seamapi/ruby.git
60
+ $ cd ruby
61
+ $ bundle install
62
+ \`\`\`
63
+
64
+ Run the command below
65
+
66
+ \`\`\`
67
+ $ bundle exec rake
68
+ \`\`\`
69
+
70
+ Open an interactive ruby console with
71
+
72
+ \`\`\`
73
+ $ bundle exec rake
74
+ \`\`\`
75
+
76
+ Primary development tasks are defined as [rake] tasks in the \`Rakefile\`
77
+ and available via \`rake\`.
78
+ View them with
79
+
80
+ \`\`\`
81
+ $ bundle exec rake -T
82
+ \`\`\`
83
+
84
+ [rake]: https://ruby.github.io/rake/
85
+
86
+ ### Interactive Console
87
+
88
+ Play around with this module inside an interactive console with
89
+
90
+ \`\`\`
91
+ $ rake console
92
+ \`\`\`
93
+
94
+ Use a sandbox API key to play with the SDK without touching real devices.
95
+
96
+ ### Source code
97
+
98
+ The [source code] is hosted on GitHub.
99
+ Clone the project with
100
+
101
+ \`\`\`
102
+ $ git clone git@github.com:seamapi/ruby.git
103
+ \`\`\`
104
+
105
+ [source code]: https://github.com/seamapi/ruby
106
+
107
+ ### Requirements
108
+
109
+ You will need [Ruby] with [Bundler].
110
+
111
+ Be sure that all commands run under the correct Ruby version, e.g.,
112
+ if using [rbenv], install the correct version with
113
+
114
+ \`\`\`
115
+ $ rbenv install
116
+ \`\`\`
117
+
118
+ Install the development dependencies with
119
+
120
+ \`\`\`
121
+ $ bundle install
122
+ \`\`\`
123
+
124
+ [bundler]: https://bundler.io/
125
+ [ruby]: https://www.ruby-lang.org/
126
+ [rbenv]: https://github.com/rbenv/rbenv
127
+
128
+ ### Publishing
129
+
130
+ Releases are handled automatically by [semantic-release].
131
+ Publishing may be triggered manually using a [workflow_dispatch on GitHub Actions].
132
+
133
+ [semantic-release]: https://semantic-release.gitbook.io/
134
+ [workflow_dispatch on github actions]: https://github.com/seamapi/ruby/actions?query=workflow%3Aversion
135
+
136
+ ## GitHub Actions
137
+
138
+ _GitHub Actions should already be configured: this section is for reference only._
139
+
140
+ The following repository secrets must be set on [GitHub Actions]:
141
+
142
+ - \`RUBYGEMS_API_KEY\`: RubyGems.org token for publishing packages.
143
+ - \`GH_TOKEN\`: A personal access token for the user.
144
+ - \`GIT_USER_NAME\`: The GitHub user's real name.
145
+ - \`GIT_USER_EMAIL\`: The GitHub user's email.
146
+ - \`GPG_PRIVATE_KEY\`: The GitHub user's [GPG private key].
147
+ - \`GPG_PASSPHRASE\`: The GitHub user's GPG passphrase.
148
+
149
+ These are set at the organization level.
150
+
151
+ [github actions]: https://github.com/features/actions
152
+ [gpg private key]: https://github.com/marketplace/actions/import-gpg#prerequisites
153
+
154
+ ## Contributing
155
+
156
+ Please submit and comment on bug reports and feature requests.
157
+
158
+ To submit a patch:
159
+
160
+ 1. Fork it (https://github.com/seamapi/ruby/fork).
161
+ 2. Create your feature branch (\`git checkout -b my-new-feature\`).
162
+ 3. Make changes.
163
+ 4. Commit your changes (\`git commit -am 'Add some feature'\`).
164
+ 5. Push to the branch (\`git push origin my-new-feature\`).
165
+ 6. Create a new Pull Request.
166
+
167
+ ## License
168
+
169
+ This Ruby gem is licensed under the MIT license.
170
+
171
+ ## Warranty
172
+
173
+ This software is provided by the copyright holders and contributors "as is" and
174
+ any express or implied warranties, including, but not limited to, the implied
175
+ warranties of merchantability and fitness for a particular purpose are
176
+ disclaimed. In no event shall the copyright holder or contributors be liable for
177
+ any direct, indirect, incidental, special, exemplary, or consequential damages
178
+ (including, but not limited to, procurement of substitute goods or services;
179
+ loss of use, data, or profits; or business interruption) however caused and on
180
+ any theory of liability, whether in contract, strict liability, or tort
181
+ (including negligence or otherwise) arising in any way out of the use of this
182
+ software, even if advised of the possibility of such damage.
183
+ `
@@ -0,0 +1,70 @@
1
+ export default () => `# frozen_string_literal: true
2
+
3
+ require "http"
4
+
5
+ module Seam
6
+ class Request
7
+ attr_reader :base_uri, :api_key, :debug
8
+
9
+ class Error < StandardError
10
+ attr_reader :status, :response
11
+
12
+ def initialize(message, status, response)
13
+ super(message)
14
+ @status = status
15
+ @response = response
16
+ end
17
+ end
18
+
19
+ def initialize(api_key:, base_uri:, debug: false)
20
+ @api_key = api_key
21
+ @base_uri = base_uri
22
+ @debug = debug
23
+ end
24
+
25
+ def perform(method, uri, config = {})
26
+ Logger.info("Request: #{method} #{uri} #{config}") if debug
27
+
28
+ config[:body] = config[:body].to_json if config[:body]
29
+
30
+ response = HTTP.request(
31
+ method,
32
+ build_url(uri),
33
+ {headers: headers}.merge(config)
34
+ )
35
+
36
+ return response.parse if response.status.success?
37
+
38
+ handle_error_response(response, method, uri)
39
+ end
40
+
41
+ protected
42
+
43
+ def handle_error_response(response, method, uri)
44
+ msg = "Api Error #{response.status.code} #{method} #{uri}"
45
+ code = response.status.code
46
+
47
+ if code >= 400 && code < 500 && (err = response.parse["error"])
48
+ msg = "Api Error #{err["type"]}\nrequest_id: #{err["request_id"]}\n#{err["message"]}"
49
+ end
50
+
51
+ raise Error.new(msg, code, response)
52
+ end
53
+
54
+ def build_url(uri)
55
+ "#{base_uri}#{uri}"
56
+ end
57
+
58
+ def headers
59
+ {
60
+ "User-Agent" => user_agent,
61
+ "Content-Type" => "application/json",
62
+ "Authorization" => "Bearer #{api_key}"
63
+ }
64
+ end
65
+
66
+ def user_agent
67
+ "seam-ruby/#{Seam::VERSION}"
68
+ end
69
+ end
70
+ end`
@@ -0,0 +1,7 @@
1
+ export default () => `# frozen_string_literal: true
2
+
3
+ module Seam
4
+ class ResourceError < BaseResource
5
+ attr_accessor :error_code, :message
6
+ end
7
+ end`
@@ -0,0 +1,9 @@
1
+ export default () => `# frozen_string_literal: true
2
+
3
+ module Seam
4
+ module ResourceErrorsSupport
5
+ def errors
6
+ @errors_converted ||= @errors.is_a?(Array) ? Seam::ResourceError.load_from_response(@errors) : []
7
+ end
8
+ end
9
+ end`
@@ -0,0 +1,7 @@
1
+ export default () => `# frozen_string_literal: true
2
+
3
+ module Seam
4
+ class ResourceWarning < BaseResource
5
+ attr_accessor :warning_code, :message
6
+ end
7
+ end`
@@ -0,0 +1,9 @@
1
+ export default () => `# frozen_string_literal: true
2
+
3
+ module Seam
4
+ module ResourceWarningsSupport
5
+ def warnings
6
+ @warnings_converted ||= @warnings.is_a?(Array) ? Seam::ResourceWarning.load_from_response(@warnings) : []
7
+ end
8
+ end
9
+ end`
@@ -0,0 +1,40 @@
1
+ export default () => `# frozen_string_literal: true
2
+
3
+ require_relative "lib/seam/version"
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = "seamapi"
7
+ spec.version = Seam::VERSION
8
+ spec.author = "Seam Labs, Inc."
9
+ spec.email = "support@getseam.com"
10
+
11
+ spec.summary = "Seam API Ruby SDK"
12
+ spec.description = "Official interface to the Seam Connect API."
13
+ spec.homepage = "https://github.com/seamapi/ruby"
14
+ spec.license = "MIT"
15
+ spec.required_ruby_version = ">= 2.6.0"
16
+
17
+ spec.metadata["homepage_uri"] = spec.homepage
18
+ spec.metadata["source_code_uri"] = spec.homepage
19
+ spec.metadata["bug_tracker_uri"] = "#{spec.metadata["source_code_uri"]}/issues"
20
+ spec.metadata["changelog_uri"] = "#{spec.metadata["source_code_uri"]}/releases"
21
+ spec.metadata["github_repo"] = "git@github.com:seamapi/ruby.git"
22
+
23
+ spec.bindir = "bin"
24
+ spec.executables = spec.files.grep(%r{\A#{spec.bindir}/}) { |f| File.basename(f) }
25
+
26
+ spec.files = Dir["lib/**/*.rb"]
27
+ spec.files += Dir["[A-Z]*"]
28
+
29
+ spec.add_dependency "http", "~> 5.0.0"
30
+
31
+ spec.add_development_dependency "bundler", "~> 2.0"
32
+ spec.add_development_dependency "gem-release", "~> 2.2"
33
+ spec.add_development_dependency "parse_gemspec-cli", "~> 1.0"
34
+ spec.add_development_dependency "rake", "~> 13.0"
35
+ spec.add_development_dependency "rspec", "~> 3.0"
36
+ spec.add_development_dependency "simplecov", "~> 0.21"
37
+ spec.add_development_dependency "simplecov-console", "~> 0.9"
38
+ spec.add_development_dependency "standard", "~> 1.3"
39
+ spec.add_development_dependency "webmock", "~> 3.0.0"
40
+ end`
@@ -0,0 +1,24 @@
1
+ export default ({
2
+ pascal_name,
3
+ attrs,
4
+ date_attrs,
5
+ }: {
6
+ pascal_name: string
7
+ attrs: string[]
8
+ date_attrs: string[]
9
+ }) => `# frozen_string_literal: true
10
+
11
+ module Seam
12
+ class ${pascal_name} < BaseResource
13
+ attr_reader ${attrs.map((attr) => `:${attr}`).join(", ")}
14
+
15
+ ${
16
+ date_attrs.length > 0
17
+ ? `date_accessor ${date_attrs.map((attr) => `:${attr}`).join(", ")}`
18
+ : ""
19
+ }
20
+
21
+ include Seam::ResourceErrorsSupport
22
+ include Seam::ResourceWarningsSupport
23
+ end
24
+ end`
@@ -0,0 +1,5 @@
1
+ export default () => `# frozen_string_literal: true
2
+
3
+ module Seam
4
+ VERSION = "1.11.2"
5
+ end`
@@ -0,0 +1,2 @@
1
+ export * from "./openapi/index.js"
2
+ export * from "./fs-util/index.js"
@@ -0,0 +1,124 @@
1
+ import type {
2
+ AllOfSchema,
3
+ ArraySchema,
4
+ ObjSchema,
5
+ PrimitiveSchema,
6
+ PropertySchema,
7
+ } from "lib/types.js"
8
+ import lodash from "lodash"
9
+ const { intersectionWith, isEqual } = lodash
10
+
11
+ export const flattenObjSchema = (
12
+ s:
13
+ | ObjSchema
14
+ | {
15
+ oneOf: Array<ObjSchema>
16
+ }
17
+ ): ObjSchema => {
18
+ if ("type" in s && s.type === "object") return s
19
+
20
+ if ("oneOf" in s) {
21
+ if (!s.oneOf[0]) {
22
+ throw new Error("oneOf must have at least one element")
23
+ }
24
+
25
+ const super_obj: ObjSchema = {
26
+ type: "object",
27
+ properties: {},
28
+ required: [...s.oneOf[0].required],
29
+ }
30
+ for (const obj of s.oneOf) {
31
+ for (const [k, v] of Object.entries(obj.properties)) {
32
+ super_obj.properties[k] = v
33
+ }
34
+ super_obj.required = intersectionWith(
35
+ super_obj.required,
36
+ obj.required,
37
+ isEqual
38
+ )
39
+ }
40
+ return super_obj as ObjSchema
41
+ }
42
+ throw new Error(`Unknown schema type "${s.type}"`)
43
+ }
44
+
45
+ export const deepFlattenAllOfSchema = (
46
+ s: AllOfSchema
47
+ ): Exclude<PropertySchema, AllOfSchema> | undefined => {
48
+ if (s.allOf.length === 1 && s.allOf[0]) {
49
+ const recursive = s.allOf[0]
50
+
51
+ if ("allOf" in recursive) {
52
+ return deepFlattenAllOfSchema(recursive)
53
+ }
54
+
55
+ return recursive
56
+ }
57
+
58
+ const properties: Record<string, PropertySchema[]> = {}
59
+ const required = new Set<string>()
60
+ const primitives: (PrimitiveSchema | ArraySchema)[] = []
61
+
62
+ for (let subschema of s.allOf) {
63
+ if ("allOf" in subschema) {
64
+ const recursive = deepFlattenAllOfSchema(subschema)
65
+ if (!recursive) continue
66
+
67
+ subschema = recursive
68
+ }
69
+
70
+ if ("oneOf" in subschema) {
71
+ console.error("oneOf not currently supported when flattening allOf")
72
+ continue
73
+ }
74
+
75
+ if ("$ref" in subschema) {
76
+ console.error("$ref not currently supported when flattening allOf")
77
+ continue
78
+ }
79
+
80
+ if (subschema.type === "object") {
81
+ for (const [k, v] of Object.entries(subschema.properties)) {
82
+ if (!properties[k]) properties[k] = []
83
+ properties[k]!.push(v)
84
+
85
+ if (subschema.required?.includes(k)) required.add(k)
86
+ }
87
+
88
+ continue
89
+ }
90
+
91
+ primitives.push(subschema)
92
+ }
93
+
94
+ if (Object.keys(properties).length > 0 && primitives.length > 0) {
95
+ console.error(
96
+ "Found invalid allOf schema with both properties and primitives",
97
+ new Error(JSON.stringify(s, null, 2))
98
+ )
99
+ }
100
+
101
+ if (primitives.length > 0) {
102
+ // TODO: check that all primitives are the same, then merge nullability/unions
103
+ return primitives[0]
104
+ }
105
+
106
+ if (Object.keys(properties).length > 0) {
107
+ return {
108
+ type: "object",
109
+ required: [...required],
110
+ properties: Object.fromEntries(
111
+ Object.entries(properties)
112
+ .map(([k, v]) => [
113
+ k,
114
+ deepFlattenAllOfSchema({
115
+ allOf: v,
116
+ }),
117
+ ])
118
+ .filter(([, v]) => v)
119
+ ),
120
+ }
121
+ }
122
+
123
+ return undefined
124
+ }