@powerhousedao/registry 6.2.3-dev.34 → 6.2.3-dev.36

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
@@ -1,6 +1,16 @@
1
1
  # @powerhousedao/registry
2
2
 
3
- Powerhouse package registry built on Verdaccio. Serves as both an npm registry and a CDN for Powerhouse package bundles (ESM) for dynamic `import()` in browsers and Node.js.
3
+ Powerhouse package registry built on Verdaccio 7. Serves as both an npm registry and a CDN for Powerhouse package bundles (ESM) for dynamic `import()` in browsers and Node.js.
4
+
5
+ ## How it works
6
+
7
+ - **npm protocol:** Verdaccio. With S3 configured it stores package files in the bucket and its package list, tokens and secret in Postgres, through the bundled `@powerhousedao/verdaccio-s3-storage` plugin.
8
+ - **Publishing:** a successful publish records the version as pending, and a job to process it, in one transaction before the response goes out.
9
+ - **Processing:** a worker takes the job, unpacks the tarball once, and writes the files and piece bundles to the artifact store (S3 under `artifacts/`, or the local data directory) and the package, version and piece rows to Postgres. Jobs retry with backoff; a version that keeps failing is marked failed with the reason.
10
+ - **Reconciling:** every minute the worker compares each package's manifest revision in the storage plugin's index with the one its last sync applied, and syncs the ones that differ; hourly it compares every version. The first pass after upgrading syncs every package once.
11
+ - **Reading:** `/packages`, `/pieces`, `/-/cdn` and piece bundles read Postgres and the artifact store, so every replica answers the same. A version nobody processed yet, such as an npmjs package requested through the CDN, is processed on demand.
12
+
13
+ Every replica is stateless and interchangeable. Without `--database-url` the registry keeps its state in an embedded PGlite and runs its jobs in-process, which suits local development.
4
14
 
5
15
  ## API
6
16
 
@@ -8,11 +18,23 @@ Powerhouse package registry built on Verdaccio. Serves as both an npm registry a
8
18
 
9
19
  #### `GET /packages`
10
20
 
11
- Returns a JSON array of all discovered packages. Supports filtering by document type:
21
+ Returns a page of packages at their latest version, with an `ETag` for revalidation:
12
22
 
23
+ ```json
24
+ { "items": [], "total": 0, "limit": 30, "offset": 0, "hasMore": false }
13
25
  ```
14
- GET /packages?documentType=powerhouse/package
15
- ```
26
+
27
+ | Parameter | Meaning |
28
+ | ------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
29
+ | `limit`, `offset` | Page size (1–50, default 30) and start |
30
+ | `search` | Full-text (stemmed), fuzzy (typo-tolerant) or substring match over the npm and manifest names, description, publisher, and module names and ids. Name substrings rank first, then other substrings, then by score |
31
+ | `name` | Only these packages, by npm or manifest name (repeatable) |
32
+ | `category`, `publisher`, `moduleType` | Manifest filters, repeatable; values of one filter OR, filters AND. `moduleType` is `documentModels`, `editors`, `apps`, `subgraphs` or `processors` |
33
+ | `documentType` | Only packages whose manifest defines this document model |
34
+ | `detail=full` | Items are full package info (manifest, document types, versions, owners) instead of list cards |
35
+ | `facets=true` | Adds `facets: { categories, publishers }` over the `name`-restricted set |
36
+
37
+ Search runs in Postgres on `pg_trgm` and full-text indexes (migration 3); the database user must be able to `CREATE EXTENSION pg_trgm`, which the database owner can.
16
38
 
17
39
  #### `GET /packages/by-document-type?type=<documentType>`
18
40
 
@@ -40,7 +62,9 @@ Activepieces catalogue.
40
62
  #### `GET /pieces`
41
63
 
42
64
  The catalog of pieces that published packages ship, in the shape of
43
- cloud.activepieces.com's list endpoint. `?suggestionType=ACTION_AND_TRIGGER`
65
+ cloud.activepieces.com's list endpoint, as a page shaped like `/packages`'.
66
+ `limit` and `offset` page it, `search` matches the name, display name and
67
+ description like `/packages` does, and `?suggestionType=ACTION_AND_TRIGGER`
44
68
  adds suggested actions and triggers.
45
69
 
46
70
  #### `GET /pieces/<name>` and `GET /pieces/<name>?version=<v>`
@@ -53,15 +77,38 @@ returns `404` with `available`, the versions the registry has.
53
77
  Every version of the piece: `[{ version, packageVersion, publishedAt }]`. A
54
78
  piece's version is always the version of the package that ships it.
55
79
 
56
- #### `GET /-/pieces/bundled/<file>.tgz`
80
+ #### `GET /-/pieces/bundled/<name>/<version>.tgz`
57
81
 
58
82
  The piece directory as an npm-shaped tarball, the file a reactor's piece worker
59
- downloads. The file name is the piece name with `/` replaced by `-`, then
60
- `-<version>`, as cdn.activepieces.com names its own. It is served immutable.
83
+ downloads, e.g. `/-/pieces/bundled/@acme/slack/1.2.0.tgz`. It is served
84
+ immutable.
61
85
 
62
- Piece names under `@activepieces/` are reserved: a package that claims one is
86
+ A piece name belongs to the first package that ships it, like an npm package
87
+ name: workflows refer to a piece by name and version on any switchboard.
88
+ Names under `@activepieces/` are reserved: a package that claims one is
63
89
  refused.
64
90
 
91
+ ### Health
92
+
93
+ - `GET /-/live`: 200 while the process serves HTTP; for liveness probes.
94
+ - `GET /-/ready`: 200 when Postgres answers and notifications are flowing, 503 otherwise and while draining after `SIGTERM`; for readiness probes.
95
+
96
+ ### Metrics
97
+
98
+ `GET /-/metrics` returns Prometheus text. `ph-registry worker` serves the same path on `--metrics-port` (`PH_REGISTRY_METRICS_PORT`), and serves nothing without it.
99
+
100
+ | Metric | Where | Meaning |
101
+ | ------------------------------------------------------------------------------------------------- | -------------- | ---------------------------------------------------------------------- |
102
+ | `registry_jobs`, `registry_jobs_due`, `registry_jobs_running`, `registry_jobs_oldest_due_seconds` | both | The job queue by `priority`, queried on scrape and cached for 5 s |
103
+ | `registry_job_duration_seconds` | where jobs run | Histogram by `kind` and `outcome` (`done`, `retry`, `failed`) |
104
+ | `registry_reconcile_runs_total`, `registry_reconcile_queued_total` | where jobs run | Reconcile passes and the jobs they queued, by `pass` (`quick`, `full`) |
105
+ | `registry_listen_connected` | both | 1 while the LISTEN connection is up |
106
+ | `registry_http_requests_total`, `registry_http_request_duration_seconds` | replicas | By `route` group; the count also by `method` and `status` class |
107
+ | `nodejs_eventloop_delay_seconds` | both | Event-loop delay quantiles since the previous scrape |
108
+ | `process_resident_memory_bytes`, `nodejs_heap_bytes`, `process_cpu_seconds_total` | both | Memory and CPU |
109
+
110
+ The endpoint needs no credentials; keep it off the public ingress if the queue figures matter.
111
+
65
112
  ### Publish Notifications
66
113
 
67
114
  When a package is published, the registry can notify subscribers in real time via Server-Sent Events (SSE) and webhooks.
@@ -138,7 +185,9 @@ All standard npm registry operations (publish, install, etc.) are handled by Ver
138
185
  npm publish --registry http://localhost:8080/
139
186
  ```
140
187
 
141
- On publish, the CDN cache for that package is automatically invalidated and the new version is extracted immediately.
188
+ A publish is recorded before the registry replies, and a worker processes it, usually within a second; the CDN, `/packages` and `/pieces` serve it from then on.
189
+
190
+ A version that was unpublished can't be published again: the registry answers `409`, as npm does. Pinned CDN files, piece bundles and tarballs are cached as immutable, so a reused version number would keep serving the old bytes. Publish a new version instead. To lift the rule for one version, delete its row from `registry_unpublished`.
142
191
 
143
192
  ## CLI
144
193
 
@@ -146,26 +195,43 @@ On publish, the CDN cache for that package is automatically invalidated and the
146
195
  ph-registry --port 8080 --storage-dir ./storage --cdn-cache-dir ./cdn-cache
147
196
  ```
148
197
 
198
+ Other roles share the storage options below:
199
+
200
+ | Command | Does |
201
+ | ------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------- |
202
+ | `ph-registry` | Runs the registry. With `--workers 0` it only records jobs, for a deployment with separate workers. |
203
+ | `ph-registry worker` | Runs jobs against a replica's npm endpoint (`--registry-url`, `PH_REGISTRY_INTERNAL_URL`); `--metrics-port` serves [metrics](#metrics). |
204
+ | `ph-registry migrate [--backfill]` | Applies the database migrations; `--backfill` also queues processing of every package published here. See [Migrations](#migrations). |
205
+ | `ph-registry import-verdaccio-state` | Copies Verdaccio's package list, tokens and secret from the old `verdaccio-s3-db.json`, plus every package stored in S3, into Postgres. |
206
+
149
207
  Options:
150
208
 
151
- | Option | Env Variable | Default | Description |
152
- | ------------------------ | ------------------------------ | ----------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- |
153
- | `--port` | `PORT` | `8080` | Port to listen on |
154
- | `--storage-dir` | `REGISTRY_STORAGE` | `./storage` | Verdaccio storage directory |
155
- | `--cdn-cache-dir` | `REGISTRY_CDN_CACHE` | `./cdn-cache` | CDN cache directory |
156
- | `--uplink` | `REGISTRY_UPLINK` | `https://registry.npmjs.org/` | Upstream npm registry URL used for fallback proxy |
157
- | `--web-enabled` | `REGISTRY_WEB` | `true` | Enable Verdaccio web UI |
158
- | `--webhook` | `REGISTRY_WEBHOOKS` | — | Comma-separated webhook URLs to notify on publish |
159
- | `--s3-bucket` | `S3_BUCKET` | — | S3 bucket for storage |
160
- | `--s3-endpoint` | `S3_ENDPOINT` | — | S3 endpoint URL |
161
- | `--s3-region` | `S3_REGION` | — | S3 region |
162
- | `--s3-access-key-id` | `S3_ACCESS_KEY_ID` | — | S3 access key |
163
- | `--s3-secret-access-key` | `S3_SECRET_ACCESS_KEY` | — | S3 secret key |
164
- | `--s3-key-prefix` | `S3_KEY_PREFIX` | — | S3 key prefix |
165
- | `--s3-force-path-style` | `S3_FORCE_PATH_STYLE` | `true` | Force S3 path-style URLs |
166
- | `--public-url` | `PH_REGISTRY_PUBLIC_URL` | — | Public URL of this registry — required when Renown auth is enabled. Used as the expected `aud` claim on bearer tokens. |
167
- | `--auth-renown` | `PH_REGISTRY_AUTH_RENOWN` | `true` | Enable Renown JWT auth in front of verdaccio. Disabled (no-op) when `--public-url` is unset. |
168
- | `--verdaccio-secret` | `PH_REGISTRY_VERDACCIO_SECRET` | random per pod | Verdaccio JWT signing secret. The renown middleware mints an in-process verdaccio token that never leaves the pod, so a per-pod secret is fine. |
209
+ | Option | Env Variable | Default | Description |
210
+ | ------------------------- | ----------------------------------- | ----------------------------- | ---------------------------------------------------------------------------------------------------------------------------- |
211
+ | `--port` | `PORT` | `8080` | Port to listen on |
212
+ | `--storage-dir` | `REGISTRY_STORAGE` | `./storage` | Verdaccio storage directory |
213
+ | `--cdn-cache-dir` | `REGISTRY_CDN_CACHE` | `./cdn-cache` | Local data directory: processed packages and the embedded database, when no S3 bucket or Postgres URL is set |
214
+ | `--database-url` | `PH_REGISTRY_DATABASE_URL` | — | Postgres shared by every replica and worker; required with S3 |
215
+ | `--listen-database-url` | `PH_REGISTRY_LISTEN_DATABASE_URL` | `--database-url` | A direct connection for LISTEN/NOTIFY when `--database-url` goes through a transaction pooler |
216
+ | `--workers` | `PH_REGISTRY_WORKERS` | `1` | Jobs the registry process runs at a time; `0` leaves them to `ph-registry worker` |
217
+ | `--artifact-cache-mb` | `PH_REGISTRY_ARTIFACT_CACHE_MB` | `128` | Memory for serving published files up to 1 MiB without reading S3; unpublishing a version evicts its files. `0` turns it off |
218
+ | `--db-pool-max` | `PH_REGISTRY_DB_POOL_MAX` | `10` | Connections in the process's own Postgres pool (registry and worker) |
219
+ | `--storage-pool-max` | `PH_REGISTRY_STORAGE_POOL_MAX` | `2` | Connections for the storage plugin's reads: package list, tokens, secret |
220
+ | `--storage-lock-pool-max` | `PH_REGISTRY_STORAGE_LOCK_POOL_MAX` | `4` | Connections holding the storage plugin's package locks, one per concurrent manifest write |
221
+ | `--migrate-on-boot` | `PH_REGISTRY_MIGRATE_ON_BOOT` | `true` without a database URL | `true` or `false`: apply migrations at startup instead of only checking the schema is current |
222
+ | `--uplink` | `REGISTRY_UPLINK` | `https://registry.npmjs.org/` | Upstream npm registry URL used for fallback proxy |
223
+ | `--web-enabled` | `REGISTRY_WEB` | `true` | Enable Verdaccio web UI |
224
+ | `--webhook` | `REGISTRY_WEBHOOKS` | — | Comma-separated webhook URLs to notify on publish |
225
+ | `--s3-bucket` | `S3_BUCKET` | — | S3 bucket for storage |
226
+ | `--s3-endpoint` | `S3_ENDPOINT` | — | S3 endpoint URL |
227
+ | `--s3-region` | `S3_REGION` | — | S3 region |
228
+ | `--s3-access-key-id` | `S3_ACCESS_KEY_ID` | — | S3 access key |
229
+ | `--s3-secret-access-key` | `S3_SECRET_ACCESS_KEY` | — | S3 secret key |
230
+ | `--s3-key-prefix` | `S3_KEY_PREFIX` | — | S3 key prefix |
231
+ | `--s3-force-path-style` | `S3_FORCE_PATH_STYLE` | `true` | Force S3 path-style URLs |
232
+ | `--public-url` | `PH_REGISTRY_PUBLIC_URL` | — | Public URL of this registry — required when Renown auth is enabled. Used as the expected `aud` claim on bearer tokens. |
233
+ | `--auth-renown` | `PH_REGISTRY_AUTH_RENOWN` | `true` | Enable Renown JWT auth in front of verdaccio. Disabled (no-op) when `--public-url` is unset. |
234
+ | `--verdaccio-secret` | `PH_REGISTRY_VERDACCIO_SECRET` | — | Seeds Verdaccio's stored signing secret (32 characters) when none is stored yet, so tokens it already signed stay valid |
169
235
 
170
236
  ## Authentication
171
237
 
@@ -178,12 +244,41 @@ Two authentication paths are supported:
178
244
  invocation) or `ph registry-login` (writes a longer-lived token to
179
245
  `~/.npmrc` for raw `npm publish`).
180
246
 
181
- 2. **Legacy htpasswd.** Verdaccio's built-in plugin remains in the auth chain
182
- as a grace-period fallback. Per-pod state, so it doesn't survive horizontal
183
- scaling — being phased out as soon as all clients have moved to Renown.
247
+ 2. **Accounts.** With a database, `npm adduser` and `npm login` go through the
248
+ registry's auth plugin, which keeps accounts and package ownership in
249
+ Postgres. Verdaccio 7 accepts no HTTP Basic auth, so the plugin treats an
250
+ `adduser` with an existing user's correct password as a login. Without a
251
+ database, Verdaccio's htpasswd file is used.
252
+
253
+ ## Migrations
254
+
255
+ `ph-registry migrate` applies the database migrations; production runs it once per release, before the new pods start. With `--database-url` set, the registry and the worker only check the schema at startup, and refuse to start while a migration is missing. Without one, the embedded PGlite is migrated at startup, so tests and local `ph` use need no separate step. `--migrate-on-boot true` migrates at startup with Postgres as well; any number of processes may migrate at once.
256
+
257
+ Most migrations run in one transaction with `lock_timeout = 5s`. A migration marked `transaction: false` runs each statement on its own, for `CREATE INDEX CONCURRENTLY`: it holds a session advisory lock, so it connects through `--listen-database-url` when that is set, and an index left INVALID by a failed build is dropped and rebuilt on the next run. Migrations must keep the previous release working, since it still serves while the new one rolls out.
258
+
259
+ ## Moving an existing S3 deployment
260
+
261
+ 1. `ph-registry migrate` creates the registry's tables.
262
+ 2. `ph-registry import-verdaccio-state` moves Verdaccio's state into Postgres, including names the old shared list lost.
263
+ 3. Deploy the new version, with `ph-registry worker` if the replicas run `--workers 0`.
264
+ 4. `ph-registry migrate --backfill` queues processing of every existing version; the worker's hourly sweep also does this, behind any publish.
184
265
 
185
266
  ## Deployment
186
267
 
268
+ ### Database connections
269
+
270
+ Each process opens at most these connections, with the defaults:
271
+
272
+ | Process | Through `--database-url` (the pooler) | Direct (`--listen-database-url`) |
273
+ | ---------------- | --------------------------------------------------------------------------------------- | ------------------------------------------------ |
274
+ | Registry replica | 16: its own pool (10), the storage plugin's pool (2) and lock pool (4) | 1 for LISTEN; 1 more while migrating, if it does |
275
+ | `worker` | 10: its own pool; each running job uses one at a time, so keep it above `--concurrency` | 1 for LISTEN |
276
+ | `migrate` | 10, briefly | 1 while an online migration runs |
277
+
278
+ Behind pgbouncer in transaction mode these are client connections, bounded by `MAX_CLIENT_CONN`: six replicas and a worker make at most 6 × 16 + 10 = 106. A client holds a server connection only during a transaction, and `DEFAULT_POOL_SIZE` caps the server connections for the registry's user and database across every process; past it, transactions queue in pgbouncer.
279
+
280
+ Most transactions take milliseconds, but a package-lock transaction lasts as long as the manifest's S3 write. With alpha's `DEFAULT_POOL_SIZE` of 20, six replicas with full lock pools (6 × 4 = 24) would hold every server connection, and the worker's jobs and every read would wait behind S3. Raise `DEFAULT_POOL_SIZE` before `--storage-lock-pool-max`, and keep Postgres' `max_connections` above `DEFAULT_POOL_SIZE` plus the direct connections, one per replica and worker.
281
+
187
282
  ### Build
188
283
 
189
284
  ```sh
package/dist/cli.d.mts CHANGED
@@ -1,11 +1,8 @@
1
1
  //#region cli.d.ts
2
2
  export declare const registryCommand: Partial<import("cmd-ts/dist/cjs/argparser.js").Register> & {
3
3
  parse(context: import("cmd-ts/dist/cjs/argparser.js").ParseContext): Promise<import("cmd-ts/dist/cjs/argparser.js").ParsingResult<{
4
- port: number;
5
4
  storageDir: string;
6
5
  cdnCacheDir: string;
7
- uplink: string | undefined;
8
- uplinkMaxage: string | undefined;
9
6
  s3Bucket: string | undefined;
10
7
  s3Endpoint: string | undefined;
11
8
  s3Region: string | undefined;
@@ -13,21 +10,28 @@ export declare const registryCommand: Partial<import("cmd-ts/dist/cjs/argparser.
13
10
  s3SecretAccessKey: string | undefined;
14
11
  s3KeyPrefix: string | undefined;
15
12
  s3ForcePathStyle: boolean;
16
- webEnabled: boolean;
13
+ databaseUrl: string | undefined;
14
+ listenDatabaseUrl: string | undefined;
17
15
  webhooks: string | undefined;
16
+ migrateOnBoot: boolean | undefined;
17
+ dbPoolMax: number | undefined;
18
+ storagePoolMax: number | undefined;
19
+ storageLockPoolMax: number | undefined;
20
+ port: number;
21
+ artifactCacheMb: number;
22
+ workers: number;
23
+ uplink: string | undefined;
24
+ uplinkMaxage: string | undefined;
25
+ webEnabled: boolean;
18
26
  publicUrl: string | undefined;
19
27
  authRenown: boolean;
20
28
  renownUrl: string | undefined;
21
29
  verdaccioSecret: string | undefined;
22
30
  localPackages: string | undefined;
23
- databaseUrl: string | undefined;
24
31
  }>>;
25
32
  } & import("cmd-ts/dist/cjs/helpdoc.js").PrintHelp & import("cmd-ts/dist/cjs/helpdoc.js").ProvidesHelp & import("cmd-ts/dist/cjs/helpdoc.js").Named & Partial<import("cmd-ts/dist/cjs/helpdoc.js").Versioned> & import("cmd-ts/dist/cjs/argparser.js").Register & import("cmd-ts/dist/cjs/runner.js").Handling<{
26
- port: number;
27
33
  storageDir: string;
28
34
  cdnCacheDir: string;
29
- uplink: string | undefined;
30
- uplinkMaxage: string | undefined;
31
35
  s3Bucket: string | undefined;
32
36
  s3Endpoint: string | undefined;
33
37
  s3Region: string | undefined;
@@ -35,14 +39,109 @@ export declare const registryCommand: Partial<import("cmd-ts/dist/cjs/argparser.
35
39
  s3SecretAccessKey: string | undefined;
36
40
  s3KeyPrefix: string | undefined;
37
41
  s3ForcePathStyle: boolean;
38
- webEnabled: boolean;
42
+ databaseUrl: string | undefined;
43
+ listenDatabaseUrl: string | undefined;
39
44
  webhooks: string | undefined;
45
+ migrateOnBoot: boolean | undefined;
46
+ dbPoolMax: number | undefined;
47
+ storagePoolMax: number | undefined;
48
+ storageLockPoolMax: number | undefined;
49
+ port: number;
50
+ artifactCacheMb: number;
51
+ workers: number;
52
+ uplink: string | undefined;
53
+ uplinkMaxage: string | undefined;
54
+ webEnabled: boolean;
40
55
  publicUrl: string | undefined;
41
56
  authRenown: boolean;
42
57
  renownUrl: string | undefined;
43
58
  verdaccioSecret: string | undefined;
44
59
  localPackages: string | undefined;
60
+ }, Promise<void>> & {
61
+ run(context: import("cmd-ts/dist/cjs/argparser.js").ParseContext): Promise<import("cmd-ts/dist/cjs/argparser.js").ParsingResult<Promise<void>>>;
62
+ } & Partial<import("cmd-ts/dist/cjs/helpdoc.js").Versioned & import("cmd-ts/dist/cjs/helpdoc.js").Descriptive & import("cmd-ts/dist/cjs/helpdoc.js").Aliased>;
63
+ export declare const workerCommand: Partial<import("cmd-ts/dist/cjs/argparser.js").Register> & {
64
+ parse(context: import("cmd-ts/dist/cjs/argparser.js").ParseContext): Promise<import("cmd-ts/dist/cjs/argparser.js").ParsingResult<{
65
+ storageDir: string;
66
+ cdnCacheDir: string;
67
+ s3Bucket: string | undefined;
68
+ s3Endpoint: string | undefined;
69
+ s3Region: string | undefined;
70
+ s3AccessKeyId: string | undefined;
71
+ s3SecretAccessKey: string | undefined;
72
+ s3KeyPrefix: string | undefined;
73
+ s3ForcePathStyle: boolean;
74
+ databaseUrl: string | undefined;
75
+ listenDatabaseUrl: string | undefined;
76
+ webhooks: string | undefined;
77
+ migrateOnBoot: boolean | undefined;
78
+ dbPoolMax: number | undefined;
79
+ registryUrl: string;
80
+ concurrency: number;
81
+ metricsPort: number | undefined;
82
+ }>>;
83
+ } & import("cmd-ts/dist/cjs/helpdoc.js").PrintHelp & import("cmd-ts/dist/cjs/helpdoc.js").ProvidesHelp & import("cmd-ts/dist/cjs/helpdoc.js").Named & Partial<import("cmd-ts/dist/cjs/helpdoc.js").Versioned> & import("cmd-ts/dist/cjs/argparser.js").Register & import("cmd-ts/dist/cjs/runner.js").Handling<{
84
+ storageDir: string;
85
+ cdnCacheDir: string;
86
+ s3Bucket: string | undefined;
87
+ s3Endpoint: string | undefined;
88
+ s3Region: string | undefined;
89
+ s3AccessKeyId: string | undefined;
90
+ s3SecretAccessKey: string | undefined;
91
+ s3KeyPrefix: string | undefined;
92
+ s3ForcePathStyle: boolean;
45
93
  databaseUrl: string | undefined;
94
+ listenDatabaseUrl: string | undefined;
95
+ webhooks: string | undefined;
96
+ migrateOnBoot: boolean | undefined;
97
+ dbPoolMax: number | undefined;
98
+ registryUrl: string;
99
+ concurrency: number;
100
+ metricsPort: number | undefined;
101
+ }, Promise<void>> & {
102
+ run(context: import("cmd-ts/dist/cjs/argparser.js").ParseContext): Promise<import("cmd-ts/dist/cjs/argparser.js").ParsingResult<Promise<void>>>;
103
+ } & Partial<import("cmd-ts/dist/cjs/helpdoc.js").Versioned & import("cmd-ts/dist/cjs/helpdoc.js").Descriptive & import("cmd-ts/dist/cjs/helpdoc.js").Aliased>;
104
+ export declare const migrateCommand: Partial<import("cmd-ts/dist/cjs/argparser.js").Register> & {
105
+ parse(context: import("cmd-ts/dist/cjs/argparser.js").ParseContext): Promise<import("cmd-ts/dist/cjs/argparser.js").ParsingResult<{
106
+ databaseUrl: string | undefined;
107
+ listenDatabaseUrl: string | undefined;
108
+ backfill: boolean;
109
+ }>>;
110
+ } & import("cmd-ts/dist/cjs/helpdoc.js").PrintHelp & import("cmd-ts/dist/cjs/helpdoc.js").ProvidesHelp & import("cmd-ts/dist/cjs/helpdoc.js").Named & Partial<import("cmd-ts/dist/cjs/helpdoc.js").Versioned> & import("cmd-ts/dist/cjs/argparser.js").Register & import("cmd-ts/dist/cjs/runner.js").Handling<{
111
+ databaseUrl: string | undefined;
112
+ listenDatabaseUrl: string | undefined;
113
+ backfill: boolean;
114
+ }, Promise<void>> & {
115
+ run(context: import("cmd-ts/dist/cjs/argparser.js").ParseContext): Promise<import("cmd-ts/dist/cjs/argparser.js").ParsingResult<Promise<void>>>;
116
+ } & Partial<import("cmd-ts/dist/cjs/helpdoc.js").Versioned & import("cmd-ts/dist/cjs/helpdoc.js").Descriptive & import("cmd-ts/dist/cjs/helpdoc.js").Aliased>;
117
+ export declare const importVerdaccioStateCommand: Partial<import("cmd-ts/dist/cjs/argparser.js").Register> & {
118
+ parse(context: import("cmd-ts/dist/cjs/argparser.js").ParseContext): Promise<import("cmd-ts/dist/cjs/argparser.js").ParsingResult<{
119
+ storageDir: string;
120
+ cdnCacheDir: string;
121
+ s3Bucket: string | undefined;
122
+ s3Endpoint: string | undefined;
123
+ s3Region: string | undefined;
124
+ s3AccessKeyId: string | undefined;
125
+ s3SecretAccessKey: string | undefined;
126
+ s3KeyPrefix: string | undefined;
127
+ s3ForcePathStyle: boolean;
128
+ databaseUrl: string | undefined;
129
+ listenDatabaseUrl: string | undefined;
130
+ webhooks: string | undefined;
131
+ }>>;
132
+ } & import("cmd-ts/dist/cjs/helpdoc.js").PrintHelp & import("cmd-ts/dist/cjs/helpdoc.js").ProvidesHelp & import("cmd-ts/dist/cjs/helpdoc.js").Named & Partial<import("cmd-ts/dist/cjs/helpdoc.js").Versioned> & import("cmd-ts/dist/cjs/argparser.js").Register & import("cmd-ts/dist/cjs/runner.js").Handling<{
133
+ storageDir: string;
134
+ cdnCacheDir: string;
135
+ s3Bucket: string | undefined;
136
+ s3Endpoint: string | undefined;
137
+ s3Region: string | undefined;
138
+ s3AccessKeyId: string | undefined;
139
+ s3SecretAccessKey: string | undefined;
140
+ s3KeyPrefix: string | undefined;
141
+ s3ForcePathStyle: boolean;
142
+ databaseUrl: string | undefined;
143
+ listenDatabaseUrl: string | undefined;
144
+ webhooks: string | undefined;
46
145
  }, Promise<void>> & {
47
146
  run(context: import("cmd-ts/dist/cjs/argparser.js").ParseContext): Promise<import("cmd-ts/dist/cjs/argparser.js").ParsingResult<Promise<void>>>;
48
147
  } & Partial<import("cmd-ts/dist/cjs/helpdoc.js").Versioned & import("cmd-ts/dist/cjs/helpdoc.js").Descriptive & import("cmd-ts/dist/cjs/helpdoc.js").Aliased>;
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.mts","names":[],"sources":["../cli.ts"],"mappings":";qBAiBa,iBAAe,+CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAkK1B,6CAAA,iDAAA,mDAAA"}
1
+ {"version":3,"file":"cli.d.mts","names":[],"sources":["../cli.ts"],"mappings":";qBA2Ia,iBAAe,+CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAkI1B,6CAAA,iDAAA,mDAAA;qBAEW,eAAa,+CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAyCxB,6CAAA,iDAAA,mDAAA;qBAEW,gBAAc,+CAAA;;;;;;;;;;;;IAkBzB,6CAAA,iDAAA,mDAAA;qBAEW,6BAA2B,+CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAatC,6CAAA,iDAAA,mDAAA"}