@hasna/microservices 0.0.3 → 0.0.5

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 (68) hide show
  1. package/bin/index.js +63 -0
  2. package/bin/mcp.js +63 -0
  3. package/dist/index.js +63 -0
  4. package/microservices/microservice-ads/package.json +27 -0
  5. package/microservices/microservice-ads/src/cli/index.ts +605 -0
  6. package/microservices/microservice-ads/src/db/campaigns.ts +797 -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 +480 -0
  11. package/microservices/microservice-contracts/package.json +27 -0
  12. package/microservices/microservice-contracts/src/cli/index.ts +770 -0
  13. package/microservices/microservice-contracts/src/db/contracts.ts +925 -0
  14. package/microservices/microservice-contracts/src/db/database.ts +93 -0
  15. package/microservices/microservice-contracts/src/db/migrations.ts +141 -0
  16. package/microservices/microservice-contracts/src/index.ts +43 -0
  17. package/microservices/microservice-contracts/src/mcp/index.ts +617 -0
  18. package/microservices/microservice-domains/package.json +27 -0
  19. package/microservices/microservice-domains/src/cli/index.ts +691 -0
  20. package/microservices/microservice-domains/src/db/database.ts +93 -0
  21. package/microservices/microservice-domains/src/db/domains.ts +1164 -0
  22. package/microservices/microservice-domains/src/db/migrations.ts +60 -0
  23. package/microservices/microservice-domains/src/index.ts +65 -0
  24. package/microservices/microservice-domains/src/mcp/index.ts +536 -0
  25. package/microservices/microservice-hiring/package.json +27 -0
  26. package/microservices/microservice-hiring/src/cli/index.ts +741 -0
  27. package/microservices/microservice-hiring/src/db/database.ts +93 -0
  28. package/microservices/microservice-hiring/src/db/hiring.ts +1085 -0
  29. package/microservices/microservice-hiring/src/db/migrations.ts +89 -0
  30. package/microservices/microservice-hiring/src/index.ts +80 -0
  31. package/microservices/microservice-hiring/src/lib/scoring.ts +206 -0
  32. package/microservices/microservice-hiring/src/mcp/index.ts +709 -0
  33. package/microservices/microservice-payments/package.json +27 -0
  34. package/microservices/microservice-payments/src/cli/index.ts +609 -0
  35. package/microservices/microservice-payments/src/db/database.ts +93 -0
  36. package/microservices/microservice-payments/src/db/migrations.ts +81 -0
  37. package/microservices/microservice-payments/src/db/payments.ts +1204 -0
  38. package/microservices/microservice-payments/src/index.ts +51 -0
  39. package/microservices/microservice-payments/src/mcp/index.ts +683 -0
  40. package/microservices/microservice-payroll/package.json +27 -0
  41. package/microservices/microservice-payroll/src/cli/index.ts +643 -0
  42. package/microservices/microservice-payroll/src/db/database.ts +93 -0
  43. package/microservices/microservice-payroll/src/db/migrations.ts +95 -0
  44. package/microservices/microservice-payroll/src/db/payroll.ts +1377 -0
  45. package/microservices/microservice-payroll/src/index.ts +48 -0
  46. package/microservices/microservice-payroll/src/mcp/index.ts +666 -0
  47. package/microservices/microservice-shipping/package.json +27 -0
  48. package/microservices/microservice-shipping/src/cli/index.ts +606 -0
  49. package/microservices/microservice-shipping/src/db/database.ts +93 -0
  50. package/microservices/microservice-shipping/src/db/migrations.ts +69 -0
  51. package/microservices/microservice-shipping/src/db/shipping.ts +1093 -0
  52. package/microservices/microservice-shipping/src/index.ts +53 -0
  53. package/microservices/microservice-shipping/src/mcp/index.ts +533 -0
  54. package/microservices/microservice-social/package.json +27 -0
  55. package/microservices/microservice-social/src/cli/index.ts +689 -0
  56. package/microservices/microservice-social/src/db/database.ts +93 -0
  57. package/microservices/microservice-social/src/db/migrations.ts +88 -0
  58. package/microservices/microservice-social/src/db/social.ts +1046 -0
  59. package/microservices/microservice-social/src/index.ts +46 -0
  60. package/microservices/microservice-social/src/mcp/index.ts +655 -0
  61. package/microservices/microservice-subscriptions/package.json +27 -0
  62. package/microservices/microservice-subscriptions/src/cli/index.ts +715 -0
  63. package/microservices/microservice-subscriptions/src/db/database.ts +93 -0
  64. package/microservices/microservice-subscriptions/src/db/migrations.ts +125 -0
  65. package/microservices/microservice-subscriptions/src/db/subscriptions.ts +1256 -0
  66. package/microservices/microservice-subscriptions/src/index.ts +41 -0
  67. package/microservices/microservice-subscriptions/src/mcp/index.ts +631 -0
  68. package/package.json +1 -1
@@ -0,0 +1,93 @@
1
+ /**
2
+ * Database connection for microservice-contracts
3
+ */
4
+
5
+ import { Database } from "bun:sqlite";
6
+ import { existsSync, mkdirSync } from "node:fs";
7
+ import { dirname, join, resolve } from "node:path";
8
+ import { MIGRATIONS } from "./migrations.js";
9
+
10
+ let _db: Database | null = null;
11
+
12
+ function getDbPath(): string {
13
+ // Environment variable override
14
+ if (process.env["MICROSERVICES_DIR"]) {
15
+ return join(process.env["MICROSERVICES_DIR"], "microservice-contracts", "data.db");
16
+ }
17
+
18
+ // Check for .microservices in current or parent directories
19
+ let dir = resolve(process.cwd());
20
+ while (true) {
21
+ const candidate = join(dir, ".microservices", "microservice-contracts", "data.db");
22
+ const msDir = join(dir, ".microservices");
23
+ if (existsSync(msDir)) return candidate;
24
+ const parent = dirname(dir);
25
+ if (parent === dir) break;
26
+ dir = parent;
27
+ }
28
+
29
+ // Global fallback
30
+ const home = process.env["HOME"] || process.env["USERPROFILE"] || "~";
31
+ return join(home, ".microservices", "microservice-contracts", "data.db");
32
+ }
33
+
34
+ function ensureDir(filePath: string): void {
35
+ const dir = dirname(resolve(filePath));
36
+ if (!existsSync(dir)) {
37
+ mkdirSync(dir, { recursive: true });
38
+ }
39
+ }
40
+
41
+ export function getDatabase(): Database {
42
+ if (_db) return _db;
43
+
44
+ const dbPath = getDbPath();
45
+ ensureDir(dbPath);
46
+
47
+ _db = new Database(dbPath);
48
+ _db.exec("PRAGMA journal_mode = WAL");
49
+ _db.exec("PRAGMA foreign_keys = ON");
50
+
51
+ // Create migrations table
52
+ _db.exec(`
53
+ CREATE TABLE IF NOT EXISTS _migrations (
54
+ id INTEGER PRIMARY KEY,
55
+ name TEXT NOT NULL,
56
+ applied_at TEXT NOT NULL DEFAULT (datetime('now'))
57
+ )
58
+ `);
59
+
60
+ // Apply pending migrations
61
+ const applied = _db
62
+ .query("SELECT id FROM _migrations ORDER BY id")
63
+ .all() as { id: number }[];
64
+ const appliedIds = new Set(applied.map((r) => r.id));
65
+
66
+ for (const migration of MIGRATIONS) {
67
+ if (appliedIds.has(migration.id)) continue;
68
+
69
+ _db.exec("BEGIN");
70
+ try {
71
+ _db.exec(migration.sql);
72
+ _db.prepare("INSERT INTO _migrations (id, name) VALUES (?, ?)").run(
73
+ migration.id,
74
+ migration.name
75
+ );
76
+ _db.exec("COMMIT");
77
+ } catch (error) {
78
+ _db.exec("ROLLBACK");
79
+ throw new Error(
80
+ `Migration ${migration.id} (${migration.name}) failed: ${error instanceof Error ? error.message : String(error)}`
81
+ );
82
+ }
83
+ }
84
+
85
+ return _db;
86
+ }
87
+
88
+ export function closeDatabase(): void {
89
+ if (_db) {
90
+ _db.close();
91
+ _db = null;
92
+ }
93
+ }
@@ -0,0 +1,141 @@
1
+ export interface MigrationEntry {
2
+ id: number;
3
+ name: string;
4
+ sql: string;
5
+ }
6
+
7
+ export const MIGRATIONS: MigrationEntry[] = [
8
+ {
9
+ id: 1,
10
+ name: "initial_schema",
11
+ sql: `
12
+ CREATE TABLE IF NOT EXISTS contracts (
13
+ id TEXT PRIMARY KEY,
14
+ title TEXT NOT NULL,
15
+ type TEXT NOT NULL DEFAULT 'other' CHECK (type IN ('nda', 'service', 'employment', 'license', 'other')),
16
+ status TEXT NOT NULL DEFAULT 'draft' CHECK (status IN ('draft', 'pending_signature', 'active', 'expired', 'terminated')),
17
+ counterparty TEXT,
18
+ counterparty_email TEXT,
19
+ start_date TEXT,
20
+ end_date TEXT,
21
+ auto_renew INTEGER NOT NULL DEFAULT 0,
22
+ renewal_period TEXT,
23
+ value REAL,
24
+ currency TEXT NOT NULL DEFAULT 'USD',
25
+ file_path TEXT,
26
+ metadata TEXT NOT NULL DEFAULT '{}',
27
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
28
+ updated_at TEXT NOT NULL DEFAULT (datetime('now'))
29
+ );
30
+
31
+ CREATE TABLE IF NOT EXISTS clauses (
32
+ id TEXT PRIMARY KEY,
33
+ contract_id TEXT NOT NULL REFERENCES contracts(id) ON DELETE CASCADE,
34
+ name TEXT NOT NULL,
35
+ text TEXT NOT NULL,
36
+ type TEXT NOT NULL DEFAULT 'standard' CHECK (type IN ('standard', 'custom', 'negotiated')),
37
+ created_at TEXT NOT NULL DEFAULT (datetime('now'))
38
+ );
39
+
40
+ CREATE TABLE IF NOT EXISTS reminders (
41
+ id TEXT PRIMARY KEY,
42
+ contract_id TEXT NOT NULL REFERENCES contracts(id) ON DELETE CASCADE,
43
+ remind_at TEXT NOT NULL,
44
+ message TEXT NOT NULL,
45
+ sent INTEGER NOT NULL DEFAULT 0,
46
+ created_at TEXT NOT NULL DEFAULT (datetime('now'))
47
+ );
48
+
49
+ CREATE INDEX IF NOT EXISTS idx_contracts_status ON contracts(status);
50
+ CREATE INDEX IF NOT EXISTS idx_contracts_type ON contracts(type);
51
+ CREATE INDEX IF NOT EXISTS idx_contracts_counterparty ON contracts(counterparty);
52
+ CREATE INDEX IF NOT EXISTS idx_contracts_end_date ON contracts(end_date);
53
+ CREATE INDEX IF NOT EXISTS idx_clauses_contract ON clauses(contract_id);
54
+ CREATE INDEX IF NOT EXISTS idx_reminders_contract ON reminders(contract_id);
55
+ CREATE INDEX IF NOT EXISTS idx_reminders_remind_at ON reminders(remind_at);
56
+ `,
57
+ },
58
+ {
59
+ id: 2,
60
+ name: "qol_features",
61
+ sql: `
62
+ -- Obligation tracking
63
+ CREATE TABLE IF NOT EXISTS obligations (
64
+ id TEXT PRIMARY KEY,
65
+ clause_id TEXT NOT NULL REFERENCES clauses(id) ON DELETE CASCADE,
66
+ description TEXT NOT NULL,
67
+ due_date TEXT,
68
+ status TEXT NOT NULL DEFAULT 'pending' CHECK (status IN ('pending', 'completed', 'overdue')),
69
+ assigned_to TEXT,
70
+ created_at TEXT NOT NULL DEFAULT (datetime('now'))
71
+ );
72
+
73
+ CREATE INDEX IF NOT EXISTS idx_obligations_clause ON obligations(clause_id);
74
+ CREATE INDEX IF NOT EXISTS idx_obligations_status ON obligations(status);
75
+ CREATE INDEX IF NOT EXISTS idx_obligations_due_date ON obligations(due_date);
76
+
77
+ -- Rebuild contracts table to add pending_review status
78
+ CREATE TABLE contracts_new (
79
+ id TEXT PRIMARY KEY,
80
+ title TEXT NOT NULL,
81
+ type TEXT NOT NULL DEFAULT 'other' CHECK (type IN ('nda', 'service', 'employment', 'license', 'other')),
82
+ status TEXT NOT NULL DEFAULT 'draft' CHECK (status IN ('draft', 'pending_review', 'pending_signature', 'active', 'expired', 'terminated')),
83
+ counterparty TEXT,
84
+ counterparty_email TEXT,
85
+ start_date TEXT,
86
+ end_date TEXT,
87
+ auto_renew INTEGER NOT NULL DEFAULT 0,
88
+ renewal_period TEXT,
89
+ value REAL,
90
+ currency TEXT NOT NULL DEFAULT 'USD',
91
+ file_path TEXT,
92
+ metadata TEXT NOT NULL DEFAULT '{}',
93
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
94
+ updated_at TEXT NOT NULL DEFAULT (datetime('now'))
95
+ );
96
+
97
+ INSERT INTO contracts_new SELECT * FROM contracts;
98
+ DROP TABLE contracts;
99
+ ALTER TABLE contracts_new RENAME TO contracts;
100
+
101
+ CREATE INDEX IF NOT EXISTS idx_contracts_status ON contracts(status);
102
+ CREATE INDEX IF NOT EXISTS idx_contracts_type ON contracts(type);
103
+ CREATE INDEX IF NOT EXISTS idx_contracts_counterparty ON contracts(counterparty);
104
+ CREATE INDEX IF NOT EXISTS idx_contracts_end_date ON contracts(end_date);
105
+
106
+ -- Contract versions (history)
107
+ CREATE TABLE IF NOT EXISTS contract_versions (
108
+ id TEXT PRIMARY KEY,
109
+ contract_id TEXT NOT NULL REFERENCES contracts(id) ON DELETE CASCADE,
110
+ title TEXT NOT NULL,
111
+ status TEXT NOT NULL,
112
+ value REAL,
113
+ metadata_snapshot TEXT NOT NULL DEFAULT '{}',
114
+ changed_at TEXT NOT NULL DEFAULT (datetime('now'))
115
+ );
116
+
117
+ CREATE INDEX IF NOT EXISTS idx_contract_versions_contract ON contract_versions(contract_id);
118
+
119
+ -- Signatures
120
+ CREATE TABLE IF NOT EXISTS signatures (
121
+ id TEXT PRIMARY KEY,
122
+ contract_id TEXT NOT NULL REFERENCES contracts(id) ON DELETE CASCADE,
123
+ signer_name TEXT NOT NULL,
124
+ signer_email TEXT,
125
+ signed_at TEXT NOT NULL DEFAULT (datetime('now')),
126
+ method TEXT NOT NULL DEFAULT 'digital' CHECK (method IN ('digital', 'wet', 'docusign'))
127
+ );
128
+
129
+ CREATE INDEX IF NOT EXISTS idx_signatures_contract ON signatures(contract_id);
130
+
131
+ -- Clause templates (library)
132
+ CREATE TABLE IF NOT EXISTS clause_templates (
133
+ id TEXT PRIMARY KEY,
134
+ name TEXT NOT NULL UNIQUE,
135
+ text TEXT NOT NULL,
136
+ type TEXT NOT NULL DEFAULT 'standard' CHECK (type IN ('standard', 'custom', 'negotiated')),
137
+ created_at TEXT NOT NULL DEFAULT (datetime('now'))
138
+ );
139
+ `,
140
+ },
141
+ ];
@@ -0,0 +1,43 @@
1
+ /**
2
+ * microservice-contracts — Contract and agreement management microservice
3
+ */
4
+
5
+ export {
6
+ createContract,
7
+ getContract,
8
+ listContracts,
9
+ updateContract,
10
+ deleteContract,
11
+ searchContracts,
12
+ listExpiring,
13
+ renewContract,
14
+ getContractStats,
15
+ type Contract,
16
+ type ContractType,
17
+ type ContractStatus,
18
+ type CreateContractInput,
19
+ type UpdateContractInput,
20
+ type ListContractsOptions,
21
+ } from "./db/contracts.js";
22
+
23
+ export {
24
+ createClause,
25
+ getClause,
26
+ listClauses,
27
+ deleteClause,
28
+ type Clause,
29
+ type CreateClauseInput,
30
+ } from "./db/contracts.js";
31
+
32
+ export {
33
+ createReminder,
34
+ getReminder,
35
+ listReminders,
36
+ deleteReminder,
37
+ listPendingReminders,
38
+ markReminderSent,
39
+ type Reminder,
40
+ type CreateReminderInput,
41
+ } from "./db/contracts.js";
42
+
43
+ export { getDatabase, closeDatabase } from "./db/database.js";