heroku 10.2.0-beta.0 → 10.3.0-beta.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
@@ -96,7 +96,7 @@ Run all tests with `yarn test`.
96
96
 
97
97
  ## Debugging
98
98
 
99
- Using WebStorm (from Jetbrains / IntelliJ), you can run/debug an individual test case.
99
+ Using WebStorm (from JetBrains / IntelliJ), you can run/debug an individual test case.
100
100
 
101
101
  - Create a new run/debug configuration
102
102
  - Select the 'Mocha' type
@@ -14,18 +14,27 @@ class Index extends command_1.Command {
14
14
  Accept: 'application/vnd.heroku+json; version=3.sdk',
15
15
  },
16
16
  });
17
- const buildpacks = await buildpacksCommand.fetch(flags.app, (0, generation_1.getGeneration)(app) === 'fir');
17
+ const isFirApp = (0, generation_1.getGeneration)(app) === 'fir';
18
+ const buildpacks = await buildpacksCommand.fetch(flags.app, isFirApp);
18
19
  if (buildpacks.length === 0) {
19
20
  this.log(`${color_1.default.app(flags.app)} has no Buildpacks.`);
20
21
  }
21
22
  else {
22
- core_1.ux.styledHeader(`${color_1.default.app(flags.app)} Buildpack${buildpacks.length > 1 ? 's' : ''}`);
23
+ const pluralizedBuildpacks = buildpacks.length > 1 ? 'Buildpacks' : 'Buildpack';
24
+ let header = `${color_1.default.app(flags.app)}`;
25
+ if (isFirApp) {
26
+ header += ` Cloud Native ${pluralizedBuildpacks} (from the latest release's OCI image)`;
27
+ }
28
+ else {
29
+ header += ` Classic ${pluralizedBuildpacks} (from the Heroku Buildpack Registry)`;
30
+ }
31
+ core_1.ux.styledHeader(header);
23
32
  buildpacksCommand.display(buildpacks, '');
24
33
  }
25
34
  }
26
35
  }
27
36
  exports.default = Index;
28
- Index.description = 'display the buildpacks for an app';
37
+ Index.description = 'list the buildpacks on an app';
29
38
  Index.flags = {
30
39
  app: command_1.flags.app({ required: true }),
31
40
  remote: command_1.flags.remote(),
@@ -73,7 +73,7 @@ Logs.flags = {
73
73
  tail: command_1.flags.boolean({
74
74
  char: 't',
75
75
  default: false,
76
- description: 'continually stream logs (defaults to true for Fir generation apps)',
76
+ description: 'continually stream logs (always enabled for Fir-generation apps)',
77
77
  }),
78
78
  'process-type': command_1.flags.string({
79
79
  char: 'p',
@@ -51,36 +51,37 @@ class Outliers extends command_1.Command {
51
51
  const truncatedQueryString = truncate ? (0, tsheredoc_1.default) `
52
52
  CASE WHEN length(query) <= 40 THEN query ELSE substr(query, 0, 39) || '…' END
53
53
  ` : 'query';
54
+ let totalExecTimeField = '';
54
55
  if (version && Number.parseInt(version, 10) >= 13) {
55
- return (0, tsheredoc_1.default) `
56
+ totalExecTimeField = 'total_exec_time';
57
+ }
58
+ else {
59
+ totalExecTimeField = 'total_time';
60
+ }
61
+ let blkReadTimeField = '';
62
+ let blkWriteTimeField = '';
63
+ if (version && Number.parseInt(version, 10) >= 17) {
64
+ blkReadTimeField = 'shared_blk_read_time';
65
+ blkWriteTimeField = 'shared_blk_write_time';
66
+ }
67
+ else {
68
+ blkReadTimeField = 'blk_read_time';
69
+ blkWriteTimeField = 'blk_write_time';
70
+ }
71
+ return (0, tsheredoc_1.default) `
56
72
  SELECT
57
- interval '1 millisecond' * total_exec_time AS total_exec_time,
58
- to_char((total_exec_time/sum(total_exec_time) OVER()) * 100, 'FM90D0') || '%' AS prop_exec_time,
73
+ interval '1 millisecond' * ${totalExecTimeField} AS total_exec_time,
74
+ to_char((${totalExecTimeField}/sum(${totalExecTimeField}) OVER()) * 100, 'FM90D0') || '%' AS prop_exec_time,
59
75
  to_char(calls, 'FM999G999G999G990') AS ncalls,
60
- interval '1 millisecond' * (blk_read_time + blk_write_time) AS sync_io_time,
76
+ interval '1 millisecond' * (${blkReadTimeField} + ${blkWriteTimeField}) AS sync_io_time,
61
77
  ${truncatedQueryString} AS query
62
78
  FROM pg_stat_statements
63
79
  WHERE userid = (
64
80
  SELECT usesysid FROM pg_user WHERE usename = current_user LIMIT 1
65
81
  )
66
- ORDER BY total_exec_time DESC
82
+ ORDER BY ${totalExecTimeField} DESC
67
83
  LIMIT ${limit};
68
84
  `;
69
- }
70
- return (0, tsheredoc_1.default) `
71
- SELECT
72
- interval '1 millisecond' * total_time AS total_exec_time,
73
- to_char((total_time/sum(total_time) OVER()) * 100, 'FM90D0') || '%' AS prop_exec_time,
74
- to_char(calls, 'FM999G999G999G990') AS ncalls,
75
- interval '1 millisecond' * (blk_read_time + blk_write_time) AS sync_io_time,
76
- ${truncatedQueryString} AS query
77
- FROM pg_stat_statements
78
- WHERE userid = (
79
- SELECT usesysid FROM pg_user WHERE usename = current_user LIMIT 1
80
- )
81
- ORDER BY total_time DESC
82
- LIMIT ${limit};
83
- `;
84
85
  }
85
86
  }
86
87
  exports.default = Outliers;
@@ -8,6 +8,7 @@ const inquirer_1 = require("inquirer");
8
8
  const api_1 = require("../../lib/api");
9
9
  const infer_1 = require("../../lib/pipelines/infer");
10
10
  const stages_1 = require("../../lib/pipelines/stages");
11
+ const generation_1 = require("../../lib/apps/generation");
11
12
  class Create extends command_1.Command {
12
13
  async run() {
13
14
  const { args, flags } = await this.parse(Create);
@@ -43,8 +44,8 @@ class Create extends command_1.Command {
43
44
  const teamName = flags.team;
44
45
  const ownerType = teamName ? 'team' : 'user';
45
46
  // If team or org is not specified, we assign ownership to the user creating
46
- owner = teamName ? await (0, api_1.getTeam)(this.heroku, teamName) : await (0, api_1.getAccountInfo)(this.heroku);
47
- owner = owner.body;
47
+ const response = teamName ? await (0, api_1.getTeam)(this.heroku, teamName) : await (0, api_1.getAccountInfo)(this.heroku);
48
+ owner = response.body;
48
49
  const ownerID = owner.id;
49
50
  owner = { id: ownerID, type: ownerType };
50
51
  const answers = await (0, inquirer_1.prompt)(questions);
@@ -53,7 +54,8 @@ class Create extends command_1.Command {
53
54
  if (answers.stage)
54
55
  stage = answers.stage;
55
56
  core_1.ux.action.start(`Creating ${name} pipeline`);
56
- const { body: pipeline } = await (0, api_1.createPipeline)(this.heroku, name, owner);
57
+ const generation = await (0, generation_1.getGenerationByAppId)(app, this.heroku);
58
+ const { body: pipeline } = await (0, api_1.createPipeline)(this.heroku, name, owner, generation);
57
59
  core_1.ux.action.stop();
58
60
  core_1.ux.action.start(`Adding ${color_1.default.app(app)} to ${color_1.default.pipeline(pipeline.name)} pipeline as ${stage}`);
59
61
  await (0, api_1.createCoupling)(this.heroku, pipeline, app, stage);
@@ -11,7 +11,7 @@ class Credentials extends command_1.Command {
11
11
  const addon = await (0, api_1.default)(app, database, false, this.heroku).getRedisAddon();
12
12
  if (reset) {
13
13
  core_1.ux.log(`Resetting credentials for ${addon.name}`);
14
- await (0, api_1.default)(app, database, false, this.heroku).request(`/redis/v0/databases/${addon.name}/credentials_rotation`, 'POST');
14
+ await (0, api_1.default)(app, database, false, this.heroku).request(`/redis/v0/databases/${addon.name}/credentials_rotation`, 'POST', {});
15
15
  }
16
16
  else {
17
17
  const { body: redis } = await (0, api_1.default)(app, database, false, this.heroku).request(`/redis/v0/databases/${addon.name}`);
@@ -19,7 +19,7 @@ class StatsReset extends command_1.Command {
19
19
  await (0, confirmCommand_1.default)(app, confirm, warning);
20
20
  core_1.ux.action.start(`Resetting stats on ${color_1.default.addon(addon.name || '')}`);
21
21
  const { body: response } = await (0, api_1.default)(app, database, false, this.heroku)
22
- .request(`/redis/v0/databases/${addon.id}/stats/reset`, 'POST');
22
+ .request(`/redis/v0/databases/${addon.id}/stats/reset`, 'POST', {});
23
23
  core_1.ux.action.stop(response.message);
24
24
  }
25
25
  }
@@ -22,7 +22,7 @@ class Wait extends command_1.Command {
22
22
  let waiting = false;
23
23
  while (true) {
24
24
  try {
25
- status = await api.request(`/redis/v0/databases/${addon.name}/wait`, 'GET').then(response => response.body);
25
+ status = await api.request(`/redis/v0/databases/${addon.name}/wait`).then(response => response.body);
26
26
  }
27
27
  catch (error) {
28
28
  const httpError = error;
@@ -56,7 +56,7 @@ class Create extends command_1.Command {
56
56
  },
57
57
  });
58
58
  core_1.ux.action.stop();
59
- core_1.ux.warn(`${color_1.default.bold('Spend Alert.')} During the limited GA period, each Heroku ${spaceType} Private Space costs ~${dollarAmountHourly}/hour (max ${dollarAmountMonthly}/month), pro-rated to the second.`);
59
+ core_1.ux.warn(`${color_1.default.bold('Spend Alert.')} Each Heroku ${spaceType} Private Space costs ~${dollarAmountHourly}/hour (max ${dollarAmountMonthly}/month), pro-rated to the second.`);
60
60
  core_1.ux.warn(`Use ${color_1.default.cmd('heroku spaces:wait')} to track allocation.`);
61
61
  core_1.ux.styledHeader(space.name);
62
62
  core_1.ux.styledObject({
@@ -44,6 +44,6 @@ Index.topic = 'telemetry';
44
44
  Index.description = 'list telemetry drains';
45
45
  Index.flags = {
46
46
  space: command_1.flags.string({ char: 's', description: 'filter by space name', exactlyOne: ['app', 'space'] }),
47
- app: command_1.flags.string({ description: 'filter by app name' }),
47
+ app: command_1.flags.string({ char: 'a', description: 'filter by app name' }),
48
48
  };
49
49
  Index.example = '$ heroku telemetry';
package/lib/lib/api.d.ts CHANGED
@@ -5,12 +5,13 @@ export declare const V3_HEADER = "application/vnd.heroku+json; version=3";
5
5
  export declare const SDK_HEADER = "application/vnd.heroku+json; version=3.sdk";
6
6
  export declare const FILTERS_HEADER: string;
7
7
  export declare const PIPELINES_HEADER: string;
8
+ export declare type Owner = Pick<Heroku.Account, 'id' | 'type'> | Pick<Heroku.Team, 'id' | 'type'>;
8
9
  export declare function createAppSetup(heroku: APIClient, body: {
9
10
  body: any;
10
11
  }): Promise<import("@heroku/http-call").HTTP<Heroku.AppSetup>>;
11
12
  export declare function postCoupling(heroku: APIClient, pipeline: any, app: any, stage: string): Promise<import("@heroku/http-call").HTTP<unknown>>;
12
13
  export declare function createCoupling(heroku: APIClient, pipeline: any, app: string, stage: string): Promise<import("@heroku/http-call").HTTP<unknown>>;
13
- export declare function createPipeline(heroku: APIClient, name: any, owner: any): Promise<import("@heroku/http-call").HTTP<Heroku.Pipeline>>;
14
+ export declare function createPipeline(heroku: APIClient, name: string, owner: Owner, generationName?: string): Promise<import("@heroku/http-call").HTTP<Heroku.Pipeline>>;
14
15
  export declare function createPipelineTransfer(heroku: APIClient, pipeline: Heroku.Pipeline): Promise<import("@heroku/http-call").HTTP<unknown>>;
15
16
  export declare function destroyPipeline(heroku: APIClient, name: any, pipelineId: any): Promise<import("@heroku/http-call").HTTP<unknown>>;
16
17
  export declare function findPipelineByName(heroku: APIClient, idOrName: string): Promise<import("@heroku/http-call").HTTP<Heroku.Pipeline[]>>;
package/lib/lib/api.js CHANGED
@@ -20,11 +20,11 @@ function createCoupling(heroku, pipeline, app, stage) {
20
20
  return postCoupling(heroku, pipeline.id, app, stage);
21
21
  }
22
22
  exports.createCoupling = createCoupling;
23
- function createPipeline(heroku, name, owner) {
23
+ function createPipeline(heroku, name, owner, generationName = 'cedar') {
24
24
  return heroku.request('/pipelines', {
25
25
  method: 'POST',
26
26
  headers: { Accept: exports.PIPELINES_HEADER },
27
- body: { name, owner },
27
+ body: { name, owner, generation: { name: generationName } },
28
28
  });
29
29
  }
30
30
  exports.createPipeline = createPipeline;
@@ -57,7 +57,7 @@ export declare type RedisFormationWaitResponse = {
57
57
  };
58
58
  declare type HttpVerb = 'GET' | 'POST' | 'PATCH' | 'DELETE' | 'PUT';
59
59
  declare const _default: (app: string, database: string | undefined, json: boolean, heroku: APIClient) => {
60
- request<T>(path: string, method?: HttpVerb, body?: {}): Promise<import("@heroku/http-call").HTTP<T>>;
60
+ request<T>(path: string, method?: HttpVerb, body?: unknown): Promise<import("@heroku/http-call").HTTP<T>>;
61
61
  makeAddonsFilter(filter: string | undefined): (addons: Required<Heroku.AddOn>[]) => Required<Heroku.AddOn>[];
62
62
  getRedisAddon(addons?: Required<Heroku.AddOn>[]): Promise<Required<Heroku.AddOn>>;
63
63
  info(): Promise<void>;
@@ -6,8 +6,8 @@ exports.default = (app, database, json, heroku) => {
6
6
  const HOST = process.env.HEROKU_REDIS_HOST || 'api.data.heroku.com';
7
7
  const ADDON = process.env.HEROKU_REDIS_ADDON_NAME || 'heroku-redis';
8
8
  return {
9
- request(path, method = 'GET', body = {}) {
10
- const headers = { Accept: 'application/json' };
9
+ request(path, method = 'GET', body = null) {
10
+ const headers = {};
11
11
  if (process.env.HEROKU_HEADERS) {
12
12
  Object.assign(headers, JSON.parse(process.env.HEROKU_HEADERS));
13
13
  }
@@ -169,7 +169,7 @@
169
169
  },
170
170
  "tail": {
171
171
  "char": "t",
172
- "description": "continually stream logs (defaults to true for Fir generation apps)",
172
+ "description": "continually stream logs (always enabled for Fir-generation apps)",
173
173
  "name": "tail",
174
174
  "allowNo": false,
175
175
  "type": "boolean"
@@ -337,202 +337,6 @@
337
337
  "status.js"
338
338
  ]
339
339
  },
340
- "access:add": {
341
- "aliases": [],
342
- "args": {
343
- "email": {
344
- "description": "email address of the team member",
345
- "name": "email",
346
- "required": true
347
- }
348
- },
349
- "description": "add new users to your app",
350
- "examples": [
351
- "$ heroku access:add user@email.com --app APP # add a collaborator to your app",
352
- "$ heroku access:add user@email.com --app APP --permissions deploy,manage,operate # permissions must be comma separated"
353
- ],
354
- "flags": {
355
- "app": {
356
- "char": "a",
357
- "description": "app to run command against",
358
- "name": "app",
359
- "required": true,
360
- "hasDynamicHelp": false,
361
- "multiple": false,
362
- "type": "option"
363
- },
364
- "remote": {
365
- "char": "r",
366
- "description": "git remote of app to use",
367
- "name": "remote",
368
- "hasDynamicHelp": false,
369
- "multiple": false,
370
- "type": "option"
371
- },
372
- "permissions": {
373
- "char": "p",
374
- "description": "list of permissions comma separated",
375
- "name": "permissions",
376
- "hasDynamicHelp": false,
377
- "multiple": false,
378
- "type": "option"
379
- }
380
- },
381
- "hasDynamicHelp": false,
382
- "hiddenAliases": [],
383
- "id": "access:add",
384
- "pluginAlias": "heroku",
385
- "pluginName": "heroku",
386
- "pluginType": "core",
387
- "strict": true,
388
- "isESM": false,
389
- "relativePath": [
390
- "lib",
391
- "commands",
392
- "access",
393
- "add.js"
394
- ]
395
- },
396
- "access": {
397
- "aliases": [],
398
- "args": {},
399
- "description": "list who has access to an app",
400
- "flags": {
401
- "app": {
402
- "char": "a",
403
- "description": "app to run command against",
404
- "name": "app",
405
- "required": true,
406
- "hasDynamicHelp": false,
407
- "multiple": false,
408
- "type": "option"
409
- },
410
- "remote": {
411
- "char": "r",
412
- "description": "git remote of app to use",
413
- "name": "remote",
414
- "hasDynamicHelp": false,
415
- "multiple": false,
416
- "type": "option"
417
- },
418
- "json": {
419
- "description": "output in json format",
420
- "name": "json",
421
- "allowNo": false,
422
- "type": "boolean"
423
- }
424
- },
425
- "hasDynamicHelp": false,
426
- "hiddenAliases": [],
427
- "id": "access",
428
- "pluginAlias": "heroku",
429
- "pluginName": "heroku",
430
- "pluginType": "core",
431
- "strict": true,
432
- "topic": "access",
433
- "isESM": false,
434
- "relativePath": [
435
- "lib",
436
- "commands",
437
- "access",
438
- "index.js"
439
- ]
440
- },
441
- "access:remove": {
442
- "aliases": [],
443
- "args": {},
444
- "description": "remove users from a team app",
445
- "examples": "$ heroku access:remove user@email.com --app APP",
446
- "flags": {
447
- "app": {
448
- "char": "a",
449
- "description": "app to run command against",
450
- "name": "app",
451
- "required": true,
452
- "hasDynamicHelp": false,
453
- "multiple": false,
454
- "type": "option"
455
- },
456
- "remote": {
457
- "char": "r",
458
- "description": "git remote of app to use",
459
- "name": "remote",
460
- "hasDynamicHelp": false,
461
- "multiple": false,
462
- "type": "option"
463
- }
464
- },
465
- "hasDynamicHelp": false,
466
- "hiddenAliases": [],
467
- "id": "access:remove",
468
- "pluginAlias": "heroku",
469
- "pluginName": "heroku",
470
- "pluginType": "core",
471
- "strict": false,
472
- "example": "$ heroku access:remove user@email.com --app APP",
473
- "topic": "access",
474
- "isESM": false,
475
- "relativePath": [
476
- "lib",
477
- "commands",
478
- "access",
479
- "remove.js"
480
- ]
481
- },
482
- "access:update": {
483
- "aliases": [],
484
- "args": {
485
- "email": {
486
- "description": "email address of the team member",
487
- "name": "email",
488
- "required": true
489
- }
490
- },
491
- "description": "update existing collaborators on an team app",
492
- "flags": {
493
- "permissions": {
494
- "char": "p",
495
- "description": "comma-delimited list of permissions to update (deploy,manage,operate)",
496
- "name": "permissions",
497
- "required": true,
498
- "hasDynamicHelp": false,
499
- "multiple": false,
500
- "type": "option"
501
- },
502
- "app": {
503
- "char": "a",
504
- "description": "app to run command against",
505
- "name": "app",
506
- "required": true,
507
- "hasDynamicHelp": false,
508
- "multiple": false,
509
- "type": "option"
510
- },
511
- "remote": {
512
- "char": "r",
513
- "description": "git remote of app to use",
514
- "name": "remote",
515
- "hasDynamicHelp": false,
516
- "multiple": false,
517
- "type": "option"
518
- }
519
- },
520
- "hasDynamicHelp": false,
521
- "hiddenAliases": [],
522
- "id": "access:update",
523
- "pluginAlias": "heroku",
524
- "pluginName": "heroku",
525
- "pluginType": "core",
526
- "strict": true,
527
- "topic": "access",
528
- "isESM": false,
529
- "relativePath": [
530
- "lib",
531
- "commands",
532
- "access",
533
- "update.js"
534
- ]
535
- },
536
340
  "addons:attach": {
537
341
  "aliases": [],
538
342
  "args": {
@@ -1882,17 +1686,213 @@
1882
1686
  "relativePath": [
1883
1687
  "lib",
1884
1688
  "commands",
1885
- "apps",
1886
- "transfer.js"
1689
+ "apps",
1690
+ "transfer.js"
1691
+ ]
1692
+ },
1693
+ "apps:unlock": {
1694
+ "aliases": [
1695
+ "unlock"
1696
+ ],
1697
+ "args": {},
1698
+ "description": "unlock an app so any team member can join",
1699
+ "flags": {
1700
+ "app": {
1701
+ "char": "a",
1702
+ "description": "app to run command against",
1703
+ "name": "app",
1704
+ "required": true,
1705
+ "hasDynamicHelp": false,
1706
+ "multiple": false,
1707
+ "type": "option"
1708
+ },
1709
+ "remote": {
1710
+ "char": "r",
1711
+ "description": "git remote of app to use",
1712
+ "name": "remote",
1713
+ "hasDynamicHelp": false,
1714
+ "multiple": false,
1715
+ "type": "option"
1716
+ }
1717
+ },
1718
+ "hasDynamicHelp": false,
1719
+ "hiddenAliases": [],
1720
+ "id": "apps:unlock",
1721
+ "pluginAlias": "heroku",
1722
+ "pluginName": "heroku",
1723
+ "pluginType": "core",
1724
+ "strict": true,
1725
+ "topic": "apps",
1726
+ "isESM": false,
1727
+ "relativePath": [
1728
+ "lib",
1729
+ "commands",
1730
+ "apps",
1731
+ "unlock.js"
1732
+ ]
1733
+ },
1734
+ "access:add": {
1735
+ "aliases": [],
1736
+ "args": {
1737
+ "email": {
1738
+ "description": "email address of the team member",
1739
+ "name": "email",
1740
+ "required": true
1741
+ }
1742
+ },
1743
+ "description": "add new users to your app",
1744
+ "examples": [
1745
+ "$ heroku access:add user@email.com --app APP # add a collaborator to your app",
1746
+ "$ heroku access:add user@email.com --app APP --permissions deploy,manage,operate # permissions must be comma separated"
1747
+ ],
1748
+ "flags": {
1749
+ "app": {
1750
+ "char": "a",
1751
+ "description": "app to run command against",
1752
+ "name": "app",
1753
+ "required": true,
1754
+ "hasDynamicHelp": false,
1755
+ "multiple": false,
1756
+ "type": "option"
1757
+ },
1758
+ "remote": {
1759
+ "char": "r",
1760
+ "description": "git remote of app to use",
1761
+ "name": "remote",
1762
+ "hasDynamicHelp": false,
1763
+ "multiple": false,
1764
+ "type": "option"
1765
+ },
1766
+ "permissions": {
1767
+ "char": "p",
1768
+ "description": "list of permissions comma separated",
1769
+ "name": "permissions",
1770
+ "hasDynamicHelp": false,
1771
+ "multiple": false,
1772
+ "type": "option"
1773
+ }
1774
+ },
1775
+ "hasDynamicHelp": false,
1776
+ "hiddenAliases": [],
1777
+ "id": "access:add",
1778
+ "pluginAlias": "heroku",
1779
+ "pluginName": "heroku",
1780
+ "pluginType": "core",
1781
+ "strict": true,
1782
+ "isESM": false,
1783
+ "relativePath": [
1784
+ "lib",
1785
+ "commands",
1786
+ "access",
1787
+ "add.js"
1788
+ ]
1789
+ },
1790
+ "access": {
1791
+ "aliases": [],
1792
+ "args": {},
1793
+ "description": "list who has access to an app",
1794
+ "flags": {
1795
+ "app": {
1796
+ "char": "a",
1797
+ "description": "app to run command against",
1798
+ "name": "app",
1799
+ "required": true,
1800
+ "hasDynamicHelp": false,
1801
+ "multiple": false,
1802
+ "type": "option"
1803
+ },
1804
+ "remote": {
1805
+ "char": "r",
1806
+ "description": "git remote of app to use",
1807
+ "name": "remote",
1808
+ "hasDynamicHelp": false,
1809
+ "multiple": false,
1810
+ "type": "option"
1811
+ },
1812
+ "json": {
1813
+ "description": "output in json format",
1814
+ "name": "json",
1815
+ "allowNo": false,
1816
+ "type": "boolean"
1817
+ }
1818
+ },
1819
+ "hasDynamicHelp": false,
1820
+ "hiddenAliases": [],
1821
+ "id": "access",
1822
+ "pluginAlias": "heroku",
1823
+ "pluginName": "heroku",
1824
+ "pluginType": "core",
1825
+ "strict": true,
1826
+ "topic": "access",
1827
+ "isESM": false,
1828
+ "relativePath": [
1829
+ "lib",
1830
+ "commands",
1831
+ "access",
1832
+ "index.js"
1833
+ ]
1834
+ },
1835
+ "access:remove": {
1836
+ "aliases": [],
1837
+ "args": {},
1838
+ "description": "remove users from a team app",
1839
+ "examples": "$ heroku access:remove user@email.com --app APP",
1840
+ "flags": {
1841
+ "app": {
1842
+ "char": "a",
1843
+ "description": "app to run command against",
1844
+ "name": "app",
1845
+ "required": true,
1846
+ "hasDynamicHelp": false,
1847
+ "multiple": false,
1848
+ "type": "option"
1849
+ },
1850
+ "remote": {
1851
+ "char": "r",
1852
+ "description": "git remote of app to use",
1853
+ "name": "remote",
1854
+ "hasDynamicHelp": false,
1855
+ "multiple": false,
1856
+ "type": "option"
1857
+ }
1858
+ },
1859
+ "hasDynamicHelp": false,
1860
+ "hiddenAliases": [],
1861
+ "id": "access:remove",
1862
+ "pluginAlias": "heroku",
1863
+ "pluginName": "heroku",
1864
+ "pluginType": "core",
1865
+ "strict": false,
1866
+ "example": "$ heroku access:remove user@email.com --app APP",
1867
+ "topic": "access",
1868
+ "isESM": false,
1869
+ "relativePath": [
1870
+ "lib",
1871
+ "commands",
1872
+ "access",
1873
+ "remove.js"
1887
1874
  ]
1888
1875
  },
1889
- "apps:unlock": {
1890
- "aliases": [
1891
- "unlock"
1892
- ],
1893
- "args": {},
1894
- "description": "unlock an app so any team member can join",
1876
+ "access:update": {
1877
+ "aliases": [],
1878
+ "args": {
1879
+ "email": {
1880
+ "description": "email address of the team member",
1881
+ "name": "email",
1882
+ "required": true
1883
+ }
1884
+ },
1885
+ "description": "update existing collaborators on an team app",
1895
1886
  "flags": {
1887
+ "permissions": {
1888
+ "char": "p",
1889
+ "description": "comma-delimited list of permissions to update (deploy,manage,operate)",
1890
+ "name": "permissions",
1891
+ "required": true,
1892
+ "hasDynamicHelp": false,
1893
+ "multiple": false,
1894
+ "type": "option"
1895
+ },
1896
1896
  "app": {
1897
1897
  "char": "a",
1898
1898
  "description": "app to run command against",
@@ -1913,18 +1913,18 @@
1913
1913
  },
1914
1914
  "hasDynamicHelp": false,
1915
1915
  "hiddenAliases": [],
1916
- "id": "apps:unlock",
1916
+ "id": "access:update",
1917
1917
  "pluginAlias": "heroku",
1918
1918
  "pluginName": "heroku",
1919
1919
  "pluginType": "core",
1920
1920
  "strict": true,
1921
- "topic": "apps",
1921
+ "topic": "access",
1922
1922
  "isESM": false,
1923
1923
  "relativePath": [
1924
1924
  "lib",
1925
1925
  "commands",
1926
- "apps",
1927
- "unlock.js"
1926
+ "access",
1927
+ "update.js"
1928
1928
  ]
1929
1929
  },
1930
1930
  "auth:login": {
@@ -2543,7 +2543,7 @@
2543
2543
  "buildpacks": {
2544
2544
  "aliases": [],
2545
2545
  "args": {},
2546
- "description": "display the buildpacks for an app",
2546
+ "description": "list the buildpacks on an app",
2547
2547
  "flags": {
2548
2548
  "app": {
2549
2549
  "char": "a",
@@ -10078,6 +10078,7 @@
10078
10078
  "type": "option"
10079
10079
  },
10080
10080
  "app": {
10081
+ "char": "a",
10081
10082
  "description": "filter by app name",
10082
10083
  "name": "app",
10083
10084
  "hasDynamicHelp": false,
@@ -12407,15 +12408,19 @@
12407
12408
  "index.js"
12408
12409
  ]
12409
12410
  },
12410
- "pg:maintenance": {
12411
+ "pg:settings:auto-explain": {
12411
12412
  "aliases": [],
12412
12413
  "args": {
12413
12414
  "database": {
12414
12415
  "description": "config var containing the connection string, unique name, ID, or alias of the database. To access another app's database, prepend the app name to the config var or alias with `APP_NAME::` . If omitted, we use DATABASE_URL.",
12415
12416
  "name": "database"
12417
+ },
12418
+ "value": {
12419
+ "description": "boolean indicating if execution plans of queries will be logged for future connections",
12420
+ "name": "value"
12416
12421
  }
12417
12422
  },
12418
- "description": "show current maintenance information",
12423
+ "description": "Automatically log execution plans of queries without running EXPLAIN by hand.\nThe auto_explain module is loaded at session-time so existing connections will not be logged.\nRestart your Heroku app and/or restart existing connections for logging to start taking place.\n",
12419
12424
  "flags": {
12420
12425
  "app": {
12421
12426
  "char": "a",
@@ -12437,37 +12442,35 @@
12437
12442
  },
12438
12443
  "hasDynamicHelp": false,
12439
12444
  "hiddenAliases": [],
12440
- "id": "pg:maintenance",
12445
+ "id": "pg:settings:auto-explain",
12441
12446
  "pluginAlias": "heroku",
12442
12447
  "pluginName": "heroku",
12443
12448
  "pluginType": "core",
12444
- "strict": true,
12449
+ "strict": false,
12445
12450
  "topic": "pg",
12446
12451
  "isESM": false,
12447
12452
  "relativePath": [
12448
12453
  "lib",
12449
12454
  "commands",
12450
12455
  "pg",
12451
- "maintenance",
12452
- "index.js"
12456
+ "settings",
12457
+ "auto-explain.js"
12453
12458
  ]
12454
12459
  },
12455
- "pg:maintenance:run": {
12460
+ "pg:settings:explain-data-connector-details": {
12456
12461
  "aliases": [],
12457
12462
  "args": {
12458
12463
  "database": {
12459
12464
  "description": "config var containing the connection string, unique name, ID, or alias of the database. To access another app's database, prepend the app name to the config var or alias with `APP_NAME::` . If omitted, we use DATABASE_URL.",
12460
12465
  "name": "database"
12466
+ },
12467
+ "value": {
12468
+ "description": "boolean indicating if data replication slot details get logged",
12469
+ "name": "value"
12461
12470
  }
12462
12471
  },
12463
- "description": "start maintenance",
12472
+ "description": "displays stats on replication slots on your database, the default value is \"off\"\n",
12464
12473
  "flags": {
12465
- "force": {
12466
- "char": "f",
12467
- "name": "force",
12468
- "allowNo": false,
12469
- "type": "boolean"
12470
- },
12471
12474
  "app": {
12472
12475
  "char": "a",
12473
12476
  "description": "app to run command against",
@@ -12488,36 +12491,29 @@
12488
12491
  },
12489
12492
  "hasDynamicHelp": false,
12490
12493
  "hiddenAliases": [],
12491
- "id": "pg:maintenance:run",
12494
+ "id": "pg:settings:explain-data-connector-details",
12492
12495
  "pluginAlias": "heroku",
12493
12496
  "pluginName": "heroku",
12494
12497
  "pluginType": "core",
12495
- "strict": true,
12496
12498
  "topic": "pg",
12497
12499
  "isESM": false,
12498
12500
  "relativePath": [
12499
12501
  "lib",
12500
12502
  "commands",
12501
12503
  "pg",
12502
- "maintenance",
12503
- "run.js"
12504
+ "settings",
12505
+ "explain-data-connector-details.js"
12504
12506
  ]
12505
12507
  },
12506
- "pg:maintenance:window": {
12508
+ "pg:settings": {
12507
12509
  "aliases": [],
12508
12510
  "args": {
12509
- "window": {
12510
- "description": "timestamp of the maintenance window",
12511
- "name": "window",
12512
- "required": true
12513
- },
12514
12511
  "database": {
12515
12512
  "description": "config var containing the connection string, unique name, ID, or alias of the database. To access another app's database, prepend the app name to the config var or alias with `APP_NAME::` . If omitted, we use DATABASE_URL.",
12516
12513
  "name": "database"
12517
12514
  }
12518
12515
  },
12519
- "description": "Set weekly maintenance window.\nAll times are in UTC.\n",
12520
- "examples": "$ heroku pg:maintenance:window \"Sunday 06:00\" postgres-slippery-100",
12516
+ "description": "show your current database settings",
12521
12517
  "flags": {
12522
12518
  "app": {
12523
12519
  "char": "a",
@@ -12539,23 +12535,22 @@
12539
12535
  },
12540
12536
  "hasDynamicHelp": false,
12541
12537
  "hiddenAliases": [],
12542
- "id": "pg:maintenance:window",
12538
+ "id": "pg:settings",
12543
12539
  "pluginAlias": "heroku",
12544
12540
  "pluginName": "heroku",
12545
12541
  "pluginType": "core",
12546
12542
  "strict": true,
12547
12543
  "topic": "pg",
12548
- "example": "$ heroku pg:maintenance:window \"Sunday 06:00\" postgres-slippery-100",
12549
12544
  "isESM": false,
12550
12545
  "relativePath": [
12551
12546
  "lib",
12552
12547
  "commands",
12553
12548
  "pg",
12554
- "maintenance",
12555
- "window.js"
12549
+ "settings",
12550
+ "index.js"
12556
12551
  ]
12557
12552
  },
12558
- "pg:settings:auto-explain": {
12553
+ "pg:settings:log-connections": {
12559
12554
  "aliases": [],
12560
12555
  "args": {
12561
12556
  "database": {
@@ -12563,11 +12558,11 @@
12563
12558
  "name": "database"
12564
12559
  },
12565
12560
  "value": {
12566
- "description": "boolean indicating if execution plans of queries will be logged for future connections",
12561
+ "description": "boolean indicating if database login attempts get logged",
12567
12562
  "name": "value"
12568
12563
  }
12569
12564
  },
12570
- "description": "Automatically log execution plans of queries without running EXPLAIN by hand.\nThe auto_explain module is loaded at session-time so existing connections will not be logged.\nRestart your Heroku app and/or restart existing connections for logging to start taking place.\n",
12565
+ "description": "Controls whether a log message is produced when a login attempt is made. Default is true.\nSetting log_connections to false stops emitting log messages for all attempts to login to the database.",
12571
12566
  "flags": {
12572
12567
  "app": {
12573
12568
  "char": "a",
@@ -12589,11 +12584,10 @@
12589
12584
  },
12590
12585
  "hasDynamicHelp": false,
12591
12586
  "hiddenAliases": [],
12592
- "id": "pg:settings:auto-explain",
12587
+ "id": "pg:settings:log-connections",
12593
12588
  "pluginAlias": "heroku",
12594
12589
  "pluginName": "heroku",
12595
12590
  "pluginType": "core",
12596
- "strict": false,
12597
12591
  "topic": "pg",
12598
12592
  "isESM": false,
12599
12593
  "relativePath": [
@@ -12601,10 +12595,10 @@
12601
12595
  "commands",
12602
12596
  "pg",
12603
12597
  "settings",
12604
- "auto-explain.js"
12598
+ "log-connections.js"
12605
12599
  ]
12606
12600
  },
12607
- "pg:settings:explain-data-connector-details": {
12601
+ "pg:settings:log-lock-waits": {
12608
12602
  "aliases": [],
12609
12603
  "args": {
12610
12604
  "database": {
@@ -12612,11 +12606,11 @@
12612
12606
  "name": "database"
12613
12607
  },
12614
12608
  "value": {
12615
- "description": "boolean indicating if data replication slot details get logged",
12609
+ "description": "boolean indicating if a message gets logged when a session waits longer than the deadlock_timeout to acquire a lock",
12616
12610
  "name": "value"
12617
12611
  }
12618
12612
  },
12619
- "description": "displays stats on replication slots on your database, the default value is \"off\"\n",
12613
+ "description": "Controls whether a log message is produced when a session waits longer than the deadlock_timeout to acquire a lock. deadlock_timeout is set to 1 second\nDelays due to lock contention occur when multiple transactions are trying to access the same resource at the same time.\nApplications and their query patterns should try to avoid changes to many different tables within the same transaction.\n",
12620
12614
  "flags": {
12621
12615
  "app": {
12622
12616
  "char": "a",
@@ -12638,7 +12632,7 @@
12638
12632
  },
12639
12633
  "hasDynamicHelp": false,
12640
12634
  "hiddenAliases": [],
12641
- "id": "pg:settings:explain-data-connector-details",
12635
+ "id": "pg:settings:log-lock-waits",
12642
12636
  "pluginAlias": "heroku",
12643
12637
  "pluginName": "heroku",
12644
12638
  "pluginType": "core",
@@ -12649,18 +12643,22 @@
12649
12643
  "commands",
12650
12644
  "pg",
12651
12645
  "settings",
12652
- "explain-data-connector-details.js"
12646
+ "log-lock-waits.js"
12653
12647
  ]
12654
12648
  },
12655
- "pg:settings": {
12649
+ "pg:settings:log-min-duration-statement": {
12656
12650
  "aliases": [],
12657
12651
  "args": {
12658
12652
  "database": {
12659
12653
  "description": "config var containing the connection string, unique name, ID, or alias of the database. To access another app's database, prepend the app name to the config var or alias with `APP_NAME::` . If omitted, we use DATABASE_URL.",
12660
12654
  "name": "database"
12655
+ },
12656
+ "value": {
12657
+ "description": "milliseconds to wait for a statement to complete before logging it",
12658
+ "name": "value"
12661
12659
  }
12662
12660
  },
12663
- "description": "show your current database settings",
12661
+ "description": "The duration of each completed statement will be logged if the statement completes after the time specified by VALUE.\nVALUE needs to specified as a whole number, in milliseconds.\nSetting log_min_duration_statement to zero prints all statement durations and -1 will disable logging statement durations.\n",
12664
12662
  "flags": {
12665
12663
  "app": {
12666
12664
  "char": "a",
@@ -12682,11 +12680,10 @@
12682
12680
  },
12683
12681
  "hasDynamicHelp": false,
12684
12682
  "hiddenAliases": [],
12685
- "id": "pg:settings",
12683
+ "id": "pg:settings:log-min-duration-statement",
12686
12684
  "pluginAlias": "heroku",
12687
12685
  "pluginName": "heroku",
12688
12686
  "pluginType": "core",
12689
- "strict": true,
12690
12687
  "topic": "pg",
12691
12688
  "isESM": false,
12692
12689
  "relativePath": [
@@ -12694,10 +12691,10 @@
12694
12691
  "commands",
12695
12692
  "pg",
12696
12693
  "settings",
12697
- "index.js"
12694
+ "log-min-duration-statement.js"
12698
12695
  ]
12699
12696
  },
12700
- "pg:settings:log-connections": {
12697
+ "pg:settings:log-min-error-statement": {
12701
12698
  "aliases": [],
12702
12699
  "args": {
12703
12700
  "database": {
@@ -12705,11 +12702,16 @@
12705
12702
  "name": "database"
12706
12703
  },
12707
12704
  "value": {
12708
- "description": "boolean indicating if database login attempts get logged",
12709
- "name": "value"
12705
+ "name": "value",
12706
+ "options": [
12707
+ "error",
12708
+ "log",
12709
+ "fatal",
12710
+ "panic"
12711
+ ]
12710
12712
  }
12711
12713
  },
12712
- "description": "Controls whether a log message is produced when a login attempt is made. Default is true.\nSetting log_connections to false stops emitting log messages for all attempts to login to the database.",
12714
+ "description": "log-min-error-statement controls the logging of SQL statements that cause an error at a specified severity level.\nThis setting is useful to prevent logging SQL queries that might contain sensitive information.\nUse this setting to prevent logging SQL queries that contain sensitive information. Default is \"error\".\n",
12713
12715
  "flags": {
12714
12716
  "app": {
12715
12717
  "char": "a",
@@ -12731,7 +12733,7 @@
12731
12733
  },
12732
12734
  "hasDynamicHelp": false,
12733
12735
  "hiddenAliases": [],
12734
- "id": "pg:settings:log-connections",
12736
+ "id": "pg:settings:log-min-error-statement",
12735
12737
  "pluginAlias": "heroku",
12736
12738
  "pluginName": "heroku",
12737
12739
  "pluginType": "core",
@@ -12742,10 +12744,10 @@
12742
12744
  "commands",
12743
12745
  "pg",
12744
12746
  "settings",
12745
- "log-connections.js"
12747
+ "log-min-error-statement.js"
12746
12748
  ]
12747
12749
  },
12748
- "pg:settings:log-lock-waits": {
12750
+ "pg:settings:log-statement": {
12749
12751
  "aliases": [],
12750
12752
  "args": {
12751
12753
  "database": {
@@ -12753,11 +12755,17 @@
12753
12755
  "name": "database"
12754
12756
  },
12755
12757
  "value": {
12756
- "description": "boolean indicating if a message gets logged when a session waits longer than the deadlock_timeout to acquire a lock",
12757
- "name": "value"
12758
+ "description": "type of SQL statements to log\n<options: none|ddl|mod|all>",
12759
+ "name": "value",
12760
+ "options": [
12761
+ "none",
12762
+ "ddl",
12763
+ "mod",
12764
+ "all"
12765
+ ]
12758
12766
  }
12759
12767
  },
12760
- "description": "Controls whether a log message is produced when a session waits longer than the deadlock_timeout to acquire a lock. deadlock_timeout is set to 1 second\nDelays due to lock contention occur when multiple transactions are trying to access the same resource at the same time.\nApplications and their query patterns should try to avoid changes to many different tables within the same transaction.\n",
12768
+ "description": "log_statement controls which SQL statements are logged.\nValid values for VALUE:\nnone - No statements are logged\nddl - All data definition statements, such as CREATE, ALTER and DROP will be logged\nmod - Includes all statements from ddl as well as data-modifying statements such as INSERT, UPDATE, DELETE, TRUNCATE, COPY\nall - All statements are logged\n",
12761
12769
  "flags": {
12762
12770
  "app": {
12763
12771
  "char": "a",
@@ -12779,7 +12787,7 @@
12779
12787
  },
12780
12788
  "hasDynamicHelp": false,
12781
12789
  "hiddenAliases": [],
12782
- "id": "pg:settings:log-lock-waits",
12790
+ "id": "pg:settings:log-statement",
12783
12791
  "pluginAlias": "heroku",
12784
12792
  "pluginName": "heroku",
12785
12793
  "pluginType": "core",
@@ -12790,10 +12798,10 @@
12790
12798
  "commands",
12791
12799
  "pg",
12792
12800
  "settings",
12793
- "log-lock-waits.js"
12801
+ "log-statement.js"
12794
12802
  ]
12795
12803
  },
12796
- "pg:settings:log-min-duration-statement": {
12804
+ "pg:settings:track-functions": {
12797
12805
  "aliases": [],
12798
12806
  "args": {
12799
12807
  "database": {
@@ -12801,11 +12809,16 @@
12801
12809
  "name": "database"
12802
12810
  },
12803
12811
  "value": {
12804
- "description": "milliseconds to wait for a statement to complete before logging it",
12805
- "name": "value"
12812
+ "description": "function type to track\n<options: none|pl|all>",
12813
+ "name": "value",
12814
+ "options": [
12815
+ "none",
12816
+ "pl",
12817
+ "all"
12818
+ ]
12806
12819
  }
12807
12820
  },
12808
- "description": "The duration of each completed statement will be logged if the statement completes after the time specified by VALUE.\nVALUE needs to specified as a whole number, in milliseconds.\nSetting log_min_duration_statement to zero prints all statement durations and -1 will disable logging statement durations.\n",
12821
+ "description": "track_functions controls tracking of function call counts and time used. Default is none.\nValid values for VALUE:\nnone - No functions are tracked (default)\npl - Only procedural language functions are tracked\nall - All functions, including SQL and C language functions, are tracked. Simple SQL-language that are inlined are not tracked",
12809
12822
  "flags": {
12810
12823
  "app": {
12811
12824
  "char": "a",
@@ -12827,7 +12840,7 @@
12827
12840
  },
12828
12841
  "hasDynamicHelp": false,
12829
12842
  "hiddenAliases": [],
12830
- "id": "pg:settings:log-min-duration-statement",
12843
+ "id": "pg:settings:track-functions",
12831
12844
  "pluginAlias": "heroku",
12832
12845
  "pluginName": "heroku",
12833
12846
  "pluginType": "core",
@@ -12838,27 +12851,18 @@
12838
12851
  "commands",
12839
12852
  "pg",
12840
12853
  "settings",
12841
- "log-min-duration-statement.js"
12854
+ "track-functions.js"
12842
12855
  ]
12843
12856
  },
12844
- "pg:settings:log-min-error-statement": {
12857
+ "pg:maintenance": {
12845
12858
  "aliases": [],
12846
12859
  "args": {
12847
12860
  "database": {
12848
12861
  "description": "config var containing the connection string, unique name, ID, or alias of the database. To access another app's database, prepend the app name to the config var or alias with `APP_NAME::` . If omitted, we use DATABASE_URL.",
12849
12862
  "name": "database"
12850
- },
12851
- "value": {
12852
- "name": "value",
12853
- "options": [
12854
- "error",
12855
- "log",
12856
- "fatal",
12857
- "panic"
12858
- ]
12859
12863
  }
12860
12864
  },
12861
- "description": "log-min-error-statement controls the logging of SQL statements that cause an error at a specified severity level.\nThis setting is useful to prevent logging SQL queries that might contain sensitive information.\nUse this setting to prevent logging SQL queries that contain sensitive information. Default is \"error\".\n",
12865
+ "description": "show current maintenance information",
12862
12866
  "flags": {
12863
12867
  "app": {
12864
12868
  "char": "a",
@@ -12880,40 +12884,37 @@
12880
12884
  },
12881
12885
  "hasDynamicHelp": false,
12882
12886
  "hiddenAliases": [],
12883
- "id": "pg:settings:log-min-error-statement",
12887
+ "id": "pg:maintenance",
12884
12888
  "pluginAlias": "heroku",
12885
12889
  "pluginName": "heroku",
12886
12890
  "pluginType": "core",
12891
+ "strict": true,
12887
12892
  "topic": "pg",
12888
12893
  "isESM": false,
12889
12894
  "relativePath": [
12890
12895
  "lib",
12891
12896
  "commands",
12892
12897
  "pg",
12893
- "settings",
12894
- "log-min-error-statement.js"
12898
+ "maintenance",
12899
+ "index.js"
12895
12900
  ]
12896
12901
  },
12897
- "pg:settings:log-statement": {
12902
+ "pg:maintenance:run": {
12898
12903
  "aliases": [],
12899
12904
  "args": {
12900
12905
  "database": {
12901
12906
  "description": "config var containing the connection string, unique name, ID, or alias of the database. To access another app's database, prepend the app name to the config var or alias with `APP_NAME::` . If omitted, we use DATABASE_URL.",
12902
12907
  "name": "database"
12903
- },
12904
- "value": {
12905
- "description": "type of SQL statements to log\n<options: none|ddl|mod|all>",
12906
- "name": "value",
12907
- "options": [
12908
- "none",
12909
- "ddl",
12910
- "mod",
12911
- "all"
12912
- ]
12913
12908
  }
12914
12909
  },
12915
- "description": "log_statement controls which SQL statements are logged.\nValid values for VALUE:\nnone - No statements are logged\nddl - All data definition statements, such as CREATE, ALTER and DROP will be logged\nmod - Includes all statements from ddl as well as data-modifying statements such as INSERT, UPDATE, DELETE, TRUNCATE, COPY\nall - All statements are logged\n",
12910
+ "description": "start maintenance",
12916
12911
  "flags": {
12912
+ "force": {
12913
+ "char": "f",
12914
+ "name": "force",
12915
+ "allowNo": false,
12916
+ "type": "boolean"
12917
+ },
12917
12918
  "app": {
12918
12919
  "char": "a",
12919
12920
  "description": "app to run command against",
@@ -12934,38 +12935,36 @@
12934
12935
  },
12935
12936
  "hasDynamicHelp": false,
12936
12937
  "hiddenAliases": [],
12937
- "id": "pg:settings:log-statement",
12938
+ "id": "pg:maintenance:run",
12938
12939
  "pluginAlias": "heroku",
12939
12940
  "pluginName": "heroku",
12940
12941
  "pluginType": "core",
12942
+ "strict": true,
12941
12943
  "topic": "pg",
12942
12944
  "isESM": false,
12943
12945
  "relativePath": [
12944
12946
  "lib",
12945
12947
  "commands",
12946
12948
  "pg",
12947
- "settings",
12948
- "log-statement.js"
12949
+ "maintenance",
12950
+ "run.js"
12949
12951
  ]
12950
12952
  },
12951
- "pg:settings:track-functions": {
12953
+ "pg:maintenance:window": {
12952
12954
  "aliases": [],
12953
12955
  "args": {
12956
+ "window": {
12957
+ "description": "timestamp of the maintenance window",
12958
+ "name": "window",
12959
+ "required": true
12960
+ },
12954
12961
  "database": {
12955
12962
  "description": "config var containing the connection string, unique name, ID, or alias of the database. To access another app's database, prepend the app name to the config var or alias with `APP_NAME::` . If omitted, we use DATABASE_URL.",
12956
12963
  "name": "database"
12957
- },
12958
- "value": {
12959
- "description": "function type to track\n<options: none|pl|all>",
12960
- "name": "value",
12961
- "options": [
12962
- "none",
12963
- "pl",
12964
- "all"
12965
- ]
12966
12964
  }
12967
12965
  },
12968
- "description": "track_functions controls tracking of function call counts and time used. Default is none.\nValid values for VALUE:\nnone - No functions are tracked (default)\npl - Only procedural language functions are tracked\nall - All functions, including SQL and C language functions, are tracked. Simple SQL-language that are inlined are not tracked",
12966
+ "description": "Set weekly maintenance window.\nAll times are in UTC.\n",
12967
+ "examples": "$ heroku pg:maintenance:window \"Sunday 06:00\" postgres-slippery-100",
12969
12968
  "flags": {
12970
12969
  "app": {
12971
12970
  "char": "a",
@@ -12987,18 +12986,20 @@
12987
12986
  },
12988
12987
  "hasDynamicHelp": false,
12989
12988
  "hiddenAliases": [],
12990
- "id": "pg:settings:track-functions",
12989
+ "id": "pg:maintenance:window",
12991
12990
  "pluginAlias": "heroku",
12992
12991
  "pluginName": "heroku",
12993
12992
  "pluginType": "core",
12993
+ "strict": true,
12994
12994
  "topic": "pg",
12995
+ "example": "$ heroku pg:maintenance:window \"Sunday 06:00\" postgres-slippery-100",
12995
12996
  "isESM": false,
12996
12997
  "relativePath": [
12997
12998
  "lib",
12998
12999
  "commands",
12999
13000
  "pg",
13000
- "settings",
13001
- "track-functions.js"
13001
+ "maintenance",
13002
+ "window.js"
13002
13003
  ]
13003
13004
  },
13004
13005
  "ps:autoscale:disable": {
@@ -14450,5 +14451,5 @@
14450
14451
  ]
14451
14452
  }
14452
14453
  },
14453
- "version": "10.2.0-beta.0"
14454
+ "version": "10.3.0-beta.0"
14454
14455
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "heroku",
3
3
  "description": "CLI to interact with Heroku",
4
- "version": "10.2.0-beta.0",
4
+ "version": "10.3.0-beta.0",
5
5
  "author": "Heroku",
6
6
  "bin": "./bin/run",
7
7
  "bugs": "https://github.com/heroku/cli/issues",
@@ -9,7 +9,7 @@
9
9
  "@heroku-cli/color": "2.0.1",
10
10
  "@heroku-cli/command": "^11.5.0",
11
11
  "@heroku-cli/notifications": "^1.2.4",
12
- "@heroku-cli/plugin-ps-exec": "2.6.1",
12
+ "@heroku-cli/plugin-ps-exec": "2.6.2",
13
13
  "@heroku-cli/schema": "^1.0.25",
14
14
  "@heroku/buildpack-registry": "^1.0.1",
15
15
  "@heroku/eventsource": "^1.0.7",
@@ -66,7 +66,7 @@
66
66
  "shell-quote": "^1.8.1",
67
67
  "smooth-progress": "^1.1.0",
68
68
  "sparkline": "^0.2.0",
69
- "ssh2": "^1.15.0",
69
+ "ssh2": "^1.16.0",
70
70
  "stdout-stderr": "^0.1.13",
71
71
  "strftime": "^0.10.0",
72
72
  "strip-ansi": "^6",
@@ -103,7 +103,7 @@
103
103
  "@types/shell-escape": "^0.2.0",
104
104
  "@types/shell-quote": "^1.7.5",
105
105
  "@types/sinon": "^17.0.3",
106
- "@types/ssh2": "^1.15.0",
106
+ "@types/ssh2": "^1.15.4",
107
107
  "@types/std-mocks": "^1.0.4",
108
108
  "@types/strftime": "^0.9.8",
109
109
  "@types/supports-color": "^8.1.3",
@@ -368,6 +368,7 @@
368
368
  "heroku-pipelines": null,
369
369
  "heroku-ps-wait": null,
370
370
  "heroku-redis": null,
371
+ "heroku-repo": "@heroku-cli/plugin-heroku-repo",
371
372
  "heroku-skynet-cli": "@heroku/skynet",
372
373
  "heroku-splunk": "@heroku/splunk",
373
374
  "heroku-sudo": "@heroku/sudo",
@@ -396,5 +397,5 @@
396
397
  "version": "oclif readme --multi && git add README.md ../../docs"
397
398
  },
398
399
  "types": "lib/index.d.ts",
399
- "gitHead": "2c28399f0d89032f78f8caac507bf7e507aefea5"
400
+ "gitHead": "3df5c5557b27d824077c46994213490e56f94015"
400
401
  }