@hasna/search 0.0.2 → 0.0.3
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/cli/index.js +25 -11
- package/dist/db/database.d.ts.map +1 -1
- package/dist/index.js +26 -12
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/mcp/index.js +25 -11
- package/dist/server/index.js +28 -14
- package/package.json +1 -1
package/dist/cli/index.js
CHANGED
|
@@ -6851,12 +6851,19 @@ function deduplicateResults(results) {
|
|
|
6851
6851
|
}
|
|
6852
6852
|
|
|
6853
6853
|
// src/lib/config.ts
|
|
6854
|
-
import { mkdirSync, readFileSync, writeFileSync, existsSync } from "fs";
|
|
6854
|
+
import { mkdirSync, readFileSync, writeFileSync, existsSync, cpSync } from "fs";
|
|
6855
6855
|
function getConfigDir() {
|
|
6856
6856
|
const home = Bun.env.HOME ?? "/tmp";
|
|
6857
|
-
const
|
|
6858
|
-
|
|
6859
|
-
|
|
6857
|
+
const newDir = `${home}/.hasna/search`;
|
|
6858
|
+
const oldDir = `${home}/.open-search`;
|
|
6859
|
+
if (!existsSync(newDir) && existsSync(oldDir)) {
|
|
6860
|
+
try {
|
|
6861
|
+
mkdirSync(`${home}/.hasna`, { recursive: true });
|
|
6862
|
+
cpSync(oldDir, newDir, { recursive: true });
|
|
6863
|
+
} catch {}
|
|
6864
|
+
}
|
|
6865
|
+
mkdirSync(newDir, { recursive: true });
|
|
6866
|
+
return newDir;
|
|
6860
6867
|
}
|
|
6861
6868
|
function getConfigPath() {
|
|
6862
6869
|
return `${getConfigDir()}/config.json`;
|
|
@@ -6894,7 +6901,7 @@ function setConfigValue(key, value) {
|
|
|
6894
6901
|
|
|
6895
6902
|
// src/db/database.ts
|
|
6896
6903
|
import { Database } from "bun:sqlite";
|
|
6897
|
-
import { mkdirSync as mkdirSync2 } from "fs";
|
|
6904
|
+
import { mkdirSync as mkdirSync2, existsSync as existsSync2, cpSync as cpSync2 } from "fs";
|
|
6898
6905
|
|
|
6899
6906
|
// src/db/migrations.ts
|
|
6900
6907
|
var migrations = [
|
|
@@ -7053,13 +7060,20 @@ function runMigrations(db) {
|
|
|
7053
7060
|
// src/db/database.ts
|
|
7054
7061
|
var instance = null;
|
|
7055
7062
|
function resolveDbPath() {
|
|
7056
|
-
|
|
7057
|
-
|
|
7058
|
-
|
|
7063
|
+
const envPath = Bun.env.HASNA_SEARCH_DB_PATH ?? Bun.env.SEARCH_DB_PATH;
|
|
7064
|
+
if (envPath)
|
|
7065
|
+
return envPath;
|
|
7059
7066
|
const home = Bun.env.HOME ?? "/tmp";
|
|
7060
|
-
const
|
|
7061
|
-
|
|
7062
|
-
|
|
7067
|
+
const newDir = `${home}/.hasna/search`;
|
|
7068
|
+
const oldDir = `${home}/.open-search`;
|
|
7069
|
+
if (!existsSync2(newDir) && existsSync2(oldDir)) {
|
|
7070
|
+
try {
|
|
7071
|
+
mkdirSync2(`${home}/.hasna`, { recursive: true });
|
|
7072
|
+
cpSync2(oldDir, newDir, { recursive: true });
|
|
7073
|
+
} catch {}
|
|
7074
|
+
}
|
|
7075
|
+
mkdirSync2(newDir, { recursive: true });
|
|
7076
|
+
return `${newDir}/data.db`;
|
|
7063
7077
|
}
|
|
7064
7078
|
function getDb() {
|
|
7065
7079
|
if (instance)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/db/database.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/db/database.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AA6BtC,wBAAgB,KAAK,IAAI,QAAQ,CAehC;AAED,wBAAgB,OAAO,IAAI,IAAI,CAK9B;AAED,wBAAgB,eAAe,IAAI,QAAQ,CAO1C"}
|
package/dist/index.js
CHANGED
|
@@ -4070,7 +4070,7 @@ class ValidationError extends SearchError {
|
|
|
4070
4070
|
}
|
|
4071
4071
|
// src/db/database.ts
|
|
4072
4072
|
import { Database } from "bun:sqlite";
|
|
4073
|
-
import { mkdirSync } from "fs";
|
|
4073
|
+
import { mkdirSync, existsSync, cpSync } from "fs";
|
|
4074
4074
|
|
|
4075
4075
|
// src/db/migrations.ts
|
|
4076
4076
|
var migrations = [
|
|
@@ -4229,13 +4229,20 @@ function runMigrations(db) {
|
|
|
4229
4229
|
// src/db/database.ts
|
|
4230
4230
|
var instance = null;
|
|
4231
4231
|
function resolveDbPath() {
|
|
4232
|
-
|
|
4233
|
-
|
|
4234
|
-
|
|
4232
|
+
const envPath = Bun.env.HASNA_SEARCH_DB_PATH ?? Bun.env.SEARCH_DB_PATH;
|
|
4233
|
+
if (envPath)
|
|
4234
|
+
return envPath;
|
|
4235
4235
|
const home = Bun.env.HOME ?? "/tmp";
|
|
4236
|
-
const
|
|
4237
|
-
|
|
4238
|
-
|
|
4236
|
+
const newDir = `${home}/.hasna/search`;
|
|
4237
|
+
const oldDir = `${home}/.open-search`;
|
|
4238
|
+
if (!existsSync(newDir) && existsSync(oldDir)) {
|
|
4239
|
+
try {
|
|
4240
|
+
mkdirSync(`${home}/.hasna`, { recursive: true });
|
|
4241
|
+
cpSync(oldDir, newDir, { recursive: true });
|
|
4242
|
+
} catch {}
|
|
4243
|
+
}
|
|
4244
|
+
mkdirSync(newDir, { recursive: true });
|
|
4245
|
+
return `${newDir}/data.db`;
|
|
4239
4246
|
}
|
|
4240
4247
|
function getDb() {
|
|
4241
4248
|
if (instance)
|
|
@@ -4591,19 +4598,26 @@ function deleteProfile(id, db) {
|
|
|
4591
4598
|
return result.changes > 0;
|
|
4592
4599
|
}
|
|
4593
4600
|
// src/lib/config.ts
|
|
4594
|
-
import { mkdirSync as mkdirSync2, readFileSync, writeFileSync, existsSync } from "fs";
|
|
4601
|
+
import { mkdirSync as mkdirSync2, readFileSync, writeFileSync, existsSync as existsSync2, cpSync as cpSync2 } from "fs";
|
|
4595
4602
|
function getConfigDir() {
|
|
4596
4603
|
const home = Bun.env.HOME ?? "/tmp";
|
|
4597
|
-
const
|
|
4598
|
-
|
|
4599
|
-
|
|
4604
|
+
const newDir = `${home}/.hasna/search`;
|
|
4605
|
+
const oldDir = `${home}/.open-search`;
|
|
4606
|
+
if (!existsSync2(newDir) && existsSync2(oldDir)) {
|
|
4607
|
+
try {
|
|
4608
|
+
mkdirSync2(`${home}/.hasna`, { recursive: true });
|
|
4609
|
+
cpSync2(oldDir, newDir, { recursive: true });
|
|
4610
|
+
} catch {}
|
|
4611
|
+
}
|
|
4612
|
+
mkdirSync2(newDir, { recursive: true });
|
|
4613
|
+
return newDir;
|
|
4600
4614
|
}
|
|
4601
4615
|
function getConfigPath() {
|
|
4602
4616
|
return `${getConfigDir()}/config.json`;
|
|
4603
4617
|
}
|
|
4604
4618
|
function getConfig() {
|
|
4605
4619
|
const path = getConfigPath();
|
|
4606
|
-
if (!
|
|
4620
|
+
if (!existsSync2(path)) {
|
|
4607
4621
|
return { ...DEFAULT_CONFIG };
|
|
4608
4622
|
}
|
|
4609
4623
|
try {
|
package/dist/lib/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,YAAY,EAAkB,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,YAAY,EAAkB,MAAM,mBAAmB,CAAC;AAyBtE,wBAAgB,SAAS,IAAI,YAAY,CAYxC;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,YAAY,CAMtE;AAED,wBAAgB,WAAW,IAAI,YAAY,CAI1C;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,YAAY,GAAG,OAAO,CAG/D;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,YAAY,EAAE,KAAK,EAAE,OAAO,GAAG,YAAY,CAKpF"}
|
package/dist/mcp/index.js
CHANGED
|
@@ -20252,12 +20252,19 @@ function deduplicateResults(results) {
|
|
|
20252
20252
|
}
|
|
20253
20253
|
|
|
20254
20254
|
// src/lib/config.ts
|
|
20255
|
-
import { mkdirSync, readFileSync, writeFileSync, existsSync } from "fs";
|
|
20255
|
+
import { mkdirSync, readFileSync, writeFileSync, existsSync, cpSync } from "fs";
|
|
20256
20256
|
function getConfigDir() {
|
|
20257
20257
|
const home = Bun.env.HOME ?? "/tmp";
|
|
20258
|
-
const
|
|
20259
|
-
|
|
20260
|
-
|
|
20258
|
+
const newDir = `${home}/.hasna/search`;
|
|
20259
|
+
const oldDir = `${home}/.open-search`;
|
|
20260
|
+
if (!existsSync(newDir) && existsSync(oldDir)) {
|
|
20261
|
+
try {
|
|
20262
|
+
mkdirSync(`${home}/.hasna`, { recursive: true });
|
|
20263
|
+
cpSync(oldDir, newDir, { recursive: true });
|
|
20264
|
+
} catch {}
|
|
20265
|
+
}
|
|
20266
|
+
mkdirSync(newDir, { recursive: true });
|
|
20267
|
+
return newDir;
|
|
20261
20268
|
}
|
|
20262
20269
|
function getConfigPath() {
|
|
20263
20270
|
return `${getConfigDir()}/config.json`;
|
|
@@ -20285,7 +20292,7 @@ function setConfig(updates) {
|
|
|
20285
20292
|
|
|
20286
20293
|
// src/db/database.ts
|
|
20287
20294
|
import { Database } from "bun:sqlite";
|
|
20288
|
-
import { mkdirSync as mkdirSync2 } from "fs";
|
|
20295
|
+
import { mkdirSync as mkdirSync2, existsSync as existsSync2, cpSync as cpSync2 } from "fs";
|
|
20289
20296
|
|
|
20290
20297
|
// src/db/migrations.ts
|
|
20291
20298
|
var migrations = [
|
|
@@ -20444,13 +20451,20 @@ function runMigrations(db) {
|
|
|
20444
20451
|
// src/db/database.ts
|
|
20445
20452
|
var instance = null;
|
|
20446
20453
|
function resolveDbPath() {
|
|
20447
|
-
|
|
20448
|
-
|
|
20449
|
-
|
|
20454
|
+
const envPath = Bun.env.HASNA_SEARCH_DB_PATH ?? Bun.env.SEARCH_DB_PATH;
|
|
20455
|
+
if (envPath)
|
|
20456
|
+
return envPath;
|
|
20450
20457
|
const home = Bun.env.HOME ?? "/tmp";
|
|
20451
|
-
const
|
|
20452
|
-
|
|
20453
|
-
|
|
20458
|
+
const newDir = `${home}/.hasna/search`;
|
|
20459
|
+
const oldDir = `${home}/.open-search`;
|
|
20460
|
+
if (!existsSync2(newDir) && existsSync2(oldDir)) {
|
|
20461
|
+
try {
|
|
20462
|
+
mkdirSync2(`${home}/.hasna`, { recursive: true });
|
|
20463
|
+
cpSync2(oldDir, newDir, { recursive: true });
|
|
20464
|
+
} catch {}
|
|
20465
|
+
}
|
|
20466
|
+
mkdirSync2(newDir, { recursive: true });
|
|
20467
|
+
return `${newDir}/data.db`;
|
|
20454
20468
|
}
|
|
20455
20469
|
function getDb() {
|
|
20456
20470
|
if (instance)
|
package/dist/server/index.js
CHANGED
|
@@ -4767,12 +4767,19 @@ function deduplicateResults(results) {
|
|
|
4767
4767
|
}
|
|
4768
4768
|
|
|
4769
4769
|
// src/lib/config.ts
|
|
4770
|
-
import { mkdirSync, readFileSync, writeFileSync, existsSync } from "fs";
|
|
4770
|
+
import { mkdirSync, readFileSync, writeFileSync, existsSync, cpSync } from "fs";
|
|
4771
4771
|
function getConfigDir() {
|
|
4772
4772
|
const home = Bun.env.HOME ?? "/tmp";
|
|
4773
|
-
const
|
|
4774
|
-
|
|
4775
|
-
|
|
4773
|
+
const newDir = `${home}/.hasna/search`;
|
|
4774
|
+
const oldDir = `${home}/.open-search`;
|
|
4775
|
+
if (!existsSync(newDir) && existsSync(oldDir)) {
|
|
4776
|
+
try {
|
|
4777
|
+
mkdirSync(`${home}/.hasna`, { recursive: true });
|
|
4778
|
+
cpSync(oldDir, newDir, { recursive: true });
|
|
4779
|
+
} catch {}
|
|
4780
|
+
}
|
|
4781
|
+
mkdirSync(newDir, { recursive: true });
|
|
4782
|
+
return newDir;
|
|
4776
4783
|
}
|
|
4777
4784
|
function getConfigPath() {
|
|
4778
4785
|
return `${getConfigDir()}/config.json`;
|
|
@@ -4800,7 +4807,7 @@ function setConfig(updates) {
|
|
|
4800
4807
|
|
|
4801
4808
|
// src/db/database.ts
|
|
4802
4809
|
import { Database } from "bun:sqlite";
|
|
4803
|
-
import { mkdirSync as mkdirSync2 } from "fs";
|
|
4810
|
+
import { mkdirSync as mkdirSync2, existsSync as existsSync2, cpSync as cpSync2 } from "fs";
|
|
4804
4811
|
|
|
4805
4812
|
// src/db/migrations.ts
|
|
4806
4813
|
var migrations = [
|
|
@@ -4959,13 +4966,20 @@ function runMigrations(db) {
|
|
|
4959
4966
|
// src/db/database.ts
|
|
4960
4967
|
var instance = null;
|
|
4961
4968
|
function resolveDbPath() {
|
|
4962
|
-
|
|
4963
|
-
|
|
4964
|
-
|
|
4969
|
+
const envPath = Bun.env.HASNA_SEARCH_DB_PATH ?? Bun.env.SEARCH_DB_PATH;
|
|
4970
|
+
if (envPath)
|
|
4971
|
+
return envPath;
|
|
4965
4972
|
const home = Bun.env.HOME ?? "/tmp";
|
|
4966
|
-
const
|
|
4967
|
-
|
|
4968
|
-
|
|
4973
|
+
const newDir = `${home}/.hasna/search`;
|
|
4974
|
+
const oldDir = `${home}/.open-search`;
|
|
4975
|
+
if (!existsSync2(newDir) && existsSync2(oldDir)) {
|
|
4976
|
+
try {
|
|
4977
|
+
mkdirSync2(`${home}/.hasna`, { recursive: true });
|
|
4978
|
+
cpSync2(oldDir, newDir, { recursive: true });
|
|
4979
|
+
} catch {}
|
|
4980
|
+
}
|
|
4981
|
+
mkdirSync2(newDir, { recursive: true });
|
|
4982
|
+
return `${newDir}/data.db`;
|
|
4969
4983
|
}
|
|
4970
4984
|
function getDb() {
|
|
4971
4985
|
if (instance)
|
|
@@ -5516,7 +5530,7 @@ async function transcribeVideo(url, opts = {}) {
|
|
|
5516
5530
|
}
|
|
5517
5531
|
|
|
5518
5532
|
// src/server/serve.ts
|
|
5519
|
-
import { existsSync as
|
|
5533
|
+
import { existsSync as existsSync3, readFileSync as readFileSync2 } from "fs";
|
|
5520
5534
|
import { join } from "path";
|
|
5521
5535
|
function json(data, status = 200) {
|
|
5522
5536
|
return new Response(JSON.stringify(data), {
|
|
@@ -5546,7 +5560,7 @@ var MIME_TYPES = {
|
|
|
5546
5560
|
function serveDashboard(pathname) {
|
|
5547
5561
|
const dashboardDir = join(import.meta.dir, "../../dashboard/dist");
|
|
5548
5562
|
const filePath = join(dashboardDir, pathname === "/" ? "index.html" : pathname);
|
|
5549
|
-
if (
|
|
5563
|
+
if (existsSync3(filePath)) {
|
|
5550
5564
|
const ext = filePath.substring(filePath.lastIndexOf("."));
|
|
5551
5565
|
const mime = MIME_TYPES[ext] ?? "application/octet-stream";
|
|
5552
5566
|
return new Response(readFileSync2(filePath), {
|
|
@@ -5554,7 +5568,7 @@ function serveDashboard(pathname) {
|
|
|
5554
5568
|
});
|
|
5555
5569
|
}
|
|
5556
5570
|
const indexPath = join(dashboardDir, "index.html");
|
|
5557
|
-
if (
|
|
5571
|
+
if (existsSync3(indexPath)) {
|
|
5558
5572
|
return new Response(readFileSync2(indexPath), {
|
|
5559
5573
|
headers: { "Content-Type": "text/html" }
|
|
5560
5574
|
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hasna/search",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.3",
|
|
4
4
|
"description": "Unified search aggregator — 12 providers (Google, SerpAPI, Exa, Perplexity, Twitter, Reddit, YouTube, Brave, Bing, Hacker News, GitHub, arXiv) + YouTube transcription. CLI + MCP + REST API + Dashboard.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|