@nicnocquee/dataqueue 1.20.0 → 1.22.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/cli.cjs CHANGED
@@ -36,6 +36,12 @@ function runCli(argv, {
36
36
  log(
37
37
  " - The PG_DATAQUEUE_DATABASE environment variable must be set to your Postgres connection string."
38
38
  );
39
+ log(
40
+ " - For managed Postgres (e.g., DigitalOcean) with SSL, set PGSSLMODE=require and PGSSLROOTCERT to your CA .crt file."
41
+ );
42
+ log(
43
+ " Example: PGSSLMODE=require NODE_EXTRA_CA_CERTS=/absolute/path/to/ca.crt PG_DATAQUEUE_DATABASE=... npx dataqueue-cli migrate"
44
+ );
39
45
  exit(1);
40
46
  }
41
47
  if (command === "migrate") {
package/dist/cli.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cli.ts"],"names":["__filename","fileURLToPath","__dirname","path","spawnSync"],"mappings":";;;;;;;;;;;;AAKA,IAAMA,YAAA,GAAaC,iBAAA,CAAc,yPAAe,CAAA;AAChD,IAAMC,WAAA,GAAYC,qBAAA,CAAK,OAAA,CAAQH,YAAU,CAAA;AAUlC,SAAS,OACd,IAAA,EACA;AAAA,EACE,MAAM,OAAA,CAAQ,GAAA;AAAA,EACd,IAAA,GAAO,CAAC,IAAA,KAAiB,OAAA,CAAQ,KAAK,IAAI,CAAA;AAAA,EAC1C,aAAA,GAAgBI,uBAAA;AAAA,EAChB,aAAA,GAAgBD,qBAAA,CAAK,IAAA,CAAKD,WAAA,EAAW,eAAe;AACtD,CAAA,GAAa,EAAC,EACR;AACN,EAAA,MAAM,KAAK,OAAA,EAAS,GAAG,QAAQ,CAAA,GAAI,IAAA;AAEnC,EAAA,SAAS,UAAA,GAAa;AACpB,IAAA,GAAA;AAAA,MACE;AAAA,KACF;AACA,IAAA,GAAA,CAAI,EAAE,CAAA;AACN,IAAA,GAAA,CAAI,UAAU,CAAA;AACd,IAAA,GAAA;AAAA,MACE;AAAA,KACF;AACA,IAAA,GAAA;AAAA,MACE;AAAA,KACF;AACA,IAAA,GAAA,CAAI,EAAE,CAAA;AACN,IAAA,GAAA,CAAI,QAAQ,CAAA;AACZ,IAAA,GAAA;AAAA,MACE;AAAA,KACF;AACA,IAAA,IAAA,CAAK,CAAC,CAAA;AAAA;AAGR,EAAA,IAAI,YAAY,SAAA,EAAW;AAEzB,IAAA,IAAI,YAAsB,EAAC;AAC3B,IAAA,MAAM,MAAA,GAAS,QAAA,CAAS,OAAA,CAAQ,IAAI,CAAA;AACpC,IAAA,MAAM,WAAA,GAAc,QAAA,CAAS,OAAA,CAAQ,UAAU,CAAA;AAC/C,IAAA,IAAI,MAAA,KAAW,EAAA,IAAM,QAAA,CAAS,MAAA,GAAS,CAAC,CAAA,EAAG;AACzC,MAAA,SAAA,GAAY,CAAC,IAAA,EAAM,QAAA,CAAS,MAAA,GAAS,CAAC,GAAG,iBAAiB,CAAA;AAC1D,MAAA,QAAA,CAAS,MAAA,CAAO,QAAQ,CAAC,CAAA;AAAA,eAChB,WAAA,KAAgB,EAAA,IAAM,QAAA,CAAS,WAAA,GAAc,CAAC,CAAA,EAAG;AAC1D,MAAA,SAAA,GAAY,CAAC,IAAA,EAAM,QAAA,CAAS,WAAA,GAAc,CAAC,GAAG,iBAAiB,CAAA;AAC/D,MAAA,QAAA,CAAS,MAAA,CAAO,aAAa,CAAC,CAAA;AAAA;AAIhC,IAAA,IAAI,aAAuB,EAAC;AAC5B,IAAA,MAAM,YAAA,GAAe,QAAA,CAAS,OAAA,CAAQ,WAAW,CAAA;AACjD,IAAA,IAAI,YAAA,KAAiB,EAAA,IAAM,QAAA,CAAS,YAAA,GAAe,CAAC,CAAA,EAAG;AACrD,MAAA,UAAA,GAAa,CAAC,WAAA,EAAa,QAAA,CAAS,YAAA,GAAe,CAAC,CAAC,CAAA;AAAA;AAGvD,IAAA,MAAM,MAAA,GAAgC,aAAA;AAAA,MACpC,KAAA;AAAA,MACA;AAAA,QACE,iBAAA;AAAA,QACA,IAAA;AAAA,QACA,IAAA;AAAA,QACA,yBAAA;AAAA,QACA,IAAA;AAAA,QACA,uBAAA;AAAA,QACA,IAAA;AAAA,QACA,aAAA;AAAA,QACA,GAAG,SAAA;AAAA,QACH,GAAG,UAAA;AAAA,QACH,GAAG;AAAA,OACL;AAAA,MACA,EAAE,OAAO,SAAA;AAAU,KACrB;AACA,IAAA,IAAA,CAAK,MAAA,CAAO,UAAU,CAAC,CAAA;AAAA,GACzB,MAAO;AACL,IAAA,UAAA,EAAW;AAAA;AAEf","file":"cli.cjs","sourcesContent":["// Testable CLI logic for dataqueue\nimport { spawnSync, SpawnSyncReturns } from 'child_process';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\n\nexport interface CliDeps {\n log?: (...args: any[]) => void;\n error?: (...args: any[]) => void;\n exit?: (code: number) => void;\n spawnSyncImpl?: (...args: any[]) => SpawnSyncReturns<any>;\n migrationsDir?: string;\n}\n\nexport function runCli(\n argv: string[],\n {\n log = console.log,\n exit = (code: number) => process.exit(code),\n spawnSyncImpl = spawnSync,\n migrationsDir = path.join(__dirname, '../migrations'),\n }: CliDeps = {},\n): void {\n const [, , command, ...restArgs] = argv;\n\n function printUsage() {\n log(\n 'Usage: dataqueue-cli migrate [--envPath <path>] [-s <schema> | --schema <schema>]',\n );\n log('');\n log('Options:');\n log(\n ' --envPath <path> Path to a .env file to load environment variables (passed to node-pg-migrate)',\n );\n log(\n ' -s, --schema <schema> Set the schema to use (passed to node-pg-migrate)',\n );\n log('');\n log('Notes:');\n log(\n ' - The PG_DATAQUEUE_DATABASE environment variable must be set to your Postgres connection string.',\n );\n exit(1);\n }\n\n if (command === 'migrate') {\n // Support for -s or --schema argument\n let schemaArg: string[] = [];\n const sIndex = restArgs.indexOf('-s');\n const schemaIndex = restArgs.indexOf('--schema');\n if (sIndex !== -1 && restArgs[sIndex + 1]) {\n schemaArg = ['-s', restArgs[sIndex + 1], '--create-schema'];\n restArgs.splice(sIndex, 2);\n } else if (schemaIndex !== -1 && restArgs[schemaIndex + 1]) {\n schemaArg = ['-s', restArgs[schemaIndex + 1], '--create-schema'];\n restArgs.splice(schemaIndex, 2);\n }\n\n // Support for --envPath argument\n let envPathArg: string[] = [];\n const envPathIndex = restArgs.indexOf('--envPath');\n if (envPathIndex !== -1 && restArgs[envPathIndex + 1]) {\n envPathArg = ['--envPath', restArgs[envPathIndex + 1]];\n }\n\n const result: SpawnSyncReturns<any> = spawnSyncImpl(\n 'npx',\n [\n 'node-pg-migrate',\n 'up',\n '-t',\n 'dataqueuedev_migrations',\n '-d',\n 'PG_DATAQUEUE_DATABASE',\n '-m',\n migrationsDir,\n ...schemaArg,\n ...envPathArg,\n ...restArgs,\n ],\n { stdio: 'inherit' },\n );\n exit(result.status ?? 1);\n } else {\n printUsage();\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/cli.ts"],"names":["__filename","fileURLToPath","__dirname","path","spawnSync"],"mappings":";;;;;;;;;;;;AAKA,IAAMA,YAAA,GAAaC,iBAAA,CAAc,yPAAe,CAAA;AAChD,IAAMC,WAAA,GAAYC,qBAAA,CAAK,OAAA,CAAQH,YAAU,CAAA;AAUlC,SAAS,OACd,IAAA,EACA;AAAA,EACE,MAAM,OAAA,CAAQ,GAAA;AAAA,EACd,IAAA,GAAO,CAAC,IAAA,KAAiB,OAAA,CAAQ,KAAK,IAAI,CAAA;AAAA,EAC1C,aAAA,GAAgBI,uBAAA;AAAA,EAChB,aAAA,GAAgBD,qBAAA,CAAK,IAAA,CAAKD,WAAA,EAAW,eAAe;AACtD,CAAA,GAAa,EAAC,EACR;AACN,EAAA,MAAM,KAAK,OAAA,EAAS,GAAG,QAAQ,CAAA,GAAI,IAAA;AAEnC,EAAA,SAAS,UAAA,GAAa;AACpB,IAAA,GAAA;AAAA,MACE;AAAA,KACF;AACA,IAAA,GAAA,CAAI,EAAE,CAAA;AACN,IAAA,GAAA,CAAI,UAAU,CAAA;AACd,IAAA,GAAA;AAAA,MACE;AAAA,KACF;AACA,IAAA,GAAA;AAAA,MACE;AAAA,KACF;AACA,IAAA,GAAA,CAAI,EAAE,CAAA;AACN,IAAA,GAAA,CAAI,QAAQ,CAAA;AACZ,IAAA,GAAA;AAAA,MACE;AAAA,KACF;AACA,IAAA,GAAA;AAAA,MACE;AAAA,KACF;AACA,IAAA,GAAA;AAAA,MACE;AAAA,KACF;AACA,IAAA,IAAA,CAAK,CAAC,CAAA;AAAA;AAGR,EAAA,IAAI,YAAY,SAAA,EAAW;AAEzB,IAAA,IAAI,YAAsB,EAAC;AAC3B,IAAA,MAAM,MAAA,GAAS,QAAA,CAAS,OAAA,CAAQ,IAAI,CAAA;AACpC,IAAA,MAAM,WAAA,GAAc,QAAA,CAAS,OAAA,CAAQ,UAAU,CAAA;AAC/C,IAAA,IAAI,MAAA,KAAW,EAAA,IAAM,QAAA,CAAS,MAAA,GAAS,CAAC,CAAA,EAAG;AACzC,MAAA,SAAA,GAAY,CAAC,IAAA,EAAM,QAAA,CAAS,MAAA,GAAS,CAAC,GAAG,iBAAiB,CAAA;AAC1D,MAAA,QAAA,CAAS,MAAA,CAAO,QAAQ,CAAC,CAAA;AAAA,eAChB,WAAA,KAAgB,EAAA,IAAM,QAAA,CAAS,WAAA,GAAc,CAAC,CAAA,EAAG;AAC1D,MAAA,SAAA,GAAY,CAAC,IAAA,EAAM,QAAA,CAAS,WAAA,GAAc,CAAC,GAAG,iBAAiB,CAAA;AAC/D,MAAA,QAAA,CAAS,MAAA,CAAO,aAAa,CAAC,CAAA;AAAA;AAIhC,IAAA,IAAI,aAAuB,EAAC;AAC5B,IAAA,MAAM,YAAA,GAAe,QAAA,CAAS,OAAA,CAAQ,WAAW,CAAA;AACjD,IAAA,IAAI,YAAA,KAAiB,EAAA,IAAM,QAAA,CAAS,YAAA,GAAe,CAAC,CAAA,EAAG;AACrD,MAAA,UAAA,GAAa,CAAC,WAAA,EAAa,QAAA,CAAS,YAAA,GAAe,CAAC,CAAC,CAAA;AAAA;AAGvD,IAAA,MAAM,MAAA,GAAgC,aAAA;AAAA,MACpC,KAAA;AAAA,MACA;AAAA,QACE,iBAAA;AAAA,QACA,IAAA;AAAA,QACA,IAAA;AAAA,QACA,yBAAA;AAAA,QACA,IAAA;AAAA,QACA,uBAAA;AAAA,QACA,IAAA;AAAA,QACA,aAAA;AAAA,QACA,GAAG,SAAA;AAAA,QACH,GAAG,UAAA;AAAA,QACH,GAAG;AAAA,OACL;AAAA,MACA,EAAE,OAAO,SAAA;AAAU,KACrB;AACA,IAAA,IAAA,CAAK,MAAA,CAAO,UAAU,CAAC,CAAA;AAAA,GACzB,MAAO;AACL,IAAA,UAAA,EAAW;AAAA;AAEf","file":"cli.cjs","sourcesContent":["// Testable CLI logic for dataqueue\nimport { spawnSync, SpawnSyncReturns } from 'child_process';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\n\nexport interface CliDeps {\n log?: (...args: any[]) => void;\n error?: (...args: any[]) => void;\n exit?: (code: number) => void;\n spawnSyncImpl?: (...args: any[]) => SpawnSyncReturns<any>;\n migrationsDir?: string;\n}\n\nexport function runCli(\n argv: string[],\n {\n log = console.log,\n exit = (code: number) => process.exit(code),\n spawnSyncImpl = spawnSync,\n migrationsDir = path.join(__dirname, '../migrations'),\n }: CliDeps = {},\n): void {\n const [, , command, ...restArgs] = argv;\n\n function printUsage() {\n log(\n 'Usage: dataqueue-cli migrate [--envPath <path>] [-s <schema> | --schema <schema>]',\n );\n log('');\n log('Options:');\n log(\n ' --envPath <path> Path to a .env file to load environment variables (passed to node-pg-migrate)',\n );\n log(\n ' -s, --schema <schema> Set the schema to use (passed to node-pg-migrate)',\n );\n log('');\n log('Notes:');\n log(\n ' - The PG_DATAQUEUE_DATABASE environment variable must be set to your Postgres connection string.',\n );\n log(\n ' - For managed Postgres (e.g., DigitalOcean) with SSL, set PGSSLMODE=require and PGSSLROOTCERT to your CA .crt file.',\n );\n log(\n ' Example: PGSSLMODE=require NODE_EXTRA_CA_CERTS=/absolute/path/to/ca.crt PG_DATAQUEUE_DATABASE=... npx dataqueue-cli migrate',\n );\n exit(1);\n }\n\n if (command === 'migrate') {\n // Support for -s or --schema argument\n let schemaArg: string[] = [];\n const sIndex = restArgs.indexOf('-s');\n const schemaIndex = restArgs.indexOf('--schema');\n if (sIndex !== -1 && restArgs[sIndex + 1]) {\n schemaArg = ['-s', restArgs[sIndex + 1], '--create-schema'];\n restArgs.splice(sIndex, 2);\n } else if (schemaIndex !== -1 && restArgs[schemaIndex + 1]) {\n schemaArg = ['-s', restArgs[schemaIndex + 1], '--create-schema'];\n restArgs.splice(schemaIndex, 2);\n }\n\n // Support for --envPath argument\n let envPathArg: string[] = [];\n const envPathIndex = restArgs.indexOf('--envPath');\n if (envPathIndex !== -1 && restArgs[envPathIndex + 1]) {\n envPathArg = ['--envPath', restArgs[envPathIndex + 1]];\n }\n\n const result: SpawnSyncReturns<any> = spawnSyncImpl(\n 'npx',\n [\n 'node-pg-migrate',\n 'up',\n '-t',\n 'dataqueuedev_migrations',\n '-d',\n 'PG_DATAQUEUE_DATABASE',\n '-m',\n migrationsDir,\n ...schemaArg,\n ...envPathArg,\n ...restArgs,\n ],\n { stdio: 'inherit' },\n );\n exit(result.status ?? 1);\n } else {\n printUsage();\n }\n}\n"]}
package/dist/cli.js CHANGED
@@ -29,6 +29,12 @@ function runCli(argv, {
29
29
  log(
30
30
  " - The PG_DATAQUEUE_DATABASE environment variable must be set to your Postgres connection string."
31
31
  );
32
+ log(
33
+ " - For managed Postgres (e.g., DigitalOcean) with SSL, set PGSSLMODE=require and PGSSLROOTCERT to your CA .crt file."
34
+ );
35
+ log(
36
+ " Example: PGSSLMODE=require NODE_EXTRA_CA_CERTS=/absolute/path/to/ca.crt PG_DATAQUEUE_DATABASE=... npx dataqueue-cli migrate"
37
+ );
32
38
  exit(1);
33
39
  }
34
40
  if (command === "migrate") {
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cli.ts"],"names":[],"mappings":";;;;;AAKA,IAAM,UAAA,GAAa,aAAA,CAAc,MAAA,CAAA,IAAA,CAAY,GAAG,CAAA;AAChD,IAAM,SAAA,GAAY,IAAA,CAAK,OAAA,CAAQ,UAAU,CAAA;AAUlC,SAAS,OACd,IAAA,EACA;AAAA,EACE,MAAM,OAAA,CAAQ,GAAA;AAAA,EACd,IAAA,GAAO,CAAC,IAAA,KAAiB,OAAA,CAAQ,KAAK,IAAI,CAAA;AAAA,EAC1C,aAAA,GAAgB,SAAA;AAAA,EAChB,aAAA,GAAgB,IAAA,CAAK,IAAA,CAAK,SAAA,EAAW,eAAe;AACtD,CAAA,GAAa,EAAC,EACR;AACN,EAAA,MAAM,KAAK,OAAA,EAAS,GAAG,QAAQ,CAAA,GAAI,IAAA;AAEnC,EAAA,SAAS,UAAA,GAAa;AACpB,IAAA,GAAA;AAAA,MACE;AAAA,KACF;AACA,IAAA,GAAA,CAAI,EAAE,CAAA;AACN,IAAA,GAAA,CAAI,UAAU,CAAA;AACd,IAAA,GAAA;AAAA,MACE;AAAA,KACF;AACA,IAAA,GAAA;AAAA,MACE;AAAA,KACF;AACA,IAAA,GAAA,CAAI,EAAE,CAAA;AACN,IAAA,GAAA,CAAI,QAAQ,CAAA;AACZ,IAAA,GAAA;AAAA,MACE;AAAA,KACF;AACA,IAAA,IAAA,CAAK,CAAC,CAAA;AAAA;AAGR,EAAA,IAAI,YAAY,SAAA,EAAW;AAEzB,IAAA,IAAI,YAAsB,EAAC;AAC3B,IAAA,MAAM,MAAA,GAAS,QAAA,CAAS,OAAA,CAAQ,IAAI,CAAA;AACpC,IAAA,MAAM,WAAA,GAAc,QAAA,CAAS,OAAA,CAAQ,UAAU,CAAA;AAC/C,IAAA,IAAI,MAAA,KAAW,EAAA,IAAM,QAAA,CAAS,MAAA,GAAS,CAAC,CAAA,EAAG;AACzC,MAAA,SAAA,GAAY,CAAC,IAAA,EAAM,QAAA,CAAS,MAAA,GAAS,CAAC,GAAG,iBAAiB,CAAA;AAC1D,MAAA,QAAA,CAAS,MAAA,CAAO,QAAQ,CAAC,CAAA;AAAA,eAChB,WAAA,KAAgB,EAAA,IAAM,QAAA,CAAS,WAAA,GAAc,CAAC,CAAA,EAAG;AAC1D,MAAA,SAAA,GAAY,CAAC,IAAA,EAAM,QAAA,CAAS,WAAA,GAAc,CAAC,GAAG,iBAAiB,CAAA;AAC/D,MAAA,QAAA,CAAS,MAAA,CAAO,aAAa,CAAC,CAAA;AAAA;AAIhC,IAAA,IAAI,aAAuB,EAAC;AAC5B,IAAA,MAAM,YAAA,GAAe,QAAA,CAAS,OAAA,CAAQ,WAAW,CAAA;AACjD,IAAA,IAAI,YAAA,KAAiB,EAAA,IAAM,QAAA,CAAS,YAAA,GAAe,CAAC,CAAA,EAAG;AACrD,MAAA,UAAA,GAAa,CAAC,WAAA,EAAa,QAAA,CAAS,YAAA,GAAe,CAAC,CAAC,CAAA;AAAA;AAGvD,IAAA,MAAM,MAAA,GAAgC,aAAA;AAAA,MACpC,KAAA;AAAA,MACA;AAAA,QACE,iBAAA;AAAA,QACA,IAAA;AAAA,QACA,IAAA;AAAA,QACA,yBAAA;AAAA,QACA,IAAA;AAAA,QACA,uBAAA;AAAA,QACA,IAAA;AAAA,QACA,aAAA;AAAA,QACA,GAAG,SAAA;AAAA,QACH,GAAG,UAAA;AAAA,QACH,GAAG;AAAA,OACL;AAAA,MACA,EAAE,OAAO,SAAA;AAAU,KACrB;AACA,IAAA,IAAA,CAAK,MAAA,CAAO,UAAU,CAAC,CAAA;AAAA,GACzB,MAAO;AACL,IAAA,UAAA,EAAW;AAAA;AAEf","file":"cli.js","sourcesContent":["// Testable CLI logic for dataqueue\nimport { spawnSync, SpawnSyncReturns } from 'child_process';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\n\nexport interface CliDeps {\n log?: (...args: any[]) => void;\n error?: (...args: any[]) => void;\n exit?: (code: number) => void;\n spawnSyncImpl?: (...args: any[]) => SpawnSyncReturns<any>;\n migrationsDir?: string;\n}\n\nexport function runCli(\n argv: string[],\n {\n log = console.log,\n exit = (code: number) => process.exit(code),\n spawnSyncImpl = spawnSync,\n migrationsDir = path.join(__dirname, '../migrations'),\n }: CliDeps = {},\n): void {\n const [, , command, ...restArgs] = argv;\n\n function printUsage() {\n log(\n 'Usage: dataqueue-cli migrate [--envPath <path>] [-s <schema> | --schema <schema>]',\n );\n log('');\n log('Options:');\n log(\n ' --envPath <path> Path to a .env file to load environment variables (passed to node-pg-migrate)',\n );\n log(\n ' -s, --schema <schema> Set the schema to use (passed to node-pg-migrate)',\n );\n log('');\n log('Notes:');\n log(\n ' - The PG_DATAQUEUE_DATABASE environment variable must be set to your Postgres connection string.',\n );\n exit(1);\n }\n\n if (command === 'migrate') {\n // Support for -s or --schema argument\n let schemaArg: string[] = [];\n const sIndex = restArgs.indexOf('-s');\n const schemaIndex = restArgs.indexOf('--schema');\n if (sIndex !== -1 && restArgs[sIndex + 1]) {\n schemaArg = ['-s', restArgs[sIndex + 1], '--create-schema'];\n restArgs.splice(sIndex, 2);\n } else if (schemaIndex !== -1 && restArgs[schemaIndex + 1]) {\n schemaArg = ['-s', restArgs[schemaIndex + 1], '--create-schema'];\n restArgs.splice(schemaIndex, 2);\n }\n\n // Support for --envPath argument\n let envPathArg: string[] = [];\n const envPathIndex = restArgs.indexOf('--envPath');\n if (envPathIndex !== -1 && restArgs[envPathIndex + 1]) {\n envPathArg = ['--envPath', restArgs[envPathIndex + 1]];\n }\n\n const result: SpawnSyncReturns<any> = spawnSyncImpl(\n 'npx',\n [\n 'node-pg-migrate',\n 'up',\n '-t',\n 'dataqueuedev_migrations',\n '-d',\n 'PG_DATAQUEUE_DATABASE',\n '-m',\n migrationsDir,\n ...schemaArg,\n ...envPathArg,\n ...restArgs,\n ],\n { stdio: 'inherit' },\n );\n exit(result.status ?? 1);\n } else {\n printUsage();\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/cli.ts"],"names":[],"mappings":";;;;;AAKA,IAAM,UAAA,GAAa,aAAA,CAAc,MAAA,CAAA,IAAA,CAAY,GAAG,CAAA;AAChD,IAAM,SAAA,GAAY,IAAA,CAAK,OAAA,CAAQ,UAAU,CAAA;AAUlC,SAAS,OACd,IAAA,EACA;AAAA,EACE,MAAM,OAAA,CAAQ,GAAA;AAAA,EACd,IAAA,GAAO,CAAC,IAAA,KAAiB,OAAA,CAAQ,KAAK,IAAI,CAAA;AAAA,EAC1C,aAAA,GAAgB,SAAA;AAAA,EAChB,aAAA,GAAgB,IAAA,CAAK,IAAA,CAAK,SAAA,EAAW,eAAe;AACtD,CAAA,GAAa,EAAC,EACR;AACN,EAAA,MAAM,KAAK,OAAA,EAAS,GAAG,QAAQ,CAAA,GAAI,IAAA;AAEnC,EAAA,SAAS,UAAA,GAAa;AACpB,IAAA,GAAA;AAAA,MACE;AAAA,KACF;AACA,IAAA,GAAA,CAAI,EAAE,CAAA;AACN,IAAA,GAAA,CAAI,UAAU,CAAA;AACd,IAAA,GAAA;AAAA,MACE;AAAA,KACF;AACA,IAAA,GAAA;AAAA,MACE;AAAA,KACF;AACA,IAAA,GAAA,CAAI,EAAE,CAAA;AACN,IAAA,GAAA,CAAI,QAAQ,CAAA;AACZ,IAAA,GAAA;AAAA,MACE;AAAA,KACF;AACA,IAAA,GAAA;AAAA,MACE;AAAA,KACF;AACA,IAAA,GAAA;AAAA,MACE;AAAA,KACF;AACA,IAAA,IAAA,CAAK,CAAC,CAAA;AAAA;AAGR,EAAA,IAAI,YAAY,SAAA,EAAW;AAEzB,IAAA,IAAI,YAAsB,EAAC;AAC3B,IAAA,MAAM,MAAA,GAAS,QAAA,CAAS,OAAA,CAAQ,IAAI,CAAA;AACpC,IAAA,MAAM,WAAA,GAAc,QAAA,CAAS,OAAA,CAAQ,UAAU,CAAA;AAC/C,IAAA,IAAI,MAAA,KAAW,EAAA,IAAM,QAAA,CAAS,MAAA,GAAS,CAAC,CAAA,EAAG;AACzC,MAAA,SAAA,GAAY,CAAC,IAAA,EAAM,QAAA,CAAS,MAAA,GAAS,CAAC,GAAG,iBAAiB,CAAA;AAC1D,MAAA,QAAA,CAAS,MAAA,CAAO,QAAQ,CAAC,CAAA;AAAA,eAChB,WAAA,KAAgB,EAAA,IAAM,QAAA,CAAS,WAAA,GAAc,CAAC,CAAA,EAAG;AAC1D,MAAA,SAAA,GAAY,CAAC,IAAA,EAAM,QAAA,CAAS,WAAA,GAAc,CAAC,GAAG,iBAAiB,CAAA;AAC/D,MAAA,QAAA,CAAS,MAAA,CAAO,aAAa,CAAC,CAAA;AAAA;AAIhC,IAAA,IAAI,aAAuB,EAAC;AAC5B,IAAA,MAAM,YAAA,GAAe,QAAA,CAAS,OAAA,CAAQ,WAAW,CAAA;AACjD,IAAA,IAAI,YAAA,KAAiB,EAAA,IAAM,QAAA,CAAS,YAAA,GAAe,CAAC,CAAA,EAAG;AACrD,MAAA,UAAA,GAAa,CAAC,WAAA,EAAa,QAAA,CAAS,YAAA,GAAe,CAAC,CAAC,CAAA;AAAA;AAGvD,IAAA,MAAM,MAAA,GAAgC,aAAA;AAAA,MACpC,KAAA;AAAA,MACA;AAAA,QACE,iBAAA;AAAA,QACA,IAAA;AAAA,QACA,IAAA;AAAA,QACA,yBAAA;AAAA,QACA,IAAA;AAAA,QACA,uBAAA;AAAA,QACA,IAAA;AAAA,QACA,aAAA;AAAA,QACA,GAAG,SAAA;AAAA,QACH,GAAG,UAAA;AAAA,QACH,GAAG;AAAA,OACL;AAAA,MACA,EAAE,OAAO,SAAA;AAAU,KACrB;AACA,IAAA,IAAA,CAAK,MAAA,CAAO,UAAU,CAAC,CAAA;AAAA,GACzB,MAAO;AACL,IAAA,UAAA,EAAW;AAAA;AAEf","file":"cli.js","sourcesContent":["// Testable CLI logic for dataqueue\nimport { spawnSync, SpawnSyncReturns } from 'child_process';\nimport path from 'path';\nimport { fileURLToPath } from 'url';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\n\nexport interface CliDeps {\n log?: (...args: any[]) => void;\n error?: (...args: any[]) => void;\n exit?: (code: number) => void;\n spawnSyncImpl?: (...args: any[]) => SpawnSyncReturns<any>;\n migrationsDir?: string;\n}\n\nexport function runCli(\n argv: string[],\n {\n log = console.log,\n exit = (code: number) => process.exit(code),\n spawnSyncImpl = spawnSync,\n migrationsDir = path.join(__dirname, '../migrations'),\n }: CliDeps = {},\n): void {\n const [, , command, ...restArgs] = argv;\n\n function printUsage() {\n log(\n 'Usage: dataqueue-cli migrate [--envPath <path>] [-s <schema> | --schema <schema>]',\n );\n log('');\n log('Options:');\n log(\n ' --envPath <path> Path to a .env file to load environment variables (passed to node-pg-migrate)',\n );\n log(\n ' -s, --schema <schema> Set the schema to use (passed to node-pg-migrate)',\n );\n log('');\n log('Notes:');\n log(\n ' - The PG_DATAQUEUE_DATABASE environment variable must be set to your Postgres connection string.',\n );\n log(\n ' - For managed Postgres (e.g., DigitalOcean) with SSL, set PGSSLMODE=require and PGSSLROOTCERT to your CA .crt file.',\n );\n log(\n ' Example: PGSSLMODE=require NODE_EXTRA_CA_CERTS=/absolute/path/to/ca.crt PG_DATAQUEUE_DATABASE=... npx dataqueue-cli migrate',\n );\n exit(1);\n }\n\n if (command === 'migrate') {\n // Support for -s or --schema argument\n let schemaArg: string[] = [];\n const sIndex = restArgs.indexOf('-s');\n const schemaIndex = restArgs.indexOf('--schema');\n if (sIndex !== -1 && restArgs[sIndex + 1]) {\n schemaArg = ['-s', restArgs[sIndex + 1], '--create-schema'];\n restArgs.splice(sIndex, 2);\n } else if (schemaIndex !== -1 && restArgs[schemaIndex + 1]) {\n schemaArg = ['-s', restArgs[schemaIndex + 1], '--create-schema'];\n restArgs.splice(schemaIndex, 2);\n }\n\n // Support for --envPath argument\n let envPathArg: string[] = [];\n const envPathIndex = restArgs.indexOf('--envPath');\n if (envPathIndex !== -1 && restArgs[envPathIndex + 1]) {\n envPathArg = ['--envPath', restArgs[envPathIndex + 1]];\n }\n\n const result: SpawnSyncReturns<any> = spawnSyncImpl(\n 'npx',\n [\n 'node-pg-migrate',\n 'up',\n '-t',\n 'dataqueuedev_migrations',\n '-d',\n 'PG_DATAQUEUE_DATABASE',\n '-m',\n migrationsDir,\n ...schemaArg,\n ...envPathArg,\n ...restArgs,\n ],\n { stdio: 'inherit' },\n );\n exit(result.status ?? 1);\n } else {\n printUsage();\n }\n}\n"]}
package/dist/index.cjs CHANGED
@@ -3,6 +3,11 @@
3
3
  var async_hooks = require('async_hooks');
4
4
  var pg = require('pg');
5
5
  var pgConnectionString = require('pg-connection-string');
6
+ var fs = require('fs');
7
+
8
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
9
+
10
+ var fs__default = /*#__PURE__*/_interopDefault(fs);
6
11
 
7
12
  // src/types.ts
8
13
  var JobEventType = /* @__PURE__ */ ((JobEventType2) => {
@@ -358,8 +363,32 @@ var cancelAllUpcomingJobs = async (pool, filters) => {
358
363
  params.push(filters.priority);
359
364
  }
360
365
  if (filters.runAt) {
361
- query += ` AND run_at = $${paramIdx++}`;
362
- params.push(filters.runAt);
366
+ if (filters.runAt instanceof Date) {
367
+ query += ` AND run_at = $${paramIdx++}`;
368
+ params.push(filters.runAt);
369
+ } else if (typeof filters.runAt === "object") {
370
+ const ops = filters.runAt;
371
+ if (ops.gt) {
372
+ query += ` AND run_at > $${paramIdx++}`;
373
+ params.push(ops.gt);
374
+ }
375
+ if (ops.gte) {
376
+ query += ` AND run_at >= $${paramIdx++}`;
377
+ params.push(ops.gte);
378
+ }
379
+ if (ops.lt) {
380
+ query += ` AND run_at < $${paramIdx++}`;
381
+ params.push(ops.lt);
382
+ }
383
+ if (ops.lte) {
384
+ query += ` AND run_at <= $${paramIdx++}`;
385
+ params.push(ops.lte);
386
+ }
387
+ if (ops.eq) {
388
+ query += ` AND run_at = $${paramIdx++}`;
389
+ params.push(ops.eq);
390
+ }
391
+ }
363
392
  }
364
393
  if (filters.tags && filters.tags.values && filters.tags.values.length > 0) {
365
394
  const mode = filters.tags.mode || "all";
@@ -521,6 +550,97 @@ var getJobsByTags = async (pool, tags, mode = "all", limit = 100, offset = 0) =>
521
550
  client.release();
522
551
  }
523
552
  };
553
+ var getJobs = async (pool, filters, limit = 100, offset = 0) => {
554
+ const client = await pool.connect();
555
+ try {
556
+ let query = `SELECT id, job_type AS "jobType", payload, status, max_attempts AS "maxAttempts", attempts, priority, run_at AS "runAt", timeout_ms AS "timeoutMs", created_at AS "createdAt", updated_at AS "updatedAt", started_at AS "startedAt", completed_at AS "completedAt", last_failed_at AS "lastFailedAt", locked_at AS "lockedAt", locked_by AS "lockedBy", error_history AS "errorHistory", failure_reason AS "failureReason", next_attempt_at AS "nextAttemptAt", last_failed_at AS "lastFailedAt", last_retried_at AS "lastRetriedAt", last_cancelled_at AS "lastCancelledAt", pending_reason AS "pendingReason", tags FROM job_queue`;
557
+ const params = [];
558
+ let where = [];
559
+ let paramIdx = 1;
560
+ if (filters) {
561
+ if (filters.jobType) {
562
+ where.push(`job_type = $${paramIdx++}`);
563
+ params.push(filters.jobType);
564
+ }
565
+ if (filters.priority !== void 0) {
566
+ where.push(`priority = $${paramIdx++}`);
567
+ params.push(filters.priority);
568
+ }
569
+ if (filters.runAt) {
570
+ if (filters.runAt instanceof Date) {
571
+ where.push(`run_at = $${paramIdx++}`);
572
+ params.push(filters.runAt);
573
+ } else if (typeof filters.runAt === "object" && (filters.runAt.gt !== void 0 || filters.runAt.gte !== void 0 || filters.runAt.lt !== void 0 || filters.runAt.lte !== void 0 || filters.runAt.eq !== void 0)) {
574
+ const ops = filters.runAt;
575
+ if (ops.gt) {
576
+ where.push(`run_at > $${paramIdx++}`);
577
+ params.push(ops.gt);
578
+ }
579
+ if (ops.gte) {
580
+ where.push(`run_at >= $${paramIdx++}`);
581
+ params.push(ops.gte);
582
+ }
583
+ if (ops.lt) {
584
+ where.push(`run_at < $${paramIdx++}`);
585
+ params.push(ops.lt);
586
+ }
587
+ if (ops.lte) {
588
+ where.push(`run_at <= $${paramIdx++}`);
589
+ params.push(ops.lte);
590
+ }
591
+ if (ops.eq) {
592
+ where.push(`run_at = $${paramIdx++}`);
593
+ params.push(ops.eq);
594
+ }
595
+ }
596
+ }
597
+ if (filters.tags && filters.tags.values && filters.tags.values.length > 0) {
598
+ const mode = filters.tags.mode || "all";
599
+ const tagValues = filters.tags.values;
600
+ switch (mode) {
601
+ case "exact":
602
+ where.push(`tags = $${paramIdx++}`);
603
+ params.push(tagValues);
604
+ break;
605
+ case "all":
606
+ where.push(`tags @> $${paramIdx++}`);
607
+ params.push(tagValues);
608
+ break;
609
+ case "any":
610
+ where.push(`tags && $${paramIdx++}`);
611
+ params.push(tagValues);
612
+ break;
613
+ case "none":
614
+ where.push(`NOT (tags && $${paramIdx++})`);
615
+ params.push(tagValues);
616
+ break;
617
+ default:
618
+ where.push(`tags @> $${paramIdx++}`);
619
+ params.push(tagValues);
620
+ }
621
+ }
622
+ }
623
+ if (where.length > 0) {
624
+ query += ` WHERE ${where.join(" AND ")}`;
625
+ }
626
+ paramIdx = params.length + 1;
627
+ query += ` ORDER BY created_at DESC LIMIT $${paramIdx++} OFFSET $${paramIdx}`;
628
+ params.push(limit, offset);
629
+ const result = await client.query(query, params);
630
+ log(`Found ${result.rows.length} jobs`);
631
+ return result.rows.map((job) => ({
632
+ ...job,
633
+ payload: job.payload,
634
+ timeoutMs: job.timeoutMs,
635
+ failureReason: job.failureReason
636
+ }));
637
+ } catch (error) {
638
+ log(`Error getting jobs: ${error}`);
639
+ throw error;
640
+ } finally {
641
+ client.release();
642
+ }
643
+ };
524
644
 
525
645
  // src/processor.ts
526
646
  async function processJobWithHandlers(pool, job, jobHandlers) {
@@ -692,12 +812,27 @@ var createProcessor = (pool, handlers, options = {}) => {
692
812
  isRunning: () => running
693
813
  };
694
814
  };
815
+ function loadPemOrFile(value) {
816
+ if (!value) return void 0;
817
+ if (value.startsWith("file://")) {
818
+ const filePath = value.slice(7);
819
+ return fs__default.default.readFileSync(filePath, "utf8");
820
+ }
821
+ return value;
822
+ }
695
823
  var createPool = (config) => {
696
824
  let searchPath;
825
+ let ssl = void 0;
826
+ let customCA;
827
+ let sslmode;
697
828
  if (config.connectionString) {
698
829
  try {
699
830
  const url = new URL(config.connectionString);
700
831
  searchPath = url.searchParams.get("search_path") || void 0;
832
+ sslmode = url.searchParams.get("sslmode") || void 0;
833
+ if (sslmode === "no-verify") {
834
+ ssl = { rejectUnauthorized: false };
835
+ }
701
836
  } catch (e) {
702
837
  const parsed = pgConnectionString.parse(config.connectionString);
703
838
  if (parsed.options) {
@@ -706,9 +841,52 @@ var createPool = (config) => {
706
841
  searchPath = match[1];
707
842
  }
708
843
  }
844
+ sslmode = typeof parsed.sslmode === "string" ? parsed.sslmode : void 0;
845
+ if (sslmode === "no-verify") {
846
+ ssl = { rejectUnauthorized: false };
847
+ }
709
848
  }
710
849
  }
711
- const pool = new pg.Pool(config);
850
+ if (config.ssl) {
851
+ if (typeof config.ssl.ca === "string") {
852
+ customCA = config.ssl.ca;
853
+ } else if (typeof process.env.PGSSLROOTCERT === "string") {
854
+ customCA = process.env.PGSSLROOTCERT;
855
+ } else {
856
+ customCA = void 0;
857
+ }
858
+ const caValue = typeof customCA === "string" ? loadPemOrFile(customCA) : void 0;
859
+ ssl = {
860
+ ...ssl,
861
+ ...caValue ? { ca: caValue } : {},
862
+ cert: loadPemOrFile(
863
+ typeof config.ssl.cert === "string" ? config.ssl.cert : process.env.PGSSLCERT
864
+ ),
865
+ key: loadPemOrFile(
866
+ typeof config.ssl.key === "string" ? config.ssl.key : process.env.PGSSLKEY
867
+ ),
868
+ rejectUnauthorized: config.ssl.rejectUnauthorized !== void 0 ? config.ssl.rejectUnauthorized : true
869
+ };
870
+ }
871
+ if (sslmode && customCA) {
872
+ const warning = `
873
+
874
+ \x1B[33m**************************************************
875
+ \u26A0\uFE0F WARNING: SSL CONFIGURATION ISSUE
876
+ **************************************************
877
+ Both sslmode ('${sslmode}') is set in the connection string
878
+ and a custom CA is provided (via config.ssl.ca or PGSSLROOTCERT).
879
+ This combination may cause connection failures or unexpected behavior.
880
+
881
+ Recommended: Remove sslmode from the connection string when using a custom CA.
882
+ **************************************************\x1B[0m
883
+ `;
884
+ console.warn(warning);
885
+ }
886
+ const pool = new pg.Pool({
887
+ ...config,
888
+ ...ssl ? { ssl } : {}
889
+ });
712
890
  if (searchPath) {
713
891
  pool.on("connect", (client) => {
714
892
  client.query(`SET search_path TO ${searchPath}`);
@@ -740,6 +918,10 @@ var initJobQueue = (config) => {
740
918
  (limit, offset) => getAllJobs(pool, limit, offset),
741
919
  config.verbose ?? false
742
920
  ),
921
+ getJobs: withLogContext(
922
+ (filters, limit, offset) => getJobs(pool, filters, limit, offset),
923
+ config.verbose ?? false
924
+ ),
743
925
  retryJob: (jobId) => retryJob(pool, jobId),
744
926
  cleanupOldJobs: (daysToKeep) => cleanupOldJobs(pool, daysToKeep),
745
927
  cancelJob: withLogContext(