@makeco/stripe-kit 0.1.4 → 0.2.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 (260) hide show
  1. package/LICENSE.md +1 -1
  2. package/README.md +47 -35
  3. package/dist/cli-prompts.d.ts +19 -0
  4. package/dist/cli-prompts.d.ts.map +1 -0
  5. package/dist/cli-prompts.js +154 -0
  6. package/dist/cli-prompts.js.map +1 -0
  7. package/dist/cli.js +13 -14
  8. package/dist/cli.js.map +1 -1
  9. package/dist/commands/archive.d.ts +3 -0
  10. package/dist/commands/archive.d.ts.map +1 -0
  11. package/dist/commands/archive.js +119 -0
  12. package/dist/commands/archive.js.map +1 -0
  13. package/dist/commands/config.d.ts +3 -0
  14. package/dist/commands/config.d.ts.map +1 -0
  15. package/dist/commands/config.js +33 -0
  16. package/dist/commands/config.js.map +1 -0
  17. package/dist/commands/create.d.ts +3 -0
  18. package/dist/commands/create.d.ts.map +1 -0
  19. package/dist/commands/create.js +113 -0
  20. package/dist/commands/create.js.map +1 -0
  21. package/dist/commands/db.d.ts +3 -0
  22. package/dist/commands/db.d.ts.map +1 -0
  23. package/dist/commands/db.js +143 -0
  24. package/dist/commands/db.js.map +1 -0
  25. package/dist/commands/index.d.ts +7 -7
  26. package/dist/commands/index.js +7 -7
  27. package/dist/commands/list.d.ts +3 -0
  28. package/dist/commands/list.d.ts.map +1 -0
  29. package/dist/commands/list.js +147 -0
  30. package/dist/commands/list.js.map +1 -0
  31. package/dist/commands/update.d.ts +3 -0
  32. package/dist/commands/update.d.ts.map +1 -0
  33. package/dist/commands/update.js +141 -0
  34. package/dist/commands/update.js.map +1 -0
  35. package/dist/commands/urls.d.ts +3 -0
  36. package/dist/commands/urls.d.ts.map +1 -0
  37. package/dist/commands/urls.js +79 -0
  38. package/dist/commands/urls.js.map +1 -0
  39. package/dist/definitions/action.constants.js +16 -16
  40. package/dist/definitions/config.schemas.d.ts +19 -256
  41. package/dist/definitions/config.schemas.d.ts.map +1 -1
  42. package/dist/definitions/config.schemas.js +11 -17
  43. package/dist/definitions/config.schemas.js.map +1 -1
  44. package/dist/definitions/context.types.d.ts +3 -4
  45. package/dist/definitions/context.types.d.ts.map +1 -1
  46. package/dist/definitions/database-adapter.schemas.d.ts +2 -2
  47. package/dist/definitions/database-adapter.schemas.js +1 -1
  48. package/dist/definitions/env.constants.js +4 -4
  49. package/dist/definitions/index.d.ts +6 -8
  50. package/dist/definitions/index.d.ts.map +1 -1
  51. package/dist/definitions/index.js +6 -8
  52. package/dist/definitions/index.js.map +1 -1
  53. package/dist/index.d.ts +2 -2
  54. package/dist/index.js +2 -2
  55. package/dist/utils/create-context.d.ts +1 -1
  56. package/dist/utils/create-context.d.ts.map +1 -1
  57. package/dist/utils/create-context.js +2 -5
  58. package/dist/utils/create-context.js.map +1 -1
  59. package/dist/utils/create-logger.d.ts +1 -1
  60. package/dist/utils/create-logger.js +13 -13
  61. package/dist/utils/define-config.d.ts +1 -1
  62. package/dist/utils/define-config.js +1 -1
  63. package/dist/utils/find-env-directories.js +14 -14
  64. package/dist/utils/index.d.ts +10 -11
  65. package/dist/utils/index.d.ts.map +1 -1
  66. package/dist/utils/index.js +10 -11
  67. package/dist/utils/index.js.map +1 -1
  68. package/dist/utils/load-config.d.ts +1 -1
  69. package/dist/utils/load-config.d.ts.map +1 -1
  70. package/dist/utils/load-config.js +68 -48
  71. package/dist/utils/load-config.js.map +1 -1
  72. package/dist/utils/load-env.d.ts +1 -1
  73. package/dist/utils/load-env.js +18 -18
  74. package/dist/utils/stripe-client.d.ts +1 -1
  75. package/dist/utils/stripe-client.js +3 -3
  76. package/dist/utils/stripe-repository.d.ts +2 -2
  77. package/dist/utils/stripe-repository.js +2 -2
  78. package/dist/utils/user-preferences.d.ts +1 -1
  79. package/dist/utils/user-preferences.js +7 -7
  80. package/package.json +9 -4
  81. package/dist/cli-prompts/action.d.ts +0 -5
  82. package/dist/cli-prompts/action.d.ts.map +0 -1
  83. package/dist/cli-prompts/action.js +0 -36
  84. package/dist/cli-prompts/action.js.map +0 -1
  85. package/dist/cli-prompts/adapter.d.ts +0 -9
  86. package/dist/cli-prompts/adapter.d.ts.map +0 -1
  87. package/dist/cli-prompts/adapter.js +0 -53
  88. package/dist/cli-prompts/adapter.js.map +0 -1
  89. package/dist/cli-prompts/confirmation.d.ts +0 -6
  90. package/dist/cli-prompts/confirmation.d.ts.map +0 -1
  91. package/dist/cli-prompts/confirmation.js +0 -27
  92. package/dist/cli-prompts/confirmation.js.map +0 -1
  93. package/dist/cli-prompts/environment.d.ts +0 -5
  94. package/dist/cli-prompts/environment.d.ts.map +0 -1
  95. package/dist/cli-prompts/environment.js +0 -43
  96. package/dist/cli-prompts/environment.js.map +0 -1
  97. package/dist/cli-prompts/index.d.ts +0 -5
  98. package/dist/cli-prompts/index.d.ts.map +0 -1
  99. package/dist/cli-prompts/index.js +0 -5
  100. package/dist/cli-prompts/index.js.map +0 -1
  101. package/dist/commands/archive/archive.action.d.ts +0 -5
  102. package/dist/commands/archive/archive.action.d.ts.map +0 -1
  103. package/dist/commands/archive/archive.action.js +0 -73
  104. package/dist/commands/archive/archive.action.js.map +0 -1
  105. package/dist/commands/archive/archive.command.d.ts +0 -3
  106. package/dist/commands/archive/archive.command.d.ts.map +0 -1
  107. package/dist/commands/archive/archive.command.js +0 -24
  108. package/dist/commands/archive/archive.command.js.map +0 -1
  109. package/dist/commands/archive/archive.preflight.d.ts +0 -13
  110. package/dist/commands/archive/archive.preflight.d.ts.map +0 -1
  111. package/dist/commands/archive/archive.preflight.js +0 -27
  112. package/dist/commands/archive/archive.preflight.js.map +0 -1
  113. package/dist/commands/archive/index.d.ts +0 -2
  114. package/dist/commands/archive/index.d.ts.map +0 -1
  115. package/dist/commands/archive/index.js +0 -2
  116. package/dist/commands/archive/index.js.map +0 -1
  117. package/dist/commands/config/config.command.d.ts +0 -3
  118. package/dist/commands/config/config.command.d.ts.map +0 -1
  119. package/dist/commands/config/config.command.js +0 -33
  120. package/dist/commands/config/config.command.js.map +0 -1
  121. package/dist/commands/config/index.d.ts +0 -2
  122. package/dist/commands/config/index.d.ts.map +0 -1
  123. package/dist/commands/config/index.js +0 -2
  124. package/dist/commands/config/index.js.map +0 -1
  125. package/dist/commands/create/create.action.d.ts +0 -5
  126. package/dist/commands/create/create.action.d.ts.map +0 -1
  127. package/dist/commands/create/create.action.js +0 -53
  128. package/dist/commands/create/create.action.js.map +0 -1
  129. package/dist/commands/create/create.command.d.ts +0 -3
  130. package/dist/commands/create/create.command.d.ts.map +0 -1
  131. package/dist/commands/create/create.command.js +0 -22
  132. package/dist/commands/create/create.command.js.map +0 -1
  133. package/dist/commands/create/create.preflight.d.ts +0 -13
  134. package/dist/commands/create/create.preflight.d.ts.map +0 -1
  135. package/dist/commands/create/create.preflight.js +0 -24
  136. package/dist/commands/create/create.preflight.js.map +0 -1
  137. package/dist/commands/create/index.d.ts +0 -2
  138. package/dist/commands/create/index.d.ts.map +0 -1
  139. package/dist/commands/create/index.js +0 -2
  140. package/dist/commands/create/index.js.map +0 -1
  141. package/dist/commands/db/db.command.d.ts +0 -3
  142. package/dist/commands/db/db.command.d.ts.map +0 -1
  143. package/dist/commands/db/db.command.js +0 -13
  144. package/dist/commands/db/db.command.js.map +0 -1
  145. package/dist/commands/db/index.d.ts +0 -4
  146. package/dist/commands/db/index.d.ts.map +0 -1
  147. package/dist/commands/db/index.js +0 -4
  148. package/dist/commands/db/index.js.map +0 -1
  149. package/dist/commands/db/purge/index.d.ts +0 -2
  150. package/dist/commands/db/purge/index.d.ts.map +0 -1
  151. package/dist/commands/db/purge/index.js +0 -2
  152. package/dist/commands/db/purge/index.js.map +0 -1
  153. package/dist/commands/db/purge/purge.action.d.ts +0 -3
  154. package/dist/commands/db/purge/purge.action.d.ts.map +0 -1
  155. package/dist/commands/db/purge/purge.action.js +0 -17
  156. package/dist/commands/db/purge/purge.action.js.map +0 -1
  157. package/dist/commands/db/purge/purge.command.d.ts +0 -3
  158. package/dist/commands/db/purge/purge.command.d.ts.map +0 -1
  159. package/dist/commands/db/purge/purge.command.js +0 -23
  160. package/dist/commands/db/purge/purge.command.js.map +0 -1
  161. package/dist/commands/db/purge/purge.preflight.d.ts +0 -12
  162. package/dist/commands/db/purge/purge.preflight.d.ts.map +0 -1
  163. package/dist/commands/db/purge/purge.preflight.js +0 -27
  164. package/dist/commands/db/purge/purge.preflight.js.map +0 -1
  165. package/dist/commands/db/sync/index.d.ts +0 -2
  166. package/dist/commands/db/sync/index.d.ts.map +0 -1
  167. package/dist/commands/db/sync/index.js +0 -2
  168. package/dist/commands/db/sync/index.js.map +0 -1
  169. package/dist/commands/db/sync/sync.action.d.ts +0 -3
  170. package/dist/commands/db/sync/sync.action.d.ts.map +0 -1
  171. package/dist/commands/db/sync/sync.action.js +0 -24
  172. package/dist/commands/db/sync/sync.action.js.map +0 -1
  173. package/dist/commands/db/sync/sync.command.d.ts +0 -3
  174. package/dist/commands/db/sync/sync.command.d.ts.map +0 -1
  175. package/dist/commands/db/sync/sync.command.js +0 -23
  176. package/dist/commands/db/sync/sync.command.js.map +0 -1
  177. package/dist/commands/db/sync/sync.preflight.d.ts +0 -12
  178. package/dist/commands/db/sync/sync.preflight.d.ts.map +0 -1
  179. package/dist/commands/db/sync/sync.preflight.js +0 -33
  180. package/dist/commands/db/sync/sync.preflight.js.map +0 -1
  181. package/dist/commands/list/index.d.ts +0 -4
  182. package/dist/commands/list/index.d.ts.map +0 -1
  183. package/dist/commands/list/index.js +0 -4
  184. package/dist/commands/list/index.js.map +0 -1
  185. package/dist/commands/list/list.command.d.ts +0 -3
  186. package/dist/commands/list/list.command.d.ts.map +0 -1
  187. package/dist/commands/list/list.command.js +0 -13
  188. package/dist/commands/list/list.command.js.map +0 -1
  189. package/dist/commands/list/prices/index.d.ts +0 -2
  190. package/dist/commands/list/prices/index.d.ts.map +0 -1
  191. package/dist/commands/list/prices/index.js +0 -2
  192. package/dist/commands/list/prices/index.js.map +0 -1
  193. package/dist/commands/list/prices/prices.action.d.ts +0 -5
  194. package/dist/commands/list/prices/prices.action.d.ts.map +0 -1
  195. package/dist/commands/list/prices/prices.action.js +0 -40
  196. package/dist/commands/list/prices/prices.action.js.map +0 -1
  197. package/dist/commands/list/prices/prices.command.d.ts +0 -3
  198. package/dist/commands/list/prices/prices.command.d.ts.map +0 -1
  199. package/dist/commands/list/prices/prices.command.js +0 -22
  200. package/dist/commands/list/prices/prices.command.js.map +0 -1
  201. package/dist/commands/list/prices/prices.preflight.d.ts +0 -13
  202. package/dist/commands/list/prices/prices.preflight.d.ts.map +0 -1
  203. package/dist/commands/list/prices/prices.preflight.js +0 -19
  204. package/dist/commands/list/prices/prices.preflight.js.map +0 -1
  205. package/dist/commands/list/products/index.d.ts +0 -2
  206. package/dist/commands/list/products/index.d.ts.map +0 -1
  207. package/dist/commands/list/products/index.js +0 -2
  208. package/dist/commands/list/products/index.js.map +0 -1
  209. package/dist/commands/list/products/products.action.d.ts +0 -5
  210. package/dist/commands/list/products/products.action.d.ts.map +0 -1
  211. package/dist/commands/list/products/products.action.js +0 -32
  212. package/dist/commands/list/products/products.action.js.map +0 -1
  213. package/dist/commands/list/products/products.command.d.ts +0 -3
  214. package/dist/commands/list/products/products.command.d.ts.map +0 -1
  215. package/dist/commands/list/products/products.command.js +0 -22
  216. package/dist/commands/list/products/products.command.js.map +0 -1
  217. package/dist/commands/list/products/products.preflight.d.ts +0 -13
  218. package/dist/commands/list/products/products.preflight.d.ts.map +0 -1
  219. package/dist/commands/list/products/products.preflight.js +0 -19
  220. package/dist/commands/list/products/products.preflight.js.map +0 -1
  221. package/dist/commands/update/index.d.ts +0 -2
  222. package/dist/commands/update/index.d.ts.map +0 -1
  223. package/dist/commands/update/index.js +0 -2
  224. package/dist/commands/update/index.js.map +0 -1
  225. package/dist/commands/update/update.action.d.ts +0 -3
  226. package/dist/commands/update/update.action.d.ts.map +0 -1
  227. package/dist/commands/update/update.action.js +0 -84
  228. package/dist/commands/update/update.action.js.map +0 -1
  229. package/dist/commands/update/update.command.d.ts +0 -3
  230. package/dist/commands/update/update.command.d.ts.map +0 -1
  231. package/dist/commands/update/update.command.js +0 -22
  232. package/dist/commands/update/update.command.js.map +0 -1
  233. package/dist/commands/update/update.preflight.d.ts +0 -12
  234. package/dist/commands/update/update.preflight.d.ts.map +0 -1
  235. package/dist/commands/update/update.preflight.js +0 -36
  236. package/dist/commands/update/update.preflight.js.map +0 -1
  237. package/dist/commands/urls/index.d.ts +0 -2
  238. package/dist/commands/urls/index.d.ts.map +0 -1
  239. package/dist/commands/urls/index.js +0 -2
  240. package/dist/commands/urls/index.js.map +0 -1
  241. package/dist/commands/urls/urls.action.d.ts +0 -4
  242. package/dist/commands/urls/urls.action.d.ts.map +0 -1
  243. package/dist/commands/urls/urls.action.js +0 -65
  244. package/dist/commands/urls/urls.action.js.map +0 -1
  245. package/dist/commands/urls/urls.command.d.ts +0 -6
  246. package/dist/commands/urls/urls.command.d.ts.map +0 -1
  247. package/dist/commands/urls/urls.command.js +0 -19
  248. package/dist/commands/urls/urls.command.js.map +0 -1
  249. package/dist/definitions/stripe-price.schemas.d.ts +0 -132
  250. package/dist/definitions/stripe-price.schemas.d.ts.map +0 -1
  251. package/dist/definitions/stripe-price.schemas.js +0 -50
  252. package/dist/definitions/stripe-price.schemas.js.map +0 -1
  253. package/dist/definitions/stripe-product.schemas.d.ts +0 -87
  254. package/dist/definitions/stripe-product.schemas.d.ts.map +0 -1
  255. package/dist/definitions/stripe-product.schemas.js +0 -42
  256. package/dist/definitions/stripe-product.schemas.js.map +0 -1
  257. package/dist/utils/create-mappers.d.ts +0 -3
  258. package/dist/utils/create-mappers.d.ts.map +0 -1
  259. package/dist/utils/create-mappers.js +0 -98
  260. package/dist/utils/create-mappers.js.map +0 -1
package/LICENSE.md CHANGED
@@ -18,4 +18,4 @@ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
18
  AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
19
  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
20
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
21
+ SOFTWARE.
package/README.md CHANGED
@@ -50,44 +50,56 @@ Create a `stripe.config.ts` file in your project root:
50
50
  import { defineConfig } from "stripe-kit";
51
51
 
52
52
  export default defineConfig({
53
- plans: [
54
- {
53
+ plans: [
54
+ {
55
55
  // Stripe.Product (camelCase)
56
- product: {
57
- id: "pro-plan",
58
- name: "Pro Plan",
59
- description: "Professional features for growing teams",
60
- },
56
+ product: {
57
+ id: "pro-plan",
58
+ name: "Pro Plan",
59
+ description: "Professional features for growing teams",
60
+ },
61
61
  // Stripe.Price[] (camelCase)
62
- prices: [
63
- {
64
- id: "pro-monthly",
65
- nickname: "Pro Monthly",
66
- unitAmount: 2999,
67
- currency: "usd",
68
- recurring: { interval: "month" },
69
- },
70
- {
71
- id: "pro-yearly",
72
- nickname: "Pro Yearly",
73
- unitAmount: 29999,
74
- currency: "usd",
75
- recurring: { interval: "year" },
76
- },
77
- ],
78
- },
79
- ],
80
- adapters: {
62
+ prices: [
63
+ {
64
+ id: "pro-monthly",
65
+ nickname: "Pro Monthly",
66
+ unitAmount: 2999,
67
+ currency: "usd",
68
+ recurring: { interval: "month" },
69
+ },
70
+ {
71
+ id: "pro-yearly",
72
+ nickname: "Pro Yearly",
73
+ unitAmount: 29999,
74
+ currency: "usd",
75
+ recurring: { interval: "year" },
76
+ },
77
+ ],
78
+ },
79
+ ],
80
+ adapters: {
81
81
  // Custom property key. Can be postgres, sqlite, turso, myAdapter, etc.
82
- postgres: {
83
- syncProducts: async (products) => { /* Sync Stripe products to your database */ },
84
- syncPrices: async (prices) => { /* Sync Stripe prices to your database */ },
85
- clearProducts: async () => { /* Remove all products from your database */ },
86
- clearPrices: async () => { /* Remove all prices from your database */ },
87
- getProducts: async () => { /* Optional: Return all products from your database */ },
88
- getPrices: async () => { /* Optional: Return all prices from your database */ }
89
- },
90
- },
82
+ postgres: {
83
+ syncProducts: async (products) => {
84
+ /* Sync Stripe products to your database */
85
+ },
86
+ syncPrices: async (prices) => {
87
+ /* Sync Stripe prices to your database */
88
+ },
89
+ clearProducts: async () => {
90
+ /* Remove all products from your database */
91
+ },
92
+ clearPrices: async () => {
93
+ /* Remove all prices from your database */
94
+ },
95
+ getProducts: async () => {
96
+ /* Optional: Return all products from your database */
97
+ },
98
+ getPrices: async () => {
99
+ /* Optional: Return all prices from your database */
100
+ },
101
+ },
102
+ },
91
103
  });
92
104
  ```
93
105
 
@@ -0,0 +1,19 @@
1
+ import type { ActionKey, DatabaseAdapter, EnvironmentKey } from "./definitions/index.js";
2
+ export declare function determineEnvironment(input: {
3
+ envInput?: EnvironmentKey;
4
+ }): Promise<EnvironmentKey>;
5
+ export declare function determineAdapter(input: {
6
+ adapterInput: string | undefined;
7
+ availableAdapters: Record<string, DatabaseAdapter>;
8
+ }): Promise<{
9
+ name: string;
10
+ adapter: DatabaseAdapter;
11
+ }>;
12
+ export declare function determineAction(input: {
13
+ actionInput?: string;
14
+ }): Promise<ActionKey>;
15
+ export declare function requireProductionConfirmation(input: {
16
+ action: string;
17
+ env: EnvironmentKey;
18
+ }): Promise<void>;
19
+ //# sourceMappingURL=cli-prompts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-prompts.d.ts","sourceRoot":"","sources":["../src/cli-prompts.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAoBhF,wBAAsB,oBAAoB,CAAC,KAAK,EAAE;IAChD,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B,GAAG,OAAO,CAAC,cAAc,CAAC,CAuD1B;AAaD,wBAAsB,gBAAgB,CAAC,KAAK,EAAE;IAC5C,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;CACpD,GAAG,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,eAAe,CAAA;CAAE,CAAC,CAmFtD;AASD,wBAAsB,eAAe,CAAC,KAAK,EAAE;IAC3C,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GAAG,OAAO,CAAC,SAAS,CAAC,CAyCrB;AAUD,wBAAsB,6BAA6B,CAAC,KAAK,EAAE;IACzD,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,cAAc,CAAC;CACrB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmChB"}
@@ -0,0 +1,154 @@
1
+ import chalk from "chalk";
2
+ import prompts from "prompts";
3
+ import { ACTION_DESCRIPTIONS, ENVIRONMENTS, VALID_ACTIONS, VALID_ENVIRONMENTS, } from "./definitions/index.js";
4
+ import { getLastUsedAdapter, getLastUsedEnvironment, saveUserPreference, } from "./utils/index.js";
5
+ export async function determineEnvironment(input) {
6
+ const { envInput } = input;
7
+ if (envInput && VALID_ENVIRONMENTS.includes(envInput)) {
8
+ console.log(chalk.green(`Environment specified via flag: ${chalk.bold(envInput)}`));
9
+ saveUserPreference("defaultEnvironment", envInput);
10
+ return envInput;
11
+ }
12
+ const lastUsedEnv = getLastUsedEnvironment();
13
+ const initialIndex = lastUsedEnv
14
+ ? VALID_ENVIRONMENTS.indexOf(lastUsedEnv)
15
+ : 0;
16
+ try {
17
+ const response = await prompts({
18
+ type: "select",
19
+ name: "value",
20
+ message: chalk.blue(lastUsedEnv
21
+ ? `Select the target environment (last used: ${chalk.bold(lastUsedEnv)}):`
22
+ : "Select the target environment:"),
23
+ choices: [
24
+ { title: "Test", value: "test" },
25
+ { title: "Development", value: "dev" },
26
+ { title: "Staging", value: "staging" },
27
+ { title: "Production", value: "prod" },
28
+ ],
29
+ initial: initialIndex >= 0 ? initialIndex : 0,
30
+ });
31
+ if (!response.value) {
32
+ process.exit(0);
33
+ }
34
+ console.log(chalk.green(`Environment selected via prompt: ${chalk.bold(response.value)}`));
35
+ saveUserPreference("defaultEnvironment", response.value);
36
+ return response.value;
37
+ }
38
+ catch (error) {
39
+ console.error(chalk.red("Error during environment prompt:"), error);
40
+ process.exit(1);
41
+ }
42
+ }
43
+ export async function determineAdapter(input) {
44
+ const { adapterInput, availableAdapters } = input;
45
+ const adapterNames = Object.keys(availableAdapters);
46
+ if (adapterNames.length === 0) {
47
+ return {
48
+ name: "none",
49
+ adapter: {
50
+ syncProducts: async () => { },
51
+ syncPrices: async () => { },
52
+ clearProducts: async () => { },
53
+ clearPrices: async () => { },
54
+ },
55
+ };
56
+ }
57
+ if (adapterNames.length === 1) {
58
+ const adapterName = adapterNames[0];
59
+ console.log(chalk.green(`Auto-selected adapter: ${chalk.bold(adapterName)}`));
60
+ return { name: adapterName, adapter: availableAdapters[adapterName] };
61
+ }
62
+ if (adapterInput) {
63
+ if (availableAdapters[adapterInput]) {
64
+ console.log(chalk.green(`Adapter specified via flag: ${chalk.bold(adapterInput)}`));
65
+ saveUserPreference("defaultAdapter", adapterInput);
66
+ return { name: adapterInput, adapter: availableAdapters[adapterInput] };
67
+ }
68
+ console.log(chalk.yellow(`Invalid adapter specified: "${adapterInput}". Available: ${adapterNames.join(", ")}`));
69
+ }
70
+ const lastUsedAdapter = getLastUsedAdapter();
71
+ const initialIndex = lastUsedAdapter && adapterNames.includes(lastUsedAdapter)
72
+ ? adapterNames.indexOf(lastUsedAdapter)
73
+ : 0;
74
+ try {
75
+ const response = await prompts({
76
+ type: "select",
77
+ name: "value",
78
+ message: chalk.blue(lastUsedAdapter && adapterNames.includes(lastUsedAdapter)
79
+ ? `Select the database adapter (last used: ${chalk.bold(lastUsedAdapter)}):`
80
+ : "Select the database adapter:"),
81
+ choices: adapterNames.map((name) => ({
82
+ title: name.charAt(0).toUpperCase() + name.slice(1),
83
+ value: name,
84
+ })),
85
+ initial: initialIndex,
86
+ });
87
+ if (!response.value) {
88
+ process.exit(0);
89
+ }
90
+ console.log(chalk.green(`Adapter selected via prompt: ${chalk.bold(response.value)}`));
91
+ saveUserPreference("defaultAdapter", response.value);
92
+ return { name: response.value, adapter: availableAdapters[response.value] };
93
+ }
94
+ catch (error) {
95
+ console.error(chalk.red("Error during adapter prompt:"), error);
96
+ process.exit(1);
97
+ }
98
+ }
99
+ export async function determineAction(input) {
100
+ const { actionInput } = input;
101
+ if (actionInput && VALID_ACTIONS.includes(actionInput)) {
102
+ const action = actionInput;
103
+ console.log(chalk.green(`Action specified via argument: ${chalk.bold(action)}`));
104
+ return action;
105
+ }
106
+ if (actionInput) {
107
+ console.log(chalk.yellow(`Invalid action specified: "${actionInput}". Prompting...`));
108
+ }
109
+ try {
110
+ const response = await prompts({
111
+ type: "select",
112
+ name: "value",
113
+ message: chalk.blue("Select the action to perform:"),
114
+ choices: VALID_ACTIONS.map((action) => ({
115
+ title: ACTION_DESCRIPTIONS[action],
116
+ value: action,
117
+ })),
118
+ initial: 0,
119
+ });
120
+ if (!response.value) {
121
+ process.exit(0);
122
+ }
123
+ console.log(chalk.green(`Action selected via prompt: ${chalk.bold(response.value)}`));
124
+ return response.value;
125
+ }
126
+ catch (error) {
127
+ console.error(chalk.red("Error during action prompt:"), error);
128
+ process.exit(1);
129
+ }
130
+ }
131
+ export async function requireProductionConfirmation(input) {
132
+ const { action, env } = input;
133
+ if (env !== ENVIRONMENTS.PROD) {
134
+ return;
135
+ }
136
+ console.log(chalk.red.bold(`\nWARNING: You are about to perform a ${action.toUpperCase()} operation on PRODUCTION Stripe!`));
137
+ console.log(chalk.yellow("This operation may affect the production Stripe configuration."));
138
+ try {
139
+ const response = await prompts({
140
+ type: "confirm",
141
+ name: "value",
142
+ message: chalk.red(`Are you absolutely sure you want to ${action} in PRODUCTION Stripe?`),
143
+ initial: false,
144
+ });
145
+ if (!response.value) {
146
+ process.exit(0);
147
+ }
148
+ }
149
+ catch (error) {
150
+ console.error(chalk.red("Error during confirmation prompt:"), error);
151
+ process.exit(1);
152
+ }
153
+ }
154
+ //# sourceMappingURL=cli-prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-prompts.js","sourceRoot":"","sources":["../src/cli-prompts.ts"],"names":[],"mappings":"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"}
package/dist/cli.js CHANGED
@@ -1,28 +1,27 @@
1
1
  #!/usr/bin/env node
2
- import { Command } from 'commander';
3
- import { archive, config, create, db, list, sync, update, urls, } from './commands/index.js';
4
- process.on('SIGINT', () => process.exit(0));
5
- process.on('SIGTERM', () => process.exit(0));
6
- process.on('uncaughtException', (error) => {
7
- console.error('āŒ Uncaught exception:', error.message);
2
+ import { Command } from "commander";
3
+ import { archive, config, create, db, list, update, urls } from "./commands/index.js";
4
+ process.on("SIGINT", () => process.exit(0));
5
+ process.on("SIGTERM", () => process.exit(0));
6
+ process.on("uncaughtException", (error) => {
7
+ console.error("āŒ Uncaught exception:", error.message);
8
8
  process.exit(1);
9
9
  });
10
- process.on('unhandledRejection', (reason) => {
11
- console.error('āŒ Unhandled rejection:', reason);
10
+ process.on("unhandledRejection", (reason) => {
11
+ console.error("āŒ Unhandled rejection:", reason);
12
12
  process.exit(1);
13
13
  });
14
- const packageVersion = '0.1.3';
14
+ const packageVersion = "0.1.3";
15
15
  function main() {
16
16
  const program = new Command()
17
- .name('stripe-kit')
18
- .description('CLI to manage Stripe subscription plans')
19
- .version(packageVersion, '-v, --version', 'display the version number')
20
- .option('-c, --config <path>', 'Path to stripe.config.ts file (defaults to ./stripe.config.ts)');
17
+ .name("stripe-kit")
18
+ .description("CLI to manage Stripe subscription plans")
19
+ .version(packageVersion, "-v, --version", "display the version number")
20
+ .option("-c, --config <path>", "Path to stripe.config.ts file (defaults to ./stripe.config.ts)");
21
21
  program
22
22
  .addCommand(create)
23
23
  .addCommand(archive)
24
24
  .addCommand(config)
25
- .addCommand(sync)
26
25
  .addCommand(update)
27
26
  .addCommand(db)
28
27
  .addCommand(list)
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,OAAO,EACL,OAAO,EACP,MAAM,EACN,MAAM,EACN,EAAE,EACF,IAAI,EACJ,IAAI,EACJ,MAAM,EACN,IAAI,GACL,MAAM,YAAY,CAAC;AAGpB,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5C,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAG7C,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,KAAK,EAAE,EAAE;IACxC,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,MAAM,EAAE,EAAE;IAC1C,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,MAAM,CAAC,CAAC;IAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,MAAM,cAAc,GAAG,OAAO,CAAC;AAE/B,SAAS,IAAI;IACX,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE;SAC1B,IAAI,CAAC,YAAY,CAAC;SAClB,WAAW,CAAC,yCAAyC,CAAC;SACtD,OAAO,CAAC,cAAc,EAAE,eAAe,EAAE,4BAA4B,CAAC;SACtE,MAAM,CACL,qBAAqB,EACrB,gEAAgE,CACjE,CAAC;IAGJ,OAAO;SACJ,UAAU,CAAC,MAAM,CAAC;SAClB,UAAU,CAAC,OAAO,CAAC;SACnB,UAAU,CAAC,MAAM,CAAC;SAClB,UAAU,CAAC,IAAI,CAAC;SAChB,UAAU,CAAC,MAAM,CAAC;SAClB,UAAU,CAAC,EAAE,CAAC;SACd,UAAU,CAAC,IAAI,CAAC;SAChB,UAAU,CAAC,IAAI,CAAC,CAAC;IAEpB,OAAO,CAAC,KAAK,EAAE,CAAC;AAClB,CAAC;AAED,IAAI,EAAE,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAG7E,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5C,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AAG7C,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,KAAK,EAAE,EAAE;IACxC,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;IACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,MAAM,EAAE,EAAE;IAC1C,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,MAAM,CAAC,CAAC;IAChD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,MAAM,cAAc,GAAG,OAAO,CAAC;AAE/B,SAAS,IAAI;IACX,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE;SAC1B,IAAI,CAAC,YAAY,CAAC;SAClB,WAAW,CAAC,yCAAyC,CAAC;SACtD,OAAO,CAAC,cAAc,EAAE,eAAe,EAAE,4BAA4B,CAAC;SACtE,MAAM,CACL,qBAAqB,EACrB,gEAAgE,CACjE,CAAC;IAGJ,OAAO;SACJ,UAAU,CAAC,MAAM,CAAC;SAClB,UAAU,CAAC,OAAO,CAAC;SACnB,UAAU,CAAC,MAAM,CAAC;SAClB,UAAU,CAAC,MAAM,CAAC;SAClB,UAAU,CAAC,EAAE,CAAC;SACd,UAAU,CAAC,IAAI,CAAC;SAChB,UAAU,CAAC,IAAI,CAAC,CAAC;IAEpB,OAAO,CAAC,KAAK,EAAE,CAAC;AAClB,CAAC;AAED,IAAI,EAAE,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare const archive: Command;
3
+ //# sourceMappingURL=archive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"archive.d.ts","sourceRoot":"","sources":["../../src/commands/archive.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AA+M5C,eAAO,MAAM,OAAO,SA2BhB,CAAC"}
@@ -0,0 +1,119 @@
1
+ import chalk from "chalk";
2
+ import { Command, Option } from "commander";
3
+ import { determineAdapter, determineEnvironment, requireProductionConfirmation, } from "../cli-prompts.js";
4
+ import { ENV_CHOICES } from "../definitions/index.js";
5
+ import { createContext, findStripeProduct, listStripePrices, loadConfig, loadEnvironment, } from "../utils/index.js";
6
+ async function runArchivePreflight(options, command) {
7
+ const globalOptions = command.parent?.opts() || {};
8
+ const configPath = globalOptions.config;
9
+ const chosenEnv = await determineEnvironment({ envInput: options.env });
10
+ loadEnvironment(chosenEnv);
11
+ const config = await loadConfig({ configPath });
12
+ const adapterResult = await determineAdapter({
13
+ adapterInput: options.adapter,
14
+ availableAdapters: config.adapters,
15
+ });
16
+ const ctx = createContext({ adapter: adapterResult.adapter, config });
17
+ await requireProductionConfirmation({
18
+ action: "archive plans",
19
+ env: chosenEnv,
20
+ });
21
+ const productIdsToArchive = config.productIds
22
+ ? Object.values(config.productIds)
23
+ : config.plans.map((plan) => plan.id);
24
+ return {
25
+ ctx,
26
+ productIdsToArchive,
27
+ chosenEnv,
28
+ };
29
+ }
30
+ async function archiveStripeProducts(ctx, input) {
31
+ const { internalProductIds } = input;
32
+ if (!internalProductIds.length) {
33
+ ctx.logger.info("No product IDs provided for archiving");
34
+ return;
35
+ }
36
+ let archivedCount = 0;
37
+ for (const internalProductId of internalProductIds) {
38
+ try {
39
+ const product = await findStripeProduct(ctx, { internalProductId });
40
+ if (!product) {
41
+ ctx.logger.info(`Product not found in Stripe: ${internalProductId}`);
42
+ continue;
43
+ }
44
+ await ctx.stripeClient.products.update(product.id, {
45
+ active: false,
46
+ });
47
+ ctx.logger.info(`Archived product in Stripe: ${product.id} (Internal ID: ${internalProductId})`);
48
+ archivedCount++;
49
+ }
50
+ catch (error) {
51
+ ctx.logger.error({
52
+ message: "Error archiving product in Stripe",
53
+ error,
54
+ internalProductId,
55
+ });
56
+ }
57
+ }
58
+ if (archivedCount === 0) {
59
+ ctx.logger.info("No products were archived in Stripe");
60
+ }
61
+ }
62
+ async function archiveStripePrices(ctx, input) {
63
+ const { internalProductIds } = input;
64
+ if (!internalProductIds.length) {
65
+ ctx.logger.info("No product IDs provided for archiving");
66
+ return;
67
+ }
68
+ const prices = await listStripePrices(ctx, { showAll: false });
69
+ const pricesToArchive = prices.filter((price) => internalProductIds.includes(price.metadata?.[ctx.config.metadata.productIdField] ?? ""));
70
+ if (pricesToArchive.length === 0) {
71
+ ctx.logger.info("No prices to archive in Stripe");
72
+ return;
73
+ }
74
+ for (const price of pricesToArchive) {
75
+ try {
76
+ await ctx.stripeClient.prices.update(price.id, {
77
+ active: false,
78
+ });
79
+ ctx.logger.info(`Archived price in Stripe: ${price.id}`);
80
+ }
81
+ catch (error) {
82
+ ctx.logger.error({
83
+ message: "Error archiving price in Stripe",
84
+ error,
85
+ priceId: price.id,
86
+ });
87
+ }
88
+ }
89
+ }
90
+ async function archiveStripeSubscriptionPlans(ctx, input) {
91
+ const { internalProductIds } = input;
92
+ if (internalProductIds.length === 0) {
93
+ ctx.logger.info("No product IDs provided for archiving");
94
+ return;
95
+ }
96
+ ctx.logger.info(`Archiving ${internalProductIds.length} subscription plans in Stripe...`);
97
+ await archiveStripeProducts(ctx, { internalProductIds });
98
+ await archiveStripePrices(ctx, { internalProductIds });
99
+ ctx.logger.info(`Successfully archived ${internalProductIds.length} subscription plans in Stripe`);
100
+ }
101
+ export const archive = new Command()
102
+ .name("archive")
103
+ .description("Archive Stripe subscription plans")
104
+ .addOption(new Option("-e, --env <environment>", "Target environment").choices(ENV_CHOICES))
105
+ .option("-a, --adapter <name>", "Database adapter name")
106
+ .action(async (options, command) => {
107
+ try {
108
+ const { ctx, productIdsToArchive } = await runArchivePreflight(options, command);
109
+ await archiveStripeSubscriptionPlans(ctx, {
110
+ internalProductIds: productIdsToArchive,
111
+ });
112
+ console.log(chalk.green("\nOperation completed successfully."));
113
+ }
114
+ catch (error) {
115
+ console.error(chalk.red(`\nOperation failed: ${error}`));
116
+ process.exit(1);
117
+ }
118
+ });
119
+ //# sourceMappingURL=archive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"archive.js","sourceRoot":"","sources":["../../src/commands/archive.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare const config: Command;
3
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,eAAO,MAAM,MAAM,SA6Cf,CAAC"}
@@ -0,0 +1,33 @@
1
+ import chalk from "chalk";
2
+ import { Command } from "commander";
3
+ import { loadUserPreferences } from "../utils/index.js";
4
+ export const config = new Command()
5
+ .name("config")
6
+ .description("View current user preferences")
7
+ .action(() => {
8
+ try {
9
+ const preferences = loadUserPreferences();
10
+ console.log(chalk.blue.bold("\nšŸ“‹ Current User Preferences:"));
11
+ console.log(chalk.gray("─".repeat(40)));
12
+ if (preferences.defaultEnvironment) {
13
+ console.log(chalk.green(`Last Used Environment: ${chalk.bold(preferences.defaultEnvironment)}`));
14
+ }
15
+ else {
16
+ console.log(chalk.gray("Last Used Environment: (not set)"));
17
+ }
18
+ if (preferences.defaultAdapter) {
19
+ console.log(chalk.green(`Last Used Adapter: ${chalk.bold(preferences.defaultAdapter)}`));
20
+ }
21
+ else {
22
+ console.log(chalk.gray("Last Used Adapter: (not set)"));
23
+ }
24
+ console.log(chalk.gray("\nšŸ’” Last used selections are pre-selected in prompts"));
25
+ console.log(chalk.gray(" You still need to confirm your choice each time"));
26
+ console.log(chalk.gray(" Configuration stored in: ~/.config/@makeco/stripe-kit/config.json\n"));
27
+ }
28
+ catch (error) {
29
+ console.error(chalk.red(`āŒ Error reading preferences: ${error}`));
30
+ process.exit(1);
31
+ }
32
+ });
33
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAM9C,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,OAAO,EAAE;KAChC,IAAI,CAAC,QAAQ,CAAC;KACd,WAAW,CAAC,+BAA+B,CAAC;KAC5C,MAAM,CAAC,GAAG,EAAE;IACX,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,mBAAmB,EAAE,CAAC;QAE1C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC,CAAC;QAC/D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAExC,IAAI,WAAW,CAAC,kBAAkB,EAAE,CAAC;YACnC,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,KAAK,CACT,0BAA0B,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,kBAAkB,CAAC,EAAE,CACvE,CACF,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC,CAAC;QAC9D,CAAC;QAED,IAAI,WAAW,CAAC,cAAc,EAAE,CAAC;YAC/B,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,KAAK,CACT,sBAAsB,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,EAAE,CAC/D,CACF,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC,CAAC;QAC1D,CAAC;QAED,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CAAC,uDAAuD,CAAC,CACpE,CAAC;QACF,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CAAC,oDAAoD,CAAC,CACjE,CAAC;QACF,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CACR,wEAAwE,CACzE,CACF,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,gCAAgC,KAAK,EAAE,CAAC,CAAC,CAAC;QAClE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from "commander";
2
+ export declare const create: Command;
3
+ //# sourceMappingURL=create.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAqM5C,eAAO,MAAM,MAAM,SAsBf,CAAC"}
@@ -0,0 +1,113 @@
1
+ import chalk from "chalk";
2
+ import { Command, Option } from "commander";
3
+ import { determineAdapter, determineEnvironment, requireProductionConfirmation, } from "../cli-prompts.js";
4
+ import { ENV_CHOICES } from "../definitions/index.js";
5
+ import { createContext, findStripePrice, findStripeProduct, loadConfig, loadEnvironment, } from "../utils/index.js";
6
+ async function runCreatePreflight(options, command) {
7
+ const globalOptions = command.parent?.opts() || {};
8
+ const configPath = globalOptions.config;
9
+ const chosenEnv = await determineEnvironment({ envInput: options.env });
10
+ loadEnvironment(chosenEnv);
11
+ const config = await loadConfig({ configPath });
12
+ const adapterResult = await determineAdapter({
13
+ adapterInput: options.adapter,
14
+ availableAdapters: config.adapters,
15
+ });
16
+ const ctx = createContext({ adapter: adapterResult.adapter, config });
17
+ await requireProductionConfirmation({
18
+ action: "create plans",
19
+ env: chosenEnv,
20
+ });
21
+ return {
22
+ ctx,
23
+ plans: config.plans,
24
+ chosenEnv,
25
+ };
26
+ }
27
+ function buildProductParams(ctx, plan) {
28
+ const { metadata: metadataConfig } = ctx.config;
29
+ return {
30
+ ...plan.product,
31
+ metadata: {
32
+ ...plan.product.metadata,
33
+ [metadataConfig.productIdField]: plan.id,
34
+ [metadataConfig.managedByField]: metadataConfig.managedByValue,
35
+ },
36
+ };
37
+ }
38
+ function buildPriceParams(ctx, plan, price, stripeProductId) {
39
+ const { metadata: metadataConfig } = ctx.config;
40
+ const { id: internalPriceId, ...priceParams } = price;
41
+ return {
42
+ ...priceParams,
43
+ product: stripeProductId,
44
+ metadata: {
45
+ ...priceParams.metadata,
46
+ [metadataConfig.priceIdField]: internalPriceId,
47
+ [metadataConfig.productIdField]: plan.id,
48
+ [metadataConfig.managedByField]: metadataConfig.managedByValue,
49
+ },
50
+ };
51
+ }
52
+ async function ensureStripeSubscriptionPlans(ctx, input) {
53
+ const { plans } = input;
54
+ ctx.logger.info("Ensuring Stripe subscription plans exist...");
55
+ for (const plan of plans) {
56
+ ctx.logger.info(`Processing plan: ${plan.product.name} (Internal ID: ${plan.id})...`);
57
+ try {
58
+ let stripeProduct = await findStripeProduct(ctx, {
59
+ internalProductId: plan.id,
60
+ });
61
+ if (stripeProduct) {
62
+ ctx.logger.info(` Product found: ${stripeProduct.name} (ID: ${stripeProduct.id})`);
63
+ }
64
+ else {
65
+ ctx.logger.info(" Product not found in Stripe, creating...");
66
+ const productParams = buildProductParams(ctx, plan);
67
+ stripeProduct = await ctx.stripeClient.products.create(productParams);
68
+ ctx.logger.info(` Created product: ${stripeProduct?.name} (ID: ${stripeProduct?.id})`);
69
+ }
70
+ for (const price of plan.prices) {
71
+ let stripePrice = await findStripePrice(ctx, {
72
+ internalPriceId: price.id,
73
+ stripeProductId: stripeProduct.id,
74
+ });
75
+ if (stripePrice) {
76
+ ctx.logger.info(` Price ${price.recurring?.interval ?? "one_time"} found: ID ${stripePrice?.id}`);
77
+ }
78
+ else {
79
+ ctx.logger.info(` Price ${price.recurring?.interval ?? "one_time"} (Internal ID: ${price.id}) not found, creating...`);
80
+ const priceParams = buildPriceParams(ctx, plan, price, stripeProduct.id);
81
+ stripePrice = await ctx.stripeClient.prices.create(priceParams);
82
+ ctx.logger.info(` Created price: ID ${stripePrice?.id} @ $${price.unit_amount ? price.unit_amount / 100 : "variable"}`);
83
+ }
84
+ }
85
+ }
86
+ catch (error) {
87
+ ctx.logger.error({
88
+ message: "Error ensuring subscription plan/prices in Stripe",
89
+ error,
90
+ metadata: { planId: plan.id, planName: plan.product.name },
91
+ });
92
+ throw error;
93
+ }
94
+ }
95
+ ctx.logger.info("Finished ensuring Stripe subscription plans.");
96
+ }
97
+ export const create = new Command()
98
+ .name("create")
99
+ .description("Create Stripe subscription plans (Idempotent)")
100
+ .addOption(new Option("-e, --env <environment>", "Target environment").choices(ENV_CHOICES))
101
+ .option("-a, --adapter <name>", "Database adapter name")
102
+ .action(async (options, command) => {
103
+ try {
104
+ const { ctx, plans } = await runCreatePreflight(options, command);
105
+ await ensureStripeSubscriptionPlans(ctx, { plans });
106
+ console.log(chalk.green("\nOperation completed successfully."));
107
+ }
108
+ catch (error) {
109
+ console.error(chalk.red(`\nOperation failed: ${error}`));
110
+ process.exit(1);
111
+ }
112
+ });
113
+ //# sourceMappingURL=create.js.map