@hasna/cloud 0.1.39 → 0.1.40

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 CHANGED
@@ -11849,8 +11849,15 @@ function getConnectionString(dbName) {
11849
11849
  if (password === undefined || password === "") {
11850
11850
  throw new Error(`RDS password not set. Export ${password_env} in your shell or add it to ~/.secrets/hasna/rds/live.env`);
11851
11851
  }
11852
- const sslParam = ssl ? "?sslmode=require" : "";
11853
- return `postgres://${username}:${encodeURIComponent(password)}@${host}:${port}/${dbName}${sslParam}`;
11852
+ const url = new URL("postgres:" + "//placeholder");
11853
+ url.hostname = host;
11854
+ url.port = String(port);
11855
+ url.username = username;
11856
+ url.password = password;
11857
+ url.pathname = `/${dbName}`;
11858
+ if (ssl)
11859
+ url.searchParams.set("sslmode", "require");
11860
+ return url.toString();
11854
11861
  }
11855
11862
  function createDatabase(options) {
11856
11863
  const config = getCloudConfig();
@@ -11891,7 +11898,7 @@ var init_config = __esm(() => {
11891
11898
  password_env: exports_external.string().default("HASNA_RDS_PASSWORD"),
11892
11899
  ssl: exports_external.boolean().default(true)
11893
11900
  }).default({}),
11894
- mode: exports_external.enum(["local", "cloud", "hybrid"]).default("hybrid"),
11901
+ mode: exports_external.enum(["local", "cloud", "hybrid"]).default("local"),
11895
11902
  auto_sync_interval_minutes: exports_external.number().default(0),
11896
11903
  feedback_endpoint: exports_external.string().default("https://feedback.hasna.com/api/v1/feedback"),
11897
11904
  sync: exports_external.object({
@@ -15242,7 +15249,7 @@ var CloudConfigSchema2 = exports_external.object({
15242
15249
  password_env: exports_external.string().default("HASNA_RDS_PASSWORD"),
15243
15250
  ssl: exports_external.boolean().default(true)
15244
15251
  }).default({}),
15245
- mode: exports_external.enum(["local", "cloud", "hybrid"]).default("hybrid"),
15252
+ mode: exports_external.enum(["local", "cloud", "hybrid"]).default("local"),
15246
15253
  auto_sync_interval_minutes: exports_external.number().default(0),
15247
15254
  feedback_endpoint: exports_external.string().default("https://feedback.hasna.com/api/v1/feedback"),
15248
15255
  sync: exports_external.object({
@@ -15273,8 +15280,15 @@ function getConnectionString2(dbName) {
15273
15280
  if (password === undefined || password === "") {
15274
15281
  throw new Error(`RDS password not set. Export ${password_env} in your shell or add it to ~/.secrets/hasna/rds/live.env`);
15275
15282
  }
15276
- const sslParam = ssl ? "?sslmode=require" : "";
15277
- return `postgres://${username}:${encodeURIComponent(password)}@${host}:${port}/${dbName}${sslParam}`;
15283
+ const url = new URL("postgres:" + "//placeholder");
15284
+ url.hostname = host;
15285
+ url.port = String(port);
15286
+ url.username = username;
15287
+ url.password = password;
15288
+ url.pathname = `/${dbName}`;
15289
+ if (ssl)
15290
+ url.searchParams.set("sslmode", "require");
15291
+ return url.toString();
15278
15292
  }
15279
15293
 
15280
15294
  // src/adapter.ts
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,QAAA,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwBV,CAAC;AAMf,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqB5B,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAC5D,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AASnE,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAMD,wBAAgB,cAAc,IAAI,WAAW,CAU5C;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAGzD;AAMD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAoB1D;AAQD,OAAO,EAEL,KAAK,qBAAqB,EAC3B,MAAM,eAAe,CAAC;AAEvB,MAAM,WAAW,qBAAqB;IACpC,qEAAqE;IACrE,OAAO,EAAE,MAAM,CAAC;IAChB,iCAAiC;IACjC,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,QAAQ,CAAC;IACpC,qCAAqC;IACrC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yCAAyC;IACzC,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,qBAAqB,GAC7B,qBAAqB,CAavB"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,QAAA,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwBV,CAAC;AAMf,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAqB5B,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAC5D,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AASnE,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAMD,wBAAgB,cAAc,IAAI,WAAW,CAU5C;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAGzD;AAMD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CA0B1D;AAQD,OAAO,EAEL,KAAK,qBAAqB,EAC3B,MAAM,eAAe,CAAC;AAEvB,MAAM,WAAW,qBAAqB;IACpC,qEAAqE;IACrE,OAAO,EAAE,MAAM,CAAC;IAChB,iCAAiC;IACjC,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,QAAQ,CAAC;IACpC,qCAAqC;IACrC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yCAAyC;IACzC,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,qBAAqB,GAC7B,qBAAqB,CAavB"}
package/dist/index.js CHANGED
@@ -9827,8 +9827,15 @@ function getConnectionString(dbName) {
9827
9827
  if (password === undefined || password === "") {
9828
9828
  throw new Error(`RDS password not set. Export ${password_env} in your shell or add it to ~/.secrets/hasna/rds/live.env`);
9829
9829
  }
9830
- const sslParam = ssl ? "?sslmode=require" : "";
9831
- return `postgres://${username}:${encodeURIComponent(password)}@${host}:${port}/${dbName}${sslParam}`;
9830
+ const url = new URL("postgres:" + "//placeholder");
9831
+ url.hostname = host;
9832
+ url.port = String(port);
9833
+ url.username = username;
9834
+ url.password = password;
9835
+ url.pathname = `/${dbName}`;
9836
+ if (ssl)
9837
+ url.searchParams.set("sslmode", "require");
9838
+ return url.toString();
9832
9839
  }
9833
9840
  function createDatabase(options) {
9834
9841
  const config = getCloudConfig();
@@ -9869,7 +9876,7 @@ var init_config = __esm(() => {
9869
9876
  password_env: exports_external.string().default("HASNA_RDS_PASSWORD"),
9870
9877
  ssl: exports_external.boolean().default(true)
9871
9878
  }).default({}),
9872
- mode: exports_external.enum(["local", "cloud", "hybrid"]).default("hybrid"),
9879
+ mode: exports_external.enum(["local", "cloud", "hybrid"]).default("local"),
9873
9880
  auto_sync_interval_minutes: exports_external.number().default(0),
9874
9881
  feedback_endpoint: exports_external.string().default("https://feedback.hasna.com/api/v1/feedback"),
9875
9882
  sync: exports_external.object({
package/dist/mcp/bin.js CHANGED
@@ -16257,8 +16257,15 @@ function getConnectionString(dbName) {
16257
16257
  if (password === undefined || password === "") {
16258
16258
  throw new Error(`RDS password not set. Export ${password_env} in your shell or add it to ~/.secrets/hasna/rds/live.env`);
16259
16259
  }
16260
- const sslParam = ssl ? "?sslmode=require" : "";
16261
- return `postgres://${username}:${encodeURIComponent(password)}@${host}:${port}/${dbName}${sslParam}`;
16260
+ const url = new URL("postgres:" + "//placeholder");
16261
+ url.hostname = host;
16262
+ url.port = String(port);
16263
+ url.username = username;
16264
+ url.password = password;
16265
+ url.pathname = `/${dbName}`;
16266
+ if (ssl)
16267
+ url.searchParams.set("sslmode", "require");
16268
+ return url.toString();
16262
16269
  }
16263
16270
  function createDatabase(options) {
16264
16271
  const config2 = getCloudConfig();
@@ -16299,7 +16306,7 @@ var init_config = __esm(() => {
16299
16306
  password_env: exports_external.string().default("HASNA_RDS_PASSWORD"),
16300
16307
  ssl: exports_external.boolean().default(true)
16301
16308
  }).default({}),
16302
- mode: exports_external.enum(["local", "cloud", "hybrid"]).default("hybrid"),
16309
+ mode: exports_external.enum(["local", "cloud", "hybrid"]).default("local"),
16303
16310
  auto_sync_interval_minutes: exports_external.number().default(0),
16304
16311
  feedback_endpoint: exports_external.string().default("https://feedback.hasna.com/api/v1/feedback"),
16305
16312
  sync: exports_external.object({
package/dist/mcp/index.js CHANGED
@@ -16257,8 +16257,15 @@ function getConnectionString2(dbName) {
16257
16257
  if (password === undefined || password === "") {
16258
16258
  throw new Error(`RDS password not set. Export ${password_env} in your shell or add it to ~/.secrets/hasna/rds/live.env`);
16259
16259
  }
16260
- const sslParam = ssl ? "?sslmode=require" : "";
16261
- return `postgres://${username}:${encodeURIComponent(password)}@${host}:${port}/${dbName}${sslParam}`;
16260
+ const url = new URL("postgres:" + "//placeholder");
16261
+ url.hostname = host;
16262
+ url.port = String(port);
16263
+ url.username = username;
16264
+ url.password = password;
16265
+ url.pathname = `/${dbName}`;
16266
+ if (ssl)
16267
+ url.searchParams.set("sslmode", "require");
16268
+ return url.toString();
16262
16269
  }
16263
16270
  function createDatabase2(options) {
16264
16271
  const config2 = getCloudConfig2();
@@ -16299,7 +16306,7 @@ var init_config = __esm(() => {
16299
16306
  password_env: exports_external.string().default("HASNA_RDS_PASSWORD"),
16300
16307
  ssl: exports_external.boolean().default(true)
16301
16308
  }).default({}),
16302
- mode: exports_external.enum(["local", "cloud", "hybrid"]).default("hybrid"),
16309
+ mode: exports_external.enum(["local", "cloud", "hybrid"]).default("local"),
16303
16310
  auto_sync_interval_minutes: exports_external.number().default(0),
16304
16311
  feedback_endpoint: exports_external.string().default("https://feedback.hasna.com/api/v1/feedback"),
16305
16312
  sync: exports_external.object({
@@ -25584,7 +25591,7 @@ var CloudConfigSchema = exports_external.object({
25584
25591
  password_env: exports_external.string().default("HASNA_RDS_PASSWORD"),
25585
25592
  ssl: exports_external.boolean().default(true)
25586
25593
  }).default({}),
25587
- mode: exports_external.enum(["local", "cloud", "hybrid"]).default("hybrid"),
25594
+ mode: exports_external.enum(["local", "cloud", "hybrid"]).default("local"),
25588
25595
  auto_sync_interval_minutes: exports_external.number().default(0),
25589
25596
  feedback_endpoint: exports_external.string().default("https://feedback.hasna.com/api/v1/feedback"),
25590
25597
  sync: exports_external.object({
@@ -25615,8 +25622,15 @@ function getConnectionString(dbName) {
25615
25622
  if (password === undefined || password === "") {
25616
25623
  throw new Error(`RDS password not set. Export ${password_env} in your shell or add it to ~/.secrets/hasna/rds/live.env`);
25617
25624
  }
25618
- const sslParam = ssl ? "?sslmode=require" : "";
25619
- return `postgres://${username}:${encodeURIComponent(password)}@${host}:${port}/${dbName}${sslParam}`;
25625
+ const url = new URL("postgres:" + "//placeholder");
25626
+ url.hostname = host;
25627
+ url.port = String(port);
25628
+ url.username = username;
25629
+ url.password = password;
25630
+ url.pathname = `/${dbName}`;
25631
+ if (ssl)
25632
+ url.searchParams.set("sslmode", "require");
25633
+ return url.toString();
25620
25634
  }
25621
25635
  function createDatabase(options) {
25622
25636
  const config2 = getCloudConfig();
@@ -9252,7 +9252,7 @@ var CloudConfigSchema = exports_external.object({
9252
9252
  password_env: exports_external.string().default("HASNA_RDS_PASSWORD"),
9253
9253
  ssl: exports_external.boolean().default(true)
9254
9254
  }).default({}),
9255
- mode: exports_external.enum(["local", "cloud", "hybrid"]).default("hybrid"),
9255
+ mode: exports_external.enum(["local", "cloud", "hybrid"]).default("local"),
9256
9256
  auto_sync_interval_minutes: exports_external.number().default(0),
9257
9257
  feedback_endpoint: exports_external.string().default("https://feedback.hasna.com/api/v1/feedback"),
9258
9258
  sync: exports_external.object({
@@ -9283,8 +9283,15 @@ function getConnectionString(dbName) {
9283
9283
  if (password === undefined || password === "") {
9284
9284
  throw new Error(`RDS password not set. Export ${password_env} in your shell or add it to ~/.secrets/hasna/rds/live.env`);
9285
9285
  }
9286
- const sslParam = ssl ? "?sslmode=require" : "";
9287
- return `postgres://${username}:${encodeURIComponent(password)}@${host}:${port}/${dbName}${sslParam}`;
9286
+ const url = new URL("postgres:" + "//placeholder");
9287
+ url.hostname = host;
9288
+ url.port = String(port);
9289
+ url.username = username;
9290
+ url.password = password;
9291
+ url.pathname = `/${dbName}`;
9292
+ if (ssl)
9293
+ url.searchParams.set("sslmode", "require");
9294
+ return url.toString();
9288
9295
  }
9289
9296
 
9290
9297
  // src/sync-incremental.ts
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hasna/cloud",
3
- "version": "0.1.39",
3
+ "version": "0.1.40",
4
4
  "description": "Shared cloud infrastructure — database adapter (SQLite + PostgreSQL), sync engine, feedback system, unified dotfile config",
5
5
  "license": "Apache-2.0",
6
6
  "type": "module",
@@ -24,8 +24,7 @@
24
24
  "build": "bun build src/index.ts --outdir dist --target node && bun build src/cli/index.ts --outdir dist/cli --target node && bun build src/mcp/index.ts --outdir dist/mcp --target node && bun build src/mcp/bin.ts --outfile dist/mcp/bin.js --target node && chmod +x dist/mcp/bin.js && bun build src/scheduled-sync.ts --outdir dist --target node && bun run build:types",
25
25
  "build:types": "tsc --emitDeclarationOnly --declaration --outDir dist",
26
26
  "test": "bun test",
27
- "prepublishOnly": "bun run build",
28
- "postinstall": "mkdir -p $HOME/.hasna/cloud 2>/dev/null || true; test -f $HOME/.hasna/cloud/config.json || printf '{\"rds\":{\"host\":\"hasnaxyz-prod-opensource.c4limg0qgqvk.us-east-1.rds.amazonaws.com\",\"port\":5432,\"username\":\"\",\"password_env\":\"HASNA_RDS_PASSWORD\",\"ssl\":true},\"mode\":\"local\",\"feedback_endpoint\":\"https://feedback.hasna.com/api/v1/feedback\",\"auto_sync_interval_minutes\":0,\"sync\":{\"schedule_minutes\":0}}\\n' > $HOME/.hasna/cloud/config.json 2>/dev/null || true"
27
+ "prepublishOnly": "bun run build"
29
28
  },
30
29
  "publishConfig": {
31
30
  "registry": "https://registry.npmjs.org",