@bonginkan/maria-ext 0.0.1 → 0.0.2

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/README.md CHANGED
@@ -6,17 +6,16 @@ Enterprise extension packs installer for `@bonginkan/maria-lite`.
6
6
  ## Install
7
7
 
8
8
  ```shell
9
- sudo env npm_config_pack="{pack name}" npm_config_email="{authorized_email}" npm install -g @bonginkan/maria-ext;
9
+ npm install -g @bonginkan/maria-ext;
10
10
  ```
11
11
 
12
12
  ## Update
13
13
 
14
14
  ```shell
15
- sudo env npm_config_pack="{pack name}" npm_config_email="{authorized_email}" npm update -g @bonginkan/maria-ext;
15
+ npm update -g @bonginkan/maria-ext;
16
16
  ```
17
17
 
18
18
  Notes:
19
- - `npm_config_pack` / `npm_config_email` are consumed by the installer's postinstall.
20
- - `authorized_email` must be a **single** email address (no spaces/commas).
21
- - The installer writes a deterministic manifest under `~/.maria/lite-ext/packs/` (or `MARIA_CONFIG_DIR`).
19
+ - `maria-lite` discovers installed packs dynamically at runtime.
20
+ - Pack authorization is controlled server-side (Firestore) and applied at runtime after login.
22
21
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  var fs = require('fs');
4
4
  var fsp = require('fs/promises');
5
- var os = require('os');
5
+ require('os');
6
6
  var path = require('path');
7
7
 
8
8
  function _interopNamespace(e) {
@@ -25,7 +25,6 @@ function _interopNamespace(e) {
25
25
 
26
26
  var fs__namespace = /*#__PURE__*/_interopNamespace(fs);
27
27
  var fsp__namespace = /*#__PURE__*/_interopNamespace(fsp);
28
- var os__namespace = /*#__PURE__*/_interopNamespace(os);
29
28
  var path__namespace = /*#__PURE__*/_interopNamespace(path);
30
29
 
31
30
  var __getOwnPropNames = Object.getOwnPropertyNames;
@@ -39,37 +38,8 @@ var require_postinstall = __commonJS({
39
38
  const s1 = s0.replace(/[^a-z0-9-]+/g, "-").replace(/-+/g, "-").replace(/^-+|-+$/g, "");
40
39
  return s1 || "pack";
41
40
  }
42
- function resolveConfigDir() {
43
- const env = String(process.env.MARIA_CONFIG_DIR || "").trim();
44
- if (env) return env;
45
- const sudoUser = String(process.env.SUDO_USER || "").trim();
46
- if (sudoUser && sudoUser !== "root") {
47
- const isPosix = process.platform !== "win32";
48
- if (isPosix) {
49
- try {
50
- const passwd = fs__namespace.readFileSync("/etc/passwd", "utf8");
51
- const line = passwd.split("\n").find((l) => l && !l.startsWith("#") && l.split(":")[0] === sudoUser);
52
- if (line) {
53
- const parts = line.split(":");
54
- const home = parts.length >= 6 ? String(parts[5] || "").trim() : "";
55
- if (home) return path__namespace.join(home, ".maria");
56
- }
57
- } catch {
58
- }
59
- if (process.platform === "darwin") return path__namespace.join("/Users", sudoUser, ".maria");
60
- return path__namespace.join("/home", sudoUser, ".maria");
61
- }
62
- }
63
- return path__namespace.join(os__namespace.homedir(), ".maria");
64
- }
65
- function normalizeEmail(s) {
66
- return String(s || "").trim().toLowerCase();
67
- }
68
- function normalizePattern(p) {
69
- return String(p || "").trim().toLowerCase();
70
- }
71
41
  function readArgValue(argv, flag) {
72
- const f = String(flag || "").trim();
42
+ const f = String(flag).trim();
73
43
  if (!f) return "";
74
44
  for (let i = 0; i < argv.length; i++) {
75
45
  const a = String(argv[i] || "");
@@ -83,34 +53,6 @@ var require_postinstall = __commonJS({
83
53
  }
84
54
  return "";
85
55
  }
86
- function normalizeEmailPatterns(raw) {
87
- const out = [];
88
- const seen = /* @__PURE__ */ new Set();
89
- for (const p of raw) {
90
- const n = normalizePattern(p);
91
- if (!n) continue;
92
- if (seen.has(n)) continue;
93
- seen.add(n);
94
- out.push(n);
95
- }
96
- return out.sort((a, b) => a.localeCompare(b));
97
- }
98
- function isEmailAllowed(emailRaw, patterns) {
99
- const email = normalizeEmail(emailRaw);
100
- if (!email) return false;
101
- const pats = normalizeEmailPatterns(patterns);
102
- for (const p of pats) {
103
- if (!p) continue;
104
- if (p.includes("*")) {
105
- if (!p.startsWith("*@")) continue;
106
- const suffix = p.slice(1);
107
- if (suffix && email.endsWith(suffix)) return true;
108
- continue;
109
- }
110
- if (email === p) return true;
111
- }
112
- return false;
113
- }
114
56
  async function loadPackConfigsFromDir(absDir) {
115
57
  const ents = await fsp__namespace.readdir(absDir, { withFileTypes: true }).catch(() => []);
116
58
  const packJsonAbs = [];
@@ -133,40 +75,19 @@ var require_postinstall = __commonJS({
133
75
  const packId = String(rec.packId || "").trim();
134
76
  const packName = String(rec.packName || "").trim();
135
77
  const entryRelPath = String(rec.entryRelPath || "").trim();
136
- const allowedEmailPatterns = Array.isArray(rec.allowedEmailPatterns) ? rec.allowedEmailPatterns.map((x) => String(x)) : [];
137
78
  if (!packId || !packName || !entryRelPath) continue;
138
79
  out.push({
139
80
  packId,
140
81
  packName,
141
- entryRelPath,
142
- allowedEmailPatterns: normalizeEmailPatterns(allowedEmailPatterns)
82
+ entryRelPath
143
83
  });
144
84
  }
145
85
  return out;
146
86
  }
147
- async function ensureFileMode600(abs) {
148
- try {
149
- if (process.platform === "win32") return;
150
- await fsp__namespace.chmod(abs, 384);
151
- } catch {
152
- }
153
- }
154
87
  async function main() {
155
88
  const argv = process.argv.slice(2);
156
89
  const packNameRaw = readArgValue(argv, "--pack") || String(process.env.npm_config_pack || "").trim();
157
- const emailRaw = readArgValue(argv, "--email") || String(process.env.npm_config_email || "").trim();
158
- if (!packNameRaw) {
159
- console.log("[maria-ext] Skipping: missing --pack");
160
- return;
161
- }
162
- if (!emailRaw) {
163
- console.log("[maria-ext] Skipping: missing --email");
164
- return;
165
- }
166
- if (/[,\s]/.test(emailRaw)) {
167
- console.log("[maria-ext] Invalid --email: must be a single email address (no spaces/commas)");
168
- return;
169
- }
90
+ if (!packNameRaw) return;
170
91
  const packName = packNameRaw;
171
92
  const packIdFromName = slugifyPackName(packName);
172
93
  const pkgRoot = path__namespace.join(__dirname, "..");
@@ -177,34 +98,8 @@ var require_postinstall = __commonJS({
177
98
  console.log(`[maria-ext] Unknown pack: '${packName}'. Available: ${configs.map((c) => c.packName).join(", ")}`);
178
99
  return;
179
100
  }
180
- if (!isEmailAllowed(emailRaw, pick.allowedEmailPatterns)) {
181
- console.log(`[maria-ext] Not authorized for pack '${pick.packName}' with email '${emailRaw}'`);
182
- return;
183
- }
184
101
  const entryAbsPath = path__namespace.join(pkgRoot, pick.entryRelPath);
185
- if (!fs__namespace.existsSync(entryAbsPath)) {
186
- console.log(`[maria-ext] Pack entry missing (build required): ${entryAbsPath}`);
187
- return;
188
- }
189
- const cfg = resolveConfigDir();
190
- const manifestsDir = path__namespace.join(cfg, "lite-ext", "packs");
191
- await fsp__namespace.mkdir(manifestsDir, { recursive: true });
192
- const manifest = {
193
- packId: pick.packId,
194
- packName: pick.packName,
195
- entryAbsPath,
196
- allowedEmailPatterns: pick.allowedEmailPatterns,
197
- installedAt: (/* @__PURE__ */ new Date()).toISOString()
198
- };
199
- const manifestAbs = path__namespace.join(manifestsDir, `${pick.packId}.json`);
200
- const tmp = `${manifestAbs}.tmp`;
201
- await fsp__namespace.writeFile(tmp, JSON.stringify(manifest, null, 2) + "\n", "utf8");
202
- await ensureFileMode600(tmp);
203
- await fsp__namespace.rename(tmp, manifestAbs);
204
- await ensureFileMode600(manifestAbs);
205
- console.log(`[maria-ext] Installed pack '${manifest.packName}' (packId=${manifest.packId})`);
206
- console.log(`[maria-ext] Authorized email: ${emailRaw}`);
207
- console.log(`[maria-ext] Manifest: ${manifestAbs}`);
102
+ if (!fs__namespace.existsSync(entryAbsPath)) return;
208
103
  }
209
104
  main().catch((e) => {
210
105
  console.log("[maria-ext] postinstall failed:", e instanceof Error ? e.message : String(e));
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/postinstall.ts"],"names":["fs","path","os","fsp"],"mappings":"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","file":"postinstall.cjs","sourcesContent":["/* eslint-disable no-console */\nimport * as fs from \"node:fs\";\nimport * as fsp from \"node:fs/promises\";\nimport * as os from \"node:os\";\nimport * as path from \"node:path\";\n\ntype PackConfig = {\n packId: string;\n packName: string;\n entryRelPath: string;\n allowedEmailPatterns: string[];\n};\n\nfunction slugifyPackName(raw: string): string {\n const s0 = String(raw || \"\").trim().toLowerCase();\n const s1 = s0\n .replace(/[^a-z0-9-]+/g, \"-\")\n .replace(/-+/g, \"-\")\n .replace(/^-+|-+$/g, \"\");\n return s1 || \"pack\";\n}\n\nfunction resolveConfigDir(): string {\n const env = String(process.env.MARIA_CONFIG_DIR || \"\").trim();\n if (env) return env;\n\n // If postinstall is executed via `sudo`, `os.homedir()` points to root.\n // In that case, write manifests under the invoking user's home directory\n // so `maria-lite` (run as the user) can discover installed packs.\n const sudoUser = String(process.env.SUDO_USER || \"\").trim();\n if (sudoUser && sudoUser !== \"root\") {\n const isPosix = process.platform !== \"win32\";\n if (isPosix) {\n try {\n const passwd = fs.readFileSync(\"/etc/passwd\", \"utf8\");\n const line = passwd\n .split(\"\\n\")\n .find((l) => l && !l.startsWith(\"#\") && l.split(\":\")[0] === sudoUser);\n if (line) {\n const parts = line.split(\":\");\n const home = parts.length >= 6 ? String(parts[5] || \"\").trim() : \"\";\n if (home) return path.join(home, \".maria\");\n }\n } catch {\n // ignore\n }\n // Fallback for typical layouts (macOS/Linux).\n if (process.platform === \"darwin\") return path.join(\"/Users\", sudoUser, \".maria\");\n return path.join(\"/home\", sudoUser, \".maria\");\n }\n }\n\n return path.join(os.homedir(), \".maria\");\n}\n\nfunction normalizeEmail(s: string): string {\n return String(s || \"\").trim().toLowerCase();\n}\n\nfunction normalizePattern(p: string): string {\n return String(p || \"\").trim().toLowerCase();\n}\n\nfunction readArgValue(argv: string[], flag: string): string {\n const f = String(flag || \"\").trim();\n if (!f) return \"\";\n for (let i = 0; i < argv.length; i++) {\n const a = String(argv[i] || \"\");\n if (a === f) {\n const v = i + 1 < argv.length ? String(argv[i + 1] || \"\") : \"\";\n return v.trim();\n }\n if (a.startsWith(`${f}=`)) {\n return a.slice(f.length + 1).trim();\n }\n }\n return \"\";\n}\n\nfunction normalizeEmailPatterns(raw: string[]): string[] {\n const out: string[] = [];\n const seen = new Set<string>();\n for (const p of raw) {\n const n = normalizePattern(p);\n if (!n) continue;\n if (seen.has(n)) continue;\n seen.add(n);\n out.push(n);\n }\n return out.sort((a, b) => a.localeCompare(b));\n}\n\nfunction isEmailAllowed(emailRaw: string, patterns: string[]): boolean {\n const email = normalizeEmail(emailRaw);\n if (!email) return false;\n const pats = normalizeEmailPatterns(patterns);\n for (const p of pats) {\n if (!p) continue;\n if (p.includes(\"*\")) {\n // Only support \"*@domain\" suffix wildcard.\n if (!p.startsWith(\"*@\")) continue;\n const suffix = p.slice(1); // \"@domain\"\n if (suffix && email.endsWith(suffix)) return true;\n continue;\n }\n if (email === p) return true;\n }\n return false;\n}\n\nasync function loadPackConfigsFromDir(absDir: string): Promise<PackConfig[]> {\n const ents = await fsp.readdir(absDir, { withFileTypes: true }).catch((): any[] => []);\n const packJsonAbs: string[] = [];\n for (const e of ents) {\n if (!e.isDirectory()) continue;\n packJsonAbs.push(path.join(absDir, e.name, \"pack.json\"));\n }\n packJsonAbs.sort((a, b) => a.localeCompare(b));\n\n const out: PackConfig[] = [];\n for (const abs of packJsonAbs) {\n const raw = await fsp.readFile(abs, \"utf8\").catch((): string => \"\");\n if (!raw.trim()) continue;\n let obj: unknown = null;\n try {\n obj = JSON.parse(raw) as unknown;\n } catch {\n obj = null;\n }\n const rec = obj && typeof obj === \"object\" ? (obj as Record<string, unknown>) : {};\n const packId = String(rec.packId || \"\").trim();\n const packName = String(rec.packName || \"\").trim();\n const entryRelPath = String(rec.entryRelPath || \"\").trim();\n const allowedEmailPatterns = Array.isArray(rec.allowedEmailPatterns) ? rec.allowedEmailPatterns.map((x) => String(x)) : [];\n if (!packId || !packName || !entryRelPath) continue;\n out.push({\n packId,\n packName,\n entryRelPath,\n allowedEmailPatterns: normalizeEmailPatterns(allowedEmailPatterns),\n });\n }\n return out;\n}\n\nasync function ensureFileMode600(abs: string): Promise<void> {\n try {\n if (process.platform === \"win32\") return;\n await fsp.chmod(abs, 0o600);\n } catch {\n // ignore\n }\n}\n\nasync function main(): Promise<void> {\n // Source precedence:\n // - argv (developer/local invocation): node dist/postinstall.cjs --pack \"aa test\" --email \"user@...\"\n // - npm_config_* (npm postinstall): npm install ... --pack \"aa test\" --email \"user@...\"\n const argv = process.argv.slice(2);\n const packNameRaw = readArgValue(argv, \"--pack\") || String(process.env.npm_config_pack || \"\").trim();\n const emailRaw = readArgValue(argv, \"--email\") || String(process.env.npm_config_email || \"\").trim();\n\n if (!packNameRaw) {\n console.log(\"[maria-ext] Skipping: missing --pack\");\n return;\n }\n if (!emailRaw) {\n console.log(\"[maria-ext] Skipping: missing --email\");\n return;\n }\n // IMPORTANT: `--email` is a single email value (not a list).\n if (/[,\\s]/.test(emailRaw)) {\n console.log(\"[maria-ext] Invalid --email: must be a single email address (no spaces/commas)\");\n return;\n }\n\n const packName = packNameRaw;\n const packIdFromName = slugifyPackName(packName);\n\n const pkgRoot = path.join(__dirname, \"..\"); // dist/ -> package root\n const packsDir = path.join(pkgRoot, \"packs\");\n const configs = await loadPackConfigsFromDir(packsDir);\n const pick =\n configs.find((p) => p.packId === packIdFromName) ||\n configs.find((p) => p.packName.toLowerCase() === packName.toLowerCase());\n if (!pick) {\n console.log(`[maria-ext] Unknown pack: '${packName}'. Available: ${configs.map((c) => c.packName).join(\", \")}`);\n return;\n }\n\n if (!isEmailAllowed(emailRaw, pick.allowedEmailPatterns)) {\n console.log(`[maria-ext] Not authorized for pack '${pick.packName}' with email '${emailRaw}'`);\n return;\n }\n\n const entryAbsPath = path.join(pkgRoot, pick.entryRelPath);\n if (!fs.existsSync(entryAbsPath)) {\n console.log(`[maria-ext] Pack entry missing (build required): ${entryAbsPath}`);\n return;\n }\n\n const cfg = resolveConfigDir();\n const manifestsDir = path.join(cfg, \"lite-ext\", \"packs\");\n await fsp.mkdir(manifestsDir, { recursive: true });\n\n const manifest = {\n packId: pick.packId,\n packName: pick.packName,\n entryAbsPath,\n allowedEmailPatterns: pick.allowedEmailPatterns,\n installedAt: new Date().toISOString(),\n };\n\n const manifestAbs = path.join(manifestsDir, `${pick.packId}.json`);\n const tmp = `${manifestAbs}.tmp`;\n await fsp.writeFile(tmp, JSON.stringify(manifest, null, 2) + \"\\n\", \"utf8\");\n await ensureFileMode600(tmp);\n await fsp.rename(tmp, manifestAbs);\n await ensureFileMode600(manifestAbs);\n\n console.log(`[maria-ext] Installed pack '${manifest.packName}' (packId=${manifest.packId})`);\n console.log(`[maria-ext] Authorized email: ${emailRaw}`);\n console.log(`[maria-ext] Manifest: ${manifestAbs}`);\n}\n\nmain().catch((e: unknown) => {\n console.log(\"[maria-ext] postinstall failed:\", e instanceof Error ? e.message : String(e));\n});\n\n"]}
1
+ {"version":3,"sources":["../src/postinstall.ts"],"names":["fsp","path","fs"],"mappings":"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","file":"postinstall.cjs","sourcesContent":["/* eslint-disable no-console */\nimport * as fs from \"node:fs\";\nimport * as fsp from \"node:fs/promises\";\nimport * as os from \"node:os\";\nimport * as path from \"node:path\";\n\ntype PackConfig = {\n packId: string;\n packName: string;\n entryRelPath: string;\n};\n\nfunction slugifyPackName(raw: string): string {\n const s0 = String(raw || \"\").trim().toLowerCase();\n const s1 = s0\n .replace(/[^a-z0-9-]+/g, \"-\")\n .replace(/-+/g, \"-\")\n .replace(/^-+|-+$/g, \"\");\n return s1 || \"pack\";\n}\n\nfunction resolveConfigDir(): string {\n const env = String(process.env.MARIA_CONFIG_DIR || \"\").trim();\n if (env) return env;\n\n // If postinstall is executed via `sudo`, `os.homedir()` points to root.\n // In that case, write manifests under the invoking user's home directory\n // so `maria-lite` (run as the user) can discover installed packs.\n const sudoUser = String(process.env.SUDO_USER || \"\").trim();\n if (sudoUser && sudoUser !== \"root\") {\n const isPosix = process.platform !== \"win32\";\n if (isPosix) {\n try {\n const passwd = fs.readFileSync(\"/etc/passwd\", \"utf8\");\n const line = passwd\n .split(\"\\n\")\n .find((l) => l && !l.startsWith(\"#\") && l.split(\":\")[0] === sudoUser);\n if (line) {\n const parts = line.split(\":\");\n const home = parts.length >= 6 ? String(parts[5] || \"\").trim() : \"\";\n if (home) return path.join(home, \".maria\");\n }\n } catch {\n // ignore\n }\n // Fallback for typical layouts (macOS/Linux).\n if (process.platform === \"darwin\") return path.join(\"/Users\", sudoUser, \".maria\");\n return path.join(\"/home\", sudoUser, \".maria\");\n }\n }\n\n return path.join(os.homedir(), \".maria\");\n}\n\nfunction readArgValue(argv: string[], flag: string): string {\n const f = String(flag || \"\").trim();\n if (!f) return \"\";\n for (let i = 0; i < argv.length; i++) {\n const a = String(argv[i] || \"\");\n if (a === f) {\n const v = i + 1 < argv.length ? String(argv[i + 1] || \"\") : \"\";\n return v.trim();\n }\n if (a.startsWith(`${f}=`)) {\n return a.slice(f.length + 1).trim();\n }\n }\n return \"\";\n}\n\nasync function loadPackConfigsFromDir(absDir: string): Promise<PackConfig[]> {\n const ents = await fsp.readdir(absDir, { withFileTypes: true }).catch((): any[] => []);\n const packJsonAbs: string[] = [];\n for (const e of ents) {\n if (!e.isDirectory()) continue;\n packJsonAbs.push(path.join(absDir, e.name, \"pack.json\"));\n }\n packJsonAbs.sort((a, b) => a.localeCompare(b));\n\n const out: PackConfig[] = [];\n for (const abs of packJsonAbs) {\n const raw = await fsp.readFile(abs, \"utf8\").catch((): string => \"\");\n if (!raw.trim()) continue;\n let obj: unknown = null;\n try {\n obj = JSON.parse(raw) as unknown;\n } catch {\n obj = null;\n }\n const rec = obj && typeof obj === \"object\" ? (obj as Record<string, unknown>) : {};\n const packId = String(rec.packId || \"\").trim();\n const packName = String(rec.packName || \"\").trim();\n const entryRelPath = String(rec.entryRelPath || \"\").trim();\n if (!packId || !packName || !entryRelPath) continue;\n out.push({\n packId,\n packName,\n entryRelPath,\n });\n }\n return out;\n}\n\nasync function ensureFileMode600(abs: string): Promise<void> {\n try {\n if (process.platform === \"win32\") return;\n await fsp.chmod(abs, 0o600);\n } catch {\n // ignore\n }\n}\n\nasync function main(): Promise<void> {\n // NOTE:\n // `@bonginkan/maria-ext` is now a pure pack bundle.\n // Authorization is controlled server-side (Firestore) and enforced by `maria-lite` at runtime.\n // Therefore postinstall is intentionally a silent no-op (no user data, no manifests).\n //\n // Keep a tiny stub so existing installations don't break.\n const argv = process.argv.slice(2);\n const packNameRaw = readArgValue(argv, \"--pack\") || String(process.env.npm_config_pack || \"\").trim();\n if (!packNameRaw) return;\n\n const packName = packNameRaw;\n const packIdFromName = slugifyPackName(packName);\n\n const pkgRoot = path.join(__dirname, \"..\"); // dist/ -> package root\n const packsDir = path.join(pkgRoot, \"packs\");\n const configs = await loadPackConfigsFromDir(packsDir);\n const pick =\n configs.find((p) => p.packId === packIdFromName) ||\n configs.find((p) => p.packName.toLowerCase() === packName.toLowerCase());\n if (!pick) {\n console.log(`[maria-ext] Unknown pack: '${packName}'. Available: ${configs.map((c) => c.packName).join(\", \")}`);\n return;\n }\n\n // Validate built entry exists (helpful for pack authors), but do not write anything.\n const entryAbsPath = path.join(pkgRoot, pick.entryRelPath);\n if (!fs.existsSync(entryAbsPath)) return;\n}\n\nmain().catch((e: unknown) => {\n console.log(\"[maria-ext] postinstall failed:\", e instanceof Error ? e.message : String(e));\n});\n\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bonginkan/maria-ext",
3
- "version": "0.0.1",
3
+ "version": "0.0.2",
4
4
  "description": "MARIA-LITE extension installer and packs (enterprise/custom).",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "author": "Bonginkan Inc.",
@@ -1,7 +1,6 @@
1
1
  {
2
2
  "packId": "aa-test",
3
3
  "packName": "aa test",
4
- "entryRelPath": "dist/packs/aa-test/entry.cjs",
5
- "allowedEmailPatterns": ["l@myth-ai.one", "*@bonginkan.ai"]
4
+ "entryRelPath": "dist/packs/aa-test/entry.cjs"
6
5
  }
7
6