@zuplo/cli 6.52.4 → 6.52.6
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/__tests__/integration/delete.integration.test.d.ts +2 -0
- package/dist/__tests__/integration/delete.integration.test.d.ts.map +1 -0
- package/dist/__tests__/integration/delete.integration.test.js +162 -0
- package/dist/__tests__/integration/delete.integration.test.js.map +1 -0
- package/dist/__tests__/integration/deploy.integration.test.d.ts +2 -0
- package/dist/__tests__/integration/deploy.integration.test.d.ts.map +1 -0
- package/dist/__tests__/integration/deploy.integration.test.js +249 -0
- package/dist/__tests__/integration/deploy.integration.test.js.map +1 -0
- package/dist/__tests__/integration/jest-mocks-setup.d.ts +2 -0
- package/dist/__tests__/integration/jest-mocks-setup.d.ts.map +1 -0
- package/dist/__tests__/integration/jest-mocks-setup.js +59 -0
- package/dist/__tests__/integration/jest-mocks-setup.js.map +1 -0
- package/dist/__tests__/integration/jest-setup.d.ts +2 -0
- package/dist/__tests__/integration/jest-setup.d.ts.map +1 -0
- package/dist/__tests__/integration/jest-setup.js +12 -0
- package/dist/__tests__/integration/jest-setup.js.map +1 -0
- package/dist/__tests__/integration/link.integration.test.d.ts +2 -0
- package/dist/__tests__/integration/link.integration.test.d.ts.map +1 -0
- package/dist/__tests__/integration/link.integration.test.js +340 -0
- package/dist/__tests__/integration/link.integration.test.js.map +1 -0
- package/dist/__tests__/integration/list.integration.test.d.ts +2 -0
- package/dist/__tests__/integration/list.integration.test.d.ts.map +1 -0
- package/dist/__tests__/integration/list.integration.test.js +156 -0
- package/dist/__tests__/integration/list.integration.test.js.map +1 -0
- package/dist/__tests__/integration/test-utils.d.ts +30 -0
- package/dist/__tests__/integration/test-utils.d.ts.map +1 -0
- package/dist/__tests__/integration/test-utils.js +82 -0
- package/dist/__tests__/integration/test-utils.js.map +1 -0
- package/dist/__tests__/integration/tunnel.integration.test.d.ts +2 -0
- package/dist/__tests__/integration/tunnel.integration.test.d.ts.map +1 -0
- package/dist/__tests__/integration/tunnel.integration.test.js +477 -0
- package/dist/__tests__/integration/tunnel.integration.test.js.map +1 -0
- package/dist/__tests__/integration/variable.integration.test.d.ts +2 -0
- package/dist/__tests__/integration/variable.integration.test.d.ts.map +1 -0
- package/dist/__tests__/integration/variable.integration.test.js +258 -0
- package/dist/__tests__/integration/variable.integration.test.js.map +1 -0
- package/dist/build/handler.d.ts.map +1 -1
- package/dist/build/handler.js +8 -1
- package/dist/build/handler.js.map +1 -1
- package/dist/common/builders/authenticated-command-builder.d.ts +18 -0
- package/dist/common/builders/authenticated-command-builder.d.ts.map +1 -0
- package/dist/common/builders/authenticated-command-builder.js +87 -0
- package/dist/common/builders/authenticated-command-builder.js.map +1 -0
- package/dist/common/builders/authenticated-command-builder.spec.d.ts +2 -0
- package/dist/common/builders/authenticated-command-builder.spec.d.ts.map +1 -0
- package/dist/common/builders/authenticated-command-builder.spec.js +268 -0
- package/dist/common/builders/authenticated-command-builder.spec.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +4 -4
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
import { describe, it, beforeEach, afterEach } from "node:test";
|
|
2
|
+
import { expect } from "chai";
|
|
3
|
+
import sinon from "sinon";
|
|
4
|
+
import { AuthenticatedCommandBuilder, } from "./authenticated-command-builder.js";
|
|
5
|
+
import { authenticate } from "../middleware/authentication.js";
|
|
6
|
+
import { configure } from "../middleware/user-configuration.js";
|
|
7
|
+
import { identify } from "../middleware/user-identification.js";
|
|
8
|
+
import setBlocking from "../output.js";
|
|
9
|
+
import { YargsChecker } from "../validators/lib.js";
|
|
10
|
+
class MockYargs {
|
|
11
|
+
options = {};
|
|
12
|
+
middlewareList = [];
|
|
13
|
+
checkFunction = null;
|
|
14
|
+
option(key, config) {
|
|
15
|
+
this.options[key] = config;
|
|
16
|
+
return this;
|
|
17
|
+
}
|
|
18
|
+
middleware(middlewareArray) {
|
|
19
|
+
this.middlewareList.push(...middlewareArray);
|
|
20
|
+
return this;
|
|
21
|
+
}
|
|
22
|
+
check(fn) {
|
|
23
|
+
this.checkFunction = fn;
|
|
24
|
+
return this;
|
|
25
|
+
}
|
|
26
|
+
getOptions() {
|
|
27
|
+
return this.options;
|
|
28
|
+
}
|
|
29
|
+
getMiddleware() {
|
|
30
|
+
return this.middlewareList;
|
|
31
|
+
}
|
|
32
|
+
getCheckFunction() {
|
|
33
|
+
return this.checkFunction;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
describe("AuthenticatedCommandBuilder", () => {
|
|
37
|
+
let yargsCheckerStub;
|
|
38
|
+
beforeEach(() => {
|
|
39
|
+
yargsCheckerStub = sinon.stub(YargsChecker.prototype, "check");
|
|
40
|
+
});
|
|
41
|
+
afterEach(() => {
|
|
42
|
+
sinon.restore();
|
|
43
|
+
});
|
|
44
|
+
describe("private constructor", () => {
|
|
45
|
+
it("should only be accessible through static factory methods", () => {
|
|
46
|
+
const builder = AuthenticatedCommandBuilder.create();
|
|
47
|
+
expect(builder).to.be.instanceOf(AuthenticatedCommandBuilder);
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
describe("static factory methods", () => {
|
|
51
|
+
describe("create", () => {
|
|
52
|
+
it("should create new instance with provided options", () => {
|
|
53
|
+
const options = {
|
|
54
|
+
requireSelfHostedEndpoint: true,
|
|
55
|
+
additionalValidators: [],
|
|
56
|
+
};
|
|
57
|
+
const builder = AuthenticatedCommandBuilder.create(options);
|
|
58
|
+
expect(builder).to.be.instanceOf(AuthenticatedCommandBuilder);
|
|
59
|
+
});
|
|
60
|
+
it("should create new instance with default options when none provided", () => {
|
|
61
|
+
const builder = AuthenticatedCommandBuilder.create();
|
|
62
|
+
expect(builder).to.be.instanceOf(AuthenticatedCommandBuilder);
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
describe("withSelfHosted", () => {
|
|
66
|
+
it("should create instance with requireSelfHostedEndpoint set to true", () => {
|
|
67
|
+
const builder = AuthenticatedCommandBuilder.withSelfHosted();
|
|
68
|
+
expect(builder).to.be.instanceOf(AuthenticatedCommandBuilder);
|
|
69
|
+
});
|
|
70
|
+
it("should merge additional options with requireSelfHostedEndpoint", () => {
|
|
71
|
+
const options = { additionalValidators: [] };
|
|
72
|
+
const builder = AuthenticatedCommandBuilder.withSelfHosted(options);
|
|
73
|
+
expect(builder).to.be.instanceOf(AuthenticatedCommandBuilder);
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
describe("withMiddleware", () => {
|
|
77
|
+
it("should create instance with additional middleware", () => {
|
|
78
|
+
const mockMiddleware = sinon.stub();
|
|
79
|
+
const builder = AuthenticatedCommandBuilder.withMiddleware([
|
|
80
|
+
mockMiddleware,
|
|
81
|
+
]);
|
|
82
|
+
expect(builder).to.be.instanceOf(AuthenticatedCommandBuilder);
|
|
83
|
+
});
|
|
84
|
+
it("should merge additional options with middleware", () => {
|
|
85
|
+
const mockMiddleware = sinon.stub();
|
|
86
|
+
const options = { requireSelfHostedEndpoint: true };
|
|
87
|
+
const builder = AuthenticatedCommandBuilder.withMiddleware([mockMiddleware], options);
|
|
88
|
+
expect(builder).to.be.instanceOf(AuthenticatedCommandBuilder);
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
describe("build", () => {
|
|
93
|
+
let mockYargs;
|
|
94
|
+
beforeEach(() => {
|
|
95
|
+
mockYargs = new MockYargs();
|
|
96
|
+
yargsCheckerStub.resolves(true);
|
|
97
|
+
});
|
|
98
|
+
it("should add standard options (api-key and project by default)", () => {
|
|
99
|
+
const builder = AuthenticatedCommandBuilder.create();
|
|
100
|
+
builder.build(mockYargs);
|
|
101
|
+
const options = mockYargs.getOptions();
|
|
102
|
+
expect(options).to.have.property("api-key");
|
|
103
|
+
expect(options).to.have.property("project");
|
|
104
|
+
expect(options).to.not.have.property("self-hosted-endpoint");
|
|
105
|
+
});
|
|
106
|
+
it("should add self-hosted-endpoint option when requireSelfHostedEndpoint is true", () => {
|
|
107
|
+
const builder = AuthenticatedCommandBuilder.create({
|
|
108
|
+
requireSelfHostedEndpoint: true,
|
|
109
|
+
});
|
|
110
|
+
builder.build(mockYargs);
|
|
111
|
+
const options = mockYargs.getOptions();
|
|
112
|
+
expect(options).to.have.property("self-hosted-endpoint");
|
|
113
|
+
});
|
|
114
|
+
it("should apply custom builder function when provided", () => {
|
|
115
|
+
const builder = AuthenticatedCommandBuilder.create();
|
|
116
|
+
const customBuilder = (yargs) => yargs.option("test-option", {
|
|
117
|
+
type: "string",
|
|
118
|
+
describe: "Test option",
|
|
119
|
+
});
|
|
120
|
+
builder.build(mockYargs, customBuilder);
|
|
121
|
+
const options = mockYargs.getOptions();
|
|
122
|
+
expect(options).to.have.property("test-option");
|
|
123
|
+
});
|
|
124
|
+
it("should add all required middleware", () => {
|
|
125
|
+
const builder = AuthenticatedCommandBuilder.create();
|
|
126
|
+
builder.build(mockYargs);
|
|
127
|
+
const middleware = mockYargs.getMiddleware();
|
|
128
|
+
expect(middleware).to.have.length(4);
|
|
129
|
+
expect(middleware).to.include(setBlocking);
|
|
130
|
+
expect(middleware).to.include(authenticate);
|
|
131
|
+
expect(middleware).to.include(configure);
|
|
132
|
+
expect(middleware).to.include(identify);
|
|
133
|
+
});
|
|
134
|
+
it("should add additional middleware when provided", () => {
|
|
135
|
+
const customMiddleware = sinon.stub();
|
|
136
|
+
const builder = AuthenticatedCommandBuilder.withMiddleware([
|
|
137
|
+
customMiddleware,
|
|
138
|
+
]);
|
|
139
|
+
builder.build(mockYargs);
|
|
140
|
+
const middleware = mockYargs.getMiddleware();
|
|
141
|
+
expect(middleware).to.have.length(5);
|
|
142
|
+
expect(middleware).to.include(customMiddleware);
|
|
143
|
+
});
|
|
144
|
+
it("should always add project validator", () => {
|
|
145
|
+
const builder = AuthenticatedCommandBuilder.create();
|
|
146
|
+
builder.build(mockYargs);
|
|
147
|
+
const checkFunction = mockYargs.getCheckFunction();
|
|
148
|
+
expect(checkFunction).to.not.be.null;
|
|
149
|
+
});
|
|
150
|
+
it("should add additional validators when provided", () => {
|
|
151
|
+
const mockValidator = {
|
|
152
|
+
validate: sinon.stub().resolves({ ok: true }),
|
|
153
|
+
};
|
|
154
|
+
const builder = AuthenticatedCommandBuilder.create({
|
|
155
|
+
additionalValidators: [mockValidator],
|
|
156
|
+
});
|
|
157
|
+
builder.build(mockYargs);
|
|
158
|
+
const checkFunction = mockYargs.getCheckFunction();
|
|
159
|
+
expect(checkFunction).to.not.be.null;
|
|
160
|
+
});
|
|
161
|
+
it("should handle single validator correctly", async () => {
|
|
162
|
+
const builder = AuthenticatedCommandBuilder.create();
|
|
163
|
+
builder.build(mockYargs);
|
|
164
|
+
const checkFunction = mockYargs.getCheckFunction();
|
|
165
|
+
expect(checkFunction).to.not.be.null;
|
|
166
|
+
if (checkFunction) {
|
|
167
|
+
await checkFunction({ project: "test-project" });
|
|
168
|
+
expect(yargsCheckerStub.callCount).to.equal(1);
|
|
169
|
+
}
|
|
170
|
+
});
|
|
171
|
+
it("should handle multiple validators correctly", async () => {
|
|
172
|
+
const mockValidator1 = {
|
|
173
|
+
validate: sinon.stub().resolves({ ok: true }),
|
|
174
|
+
};
|
|
175
|
+
const mockValidator2 = {
|
|
176
|
+
validate: sinon.stub().resolves({ ok: true }),
|
|
177
|
+
};
|
|
178
|
+
const builder = AuthenticatedCommandBuilder.create({
|
|
179
|
+
additionalValidators: [mockValidator1, mockValidator2],
|
|
180
|
+
});
|
|
181
|
+
builder.build(mockYargs);
|
|
182
|
+
const checkFunction = mockYargs.getCheckFunction();
|
|
183
|
+
expect(checkFunction).to.not.be.null;
|
|
184
|
+
if (checkFunction) {
|
|
185
|
+
yargsCheckerStub.onFirstCall().resolves(true);
|
|
186
|
+
yargsCheckerStub.onSecondCall().resolves(true);
|
|
187
|
+
yargsCheckerStub.onThirdCall().resolves(true);
|
|
188
|
+
const result = await checkFunction({ project: "test-project" });
|
|
189
|
+
expect(result).to.be.true;
|
|
190
|
+
expect(yargsCheckerStub.callCount).to.equal(3);
|
|
191
|
+
}
|
|
192
|
+
});
|
|
193
|
+
it("should return early from validation if any validator fails", async () => {
|
|
194
|
+
const mockValidator1 = {
|
|
195
|
+
validate: sinon.stub().resolves({ ok: true }),
|
|
196
|
+
};
|
|
197
|
+
const mockValidator2 = {
|
|
198
|
+
validate: sinon.stub().resolves({ ok: true }),
|
|
199
|
+
};
|
|
200
|
+
const builder = AuthenticatedCommandBuilder.create({
|
|
201
|
+
additionalValidators: [mockValidator1, mockValidator2],
|
|
202
|
+
});
|
|
203
|
+
builder.build(mockYargs);
|
|
204
|
+
const checkFunction = mockYargs.getCheckFunction();
|
|
205
|
+
expect(checkFunction).to.not.be.null;
|
|
206
|
+
if (checkFunction) {
|
|
207
|
+
yargsCheckerStub.onFirstCall().resolves(true);
|
|
208
|
+
yargsCheckerStub.onSecondCall().resolves("Validation failed");
|
|
209
|
+
const result = await checkFunction({ project: "test-project" });
|
|
210
|
+
expect(result).to.equal("Validation failed");
|
|
211
|
+
expect(yargsCheckerStub.callCount).to.equal(2);
|
|
212
|
+
}
|
|
213
|
+
});
|
|
214
|
+
});
|
|
215
|
+
describe("integration scenarios", () => {
|
|
216
|
+
let mockYargs;
|
|
217
|
+
beforeEach(() => {
|
|
218
|
+
mockYargs = new MockYargs();
|
|
219
|
+
yargsCheckerStub.resolves(true);
|
|
220
|
+
});
|
|
221
|
+
it("should build command for basic authenticated scenario", () => {
|
|
222
|
+
const builder = AuthenticatedCommandBuilder.create();
|
|
223
|
+
const result = builder.build(mockYargs);
|
|
224
|
+
const options = mockYargs.getOptions();
|
|
225
|
+
expect(options).to.have.property("api-key");
|
|
226
|
+
expect(options).to.have.property("project");
|
|
227
|
+
expect(result).to.equal(mockYargs);
|
|
228
|
+
});
|
|
229
|
+
it("should build command with self-hosted endpoint support", () => {
|
|
230
|
+
const builder = AuthenticatedCommandBuilder.create({
|
|
231
|
+
requireSelfHostedEndpoint: true,
|
|
232
|
+
});
|
|
233
|
+
builder.build(mockYargs);
|
|
234
|
+
const options = mockYargs.getOptions();
|
|
235
|
+
expect(options).to.have.property("api-key");
|
|
236
|
+
expect(options).to.have.property("project");
|
|
237
|
+
expect(options).to.have.property("self-hosted-endpoint");
|
|
238
|
+
});
|
|
239
|
+
it("should build command with custom options and validation", () => {
|
|
240
|
+
AuthenticatedCommandBuilder.create().build(mockYargs, (yargs) => yargs
|
|
241
|
+
.option("url", {
|
|
242
|
+
type: "string",
|
|
243
|
+
describe: "The URL to process",
|
|
244
|
+
})
|
|
245
|
+
.option("wait", {
|
|
246
|
+
type: "boolean",
|
|
247
|
+
describe: "Wait for completion",
|
|
248
|
+
}));
|
|
249
|
+
const options = mockYargs.getOptions();
|
|
250
|
+
expect(options).to.have.property("url");
|
|
251
|
+
expect(options).to.have.property("wait");
|
|
252
|
+
});
|
|
253
|
+
it("should build command with additional middleware", () => {
|
|
254
|
+
const customMiddleware = sinon.stub();
|
|
255
|
+
const builder = AuthenticatedCommandBuilder.withMiddleware([
|
|
256
|
+
customMiddleware,
|
|
257
|
+
]);
|
|
258
|
+
builder.build(mockYargs, (yargs) => yargs.option("name", { type: "string", describe: "Project name" }));
|
|
259
|
+
const options = mockYargs.getOptions();
|
|
260
|
+
expect(options).to.have.property("api-key");
|
|
261
|
+
expect(options).to.have.property("project");
|
|
262
|
+
expect(options).to.have.property("name");
|
|
263
|
+
const checkFunction = mockYargs.getCheckFunction();
|
|
264
|
+
expect(checkFunction).to.not.be.null;
|
|
265
|
+
});
|
|
266
|
+
});
|
|
267
|
+
});
|
|
268
|
+
//# sourceMappingURL=authenticated-command-builder.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authenticated-command-builder.spec.js","sourceRoot":"","sources":["../../../src/common/builders/authenticated-command-builder.spec.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAChE,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EACL,2BAA2B,GAE5B,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,MAAM,sCAAsC,CAAC;AAChE,OAAO,WAAW,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGpD,MAAM,SAAS;IACL,OAAO,GAA4B,EAAE,CAAC;IACtC,cAAc,GAAc,EAAE,CAAC;IAC/B,aAAa,GAEV,IAAI,CAAC;IAEhB,MAAM,CAAC,GAAW,EAAE,MAAe;QACjC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;QAC3B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,UAAU,CAAC,eAA0B;QACnC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,CAAC;QAC7C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CACH,EAAmE;QAEnE,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IAGD,UAAU;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,aAAa;QACX,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;IAED,gBAAgB;QAGd,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;CACF;AAED,QAAQ,CAAC,6BAA6B,EAAE,GAAG,EAAE;IAC3C,IAAI,gBAAiC,CAAC;IAEtC,UAAU,CAAC,GAAG,EAAE;QACd,gBAAgB,GAAG,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,KAAK,CAAC,OAAO,EAAE,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;QACnC,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;YAElE,MAAM,OAAO,GAAG,2BAA2B,CAAC,MAAM,EAAE,CAAC;YACrD,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,2BAA2B,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;QACtC,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;YACtB,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;gBAC1D,MAAM,OAAO,GAAgC;oBAC3C,yBAAyB,EAAE,IAAI;oBAC/B,oBAAoB,EAAE,EAAE;iBACzB,CAAC;gBACF,MAAM,OAAO,GAAG,2BAA2B,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBAC5D,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,2BAA2B,CAAC,CAAC;YAChE,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,oEAAoE,EAAE,GAAG,EAAE;gBAC5E,MAAM,OAAO,GAAG,2BAA2B,CAAC,MAAM,EAAE,CAAC;gBACrD,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,2BAA2B,CAAC,CAAC;YAChE,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;YAC9B,EAAE,CAAC,mEAAmE,EAAE,GAAG,EAAE;gBAC3E,MAAM,OAAO,GAAG,2BAA2B,CAAC,cAAc,EAAE,CAAC;gBAC7D,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,2BAA2B,CAAC,CAAC;YAChE,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,gEAAgE,EAAE,GAAG,EAAE;gBACxE,MAAM,OAAO,GAAG,EAAE,oBAAoB,EAAE,EAAE,EAAE,CAAC;gBAC7C,MAAM,OAAO,GAAG,2BAA2B,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;gBACpE,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,2BAA2B,CAAC,CAAC;YAChE,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;YAC9B,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;gBAC3D,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;gBACpC,MAAM,OAAO,GAAG,2BAA2B,CAAC,cAAc,CAAC;oBACzD,cAAc;iBACf,CAAC,CAAC;gBACH,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,2BAA2B,CAAC,CAAC;YAChE,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;gBACzD,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;gBACpC,MAAM,OAAO,GAAG,EAAE,yBAAyB,EAAE,IAAI,EAAE,CAAC;gBACpD,MAAM,OAAO,GAAG,2BAA2B,CAAC,cAAc,CACxD,CAAC,cAAc,CAAC,EAChB,OAAO,CACR,CAAC;gBACF,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,2BAA2B,CAAC,CAAC;YAChE,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,OAAO,EAAE,GAAG,EAAE;QACrB,IAAI,SAAoB,CAAC;QAEzB,UAAU,CAAC,GAAG,EAAE;YACd,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC;YAC5B,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;YACtE,MAAM,OAAO,GAAG,2BAA2B,CAAC,MAAM,EAAE,CAAC;YACrD,OAAO,CAAC,KAAK,CAAC,SAA4B,CAAC,CAAC;YAE5C,MAAM,OAAO,GAAG,SAAS,CAAC,UAAU,EAAE,CAAC;YACvC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YAC5C,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YAC5C,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;QAIH,EAAE,CAAC,+EAA+E,EAAE,GAAG,EAAE;YACvF,MAAM,OAAO,GAAG,2BAA2B,CAAC,MAAM,CAAC;gBACjD,yBAAyB,EAAE,IAAI;aAChC,CAAC,CAAC;YACH,OAAO,CAAC,KAAK,CAAC,SAA4B,CAAC,CAAC;YAE5C,MAAM,OAAO,GAAG,SAAS,CAAC,UAAU,EAAE,CAAC;YACvC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;QAIH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;YAC5D,MAAM,OAAO,GAAG,2BAA2B,CAAC,MAAM,EAAE,CAAC;YACrD,MAAM,aAAa,GAAG,CAAC,KAAW,EAAE,EAAE,CACpC,KAAK,CAAC,MAAM,CAAC,aAAa,EAAE;gBAC1B,IAAI,EAAE,QAAQ;gBACd,QAAQ,EAAE,aAAa;aACxB,CAAC,CAAC;YAEL,OAAO,CAAC,KAAK,CAAC,SAA4B,EAAE,aAAa,CAAC,CAAC;YAE3D,MAAM,OAAO,GAAG,SAAS,CAAC,UAAU,EAAE,CAAC;YACvC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;YAC5C,MAAM,OAAO,GAAG,2BAA2B,CAAC,MAAM,EAAE,CAAC;YACrD,OAAO,CAAC,KAAK,CAAC,SAA4B,CAAC,CAAC;YAE5C,MAAM,UAAU,GAAG,SAAS,CAAC,aAAa,EAAE,CAAC;YAC7C,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACrC,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;YAC3C,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YAC5C,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YACzC,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC1C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;YACxD,MAAM,gBAAgB,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;YACtC,MAAM,OAAO,GAAG,2BAA2B,CAAC,cAAc,CAAC;gBACzD,gBAAgB;aACjB,CAAC,CAAC;YACH,OAAO,CAAC,KAAK,CAAC,SAA4B,CAAC,CAAC;YAE5C,MAAM,UAAU,GAAG,SAAS,CAAC,aAAa,EAAE,CAAC;YAC7C,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACrC,MAAM,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;QAClD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qCAAqC,EAAE,GAAG,EAAE;YAC7C,MAAM,OAAO,GAAG,2BAA2B,CAAC,MAAM,EAAE,CAAC;YACrD,OAAO,CAAC,KAAK,CAAC,SAA4B,CAAC,CAAC;YAE5C,MAAM,aAAa,GAAG,SAAS,CAAC,gBAAgB,EAAE,CAAC;YACnD,MAAM,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC;QACvC,CAAC,CAAC,CAAC;QAIH,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;YACxD,MAAM,aAAa,GAAG;gBACpB,QAAQ,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;aAC9C,CAAC;YACF,MAAM,OAAO,GAAG,2BAA2B,CAAC,MAAM,CAAC;gBACjD,oBAAoB,EAAE,CAAC,aAAa,CAAC;aACtC,CAAC,CAAC;YACH,OAAO,CAAC,KAAK,CAAC,SAA4B,CAAC,CAAC;YAE5C,MAAM,aAAa,GAAG,SAAS,CAAC,gBAAgB,EAAE,CAAC;YACnD,MAAM,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC;QACvC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;YACxD,MAAM,OAAO,GAAG,2BAA2B,CAAC,MAAM,EAAE,CAAC;YACrD,OAAO,CAAC,KAAK,CAAC,SAA4B,CAAC,CAAC;YAE5C,MAAM,aAAa,GAAG,SAAS,CAAC,gBAAgB,EAAE,CAAC;YACnD,MAAM,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC;YAErC,IAAI,aAAa,EAAE,CAAC;gBAClB,MAAM,aAAa,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC;gBACjD,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACjD,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;YAC3D,MAAM,cAAc,GAAG;gBACrB,QAAQ,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;aAC9C,CAAC;YACF,MAAM,cAAc,GAAG;gBACrB,QAAQ,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;aAC9C,CAAC;YACF,MAAM,OAAO,GAAG,2BAA2B,CAAC,MAAM,CAAC;gBACjD,oBAAoB,EAAE,CAAC,cAAc,EAAE,cAAc,CAAC;aACvD,CAAC,CAAC;YACH,OAAO,CAAC,KAAK,CAAC,SAA4B,CAAC,CAAC;YAE5C,MAAM,aAAa,GAAG,SAAS,CAAC,gBAAgB,EAAE,CAAC;YACnD,MAAM,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC;YAErC,IAAI,aAAa,EAAE,CAAC;gBAClB,gBAAgB,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBAC9C,gBAAgB,CAAC,YAAY,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBAC/C,gBAAgB,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBAE9C,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC;gBAChE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC;gBAC1B,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACjD,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;YAC1E,MAAM,cAAc,GAAG;gBACrB,QAAQ,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;aAC9C,CAAC;YACF,MAAM,cAAc,GAAG;gBACrB,QAAQ,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;aAC9C,CAAC;YACF,MAAM,OAAO,GAAG,2BAA2B,CAAC,MAAM,CAAC;gBACjD,oBAAoB,EAAE,CAAC,cAAc,EAAE,cAAc,CAAC;aACvD,CAAC,CAAC;YACH,OAAO,CAAC,KAAK,CAAC,SAA4B,CAAC,CAAC;YAE5C,MAAM,aAAa,GAAG,SAAS,CAAC,gBAAgB,EAAE,CAAC;YACnD,MAAM,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC;YAErC,IAAI,aAAa,EAAE,CAAC;gBAClB,gBAAgB,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gBAC9C,gBAAgB,CAAC,YAAY,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC;gBAE9D,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC;gBAChE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;gBAC7C,MAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACjD,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;QACrC,IAAI,SAAoB,CAAC;QAEzB,UAAU,CAAC,GAAG,EAAE;YACd,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC;YAC5B,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;YAC/D,MAAM,OAAO,GAAG,2BAA2B,CAAC,MAAM,EAAE,CAAC;YACrD,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,SAA4B,CAAC,CAAC;YAE3D,MAAM,OAAO,GAAG,SAAS,CAAC,UAAU,EAAE,CAAC;YACvC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YAC5C,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YAC5C,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QACrC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wDAAwD,EAAE,GAAG,EAAE;YAChE,MAAM,OAAO,GAAG,2BAA2B,CAAC,MAAM,CAAC;gBACjD,yBAAyB,EAAE,IAAI;aAChC,CAAC,CAAC;YACH,OAAO,CAAC,KAAK,CAAC,SAA4B,CAAC,CAAC;YAE5C,MAAM,OAAO,GAAG,SAAS,CAAC,UAAU,EAAE,CAAC;YACvC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YAC5C,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YAC5C,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,sBAAsB,CAAC,CAAC;QAC3D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;YACjE,2BAA2B,CAAC,MAAM,EAAE,CAAC,KAAK,CACxC,SAA4B,EAC5B,CAAC,KAAW,EAAE,EAAE,CACd,KAAK;iBACF,MAAM,CAAC,KAAK,EAAE;gBACb,IAAI,EAAE,QAAiB;gBACvB,QAAQ,EAAE,oBAAoB;aAC/B,CAAC;iBACD,MAAM,CAAC,MAAM,EAAE;gBACd,IAAI,EAAE,SAAkB;gBACxB,QAAQ,EAAE,qBAAqB;aAChC,CAAC,CACP,CAAC;YAEF,MAAM,OAAO,GAAG,SAAS,CAAC,UAAU,EAAE,CAAC;YACvC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YACxC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;YACzD,MAAM,gBAAgB,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;YACtC,MAAM,OAAO,GAAG,2BAA2B,CAAC,cAAc,CAAC;gBACzD,gBAAgB;aACjB,CAAC,CAAC;YACH,OAAO,CAAC,KAAK,CAAC,SAA4B,EAAE,CAAC,KAAW,EAAE,EAAE,CAC1D,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC,CACnE,CAAC;YAEF,MAAM,OAAO,GAAG,SAAS,CAAC,UAAU,EAAE,CAAC;YACvC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YAC5C,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YAC5C,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YAGzC,MAAM,aAAa,GAAG,SAAS,CAAC,gBAAgB,EAAE,CAAC;YACnD,MAAM,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC;QACvC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["/* eslint-disable @typescript-eslint/no-floating-promises */\n\nimport { describe, it, beforeEach, afterEach } from \"node:test\";\nimport { expect } from \"chai\";\nimport sinon from \"sinon\";\nimport type { Argv } from \"yargs\";\nimport {\n AuthenticatedCommandBuilder,\n type AuthenticatedCommandOptions,\n} from \"./authenticated-command-builder.js\";\nimport { authenticate } from \"../middleware/authentication.js\";\nimport { configure } from \"../middleware/user-configuration.js\";\nimport { identify } from \"../middleware/user-identification.js\";\nimport setBlocking from \"../output.js\";\nimport { YargsChecker } from \"../validators/lib.js\";\n\n// Mock yargs instance for testing\nclass MockYargs {\n private options: Record<string, unknown> = {};\n private middlewareList: unknown[] = [];\n private checkFunction:\n | ((argv: unknown) => boolean | string | Promise<boolean | string>)\n | null = null;\n\n option(key: string, config: unknown): MockYargs {\n this.options[key] = config;\n return this;\n }\n\n middleware(middlewareArray: unknown[]): MockYargs {\n this.middlewareList.push(...middlewareArray);\n return this;\n }\n\n check(\n fn: (argv: unknown) => boolean | string | Promise<boolean | string>\n ): MockYargs {\n this.checkFunction = fn;\n return this;\n }\n\n // Helper methods for testing\n getOptions(): Record<string, unknown> {\n return this.options;\n }\n\n getMiddleware(): unknown[] {\n return this.middlewareList;\n }\n\n getCheckFunction():\n | ((argv: unknown) => boolean | string | Promise<boolean | string>)\n | null {\n return this.checkFunction;\n }\n}\n\ndescribe(\"AuthenticatedCommandBuilder\", () => {\n let yargsCheckerStub: sinon.SinonStub;\n\n beforeEach(() => {\n yargsCheckerStub = sinon.stub(YargsChecker.prototype, \"check\");\n });\n\n afterEach(() => {\n sinon.restore();\n });\n\n describe(\"private constructor\", () => {\n it(\"should only be accessible through static factory methods\", () => {\n // Constructor is private, so we test through factory methods\n const builder = AuthenticatedCommandBuilder.create();\n expect(builder).to.be.instanceOf(AuthenticatedCommandBuilder);\n });\n });\n\n describe(\"static factory methods\", () => {\n describe(\"create\", () => {\n it(\"should create new instance with provided options\", () => {\n const options: AuthenticatedCommandOptions = {\n requireSelfHostedEndpoint: true,\n additionalValidators: [],\n };\n const builder = AuthenticatedCommandBuilder.create(options);\n expect(builder).to.be.instanceOf(AuthenticatedCommandBuilder);\n });\n\n it(\"should create new instance with default options when none provided\", () => {\n const builder = AuthenticatedCommandBuilder.create();\n expect(builder).to.be.instanceOf(AuthenticatedCommandBuilder);\n });\n });\n\n describe(\"withSelfHosted\", () => {\n it(\"should create instance with requireSelfHostedEndpoint set to true\", () => {\n const builder = AuthenticatedCommandBuilder.withSelfHosted();\n expect(builder).to.be.instanceOf(AuthenticatedCommandBuilder);\n });\n\n it(\"should merge additional options with requireSelfHostedEndpoint\", () => {\n const options = { additionalValidators: [] };\n const builder = AuthenticatedCommandBuilder.withSelfHosted(options);\n expect(builder).to.be.instanceOf(AuthenticatedCommandBuilder);\n });\n });\n\n describe(\"withMiddleware\", () => {\n it(\"should create instance with additional middleware\", () => {\n const mockMiddleware = sinon.stub();\n const builder = AuthenticatedCommandBuilder.withMiddleware([\n mockMiddleware,\n ]);\n expect(builder).to.be.instanceOf(AuthenticatedCommandBuilder);\n });\n\n it(\"should merge additional options with middleware\", () => {\n const mockMiddleware = sinon.stub();\n const options = { requireSelfHostedEndpoint: true };\n const builder = AuthenticatedCommandBuilder.withMiddleware(\n [mockMiddleware],\n options\n );\n expect(builder).to.be.instanceOf(AuthenticatedCommandBuilder);\n });\n });\n });\n\n describe(\"build\", () => {\n let mockYargs: MockYargs;\n\n beforeEach(() => {\n mockYargs = new MockYargs();\n yargsCheckerStub.resolves(true);\n });\n\n it(\"should add standard options (api-key and project by default)\", () => {\n const builder = AuthenticatedCommandBuilder.create();\n builder.build(mockYargs as unknown as Argv);\n\n const options = mockYargs.getOptions();\n expect(options).to.have.property(\"api-key\");\n expect(options).to.have.property(\"project\");\n expect(options).to.not.have.property(\"self-hosted-endpoint\");\n });\n\n // Project is always required now, so this test is no longer relevant\n\n it(\"should add self-hosted-endpoint option when requireSelfHostedEndpoint is true\", () => {\n const builder = AuthenticatedCommandBuilder.create({\n requireSelfHostedEndpoint: true,\n });\n builder.build(mockYargs as unknown as Argv);\n\n const options = mockYargs.getOptions();\n expect(options).to.have.property(\"self-hosted-endpoint\");\n });\n\n // Custom options are now handled through the customBuilder function parameter\n\n it(\"should apply custom builder function when provided\", () => {\n const builder = AuthenticatedCommandBuilder.create();\n const customBuilder = (yargs: Argv) =>\n yargs.option(\"test-option\", {\n type: \"string\",\n describe: \"Test option\",\n });\n\n builder.build(mockYargs as unknown as Argv, customBuilder);\n\n const options = mockYargs.getOptions();\n expect(options).to.have.property(\"test-option\");\n });\n\n it(\"should add all required middleware\", () => {\n const builder = AuthenticatedCommandBuilder.create();\n builder.build(mockYargs as unknown as Argv);\n\n const middleware = mockYargs.getMiddleware();\n expect(middleware).to.have.length(4);\n expect(middleware).to.include(setBlocking);\n expect(middleware).to.include(authenticate);\n expect(middleware).to.include(configure);\n expect(middleware).to.include(identify);\n });\n\n it(\"should add additional middleware when provided\", () => {\n const customMiddleware = sinon.stub();\n const builder = AuthenticatedCommandBuilder.withMiddleware([\n customMiddleware,\n ]);\n builder.build(mockYargs as unknown as Argv);\n\n const middleware = mockYargs.getMiddleware();\n expect(middleware).to.have.length(5);\n expect(middleware).to.include(customMiddleware);\n });\n\n it(\"should always add project validator\", () => {\n const builder = AuthenticatedCommandBuilder.create();\n builder.build(mockYargs as unknown as Argv);\n\n const checkFunction = mockYargs.getCheckFunction();\n expect(checkFunction).to.not.be.null;\n });\n\n // Project validator is always added now, so this test is no longer relevant\n\n it(\"should add additional validators when provided\", () => {\n const mockValidator = {\n validate: sinon.stub().resolves({ ok: true }),\n };\n const builder = AuthenticatedCommandBuilder.create({\n additionalValidators: [mockValidator],\n });\n builder.build(mockYargs as unknown as Argv);\n\n const checkFunction = mockYargs.getCheckFunction();\n expect(checkFunction).to.not.be.null;\n });\n\n it(\"should handle single validator correctly\", async () => {\n const builder = AuthenticatedCommandBuilder.create();\n builder.build(mockYargs as unknown as Argv);\n\n const checkFunction = mockYargs.getCheckFunction();\n expect(checkFunction).to.not.be.null;\n\n if (checkFunction) {\n await checkFunction({ project: \"test-project\" });\n expect(yargsCheckerStub.callCount).to.equal(1);\n }\n });\n\n it(\"should handle multiple validators correctly\", async () => {\n const mockValidator1 = {\n validate: sinon.stub().resolves({ ok: true }),\n };\n const mockValidator2 = {\n validate: sinon.stub().resolves({ ok: true }),\n };\n const builder = AuthenticatedCommandBuilder.create({\n additionalValidators: [mockValidator1, mockValidator2],\n });\n builder.build(mockYargs as unknown as Argv);\n\n const checkFunction = mockYargs.getCheckFunction();\n expect(checkFunction).to.not.be.null;\n\n if (checkFunction) {\n yargsCheckerStub.onFirstCall().resolves(true);\n yargsCheckerStub.onSecondCall().resolves(true);\n yargsCheckerStub.onThirdCall().resolves(true);\n\n const result = await checkFunction({ project: \"test-project\" });\n expect(result).to.be.true;\n expect(yargsCheckerStub.callCount).to.equal(3);\n }\n });\n\n it(\"should return early from validation if any validator fails\", async () => {\n const mockValidator1 = {\n validate: sinon.stub().resolves({ ok: true }),\n };\n const mockValidator2 = {\n validate: sinon.stub().resolves({ ok: true }),\n };\n const builder = AuthenticatedCommandBuilder.create({\n additionalValidators: [mockValidator1, mockValidator2],\n });\n builder.build(mockYargs as unknown as Argv);\n\n const checkFunction = mockYargs.getCheckFunction();\n expect(checkFunction).to.not.be.null;\n\n if (checkFunction) {\n yargsCheckerStub.onFirstCall().resolves(true);\n yargsCheckerStub.onSecondCall().resolves(\"Validation failed\");\n\n const result = await checkFunction({ project: \"test-project\" });\n expect(result).to.equal(\"Validation failed\");\n expect(yargsCheckerStub.callCount).to.equal(2);\n }\n });\n });\n\n describe(\"integration scenarios\", () => {\n let mockYargs: MockYargs;\n\n beforeEach(() => {\n mockYargs = new MockYargs();\n yargsCheckerStub.resolves(true);\n });\n\n it(\"should build command for basic authenticated scenario\", () => {\n const builder = AuthenticatedCommandBuilder.create();\n const result = builder.build(mockYargs as unknown as Argv);\n\n const options = mockYargs.getOptions();\n expect(options).to.have.property(\"api-key\");\n expect(options).to.have.property(\"project\");\n expect(result).to.equal(mockYargs);\n });\n\n it(\"should build command with self-hosted endpoint support\", () => {\n const builder = AuthenticatedCommandBuilder.create({\n requireSelfHostedEndpoint: true,\n });\n builder.build(mockYargs as unknown as Argv);\n\n const options = mockYargs.getOptions();\n expect(options).to.have.property(\"api-key\");\n expect(options).to.have.property(\"project\");\n expect(options).to.have.property(\"self-hosted-endpoint\");\n });\n\n it(\"should build command with custom options and validation\", () => {\n AuthenticatedCommandBuilder.create().build(\n mockYargs as unknown as Argv,\n (yargs: Argv) =>\n yargs\n .option(\"url\", {\n type: \"string\" as const,\n describe: \"The URL to process\",\n })\n .option(\"wait\", {\n type: \"boolean\" as const,\n describe: \"Wait for completion\",\n })\n );\n\n const options = mockYargs.getOptions();\n expect(options).to.have.property(\"url\");\n expect(options).to.have.property(\"wait\");\n });\n\n it(\"should build command with additional middleware\", () => {\n const customMiddleware = sinon.stub();\n const builder = AuthenticatedCommandBuilder.withMiddleware([\n customMiddleware,\n ]);\n builder.build(mockYargs as unknown as Argv, (yargs: Argv) =>\n yargs.option(\"name\", { type: \"string\", describe: \"Project name\" })\n );\n\n const options = mockYargs.getOptions();\n expect(options).to.have.property(\"api-key\");\n expect(options).to.have.property(\"project\");\n expect(options).to.have.property(\"name\");\n\n // Project validation is always present now\n const checkFunction = mockYargs.getCheckFunction();\n expect(checkFunction).to.not.be.null;\n });\n });\n});\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"root":["../src/cli.ts","../src/types.d.ts","../src/__tests__/archive-utils.test.ts","../src/__tests__/engine.test.ts","../src/__tests__/import-openapi-utils.test.ts","../src/__tests__/import-openapi.test.ts","../src/__tests__/oas-test-data.ts","../src/__tests__/outdated.test.ts","../src/__tests__/tsconfig-upgrader.test.ts","../src/build/handler.ts","../src/cmds/build.ts","../src/cmds/compile.ts","../src/cmds/convert.ts","../src/cmds/delete.ts","../src/cmds/deploy.ts","../src/cmds/dev.ts","../src/cmds/editor.ts","../src/cmds/link.ts","../src/cmds/list.ts","../src/cmds/login.ts","../src/cmds/test.ts","../src/cmds/project/import-openapi.ts","../src/cmds/project/index.ts","../src/cmds/project/update.ts","../src/cmds/source/import-openapi.ts","../src/cmds/source/index.ts","../src/cmds/source/upgrade.ts","../src/cmds/tunnel/create.ts","../src/cmds/tunnel/delete.ts","../src/cmds/tunnel/describe.ts","../src/cmds/tunnel/index.ts","../src/cmds/tunnel/list.ts","../src/cmds/tunnel/rotate-token.ts","../src/cmds/tunnel/services/describe.ts","../src/cmds/tunnel/services/index.ts","../src/cmds/tunnel/services/update.ts","../src/cmds/variable/create.ts","../src/cmds/variable/index.ts","../src/cmds/variable/update.ts","../src/common/alias.ts","../src/common/args.ts","../src/common/constants.ts","../src/common/handler.ts","../src/common/logger.ts","../src/common/models.ts","../src/common/outdated.ts","../src/common/output.ts","../src/common/settings.ts","../src/common/worker-output.ts","../src/common/analytics/lib.ts","../src/common/api/lib.ts","../src/common/machine-id/lib.ts","../src/common/middleware/authentication.ts","../src/common/middleware/logging.ts","../src/common/middleware/user-configuration.ts","../src/common/middleware/user-identification.ts","../src/common/upgraders/lib.ts","../src/common/upgraders/package-json-upgrader.ts","../src/common/upgraders/tsconfig-upgrader.ts","../src/common/upgraders/vscode-settings-json-upgrader.ts","../src/common/utils/box.ts","../src/common/utils/ports.ts","../src/common/utils/types.ts","../src/common/utils/urls.ts","../src/common/validators/file-system-validator.ts","../src/common/validators/lib.ts","../src/common/validators/project-name-validator.ts","../src/common/xdg/lib.ts","../src/compile/handler.ts","../src/convert/engine.ts","../src/convert/handler.ts","../src/convert/routes.legacy.ts","../src/delete/handler.ts","../src/delete/poll-deployment.ts","../src/deploy/archive.ts","../src/deploy/environments.ts","../src/deploy/file-upload.ts","../src/deploy/handler.ts","../src/deploy/poll-deployment.ts","../src/dev/handler.ts","../src/editor/handler.ts","../src/editor/assets/index-03352ce7.js","../src/editor/server/cors-plugin.ts","../src/editor/server/server.ts","../src/editor/server/xfs.ts","../src/link/handler.ts","../src/link/populate.ts","../src/list/handler.ts","../src/login/html.ts","../src/login/login.ts","../src/login/server.ts","../src/login/tokens.ts","../src/project/import-openapi/handler.ts","../src/project/import-openapi/interfaces.ts","../src/project/import-openapi/utils.ts","../src/project/update/handler.ts","../src/test/esbuild-config.ts","../src/test/handler.ts","../src/test/invoke-test.ts","../src/test/test-files.test.ts","../src/test/test-files.ts","../src/test/esbuild-plugins/node-test-prep-plugin.ts","../src/tunnel/models.ts","../src/tunnel/create/handler.ts","../src/tunnel/delete/handler.ts","../src/tunnel/delete/poll-teardown-operation.ts","../src/tunnel/describe/handler.ts","../src/tunnel/list/handler.ts","../src/tunnel/rotate-token/handler.ts","../src/tunnel/services/describe/handler.ts","../src/tunnel/services/update/handler.ts","../src/tunnel/services/update/poll-provisioning-operations.ts","../src/variable/models.ts","../src/variable/create/handler.ts","../src/variable/update/handler.ts"],"version":"5.8.2"}
|
|
1
|
+
{"root":["../src/cli.ts","../src/types.d.ts","../src/__tests__/archive-utils.test.ts","../src/__tests__/engine.test.ts","../src/__tests__/import-openapi-utils.test.ts","../src/__tests__/import-openapi.test.ts","../src/__tests__/oas-test-data.ts","../src/__tests__/outdated.test.ts","../src/__tests__/tsconfig-upgrader.test.ts","../src/__tests__/integration/delete.integration.test.ts","../src/__tests__/integration/deploy.integration.test.ts","../src/__tests__/integration/jest-mocks-setup.ts","../src/__tests__/integration/jest-setup.ts","../src/__tests__/integration/link.integration.test.ts","../src/__tests__/integration/list.integration.test.ts","../src/__tests__/integration/test-utils.ts","../src/__tests__/integration/tunnel.integration.test.ts","../src/__tests__/integration/variable.integration.test.ts","../src/build/handler.ts","../src/cmds/build.ts","../src/cmds/compile.ts","../src/cmds/convert.ts","../src/cmds/delete.ts","../src/cmds/deploy.ts","../src/cmds/dev.ts","../src/cmds/editor.ts","../src/cmds/link.ts","../src/cmds/list.ts","../src/cmds/login.ts","../src/cmds/test.ts","../src/cmds/project/import-openapi.ts","../src/cmds/project/index.ts","../src/cmds/project/update.ts","../src/cmds/source/import-openapi.ts","../src/cmds/source/index.ts","../src/cmds/source/upgrade.ts","../src/cmds/tunnel/create.ts","../src/cmds/tunnel/delete.ts","../src/cmds/tunnel/describe.ts","../src/cmds/tunnel/index.ts","../src/cmds/tunnel/list.ts","../src/cmds/tunnel/rotate-token.ts","../src/cmds/tunnel/services/describe.ts","../src/cmds/tunnel/services/index.ts","../src/cmds/tunnel/services/update.ts","../src/cmds/variable/create.ts","../src/cmds/variable/index.ts","../src/cmds/variable/update.ts","../src/common/alias.ts","../src/common/args.ts","../src/common/constants.ts","../src/common/handler.ts","../src/common/logger.ts","../src/common/models.ts","../src/common/outdated.ts","../src/common/output.ts","../src/common/settings.ts","../src/common/worker-output.ts","../src/common/analytics/lib.ts","../src/common/api/lib.ts","../src/common/builders/authenticated-command-builder.spec.ts","../src/common/builders/authenticated-command-builder.ts","../src/common/machine-id/lib.ts","../src/common/middleware/authentication.ts","../src/common/middleware/logging.ts","../src/common/middleware/user-configuration.ts","../src/common/middleware/user-identification.ts","../src/common/upgraders/lib.ts","../src/common/upgraders/package-json-upgrader.ts","../src/common/upgraders/tsconfig-upgrader.ts","../src/common/upgraders/vscode-settings-json-upgrader.ts","../src/common/utils/box.ts","../src/common/utils/ports.ts","../src/common/utils/types.ts","../src/common/utils/urls.ts","../src/common/validators/file-system-validator.ts","../src/common/validators/lib.ts","../src/common/validators/project-name-validator.ts","../src/common/xdg/lib.ts","../src/compile/handler.ts","../src/convert/engine.ts","../src/convert/handler.ts","../src/convert/routes.legacy.ts","../src/delete/handler.ts","../src/delete/poll-deployment.ts","../src/deploy/archive.ts","../src/deploy/environments.ts","../src/deploy/file-upload.ts","../src/deploy/handler.ts","../src/deploy/poll-deployment.ts","../src/dev/handler.ts","../src/editor/handler.ts","../src/editor/assets/index-03352ce7.js","../src/editor/server/cors-plugin.ts","../src/editor/server/server.ts","../src/editor/server/xfs.ts","../src/link/handler.ts","../src/link/populate.ts","../src/list/handler.ts","../src/login/html.ts","../src/login/login.ts","../src/login/server.ts","../src/login/tokens.ts","../src/project/import-openapi/handler.ts","../src/project/import-openapi/interfaces.ts","../src/project/import-openapi/utils.ts","../src/project/update/handler.ts","../src/test/esbuild-config.ts","../src/test/handler.ts","../src/test/invoke-test.ts","../src/test/test-files.test.ts","../src/test/test-files.ts","../src/test/esbuild-plugins/node-test-prep-plugin.ts","../src/tunnel/models.ts","../src/tunnel/create/handler.ts","../src/tunnel/delete/handler.ts","../src/tunnel/delete/poll-teardown-operation.ts","../src/tunnel/describe/handler.ts","../src/tunnel/list/handler.ts","../src/tunnel/rotate-token/handler.ts","../src/tunnel/services/describe/handler.ts","../src/tunnel/services/update/handler.ts","../src/tunnel/services/update/poll-provisioning-operations.ts","../src/variable/models.ts","../src/variable/create/handler.ts","../src/variable/update/handler.ts"],"version":"5.8.2"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zuplo/cli",
|
|
3
|
-
"version": "6.52.
|
|
3
|
+
"version": "6.52.6",
|
|
4
4
|
"repository": "https://github.com/zuplo/zuplo",
|
|
5
5
|
"author": "Zuplo, Inc.",
|
|
6
6
|
"type": "module",
|
|
@@ -29,9 +29,9 @@
|
|
|
29
29
|
"@opentelemetry/api": "1.9.0",
|
|
30
30
|
"@sentry/node": "9.22.0",
|
|
31
31
|
"@swc/core": "1.10.18",
|
|
32
|
-
"@zuplo/core": "6.52.
|
|
33
|
-
"@zuplo/openapi-tools": "6.52.
|
|
34
|
-
"@zuplo/runtime": "6.52.
|
|
32
|
+
"@zuplo/core": "6.52.6",
|
|
33
|
+
"@zuplo/openapi-tools": "6.52.6",
|
|
34
|
+
"@zuplo/runtime": "6.52.6",
|
|
35
35
|
"as-table": "1.0.55",
|
|
36
36
|
"chalk": "5.4.1",
|
|
37
37
|
"chokidar": "3.5.3",
|