@hasna/microservices 0.0.2 → 0.0.4

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 (89) hide show
  1. package/bin/index.js +70 -0
  2. package/bin/mcp.js +71 -1
  3. package/dist/index.js +70 -0
  4. package/microservices/microservice-ads/package.json +27 -0
  5. package/microservices/microservice-ads/src/cli/index.ts +407 -0
  6. package/microservices/microservice-ads/src/db/campaigns.ts +493 -0
  7. package/microservices/microservice-ads/src/db/database.ts +93 -0
  8. package/microservices/microservice-ads/src/db/migrations.ts +60 -0
  9. package/microservices/microservice-ads/src/index.ts +39 -0
  10. package/microservices/microservice-ads/src/mcp/index.ts +320 -0
  11. package/microservices/microservice-contracts/package.json +27 -0
  12. package/microservices/microservice-contracts/src/cli/index.ts +383 -0
  13. package/microservices/microservice-contracts/src/db/contracts.ts +496 -0
  14. package/microservices/microservice-contracts/src/db/database.ts +93 -0
  15. package/microservices/microservice-contracts/src/db/migrations.ts +58 -0
  16. package/microservices/microservice-contracts/src/index.ts +43 -0
  17. package/microservices/microservice-contracts/src/mcp/index.ts +308 -0
  18. package/microservices/microservice-domains/package.json +27 -0
  19. package/microservices/microservice-domains/src/cli/index.ts +438 -0
  20. package/microservices/microservice-domains/src/db/database.ts +93 -0
  21. package/microservices/microservice-domains/src/db/domains.ts +551 -0
  22. package/microservices/microservice-domains/src/db/migrations.ts +60 -0
  23. package/microservices/microservice-domains/src/index.ts +44 -0
  24. package/microservices/microservice-domains/src/mcp/index.ts +368 -0
  25. package/microservices/microservice-hiring/package.json +27 -0
  26. package/microservices/microservice-hiring/src/cli/index.ts +431 -0
  27. package/microservices/microservice-hiring/src/db/database.ts +93 -0
  28. package/microservices/microservice-hiring/src/db/hiring.ts +582 -0
  29. package/microservices/microservice-hiring/src/db/migrations.ts +68 -0
  30. package/microservices/microservice-hiring/src/index.ts +51 -0
  31. package/microservices/microservice-hiring/src/mcp/index.ts +464 -0
  32. package/microservices/microservice-payments/package.json +27 -0
  33. package/microservices/microservice-payments/src/cli/index.ts +357 -0
  34. package/microservices/microservice-payments/src/db/database.ts +93 -0
  35. package/microservices/microservice-payments/src/db/migrations.ts +63 -0
  36. package/microservices/microservice-payments/src/db/payments.ts +652 -0
  37. package/microservices/microservice-payments/src/index.ts +51 -0
  38. package/microservices/microservice-payments/src/mcp/index.ts +460 -0
  39. package/microservices/microservice-payroll/package.json +27 -0
  40. package/microservices/microservice-payroll/src/cli/index.ts +374 -0
  41. package/microservices/microservice-payroll/src/db/database.ts +93 -0
  42. package/microservices/microservice-payroll/src/db/migrations.ts +69 -0
  43. package/microservices/microservice-payroll/src/db/payroll.ts +741 -0
  44. package/microservices/microservice-payroll/src/index.ts +48 -0
  45. package/microservices/microservice-payroll/src/mcp/index.ts +420 -0
  46. package/microservices/microservice-shipping/package.json +27 -0
  47. package/microservices/microservice-shipping/src/cli/index.ts +398 -0
  48. package/microservices/microservice-shipping/src/db/database.ts +93 -0
  49. package/microservices/microservice-shipping/src/db/migrations.ts +61 -0
  50. package/microservices/microservice-shipping/src/db/shipping.ts +643 -0
  51. package/microservices/microservice-shipping/src/index.ts +53 -0
  52. package/microservices/microservice-shipping/src/mcp/index.ts +385 -0
  53. package/microservices/microservice-social/package.json +27 -0
  54. package/microservices/microservice-social/src/cli/index.ts +447 -0
  55. package/microservices/microservice-social/src/db/database.ts +93 -0
  56. package/microservices/microservice-social/src/db/migrations.ts +55 -0
  57. package/microservices/microservice-social/src/db/social.ts +672 -0
  58. package/microservices/microservice-social/src/index.ts +46 -0
  59. package/microservices/microservice-social/src/mcp/index.ts +435 -0
  60. package/microservices/microservice-subscriptions/package.json +27 -0
  61. package/microservices/microservice-subscriptions/src/cli/index.ts +400 -0
  62. package/microservices/microservice-subscriptions/src/db/database.ts +93 -0
  63. package/microservices/microservice-subscriptions/src/db/migrations.ts +57 -0
  64. package/microservices/microservice-subscriptions/src/db/subscriptions.ts +692 -0
  65. package/microservices/microservice-subscriptions/src/index.ts +41 -0
  66. package/microservices/microservice-subscriptions/src/mcp/index.ts +365 -0
  67. package/microservices/microservice-transcriber/package.json +28 -0
  68. package/microservices/microservice-transcriber/src/cli/index.ts +1347 -0
  69. package/microservices/microservice-transcriber/src/db/annotations.ts +37 -0
  70. package/microservices/microservice-transcriber/src/db/database.ts +82 -0
  71. package/microservices/microservice-transcriber/src/db/migrations.ts +72 -0
  72. package/microservices/microservice-transcriber/src/db/transcripts.ts +395 -0
  73. package/microservices/microservice-transcriber/src/index.ts +43 -0
  74. package/microservices/microservice-transcriber/src/lib/config.ts +77 -0
  75. package/microservices/microservice-transcriber/src/lib/diff.ts +91 -0
  76. package/microservices/microservice-transcriber/src/lib/downloader.ts +570 -0
  77. package/microservices/microservice-transcriber/src/lib/feeds.ts +62 -0
  78. package/microservices/microservice-transcriber/src/lib/live.ts +94 -0
  79. package/microservices/microservice-transcriber/src/lib/notion.ts +129 -0
  80. package/microservices/microservice-transcriber/src/lib/providers.ts +713 -0
  81. package/microservices/microservice-transcriber/src/lib/summarizer.ts +147 -0
  82. package/microservices/microservice-transcriber/src/lib/translator.ts +75 -0
  83. package/microservices/microservice-transcriber/src/lib/webhook.ts +37 -0
  84. package/microservices/microservice-transcriber/src/mcp/index.ts +1070 -0
  85. package/microservices/microservice-transcriber/src/server/index.ts +199 -0
  86. package/package.json +1 -1
  87. package/microservices/microservice-invoices/dashboard/dist/assets/index-Bngq7FNM.css +0 -1
  88. package/microservices/microservice-invoices/dashboard/dist/assets/index-aHW4ARZR.js +0 -124
  89. package/microservices/microservice-invoices/dashboard/dist/index.html +0 -13
@@ -0,0 +1,41 @@
1
+ /**
2
+ * microservice-subscriptions — Subscription and recurring billing management microservice
3
+ */
4
+
5
+ export {
6
+ createPlan,
7
+ getPlan,
8
+ listPlans,
9
+ updatePlan,
10
+ deletePlan,
11
+ countPlans,
12
+ createSubscriber,
13
+ getSubscriber,
14
+ listSubscribers,
15
+ updateSubscriber,
16
+ deleteSubscriber,
17
+ countSubscribers,
18
+ cancelSubscriber,
19
+ upgradeSubscriber,
20
+ downgradeSubscriber,
21
+ recordEvent,
22
+ getEvent,
23
+ listEvents,
24
+ getMrr,
25
+ getArr,
26
+ getChurnRate,
27
+ listExpiring,
28
+ getSubscriberStats,
29
+ type Plan,
30
+ type CreatePlanInput,
31
+ type UpdatePlanInput,
32
+ type ListPlansOptions,
33
+ type Subscriber,
34
+ type CreateSubscriberInput,
35
+ type UpdateSubscriberInput,
36
+ type ListSubscribersOptions,
37
+ type SubscriptionEvent,
38
+ type ListEventsOptions,
39
+ } from "./db/subscriptions.js";
40
+
41
+ export { getDatabase, closeDatabase } from "./db/database.js";
@@ -0,0 +1,365 @@
1
+ #!/usr/bin/env node
2
+
3
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
4
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
5
+ import { z } from "zod";
6
+ import {
7
+ createPlan,
8
+ getPlan,
9
+ listPlans,
10
+ updatePlan,
11
+ deletePlan,
12
+ createSubscriber,
13
+ getSubscriber,
14
+ listSubscribers,
15
+ cancelSubscriber,
16
+ upgradeSubscriber,
17
+ downgradeSubscriber,
18
+ listEvents,
19
+ getMrr,
20
+ getArr,
21
+ getChurnRate,
22
+ listExpiring,
23
+ getSubscriberStats,
24
+ } from "../db/subscriptions.js";
25
+
26
+ const server = new McpServer({
27
+ name: "microservice-subscriptions",
28
+ version: "0.0.1",
29
+ });
30
+
31
+ // --- Plans ---
32
+
33
+ server.registerTool(
34
+ "create_plan",
35
+ {
36
+ title: "Create Plan",
37
+ description: "Create a new subscription plan.",
38
+ inputSchema: {
39
+ name: z.string(),
40
+ price: z.number(),
41
+ interval: z.enum(["monthly", "yearly", "lifetime"]).default("monthly"),
42
+ features: z.array(z.string()).optional(),
43
+ active: z.boolean().optional(),
44
+ },
45
+ },
46
+ async (params) => {
47
+ const plan = createPlan(params);
48
+ return { content: [{ type: "text", text: JSON.stringify(plan, null, 2) }] };
49
+ }
50
+ );
51
+
52
+ server.registerTool(
53
+ "get_plan",
54
+ {
55
+ title: "Get Plan",
56
+ description: "Get a subscription plan by ID.",
57
+ inputSchema: { id: z.string() },
58
+ },
59
+ async ({ id }) => {
60
+ const plan = getPlan(id);
61
+ if (!plan) {
62
+ return { content: [{ type: "text", text: `Plan '${id}' not found.` }], isError: true };
63
+ }
64
+ return { content: [{ type: "text", text: JSON.stringify(plan, null, 2) }] };
65
+ }
66
+ );
67
+
68
+ server.registerTool(
69
+ "list_plans",
70
+ {
71
+ title: "List Plans",
72
+ description: "List subscription plans with optional filters.",
73
+ inputSchema: {
74
+ active_only: z.boolean().optional(),
75
+ interval: z.string().optional(),
76
+ limit: z.number().optional(),
77
+ },
78
+ },
79
+ async (params) => {
80
+ const plans = listPlans(params);
81
+ return {
82
+ content: [
83
+ { type: "text", text: JSON.stringify({ plans, count: plans.length }, null, 2) },
84
+ ],
85
+ };
86
+ }
87
+ );
88
+
89
+ server.registerTool(
90
+ "update_plan",
91
+ {
92
+ title: "Update Plan",
93
+ description: "Update a subscription plan.",
94
+ inputSchema: {
95
+ id: z.string(),
96
+ name: z.string().optional(),
97
+ price: z.number().optional(),
98
+ interval: z.enum(["monthly", "yearly", "lifetime"]).optional(),
99
+ features: z.array(z.string()).optional(),
100
+ active: z.boolean().optional(),
101
+ },
102
+ },
103
+ async ({ id, ...input }) => {
104
+ const plan = updatePlan(id, input);
105
+ if (!plan) {
106
+ return { content: [{ type: "text", text: `Plan '${id}' not found.` }], isError: true };
107
+ }
108
+ return { content: [{ type: "text", text: JSON.stringify(plan, null, 2) }] };
109
+ }
110
+ );
111
+
112
+ server.registerTool(
113
+ "delete_plan",
114
+ {
115
+ title: "Delete Plan",
116
+ description: "Delete a subscription plan by ID.",
117
+ inputSchema: { id: z.string() },
118
+ },
119
+ async ({ id }) => {
120
+ const deleted = deletePlan(id);
121
+ return { content: [{ type: "text", text: JSON.stringify({ id, deleted }) }] };
122
+ }
123
+ );
124
+
125
+ // --- Subscribers ---
126
+
127
+ server.registerTool(
128
+ "create_subscriber",
129
+ {
130
+ title: "Create Subscriber",
131
+ description: "Create a new subscriber for a plan.",
132
+ inputSchema: {
133
+ plan_id: z.string(),
134
+ customer_name: z.string(),
135
+ customer_email: z.string(),
136
+ status: z.enum(["trialing", "active", "past_due", "canceled", "expired"]).optional(),
137
+ trial_ends_at: z.string().optional(),
138
+ metadata: z.record(z.unknown()).optional(),
139
+ },
140
+ },
141
+ async (params) => {
142
+ const subscriber = createSubscriber(params);
143
+ return { content: [{ type: "text", text: JSON.stringify(subscriber, null, 2) }] };
144
+ }
145
+ );
146
+
147
+ server.registerTool(
148
+ "get_subscriber",
149
+ {
150
+ title: "Get Subscriber",
151
+ description: "Get a subscriber by ID.",
152
+ inputSchema: { id: z.string() },
153
+ },
154
+ async ({ id }) => {
155
+ const subscriber = getSubscriber(id);
156
+ if (!subscriber) {
157
+ return { content: [{ type: "text", text: `Subscriber '${id}' not found.` }], isError: true };
158
+ }
159
+ return { content: [{ type: "text", text: JSON.stringify(subscriber, null, 2) }] };
160
+ }
161
+ );
162
+
163
+ server.registerTool(
164
+ "list_subscribers",
165
+ {
166
+ title: "List Subscribers",
167
+ description: "List subscribers with optional filters.",
168
+ inputSchema: {
169
+ plan_id: z.string().optional(),
170
+ status: z.string().optional(),
171
+ search: z.string().optional(),
172
+ limit: z.number().optional(),
173
+ },
174
+ },
175
+ async (params) => {
176
+ const subscribers = listSubscribers(params);
177
+ return {
178
+ content: [
179
+ {
180
+ type: "text",
181
+ text: JSON.stringify({ subscribers, count: subscribers.length }, null, 2),
182
+ },
183
+ ],
184
+ };
185
+ }
186
+ );
187
+
188
+ server.registerTool(
189
+ "cancel_subscriber",
190
+ {
191
+ title: "Cancel Subscriber",
192
+ description: "Cancel a subscription.",
193
+ inputSchema: { id: z.string() },
194
+ },
195
+ async ({ id }) => {
196
+ const subscriber = cancelSubscriber(id);
197
+ if (!subscriber) {
198
+ return { content: [{ type: "text", text: `Subscriber '${id}' not found.` }], isError: true };
199
+ }
200
+ return { content: [{ type: "text", text: JSON.stringify(subscriber, null, 2) }] };
201
+ }
202
+ );
203
+
204
+ server.registerTool(
205
+ "upgrade_subscriber",
206
+ {
207
+ title: "Upgrade Subscriber",
208
+ description: "Upgrade a subscriber to a new plan.",
209
+ inputSchema: {
210
+ subscriber_id: z.string(),
211
+ new_plan_id: z.string(),
212
+ },
213
+ },
214
+ async ({ subscriber_id, new_plan_id }) => {
215
+ const subscriber = upgradeSubscriber(subscriber_id, new_plan_id);
216
+ if (!subscriber) {
217
+ return {
218
+ content: [{ type: "text", text: `Subscriber or plan not found.` }],
219
+ isError: true,
220
+ };
221
+ }
222
+ return { content: [{ type: "text", text: JSON.stringify(subscriber, null, 2) }] };
223
+ }
224
+ );
225
+
226
+ server.registerTool(
227
+ "downgrade_subscriber",
228
+ {
229
+ title: "Downgrade Subscriber",
230
+ description: "Downgrade a subscriber to a new plan.",
231
+ inputSchema: {
232
+ subscriber_id: z.string(),
233
+ new_plan_id: z.string(),
234
+ },
235
+ },
236
+ async ({ subscriber_id, new_plan_id }) => {
237
+ const subscriber = downgradeSubscriber(subscriber_id, new_plan_id);
238
+ if (!subscriber) {
239
+ return {
240
+ content: [{ type: "text", text: `Subscriber or plan not found.` }],
241
+ isError: true,
242
+ };
243
+ }
244
+ return { content: [{ type: "text", text: JSON.stringify(subscriber, null, 2) }] };
245
+ }
246
+ );
247
+
248
+ // --- Events ---
249
+
250
+ server.registerTool(
251
+ "list_events",
252
+ {
253
+ title: "List Events",
254
+ description: "List subscription events.",
255
+ inputSchema: {
256
+ subscriber_id: z.string().optional(),
257
+ type: z.string().optional(),
258
+ limit: z.number().optional(),
259
+ },
260
+ },
261
+ async (params) => {
262
+ const events = listEvents(params);
263
+ return {
264
+ content: [
265
+ { type: "text", text: JSON.stringify({ events, count: events.length }, null, 2) },
266
+ ],
267
+ };
268
+ }
269
+ );
270
+
271
+ // --- Analytics ---
272
+
273
+ server.registerTool(
274
+ "get_mrr",
275
+ {
276
+ title: "Get MRR",
277
+ description: "Get monthly recurring revenue.",
278
+ inputSchema: {},
279
+ },
280
+ async () => {
281
+ const mrr = getMrr();
282
+ return { content: [{ type: "text", text: JSON.stringify({ mrr }) }] };
283
+ }
284
+ );
285
+
286
+ server.registerTool(
287
+ "get_arr",
288
+ {
289
+ title: "Get ARR",
290
+ description: "Get annual recurring revenue.",
291
+ inputSchema: {},
292
+ },
293
+ async () => {
294
+ const arr = getArr();
295
+ return { content: [{ type: "text", text: JSON.stringify({ arr }) }] };
296
+ }
297
+ );
298
+
299
+ server.registerTool(
300
+ "get_churn_rate",
301
+ {
302
+ title: "Get Churn Rate",
303
+ description: "Get churn rate for a period.",
304
+ inputSchema: {
305
+ period_days: z.number().default(30),
306
+ },
307
+ },
308
+ async ({ period_days }) => {
309
+ const rate = getChurnRate(period_days);
310
+ return { content: [{ type: "text", text: JSON.stringify({ churn_rate: rate, period_days }) }] };
311
+ }
312
+ );
313
+
314
+ server.registerTool(
315
+ "list_expiring",
316
+ {
317
+ title: "List Expiring Subscriptions",
318
+ description: "List subscriptions expiring within a number of days.",
319
+ inputSchema: {
320
+ days: z.number().default(7),
321
+ },
322
+ },
323
+ async ({ days }) => {
324
+ const expiring = listExpiring(days);
325
+ return {
326
+ content: [
327
+ {
328
+ type: "text",
329
+ text: JSON.stringify({ expiring, count: expiring.length }, null, 2),
330
+ },
331
+ ],
332
+ };
333
+ }
334
+ );
335
+
336
+ server.registerTool(
337
+ "get_subscriber_stats",
338
+ {
339
+ title: "Get Subscriber Stats",
340
+ description: "Get subscriber statistics including counts by status, MRR, and ARR.",
341
+ inputSchema: {},
342
+ },
343
+ async () => {
344
+ const stats = getSubscriberStats();
345
+ const mrr = getMrr();
346
+ const arr = getArr();
347
+ return {
348
+ content: [
349
+ { type: "text", text: JSON.stringify({ ...stats, mrr, arr }, null, 2) },
350
+ ],
351
+ };
352
+ }
353
+ );
354
+
355
+ // --- Start ---
356
+ async function main() {
357
+ const transport = new StdioServerTransport();
358
+ await server.connect(transport);
359
+ console.error("microservice-subscriptions MCP server running on stdio");
360
+ }
361
+
362
+ main().catch((error) => {
363
+ console.error("Fatal error:", error);
364
+ process.exit(1);
365
+ });
@@ -0,0 +1,28 @@
1
+ {
2
+ "name": "@hasna/microservice-transcriber",
3
+ "version": "0.0.1",
4
+ "description": "Transcribe audio and video from files and URLs (YouTube, Vimeo, Wistia, etc.) using ElevenLabs or OpenAI",
5
+ "type": "module",
6
+ "bin": {
7
+ "microservice-transcriber": "./src/cli/index.ts",
8
+ "microservice-transcriber-mcp": "./src/mcp/index.ts",
9
+ "microservice-transcriber-serve": "./src/server/index.ts"
10
+ },
11
+ "exports": {
12
+ ".": "./src/index.ts"
13
+ },
14
+ "scripts": {
15
+ "dev": "bun run ./src/cli/index.ts",
16
+ "test": "bun test"
17
+ },
18
+ "dependencies": {
19
+ "@modelcontextprotocol/sdk": "^1.26.0",
20
+ "commander": "^12.1.0",
21
+ "zod": "^3.24.0"
22
+ },
23
+ "license": "Apache-2.0",
24
+ "publishConfig": {
25
+ "registry": "https://registry.npmjs.org",
26
+ "access": "public"
27
+ }
28
+ }