From 9225c84874b12e47ee2c04e3fcbbb77d54a7c4fe Mon Sep 17 00:00:00 2001 From: Kush Patel Date: Tue, 21 Oct 2025 15:59:30 -0500 Subject: [PATCH 1/7] feat: add sp.listWorkspaceDefaults command --- packages/i18n/src/locales/en_US.ts | 4 ++++ packages/shell-api/src/streams.spec.ts | 22 ++++++++++++++++++++++ packages/shell-api/src/streams.ts | 14 ++++++++++++++ 3 files changed, 40 insertions(+) diff --git a/packages/i18n/src/locales/en_US.ts b/packages/i18n/src/locales/en_US.ts index 9d186d5d09..0016b54217 100644 --- a/packages/i18n/src/locales/en_US.ts +++ b/packages/i18n/src/locales/en_US.ts @@ -2894,6 +2894,10 @@ const translations: Catalog = { description: 'Show a list of all the named connections for this instance from the Connection Registry.', }, + listWorkspaceDefaults: { + description: + 'Show the default tier and maxTierSize for the stream processor workspace.', + }, }, }, }, diff --git a/packages/shell-api/src/streams.spec.ts b/packages/shell-api/src/streams.spec.ts index 538045b10f..8e34900608 100644 --- a/packages/shell-api/src/streams.spec.ts +++ b/packages/shell-api/src/streams.spec.ts @@ -312,4 +312,26 @@ describe('Streams', function () { ).to.be.true; }); }); + + describe('listWorkspaceDefaults', function () { + it('returns error when command fails', async function () { + const error = { ok: 0 }; + sinon.stub(mongo._serviceProvider, 'runCommand').resolves(error); + + const result = await streams.listWorkspaceDefaults(); + expect(result).to.eql(error); + }); + + it('returns tier and maxTierSize on success', async function () { + const runCmdStub = sinon + .stub(mongo._serviceProvider, 'runCommand') + .resolves({ ok: 1, tier: 'M10', maxTierSize: 1024 }); + + const result = await streams.listWorkspaceDefaults(); + expect(result).to.eql({ tier: 'M10', maxTierSize: 1024 }); + + const cmd = { listWorkspaceDefaults: 1 }; + expect(runCmdStub.calledOnceWithExactly('admin', cmd, {})).to.be.true; + }); + }); }); diff --git a/packages/shell-api/src/streams.ts b/packages/shell-api/src/streams.ts index 1a17979093..d4eee294d9 100644 --- a/packages/shell-api/src/streams.ts +++ b/packages/shell-api/src/streams.ts @@ -162,6 +162,20 @@ export class Streams< }); } + @returnsPromise + async listWorkspaceDefaults() { + const result = await this._runStreamCommand({ + listWorkspaceDefaults: 1, + }); + if (result.ok !== 1) { + return result; + } + return { + tier: result.tier, + maxTierSize: result.maxTierSize, + }; + } + async _runStreamCommand(cmd: Document, options: Document = {}) { return this._mongo._serviceProvider.runCommand(ADMIN_DB, cmd, options); // run cmd } From c7fb5c643f2c0e4787d39622c8092c34c45cd33d Mon Sep 17 00:00:00 2001 From: Kush Patel Date: Mon, 27 Oct 2025 16:48:30 -0500 Subject: [PATCH 2/7] add type to listWorkspaceDefaults method --- packages/shell-api/src/streams.spec.ts | 3 ++- packages/shell-api/src/streams.ts | 20 +++++++++++++++----- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/packages/shell-api/src/streams.spec.ts b/packages/shell-api/src/streams.spec.ts index 8e34900608..811ee45114 100644 --- a/packages/shell-api/src/streams.spec.ts +++ b/packages/shell-api/src/streams.spec.ts @@ -328,7 +328,8 @@ describe('Streams', function () { .resolves({ ok: 1, tier: 'M10', maxTierSize: 1024 }); const result = await streams.listWorkspaceDefaults(); - expect(result).to.eql({ tier: 'M10', maxTierSize: 1024 }); + expect(result.tier).to.equal('M10'); + expect(result.maxTierSize).to.equal(1024); const cmd = { listWorkspaceDefaults: 1 }; expect(runCmdStub.calledOnceWithExactly('admin', cmd, {})).to.be.true; diff --git a/packages/shell-api/src/streams.ts b/packages/shell-api/src/streams.ts index d4eee294d9..875516dad9 100644 --- a/packages/shell-api/src/streams.ts +++ b/packages/shell-api/src/streams.ts @@ -5,6 +5,7 @@ import { returnsPromise, shellApiClassDefault, ShellApiWithMongoClass, + ShellApiValueClass, } from './decorators'; import StreamProcessor from './stream-processor'; import { ADMIN_DB, asPrintable, shellApiType } from './enums'; @@ -13,6 +14,18 @@ import type Mongo from './mongo'; import type { GenericDatabaseSchema, GenericServerSideSchema } from './helpers'; import type { MQLPipeline } from './mql-types'; +@shellApiClassDefault +export class WorkspaceDefaults extends ShellApiValueClass { + tier: string; + maxTierSize: number; + + constructor(tier: string, maxTierSize: number) { + super(); + this.tier = tier; + this.maxTierSize = maxTierSize; + } +} + @shellApiClassDefault export class Streams< M extends GenericServerSideSchema = GenericServerSideSchema, @@ -163,17 +176,14 @@ export class Streams< } @returnsPromise - async listWorkspaceDefaults() { + async listWorkspaceDefaults(): Promise { const result = await this._runStreamCommand({ listWorkspaceDefaults: 1, }); if (result.ok !== 1) { return result; } - return { - tier: result.tier, - maxTierSize: result.maxTierSize, - }; + return new WorkspaceDefaults(result.tier, result.maxTierSize); } async _runStreamCommand(cmd: Document, options: Document = {}) { From e14397bd18e8479dac10251f645f4842d025e380 Mon Sep 17 00:00:00 2001 From: Kush Patel Date: Tue, 28 Oct 2025 09:45:16 -0500 Subject: [PATCH 3/7] remove WorkspaceDefaults class in favor of type --- packages/shell-api/src/streams.spec.ts | 15 +++------------ packages/shell-api/src/streams.ts | 22 +++++++--------------- 2 files changed, 10 insertions(+), 27 deletions(-) diff --git a/packages/shell-api/src/streams.spec.ts b/packages/shell-api/src/streams.spec.ts index 811ee45114..6783e20cb5 100644 --- a/packages/shell-api/src/streams.spec.ts +++ b/packages/shell-api/src/streams.spec.ts @@ -314,22 +314,13 @@ describe('Streams', function () { }); describe('listWorkspaceDefaults', function () { - it('returns error when command fails', async function () { - const error = { ok: 0 }; - sinon.stub(mongo._serviceProvider, 'runCommand').resolves(error); - - const result = await streams.listWorkspaceDefaults(); - expect(result).to.eql(error); - }); - - it('returns tier and maxTierSize on success', async function () { + it('returns tier and maxTierSize', async function () { const runCmdStub = sinon .stub(mongo._serviceProvider, 'runCommand') - .resolves({ ok: 1, tier: 'M10', maxTierSize: 1024 }); + .resolves({ ok: 1, tier: 'SP2', maxTierSize: 'SP30' }); const result = await streams.listWorkspaceDefaults(); - expect(result.tier).to.equal('M10'); - expect(result.maxTierSize).to.equal(1024); + expect(result).to.deep.include({ tier: 'SP2', maxTierSize: 'SP30' }); const cmd = { listWorkspaceDefaults: 1 }; expect(runCmdStub.calledOnceWithExactly('admin', cmd, {})).to.be.true; diff --git a/packages/shell-api/src/streams.ts b/packages/shell-api/src/streams.ts index 875516dad9..0a48f0e861 100644 --- a/packages/shell-api/src/streams.ts +++ b/packages/shell-api/src/streams.ts @@ -5,7 +5,6 @@ import { returnsPromise, shellApiClassDefault, ShellApiWithMongoClass, - ShellApiValueClass, } from './decorators'; import StreamProcessor from './stream-processor'; import { ADMIN_DB, asPrintable, shellApiType } from './enums'; @@ -14,17 +13,10 @@ import type Mongo from './mongo'; import type { GenericDatabaseSchema, GenericServerSideSchema } from './helpers'; import type { MQLPipeline } from './mql-types'; -@shellApiClassDefault -export class WorkspaceDefaults extends ShellApiValueClass { +type WorkspaceDefaults = { tier: string; maxTierSize: number; - - constructor(tier: string, maxTierSize: number) { - super(); - this.tier = tier; - this.maxTierSize = maxTierSize; - } -} +}; @shellApiClassDefault export class Streams< @@ -176,14 +168,14 @@ export class Streams< } @returnsPromise - async listWorkspaceDefaults(): Promise { + async listWorkspaceDefaults(): Promise { const result = await this._runStreamCommand({ listWorkspaceDefaults: 1, }); - if (result.ok !== 1) { - return result; - } - return new WorkspaceDefaults(result.tier, result.maxTierSize); + return { + tier: result.tier, + maxTierSize: result.maxTierSize, + }; } async _runStreamCommand(cmd: Document, options: Document = {}) { From a094b0a438a9397607c07daebfced90fc5b02f8c Mon Sep 17 00:00:00 2001 From: Kush Patel Date: Tue, 28 Oct 2025 09:51:35 -0500 Subject: [PATCH 4/7] modify maxTierSize type to be string --- packages/shell-api/src/streams.spec.ts | 2 +- packages/shell-api/src/streams.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/shell-api/src/streams.spec.ts b/packages/shell-api/src/streams.spec.ts index 6783e20cb5..61b6ccda1d 100644 --- a/packages/shell-api/src/streams.spec.ts +++ b/packages/shell-api/src/streams.spec.ts @@ -320,7 +320,7 @@ describe('Streams', function () { .resolves({ ok: 1, tier: 'SP2', maxTierSize: 'SP30' }); const result = await streams.listWorkspaceDefaults(); - expect(result).to.deep.include({ tier: 'SP2', maxTierSize: 'SP30' }); + expect(result).to.eql({ tier: 'SP2', maxTierSize: 'SP30' }); const cmd = { listWorkspaceDefaults: 1 }; expect(runCmdStub.calledOnceWithExactly('admin', cmd, {})).to.be.true; diff --git a/packages/shell-api/src/streams.ts b/packages/shell-api/src/streams.ts index 0a48f0e861..32d04da295 100644 --- a/packages/shell-api/src/streams.ts +++ b/packages/shell-api/src/streams.ts @@ -15,7 +15,7 @@ import type { MQLPipeline } from './mql-types'; type WorkspaceDefaults = { tier: string; - maxTierSize: number; + maxTierSize: string; }; @shellApiClassDefault From 332f438e9eb22908f73241f2b47105eddd77f816 Mon Sep 17 00:00:00 2001 From: Kush Patel Date: Tue, 28 Oct 2025 10:11:18 -0500 Subject: [PATCH 5/7] use defaultTierSize over tier --- packages/shell-api/src/streams.spec.ts | 4 ++-- packages/shell-api/src/streams.ts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/shell-api/src/streams.spec.ts b/packages/shell-api/src/streams.spec.ts index 61b6ccda1d..f6521c071a 100644 --- a/packages/shell-api/src/streams.spec.ts +++ b/packages/shell-api/src/streams.spec.ts @@ -317,10 +317,10 @@ describe('Streams', function () { it('returns tier and maxTierSize', async function () { const runCmdStub = sinon .stub(mongo._serviceProvider, 'runCommand') - .resolves({ ok: 1, tier: 'SP2', maxTierSize: 'SP30' }); + .resolves({ ok: 1, defaultTierSize: 'SP2', maxTierSize: 'SP30' }); const result = await streams.listWorkspaceDefaults(); - expect(result).to.eql({ tier: 'SP2', maxTierSize: 'SP30' }); + expect(result).to.eql({ defaultTierSize: 'SP2', maxTierSize: 'SP30' }); const cmd = { listWorkspaceDefaults: 1 }; expect(runCmdStub.calledOnceWithExactly('admin', cmd, {})).to.be.true; diff --git a/packages/shell-api/src/streams.ts b/packages/shell-api/src/streams.ts index 32d04da295..0372f8d8dc 100644 --- a/packages/shell-api/src/streams.ts +++ b/packages/shell-api/src/streams.ts @@ -14,7 +14,7 @@ import type { GenericDatabaseSchema, GenericServerSideSchema } from './helpers'; import type { MQLPipeline } from './mql-types'; type WorkspaceDefaults = { - tier: string; + defaultTierSize: string; maxTierSize: string; }; @@ -173,7 +173,7 @@ export class Streams< listWorkspaceDefaults: 1, }); return { - tier: result.tier, + defaultTierSize: result.defaultTierSize, maxTierSize: result.maxTierSize, }; } From 84c0246346a202c68892dc36e3578cf0a9b2a86e Mon Sep 17 00:00:00 2001 From: Kush Patel Date: Tue, 28 Oct 2025 13:46:28 -0500 Subject: [PATCH 6/7] remove field mapping logic --- packages/shell-api/src/streams.ts | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/packages/shell-api/src/streams.ts b/packages/shell-api/src/streams.ts index 0372f8d8dc..f2c2047e2b 100644 --- a/packages/shell-api/src/streams.ts +++ b/packages/shell-api/src/streams.ts @@ -169,13 +169,9 @@ export class Streams< @returnsPromise async listWorkspaceDefaults(): Promise { - const result = await this._runStreamCommand({ + return (await this._runStreamCommand({ listWorkspaceDefaults: 1, - }); - return { - defaultTierSize: result.defaultTierSize, - maxTierSize: result.maxTierSize, - }; + })) as WorkspaceDefaults; } async _runStreamCommand(cmd: Document, options: Document = {}) { From 67d3fdb5cd74bc99f54d05e3619c15ef47268c05 Mon Sep 17 00:00:00 2001 From: Kush Patel Date: Tue, 28 Oct 2025 13:48:20 -0500 Subject: [PATCH 7/7] fix test --- packages/shell-api/src/streams.spec.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/shell-api/src/streams.spec.ts b/packages/shell-api/src/streams.spec.ts index f6521c071a..68995d790d 100644 --- a/packages/shell-api/src/streams.spec.ts +++ b/packages/shell-api/src/streams.spec.ts @@ -320,7 +320,11 @@ describe('Streams', function () { .resolves({ ok: 1, defaultTierSize: 'SP2', maxTierSize: 'SP30' }); const result = await streams.listWorkspaceDefaults(); - expect(result).to.eql({ defaultTierSize: 'SP2', maxTierSize: 'SP30' }); + expect(result).to.eql({ + ok: 1, + defaultTierSize: 'SP2', + maxTierSize: 'SP30', + }); const cmd = { listWorkspaceDefaults: 1 }; expect(runCmdStub.calledOnceWithExactly('admin', cmd, {})).to.be.true;