@heronlabs/terminal-cli 2.3.5 → 2.4.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/README.md CHANGED
@@ -138,7 +138,7 @@ All configuration comes from environment variables (see [.env.example](./.env.ex
138
138
 
139
139
  | Variable | Required | Description |
140
140
  |---|---|---|
141
- | `DB_URL` | ✅ | Connection URL (`postgres://`/`mysql://user:pass@host:port/dbname`) or an AWS SSM Parameter Store ARN resolved via [`@heronlabs/env-ssm`](https://www.npmjs.com/package/@heronlabs/env-ssm) |
141
+ | `DATABASE_URL` | ✅ | Connection URL (`postgres://`/`mysql://user:pass@host:port/dbname`) or an AWS SSM Parameter Store ARN resolved via [`@heronlabs/env-ssm`](https://www.npmjs.com/package/@heronlabs/env-ssm) |
142
142
  | `AWS_S3_BUCKET_NAME` | for S3 | Destination bucket for remote backups |
143
143
  | `AWS_REGION` | for S3 | AWS region |
144
144
  | `AWS_ACCESS_KEY_ID` | for S3 | AWS credentials (or use an instance role) |
@@ -1 +1 @@
1
- {"version":3,"file":"database-url-service.d.ts","sourceRoot":"","sources":["../../../../../src/infrastructure/environment/services/database-url-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAC,MAAM,oBAAoB,CAAC;AAGjD,qBACa,kBAAkB;IACjB,OAAO,CAAC,QAAQ,CAAC,gBAAgB;gBAAhB,gBAAgB,EAAE,aAAa;IAE5D,OAAO,CAAC,UAAU;IAgBlB,OAAO,CAAC,SAAS;IAajB,OAAO,CAAC,eAAe;IAOjB,KAAK;;;;;;;;;;;;;;;CAkCZ"}
1
+ {"version":3,"file":"database-url-service.d.ts","sourceRoot":"","sources":["../../../../../src/infrastructure/environment/services/database-url-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAC,MAAM,oBAAoB,CAAC;AAGjD,qBACa,kBAAkB;IACjB,OAAO,CAAC,QAAQ,CAAC,gBAAgB;gBAAhB,gBAAgB,EAAE,aAAa;IAE5D,OAAO,CAAC,UAAU;IAgBlB,OAAO,CAAC,SAAS;IAajB,OAAO,CAAC,eAAe;IAOjB,KAAK;;;;;;;;;;;;;;;CAsCZ"}
@@ -42,7 +42,7 @@ let DatabaseUrlService = class DatabaseUrlService {
42
42
  }
43
43
  async parse() {
44
44
  try {
45
- const databaseUrl = await this.ssmConfigService.getOrThrow('DB_URL');
45
+ const databaseUrl = await this.ssmConfigService.getOrThrow('DATABASE_URL');
46
46
  const [, rest = ''] = this.splitFirst(databaseUrl, '://');
47
47
  const [userinfo, remainder] = this.splitLast(rest, '@');
48
48
  const [hostport, rawName = ''] = this.splitFirst(remainder, '/');
@@ -54,7 +54,7 @@ let DatabaseUrlService = class DatabaseUrlService {
54
54
  if (missing.length > 0) {
55
55
  return {
56
56
  ok: false,
57
- error: new Error(`Invalid DB_URL: missing ${missing.join(', ')}`),
57
+ error: new Error(`Invalid DATABASE_URL: missing ${missing.join(', ')}`),
58
58
  };
59
59
  }
60
60
  return { ok: true, connection };
@@ -62,7 +62,7 @@ let DatabaseUrlService = class DatabaseUrlService {
62
62
  catch (error) {
63
63
  return {
64
64
  ok: false,
65
- error: error instanceof Error ? error : new Error('Invalid DB_URL'),
65
+ error: error instanceof Error ? error : new Error('Invalid DATABASE_URL'),
66
66
  };
67
67
  }
68
68
  }
@@ -1 +1 @@
1
- {"version":3,"file":"database-url-service.js","sourceRoot":"","sources":["../../../../../src/infrastructure/environment/services/database-url-service.ts"],"names":[],"mappings":"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","sourcesContent":["import {ConfigService} from '@heronlabs/env-ssm';\nimport {Injectable} from '@nestjs/common';\n\n@Injectable()\nexport class DatabaseUrlService {\n constructor(private readonly ssmConfigService: ConfigService) {}\n\n private splitFirst(\n value: string,\n delimiter: string,\n ): [string, string | undefined] {\n const index = value.indexOf(delimiter);\n\n if (index === -1) {\n return [value, undefined];\n }\n\n const head = value.slice(0, index);\n const tail = value.slice(index + delimiter.length);\n\n return [head, tail];\n }\n\n private splitLast(value: string, delimiter: string): [string, string] {\n const index = value.lastIndexOf(delimiter);\n\n if (index === -1) {\n return ['', value];\n }\n\n const head = value.slice(0, index);\n const tail = value.slice(index + delimiter.length);\n\n return [head, tail];\n }\n\n private stripNameSuffix(name: string): string {\n const [withoutFragment] = this.splitFirst(name, '#');\n const [withoutQuery] = this.splitFirst(withoutFragment, '?');\n\n return withoutQuery;\n }\n\n async parse() {\n try {\n const databaseUrl = await this.ssmConfigService.getOrThrow('DB_URL');\n\n const [, rest = ''] = this.splitFirst(databaseUrl, '://');\n\n const [userinfo, remainder] = this.splitLast(rest, '@');\n const [hostport, rawName = ''] = this.splitFirst(remainder, '/');\n const [user, password = ''] = this.splitFirst(userinfo, ':');\n const [host, port = ''] = this.splitFirst(hostport, ':');\n\n const name = this.stripNameSuffix(rawName);\n\n const connection = {host, port, name, user, password};\n\n const missing = (['host', 'name', 'user'] as const).filter(\n field => connection[field] === '',\n );\n\n if (missing.length > 0) {\n return {\n ok: false as const,\n error: new Error(`Invalid DB_URL: missing ${missing.join(', ')}`),\n };\n }\n\n return {ok: true as const, connection};\n } catch (error) {\n return {\n ok: false as const,\n error: error instanceof Error ? error : new Error('Invalid DB_URL'),\n };\n }\n }\n}\n"]}
1
+ {"version":3,"file":"database-url-service.js","sourceRoot":"","sources":["../../../../../src/infrastructure/environment/services/database-url-service.ts"],"names":[],"mappings":"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","sourcesContent":["import {ConfigService} from '@heronlabs/env-ssm';\nimport {Injectable} from '@nestjs/common';\n\n@Injectable()\nexport class DatabaseUrlService {\n constructor(private readonly ssmConfigService: ConfigService) {}\n\n private splitFirst(\n value: string,\n delimiter: string,\n ): [string, string | undefined] {\n const index = value.indexOf(delimiter);\n\n if (index === -1) {\n return [value, undefined];\n }\n\n const head = value.slice(0, index);\n const tail = value.slice(index + delimiter.length);\n\n return [head, tail];\n }\n\n private splitLast(value: string, delimiter: string): [string, string] {\n const index = value.lastIndexOf(delimiter);\n\n if (index === -1) {\n return ['', value];\n }\n\n const head = value.slice(0, index);\n const tail = value.slice(index + delimiter.length);\n\n return [head, tail];\n }\n\n private stripNameSuffix(name: string): string {\n const [withoutFragment] = this.splitFirst(name, '#');\n const [withoutQuery] = this.splitFirst(withoutFragment, '?');\n\n return withoutQuery;\n }\n\n async parse() {\n try {\n const databaseUrl =\n await this.ssmConfigService.getOrThrow('DATABASE_URL');\n\n const [, rest = ''] = this.splitFirst(databaseUrl, '://');\n\n const [userinfo, remainder] = this.splitLast(rest, '@');\n const [hostport, rawName = ''] = this.splitFirst(remainder, '/');\n const [user, password = ''] = this.splitFirst(userinfo, ':');\n const [host, port = ''] = this.splitFirst(hostport, ':');\n\n const name = this.stripNameSuffix(rawName);\n\n const connection = {host, port, name, user, password};\n\n const missing = (['host', 'name', 'user'] as const).filter(\n field => connection[field] === '',\n );\n\n if (missing.length > 0) {\n return {\n ok: false as const,\n error: new Error(\n `Invalid DATABASE_URL: missing ${missing.join(', ')}`,\n ),\n };\n }\n\n return {ok: true as const, connection};\n } catch (error) {\n return {\n ok: false as const,\n error:\n error instanceof Error ? error : new Error('Invalid DATABASE_URL'),\n };\n }\n }\n}\n"]}