@miguelarios/pim-core 0.1.0 → 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.
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +32 -30
- package/dist/config.js.map +1 -1
- package/package.json +7 -2
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAiBD,wBAAgB,iBAAiB,IAAI,aAAa,CAwBjD;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,aAAa,EAAE,CAAC;CAC3B;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAiBD,wBAAgB,iBAAiB,IAAI,aAAa,CAwBjD;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,aAAa,EAAE,CAAC;CAC3B;AAED,wBAAgB,gBAAgB,IAAI,YAAY,CAuC/C;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE;QACJ,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,OAAO,CAAC;KACjB,CAAC;IACF,IAAI,EAAE;QACJ,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,OAAO,CAAC;KACjB,CAAC;IACF,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAWD,wBAAgB,eAAe,IAAI,WAAW,CA0C7C"}
|
package/dist/config.js
CHANGED
|
@@ -30,39 +30,41 @@ export function loadCardDavConfig() {
|
|
|
30
30
|
throw error;
|
|
31
31
|
}
|
|
32
32
|
}
|
|
33
|
-
const CalDavAccountSchema = v.object({
|
|
34
|
-
id: v.pipe(v.string(), v.minLength(1, "Account id cannot be empty")),
|
|
35
|
-
url: v.pipe(v.string(), v.url("Account url must be a valid URL")),
|
|
36
|
-
username: v.pipe(v.string(), v.minLength(1, "Account username cannot be empty")),
|
|
37
|
-
password: v.pipe(v.string(), v.minLength(1, "Account password cannot be empty")),
|
|
38
|
-
});
|
|
39
|
-
const CalDavAccountsSchema = v.pipe(v.array(CalDavAccountSchema), v.minLength(1, "At least one CalDAV account is required"));
|
|
40
33
|
export function loadCalDavConfig() {
|
|
41
|
-
const
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
34
|
+
const prefix = "CALDAV_";
|
|
35
|
+
const suffix = "_URL";
|
|
36
|
+
const accounts = [];
|
|
37
|
+
for (const key of Object.keys(process.env)) {
|
|
38
|
+
if (key.startsWith(prefix) && key.endsWith(suffix) && key.length > prefix.length + suffix.length) {
|
|
39
|
+
const id = key.slice(prefix.length, -suffix.length).toLowerCase();
|
|
40
|
+
const url = process.env[key] ?? "";
|
|
41
|
+
const user = process.env[`${prefix}${key.slice(prefix.length, -suffix.length)}_USER`] ?? "";
|
|
42
|
+
const pass = process.env[`${prefix}${key.slice(prefix.length, -suffix.length)}_PASS`] ?? "";
|
|
43
|
+
const errors = [];
|
|
44
|
+
if (!url)
|
|
45
|
+
errors.push(`CALDAV_${id.toUpperCase()}_URL is required`);
|
|
46
|
+
else {
|
|
47
|
+
try {
|
|
48
|
+
new URL(url);
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
errors.push(`CALDAV_${id.toUpperCase()}_URL must be a valid URL`);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
if (!user)
|
|
55
|
+
errors.push(`CALDAV_${id.toUpperCase()}_USER is required`);
|
|
56
|
+
if (!pass)
|
|
57
|
+
errors.push(`CALDAV_${id.toUpperCase()}_PASS is required`);
|
|
58
|
+
if (errors.length > 0) {
|
|
59
|
+
throw new ConfigurationError(`Config validation failed: ${errors.join("; ")}`);
|
|
60
|
+
}
|
|
61
|
+
accounts.push({ id, url, username: user, password: pass });
|
|
63
62
|
}
|
|
64
|
-
throw error;
|
|
65
63
|
}
|
|
64
|
+
if (accounts.length === 0) {
|
|
65
|
+
throw new ConfigurationError("No CalDAV accounts found. Set CALDAV_<ID>_URL, CALDAV_<ID>_USER, and CALDAV_<ID>_PASS environment variables.");
|
|
66
|
+
}
|
|
67
|
+
return { accounts };
|
|
66
68
|
}
|
|
67
69
|
const EmailEnvSchema = v.object({
|
|
68
70
|
IMAP_HOST: v.pipe(v.string("IMAP_HOST is required"), v.minLength(1, "IMAP_HOST cannot be empty")),
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAQjD,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IAChC,WAAW,EAAE,CAAC,CAAC,IAAI,CACjB,CAAC,CAAC,MAAM,CAAC,yBAAyB,CAAC,EACnC,CAAC,CAAC,GAAG,CAAC,iCAAiC,CAAC,CACzC;IACD,YAAY,EAAE,CAAC,CAAC,IAAI,CAClB,CAAC,CAAC,MAAM,CAAC,0BAA0B,CAAC,EACpC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,8BAA8B,CAAC,CAC/C;IACD,YAAY,EAAE,CAAC,CAAC,IAAI,CAClB,CAAC,CAAC,MAAM,CAAC,0BAA0B,CAAC,EACpC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,8BAA8B,CAAC,CAC/C;CACF,CAAC,CAAC;AAEH,MAAM,UAAU,iBAAiB;IAC/B,MAAM,GAAG,GAAG;QACV,WAAW,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW;QACpC,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY;QACtC,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY;KACvC,CAAC;IAEF,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC;QACjD,OAAO;YACL,GAAG,EAAE,SAAS,CAAC,WAAW;YAC1B,QAAQ,EAAE,SAAS,CAAC,YAAY;YAChC,QAAQ,EAAE,SAAS,CAAC,YAAY;SACjC,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;gBAC1C,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,SAAS,CAAC;gBAClE,OAAO,GAAG,IAAI,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC;YACrC,CAAC,CAAC,CAAC;YACH,MAAM,IAAI,kBAAkB,CAAC,6BAA6B,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACnF,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAaD,MAAM,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,8 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@miguelarios/pim-core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "Shared config, validation, errors, and utilities for PIM agent MCP servers",
|
|
5
|
-
"keywords": [
|
|
5
|
+
"keywords": [
|
|
6
|
+
"pim",
|
|
7
|
+
"mcp",
|
|
8
|
+
"config",
|
|
9
|
+
"validation"
|
|
10
|
+
],
|
|
6
11
|
"license": "MIT",
|
|
7
12
|
"author": "Miguel Rios",
|
|
8
13
|
"repository": {
|