@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,368 @@
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
+ createDomain,
8
+ getDomain,
9
+ listDomains,
10
+ updateDomain,
11
+ deleteDomain,
12
+ countDomains,
13
+ searchDomains,
14
+ getByRegistrar,
15
+ listExpiring,
16
+ listSslExpiring,
17
+ getDomainStats,
18
+ createDnsRecord,
19
+ listDnsRecords,
20
+ updateDnsRecord,
21
+ deleteDnsRecord,
22
+ createAlert,
23
+ listAlerts,
24
+ deleteAlert,
25
+ } from "../db/domains.js";
26
+
27
+ const server = new McpServer({
28
+ name: "microservice-domains",
29
+ version: "0.0.1",
30
+ });
31
+
32
+ // --- Domains ---
33
+
34
+ server.registerTool(
35
+ "create_domain",
36
+ {
37
+ title: "Create Domain",
38
+ description: "Add a new domain to the portfolio.",
39
+ inputSchema: {
40
+ name: z.string(),
41
+ registrar: z.string().optional(),
42
+ status: z.enum(["active", "expired", "transferring", "redemption"]).optional(),
43
+ registered_at: z.string().optional(),
44
+ expires_at: z.string().optional(),
45
+ auto_renew: z.boolean().optional(),
46
+ nameservers: z.array(z.string()).optional(),
47
+ ssl_expires_at: z.string().optional(),
48
+ ssl_issuer: z.string().optional(),
49
+ notes: z.string().optional(),
50
+ },
51
+ },
52
+ async (params) => {
53
+ const domain = createDomain(params);
54
+ return { content: [{ type: "text", text: JSON.stringify(domain, null, 2) }] };
55
+ }
56
+ );
57
+
58
+ server.registerTool(
59
+ "get_domain",
60
+ {
61
+ title: "Get Domain",
62
+ description: "Get a domain by ID.",
63
+ inputSchema: { id: z.string() },
64
+ },
65
+ async ({ id }) => {
66
+ const domain = getDomain(id);
67
+ if (!domain) {
68
+ return { content: [{ type: "text", text: `Domain '${id}' not found.` }], isError: true };
69
+ }
70
+ return { content: [{ type: "text", text: JSON.stringify(domain, null, 2) }] };
71
+ }
72
+ );
73
+
74
+ server.registerTool(
75
+ "list_domains",
76
+ {
77
+ title: "List Domains",
78
+ description: "List domains with optional filters.",
79
+ inputSchema: {
80
+ search: z.string().optional(),
81
+ status: z.enum(["active", "expired", "transferring", "redemption"]).optional(),
82
+ registrar: z.string().optional(),
83
+ limit: z.number().optional(),
84
+ },
85
+ },
86
+ async (params) => {
87
+ const domains = listDomains(params);
88
+ return {
89
+ content: [
90
+ { type: "text", text: JSON.stringify({ domains, count: domains.length }, null, 2) },
91
+ ],
92
+ };
93
+ }
94
+ );
95
+
96
+ server.registerTool(
97
+ "update_domain",
98
+ {
99
+ title: "Update Domain",
100
+ description: "Update an existing domain.",
101
+ inputSchema: {
102
+ id: z.string(),
103
+ name: z.string().optional(),
104
+ registrar: z.string().optional(),
105
+ status: z.enum(["active", "expired", "transferring", "redemption"]).optional(),
106
+ registered_at: z.string().optional(),
107
+ expires_at: z.string().optional(),
108
+ auto_renew: z.boolean().optional(),
109
+ nameservers: z.array(z.string()).optional(),
110
+ ssl_expires_at: z.string().optional(),
111
+ ssl_issuer: z.string().optional(),
112
+ notes: z.string().optional(),
113
+ },
114
+ },
115
+ async ({ id, ...input }) => {
116
+ const domain = updateDomain(id, input);
117
+ if (!domain) {
118
+ return { content: [{ type: "text", text: `Domain '${id}' not found.` }], isError: true };
119
+ }
120
+ return { content: [{ type: "text", text: JSON.stringify(domain, null, 2) }] };
121
+ }
122
+ );
123
+
124
+ server.registerTool(
125
+ "delete_domain",
126
+ {
127
+ title: "Delete Domain",
128
+ description: "Delete a domain by ID.",
129
+ inputSchema: { id: z.string() },
130
+ },
131
+ async ({ id }) => {
132
+ const deleted = deleteDomain(id);
133
+ return { content: [{ type: "text", text: JSON.stringify({ id, deleted }) }] };
134
+ }
135
+ );
136
+
137
+ server.registerTool(
138
+ "search_domains",
139
+ {
140
+ title: "Search Domains",
141
+ description: "Search domains by name, registrar, or notes.",
142
+ inputSchema: { query: z.string() },
143
+ },
144
+ async ({ query }) => {
145
+ const results = searchDomains(query);
146
+ return {
147
+ content: [
148
+ { type: "text", text: JSON.stringify({ results, count: results.length }, null, 2) },
149
+ ],
150
+ };
151
+ }
152
+ );
153
+
154
+ server.registerTool(
155
+ "count_domains",
156
+ {
157
+ title: "Count Domains",
158
+ description: "Get the total number of domains.",
159
+ inputSchema: {},
160
+ },
161
+ async () => {
162
+ const count = countDomains();
163
+ return { content: [{ type: "text", text: JSON.stringify({ count }) }] };
164
+ }
165
+ );
166
+
167
+ server.registerTool(
168
+ "list_expiring_domains",
169
+ {
170
+ title: "List Expiring Domains",
171
+ description: "List domains expiring within N days.",
172
+ inputSchema: { days: z.number().default(30) },
173
+ },
174
+ async ({ days }) => {
175
+ const domains = listExpiring(days);
176
+ return {
177
+ content: [
178
+ { type: "text", text: JSON.stringify({ domains, count: domains.length }, null, 2) },
179
+ ],
180
+ };
181
+ }
182
+ );
183
+
184
+ server.registerTool(
185
+ "list_ssl_expiring",
186
+ {
187
+ title: "List SSL Expiring",
188
+ description: "List domains with SSL certificates expiring within N days.",
189
+ inputSchema: { days: z.number().default(30) },
190
+ },
191
+ async ({ days }) => {
192
+ const domains = listSslExpiring(days);
193
+ return {
194
+ content: [
195
+ { type: "text", text: JSON.stringify({ domains, count: domains.length }, null, 2) },
196
+ ],
197
+ };
198
+ }
199
+ );
200
+
201
+ server.registerTool(
202
+ "get_domains_by_registrar",
203
+ {
204
+ title: "Get Domains by Registrar",
205
+ description: "List all domains from a specific registrar.",
206
+ inputSchema: { registrar: z.string() },
207
+ },
208
+ async ({ registrar }) => {
209
+ const domains = getByRegistrar(registrar);
210
+ return {
211
+ content: [
212
+ { type: "text", text: JSON.stringify({ domains, count: domains.length }, null, 2) },
213
+ ],
214
+ };
215
+ }
216
+ );
217
+
218
+ server.registerTool(
219
+ "get_domain_stats",
220
+ {
221
+ title: "Get Domain Stats",
222
+ description: "Get domain portfolio statistics.",
223
+ inputSchema: {},
224
+ },
225
+ async () => {
226
+ const stats = getDomainStats();
227
+ return { content: [{ type: "text", text: JSON.stringify(stats, null, 2) }] };
228
+ }
229
+ );
230
+
231
+ // --- DNS Records ---
232
+
233
+ server.registerTool(
234
+ "create_dns_record",
235
+ {
236
+ title: "Create DNS Record",
237
+ description: "Create a new DNS record for a domain.",
238
+ inputSchema: {
239
+ domain_id: z.string(),
240
+ type: z.enum(["A", "AAAA", "CNAME", "MX", "TXT", "NS", "SRV"]),
241
+ name: z.string(),
242
+ value: z.string(),
243
+ ttl: z.number().optional(),
244
+ priority: z.number().optional(),
245
+ },
246
+ },
247
+ async (params) => {
248
+ const record = createDnsRecord(params);
249
+ return { content: [{ type: "text", text: JSON.stringify(record, null, 2) }] };
250
+ }
251
+ );
252
+
253
+ server.registerTool(
254
+ "list_dns_records",
255
+ {
256
+ title: "List DNS Records",
257
+ description: "List DNS records for a domain.",
258
+ inputSchema: {
259
+ domain_id: z.string(),
260
+ type: z.enum(["A", "AAAA", "CNAME", "MX", "TXT", "NS", "SRV"]).optional(),
261
+ },
262
+ },
263
+ async ({ domain_id, type }) => {
264
+ const records = listDnsRecords(domain_id, type);
265
+ return {
266
+ content: [
267
+ { type: "text", text: JSON.stringify({ records, count: records.length }, null, 2) },
268
+ ],
269
+ };
270
+ }
271
+ );
272
+
273
+ server.registerTool(
274
+ "update_dns_record",
275
+ {
276
+ title: "Update DNS Record",
277
+ description: "Update a DNS record.",
278
+ inputSchema: {
279
+ id: z.string(),
280
+ type: z.enum(["A", "AAAA", "CNAME", "MX", "TXT", "NS", "SRV"]).optional(),
281
+ name: z.string().optional(),
282
+ value: z.string().optional(),
283
+ ttl: z.number().optional(),
284
+ priority: z.number().optional(),
285
+ },
286
+ },
287
+ async ({ id, ...input }) => {
288
+ const record = updateDnsRecord(id, input);
289
+ if (!record) {
290
+ return { content: [{ type: "text", text: `DNS record '${id}' not found.` }], isError: true };
291
+ }
292
+ return { content: [{ type: "text", text: JSON.stringify(record, null, 2) }] };
293
+ }
294
+ );
295
+
296
+ server.registerTool(
297
+ "delete_dns_record",
298
+ {
299
+ title: "Delete DNS Record",
300
+ description: "Delete a DNS record by ID.",
301
+ inputSchema: { id: z.string() },
302
+ },
303
+ async ({ id }) => {
304
+ const deleted = deleteDnsRecord(id);
305
+ return { content: [{ type: "text", text: JSON.stringify({ id, deleted }) }] };
306
+ }
307
+ );
308
+
309
+ // --- Alerts ---
310
+
311
+ server.registerTool(
312
+ "create_alert",
313
+ {
314
+ title: "Create Alert",
315
+ description: "Set an alert for a domain (expiry, SSL expiry, or DNS change).",
316
+ inputSchema: {
317
+ domain_id: z.string(),
318
+ type: z.enum(["expiry", "ssl_expiry", "dns_change"]),
319
+ trigger_days_before: z.number().optional(),
320
+ },
321
+ },
322
+ async (params) => {
323
+ const alert = createAlert(params);
324
+ return { content: [{ type: "text", text: JSON.stringify(alert, null, 2) }] };
325
+ }
326
+ );
327
+
328
+ server.registerTool(
329
+ "list_alerts",
330
+ {
331
+ title: "List Alerts",
332
+ description: "List alerts for a domain.",
333
+ inputSchema: { domain_id: z.string() },
334
+ },
335
+ async ({ domain_id }) => {
336
+ const alerts = listAlerts(domain_id);
337
+ return {
338
+ content: [
339
+ { type: "text", text: JSON.stringify({ alerts, count: alerts.length }, null, 2) },
340
+ ],
341
+ };
342
+ }
343
+ );
344
+
345
+ server.registerTool(
346
+ "delete_alert",
347
+ {
348
+ title: "Delete Alert",
349
+ description: "Delete an alert by ID.",
350
+ inputSchema: { id: z.string() },
351
+ },
352
+ async ({ id }) => {
353
+ const deleted = deleteAlert(id);
354
+ return { content: [{ type: "text", text: JSON.stringify({ id, deleted }) }] };
355
+ }
356
+ );
357
+
358
+ // --- Start ---
359
+ async function main() {
360
+ const transport = new StdioServerTransport();
361
+ await server.connect(transport);
362
+ console.error("microservice-domains MCP server running on stdio");
363
+ }
364
+
365
+ main().catch((error) => {
366
+ console.error("Fatal error:", error);
367
+ process.exit(1);
368
+ });
@@ -0,0 +1,27 @@
1
+ {
2
+ "name": "@hasna/microservice-hiring",
3
+ "version": "0.0.1",
4
+ "description": "Applicant tracking and recruitment microservice with SQLite — manage jobs, applicants, and interviews",
5
+ "type": "module",
6
+ "bin": {
7
+ "microservice-hiring": "./src/cli/index.ts",
8
+ "microservice-hiring-mcp": "./src/mcp/index.ts"
9
+ },
10
+ "exports": {
11
+ ".": "./src/index.ts"
12
+ },
13
+ "scripts": {
14
+ "dev": "bun run ./src/cli/index.ts",
15
+ "test": "bun test"
16
+ },
17
+ "dependencies": {
18
+ "@modelcontextprotocol/sdk": "^1.26.0",
19
+ "commander": "^12.1.0",
20
+ "zod": "^3.24.0"
21
+ },
22
+ "license": "Apache-2.0",
23
+ "publishConfig": {
24
+ "registry": "https://registry.npmjs.org",
25
+ "access": "public"
26
+ }
27
+ }