alpic 0.0.0-dev.ffd67d5 → 0.0.0-staging.02caa29

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.
Files changed (164) hide show
  1. package/dist/__tests__/alpic-command.test.d.ts +1 -0
  2. package/dist/__tests__/alpic-command.test.js +41 -0
  3. package/dist/__tests__/alpic-command.test.js.map +1 -0
  4. package/dist/__tests__/audit.e2e.test.js +20 -16
  5. package/dist/__tests__/audit.e2e.test.js.map +1 -1
  6. package/dist/__tests__/auth.e2e.test.js +9 -4
  7. package/dist/__tests__/auth.e2e.test.js.map +1 -1
  8. package/dist/__tests__/deploy-flags.e2e.test.js +44 -4
  9. package/dist/__tests__/deploy-flags.e2e.test.js.map +1 -1
  10. package/dist/__tests__/deploy.e2e.test.js +13 -9
  11. package/dist/__tests__/deploy.e2e.test.js.map +1 -1
  12. package/dist/__tests__/deployment-inspect.e2e.test.js +10 -5
  13. package/dist/__tests__/deployment-inspect.e2e.test.js.map +1 -1
  14. package/dist/__tests__/deployment-list.e2e.test.js +10 -5
  15. package/dist/__tests__/deployment-list.e2e.test.js.map +1 -1
  16. package/dist/__tests__/deployment-logs.e2e.test.js +16 -9
  17. package/dist/__tests__/deployment-logs.e2e.test.js.map +1 -1
  18. package/dist/__tests__/environment-variable/environment-variable-add.e2e.test.js +27 -9
  19. package/dist/__tests__/environment-variable/environment-variable-add.e2e.test.js.map +1 -1
  20. package/dist/__tests__/environment-variable/environment-variable-list.e2e.test.js +16 -9
  21. package/dist/__tests__/environment-variable/environment-variable-list.e2e.test.js.map +1 -1
  22. package/dist/__tests__/environment-variable/environment-variable-remove.e2e.test.js +16 -18
  23. package/dist/__tests__/environment-variable/environment-variable-remove.e2e.test.js.map +1 -1
  24. package/dist/__tests__/environment-variable/environment-variable-update.e2e.test.js +16 -10
  25. package/dist/__tests__/environment-variable/environment-variable-update.e2e.test.js.map +1 -1
  26. package/dist/__tests__/git-flags.e2e.test.js +10 -5
  27. package/dist/__tests__/git-flags.e2e.test.js.map +1 -1
  28. package/dist/__tests__/git.e2e.test.js +10 -5
  29. package/dist/__tests__/git.e2e.test.js.map +1 -1
  30. package/dist/__tests__/link.e2e.test.js +17 -14
  31. package/dist/__tests__/link.e2e.test.js.map +1 -1
  32. package/dist/__tests__/logs.e2e.test.js +16 -13
  33. package/dist/__tests__/logs.e2e.test.js.map +1 -1
  34. package/dist/__tests__/mock-server.d.ts +3 -0
  35. package/dist/__tests__/mock-server.js +68 -1
  36. package/dist/__tests__/mock-server.js.map +1 -1
  37. package/dist/__tests__/playground/playground-configure.e2e.test.d.ts +1 -0
  38. package/dist/__tests__/playground/playground-configure.e2e.test.js +135 -0
  39. package/dist/__tests__/playground/playground-configure.e2e.test.js.map +1 -0
  40. package/dist/__tests__/playground/playground-enable-disable.e2e.test.d.ts +1 -0
  41. package/dist/__tests__/playground/playground-enable-disable.e2e.test.js +104 -0
  42. package/dist/__tests__/playground/playground-enable-disable.e2e.test.js.map +1 -0
  43. package/dist/__tests__/playground/playground-example-prompt.e2e.test.d.ts +1 -0
  44. package/dist/__tests__/playground/playground-example-prompt.e2e.test.js +282 -0
  45. package/dist/__tests__/playground/playground-example-prompt.e2e.test.js.map +1 -0
  46. package/dist/__tests__/playground/playground-headers.e2e.test.d.ts +1 -0
  47. package/dist/__tests__/playground/playground-headers.e2e.test.js +324 -0
  48. package/dist/__tests__/playground/playground-headers.e2e.test.js.map +1 -0
  49. package/dist/__tests__/playground/playground-status.e2e.test.d.ts +1 -0
  50. package/dist/__tests__/playground/playground-status.e2e.test.js +88 -0
  51. package/dist/__tests__/playground/playground-status.e2e.test.js.map +1 -0
  52. package/dist/__tests__/publish.e2e.test.js +75 -5
  53. package/dist/__tests__/publish.e2e.test.js.map +1 -1
  54. package/dist/__tests__/tunnel.e2e.test.js +9 -4
  55. package/dist/__tests__/tunnel.e2e.test.js.map +1 -1
  56. package/dist/__tests__/utils.js +14 -7
  57. package/dist/__tests__/utils.js.map +1 -1
  58. package/dist/commands/audit.d.ts +0 -1
  59. package/dist/commands/audit.js +1 -5
  60. package/dist/commands/audit.js.map +1 -1
  61. package/dist/commands/deploy.d.ts +0 -1
  62. package/dist/commands/deploy.js +10 -7
  63. package/dist/commands/deploy.js.map +1 -1
  64. package/dist/commands/deployment/inspect.js +1 -1
  65. package/dist/commands/deployment/inspect.js.map +1 -1
  66. package/dist/commands/deployment/list.js +1 -1
  67. package/dist/commands/deployment/list.js.map +1 -1
  68. package/dist/commands/deployment/logs.js +1 -1
  69. package/dist/commands/deployment/logs.js.map +1 -1
  70. package/dist/commands/environment-variable/add.d.ts +0 -1
  71. package/dist/commands/environment-variable/add.js +1 -5
  72. package/dist/commands/environment-variable/add.js.map +1 -1
  73. package/dist/commands/environment-variable/list.js +1 -1
  74. package/dist/commands/environment-variable/list.js.map +1 -1
  75. package/dist/commands/environment-variable/remove.d.ts +0 -1
  76. package/dist/commands/environment-variable/remove.js +1 -5
  77. package/dist/commands/environment-variable/remove.js.map +1 -1
  78. package/dist/commands/environment-variable/update.d.ts +0 -1
  79. package/dist/commands/environment-variable/update.js +1 -5
  80. package/dist/commands/environment-variable/update.js.map +1 -1
  81. package/dist/commands/git/connect.d.ts +0 -1
  82. package/dist/commands/git/connect.js +1 -5
  83. package/dist/commands/git/connect.js.map +1 -1
  84. package/dist/commands/git/disconnect.d.ts +0 -3
  85. package/dist/commands/git/disconnect.js +2 -11
  86. package/dist/commands/git/disconnect.js.map +1 -1
  87. package/dist/commands/link.d.ts +0 -1
  88. package/dist/commands/link.js +2 -6
  89. package/dist/commands/link.js.map +1 -1
  90. package/dist/commands/login.js +2 -2
  91. package/dist/commands/login.js.map +1 -1
  92. package/dist/commands/logs.js +1 -1
  93. package/dist/commands/logs.js.map +1 -1
  94. package/dist/commands/playground/configure.d.ts +12 -0
  95. package/dist/commands/playground/configure.js +39 -0
  96. package/dist/commands/playground/configure.js.map +1 -0
  97. package/dist/commands/playground/disable.d.ts +9 -0
  98. package/dist/commands/playground/disable.js +24 -0
  99. package/dist/commands/playground/disable.js.map +1 -0
  100. package/dist/commands/playground/enable.d.ts +9 -0
  101. package/dist/commands/playground/enable.js +24 -0
  102. package/dist/commands/playground/enable.js.map +1 -0
  103. package/dist/commands/playground/example-prompt/add.d.ts +12 -0
  104. package/dist/commands/playground/example-prompt/add.js +39 -0
  105. package/dist/commands/playground/example-prompt/add.js.map +1 -0
  106. package/dist/commands/playground/example-prompt/list.d.ts +9 -0
  107. package/dist/commands/playground/example-prompt/list.js +24 -0
  108. package/dist/commands/playground/example-prompt/list.js.map +1 -0
  109. package/dist/commands/playground/example-prompt/remove.d.ts +11 -0
  110. package/dist/commands/playground/example-prompt/remove.js +34 -0
  111. package/dist/commands/playground/example-prompt/remove.js.map +1 -0
  112. package/dist/commands/playground/headers/add.d.ts +14 -0
  113. package/dist/commands/playground/headers/add.js +49 -0
  114. package/dist/commands/playground/headers/add.js.map +1 -0
  115. package/dist/commands/playground/headers/list.d.ts +9 -0
  116. package/dist/commands/playground/headers/list.js +24 -0
  117. package/dist/commands/playground/headers/list.js.map +1 -0
  118. package/dist/commands/playground/headers/remove.d.ts +11 -0
  119. package/dist/commands/playground/headers/remove.js +34 -0
  120. package/dist/commands/playground/headers/remove.js.map +1 -0
  121. package/dist/commands/playground/status.d.ts +9 -0
  122. package/dist/commands/playground/status.js +24 -0
  123. package/dist/commands/playground/status.js.map +1 -0
  124. package/dist/commands/publish.d.ts +0 -1
  125. package/dist/commands/publish.js +1 -5
  126. package/dist/commands/publish.js.map +1 -1
  127. package/dist/commands/tunnel.d.ts +1 -0
  128. package/dist/commands/tunnel.js +49 -13
  129. package/dist/commands/tunnel.js.map +1 -1
  130. package/dist/lib/alpic-command.d.ts +6 -1
  131. package/dist/lib/alpic-command.js +14 -4
  132. package/dist/lib/alpic-command.js.map +1 -1
  133. package/dist/lib/archive.js +10 -4
  134. package/dist/lib/archive.js.map +1 -1
  135. package/dist/lib/audit.js +32 -18
  136. package/dist/lib/audit.js.map +1 -1
  137. package/dist/lib/auth/auth.d.ts +3 -1
  138. package/dist/lib/auth/auth.js +11 -6
  139. package/dist/lib/auth/auth.js.map +1 -1
  140. package/dist/lib/auth/oauth/client.d.ts +1 -1
  141. package/dist/lib/auth/oauth/client.js +7 -1
  142. package/dist/lib/auth/oauth/client.js.map +1 -1
  143. package/dist/lib/auth/oauth/server/index.d.ts +2 -1
  144. package/dist/lib/auth/oauth/server/index.js +31 -8
  145. package/dist/lib/auth/oauth/server/index.js.map +1 -1
  146. package/dist/lib/auth/whoami.js +3 -3
  147. package/dist/lib/auth/whoami.js.map +1 -1
  148. package/dist/lib/deployment.js +5 -4
  149. package/dist/lib/deployment.js.map +1 -1
  150. package/dist/lib/environment-variable.js +10 -4
  151. package/dist/lib/environment-variable.js.map +1 -1
  152. package/dist/lib/link.js +8 -8
  153. package/dist/lib/link.js.map +1 -1
  154. package/dist/lib/logs.js +2 -1
  155. package/dist/lib/logs.js.map +1 -1
  156. package/dist/lib/playground.d.ts +53 -0
  157. package/dist/lib/playground.js +288 -0
  158. package/dist/lib/playground.js.map +1 -0
  159. package/dist/lib/publish.js +16 -0
  160. package/dist/lib/publish.js.map +1 -1
  161. package/dist/lib/utils.d.ts +1 -0
  162. package/dist/lib/utils.js +8 -0
  163. package/dist/lib/utils.js.map +1 -1
  164. package/package.json +16 -16
@@ -0,0 +1,282 @@
1
+ import { rmSync } from "node:fs";
2
+ import { afterEach, beforeEach, describe, expect, it } from "vitest";
3
+ import { MockApiServer } from "../mock-server.js";
4
+ import { buildMockProject, cliSession, expectSuccessfulApiCall, setupTestDirectory } from "../utils.js";
5
+ describe("alpic playground example-prompt (E2E)", () => {
6
+ let mockServer;
7
+ let serverUrl;
8
+ let cwd;
9
+ let binPath;
10
+ const projectId = "test-project-id";
11
+ const teamId = "mock-team-id";
12
+ const environmentId = "test-env-id";
13
+ const environmentName = "production";
14
+ beforeEach(async () => {
15
+ mockServer = new MockApiServer();
16
+ serverUrl = await mockServer.start();
17
+ const setup = await setupTestDirectory();
18
+ cwd = setup.cwd;
19
+ binPath = setup.binPath;
20
+ mockServer.addProject(buildMockProject({
21
+ projectId,
22
+ teamId,
23
+ projectName: "test-project",
24
+ environmentId,
25
+ environmentName,
26
+ }));
27
+ });
28
+ afterEach(async () => {
29
+ await mockServer.stop();
30
+ if (cwd) {
31
+ rmSync(cwd, { recursive: true, force: true });
32
+ }
33
+ });
34
+ describe("add", () => {
35
+ it("adds an example prompt with flags", async () => {
36
+ const { exitCode, output } = await cliSession(process.execPath, [
37
+ binPath,
38
+ "playground",
39
+ "example-prompt",
40
+ "add",
41
+ "--environment-id",
42
+ environmentId,
43
+ "--title",
44
+ "Hello",
45
+ "--prompt",
46
+ "Say hello to the user",
47
+ "--non-interactive",
48
+ ], {
49
+ cwd,
50
+ env: {
51
+ ALPIC_API_BASE_URL: serverUrl,
52
+ ALPIC_API_KEY: "test-api-key",
53
+ },
54
+ }, async (cli) => {
55
+ await cli.expect("added");
56
+ });
57
+ expect(exitCode).toBe(0);
58
+ expect(output).toContain("Hello");
59
+ expect(output).toContain("added");
60
+ const call = mockServer.getLastCall("PUT", `/v1/environments/${environmentId}/playground`);
61
+ expectSuccessfulApiCall(call);
62
+ expect(call?.input).toMatchObject({
63
+ examplePrompts: [{ title: "Hello", prompt: "Say hello to the user" }],
64
+ });
65
+ });
66
+ it("appends to existing example prompts", async () => {
67
+ mockServer.setPlayground(environmentId, {
68
+ isPlaygroundEnabled: true,
69
+ serverMetadata: {
70
+ name: "Server",
71
+ description: "Desc",
72
+ headers: [],
73
+ examplePrompts: [{ title: "Existing", prompt: "An existing prompt" }],
74
+ },
75
+ });
76
+ const { exitCode } = await cliSession(process.execPath, [
77
+ binPath,
78
+ "playground",
79
+ "example-prompt",
80
+ "add",
81
+ "--environment-id",
82
+ environmentId,
83
+ "--title",
84
+ "New",
85
+ "--prompt",
86
+ "A new prompt",
87
+ "--non-interactive",
88
+ ], {
89
+ cwd,
90
+ env: {
91
+ ALPIC_API_BASE_URL: serverUrl,
92
+ ALPIC_API_KEY: "test-api-key",
93
+ },
94
+ }, async (cli) => {
95
+ await cli.expect("added");
96
+ });
97
+ expect(exitCode).toBe(0);
98
+ const call = mockServer.getLastCall("PUT", `/v1/environments/${environmentId}/playground`);
99
+ expectSuccessfulApiCall(call);
100
+ expect(call?.input).toMatchObject({
101
+ examplePrompts: [
102
+ { title: "Existing", prompt: "An existing prompt" },
103
+ { title: "New", prompt: "A new prompt" },
104
+ ],
105
+ });
106
+ });
107
+ it("errors when max 3 prompts reached", async () => {
108
+ mockServer.setPlayground(environmentId, {
109
+ isPlaygroundEnabled: true,
110
+ serverMetadata: {
111
+ name: "Server",
112
+ description: "Desc",
113
+ headers: [],
114
+ examplePrompts: [
115
+ { title: "One", prompt: "First" },
116
+ { title: "Two", prompt: "Second" },
117
+ { title: "Three", prompt: "Third" },
118
+ ],
119
+ },
120
+ });
121
+ const { exitCode, output } = await cliSession(process.execPath, [
122
+ binPath,
123
+ "playground",
124
+ "example-prompt",
125
+ "add",
126
+ "--environment-id",
127
+ environmentId,
128
+ "--title",
129
+ "Four",
130
+ "--prompt",
131
+ "Fourth",
132
+ "--non-interactive",
133
+ ], {
134
+ cwd,
135
+ env: {
136
+ ALPIC_API_BASE_URL: serverUrl,
137
+ ALPIC_API_KEY: "test-api-key",
138
+ },
139
+ });
140
+ expect(exitCode).toBe(1);
141
+ expect(output).toContain("Maximum of 3 example prompts reached");
142
+ });
143
+ });
144
+ describe("list", () => {
145
+ it("shows no prompts message when none configured", async () => {
146
+ const { exitCode, output } = await cliSession(process.execPath, [binPath, "playground", "example-prompt", "list", "--environment-id", environmentId], {
147
+ cwd,
148
+ env: {
149
+ ALPIC_API_BASE_URL: serverUrl,
150
+ ALPIC_API_KEY: "test-api-key",
151
+ },
152
+ }, async (cli) => {
153
+ await cli.expect("No example prompts configured");
154
+ });
155
+ expect(exitCode).toBe(0);
156
+ expect(output).toContain("No example prompts configured");
157
+ });
158
+ it("shows example prompts in a table", async () => {
159
+ mockServer.setPlayground(environmentId, {
160
+ isPlaygroundEnabled: true,
161
+ serverMetadata: {
162
+ name: "Server",
163
+ description: "Desc",
164
+ headers: [],
165
+ examplePrompts: [
166
+ { title: "Hello", prompt: "Say hello" },
167
+ { title: "Weather", prompt: "What is the weather?" },
168
+ ],
169
+ },
170
+ });
171
+ const { exitCode, output } = await cliSession(process.execPath, [binPath, "playground", "example-prompt", "list", "--environment-id", environmentId], {
172
+ cwd,
173
+ env: {
174
+ ALPIC_API_BASE_URL: serverUrl,
175
+ ALPIC_API_KEY: "test-api-key",
176
+ },
177
+ }, async (cli) => {
178
+ await cli.expect("Hello");
179
+ });
180
+ expect(exitCode).toBe(0);
181
+ expect(output).toContain("Hello");
182
+ expect(output).toContain("Say hello");
183
+ expect(output).toContain("Weather");
184
+ expect(output).toContain("What is the weather?");
185
+ });
186
+ });
187
+ describe("remove", () => {
188
+ it("removes an example prompt in non-interactive mode", async () => {
189
+ mockServer.setPlayground(environmentId, {
190
+ isPlaygroundEnabled: true,
191
+ serverMetadata: {
192
+ name: "Server",
193
+ description: "Desc",
194
+ headers: [],
195
+ examplePrompts: [
196
+ { title: "Hello", prompt: "Say hello" },
197
+ { title: "Weather", prompt: "What is the weather?" },
198
+ ],
199
+ },
200
+ });
201
+ const { exitCode, output } = await cliSession(process.execPath, [
202
+ binPath,
203
+ "playground",
204
+ "example-prompt",
205
+ "remove",
206
+ "--environment-id",
207
+ environmentId,
208
+ "--title",
209
+ "Hello",
210
+ "--non-interactive",
211
+ ], {
212
+ cwd,
213
+ env: {
214
+ ALPIC_API_BASE_URL: serverUrl,
215
+ ALPIC_API_KEY: "test-api-key",
216
+ },
217
+ }, async (cli) => {
218
+ await cli.expect("removed");
219
+ });
220
+ expect(exitCode).toBe(0);
221
+ expect(output).toContain("Hello");
222
+ expect(output).toContain("removed");
223
+ const call = mockServer.getLastCall("PUT", `/v1/environments/${environmentId}/playground`);
224
+ expectSuccessfulApiCall(call);
225
+ expect(call?.input).toMatchObject({
226
+ examplePrompts: [{ title: "Weather", prompt: "What is the weather?" }],
227
+ });
228
+ });
229
+ it("errors when no prompts to remove", async () => {
230
+ const { exitCode, output } = await cliSession(process.execPath, [
231
+ binPath,
232
+ "playground",
233
+ "example-prompt",
234
+ "remove",
235
+ "--environment-id",
236
+ environmentId,
237
+ "--title",
238
+ "Hello",
239
+ "--non-interactive",
240
+ ], {
241
+ cwd,
242
+ env: {
243
+ ALPIC_API_BASE_URL: serverUrl,
244
+ ALPIC_API_KEY: "test-api-key",
245
+ },
246
+ });
247
+ expect(exitCode).toBe(1);
248
+ expect(output).toContain("No example prompts to remove");
249
+ });
250
+ it("errors when title not found", async () => {
251
+ mockServer.setPlayground(environmentId, {
252
+ isPlaygroundEnabled: true,
253
+ serverMetadata: {
254
+ name: "Server",
255
+ description: "Desc",
256
+ headers: [],
257
+ examplePrompts: [{ title: "Hello", prompt: "Say hello" }],
258
+ },
259
+ });
260
+ const { exitCode, output } = await cliSession(process.execPath, [
261
+ binPath,
262
+ "playground",
263
+ "example-prompt",
264
+ "remove",
265
+ "--environment-id",
266
+ environmentId,
267
+ "--title",
268
+ "Nonexistent",
269
+ "--non-interactive",
270
+ ], {
271
+ cwd,
272
+ env: {
273
+ ALPIC_API_BASE_URL: serverUrl,
274
+ ALPIC_API_KEY: "test-api-key",
275
+ },
276
+ });
277
+ expect(exitCode).toBe(1);
278
+ expect(output).toContain('"Nonexistent" not found');
279
+ });
280
+ });
281
+ }, 15_000);
282
+ //# sourceMappingURL=playground-example-prompt.e2e.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"playground-example-prompt.e2e.test.js","sourceRoot":"","sources":["../../../src/__tests__/playground/playground-example-prompt.e2e.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,324 @@
1
+ import { rmSync } from "node:fs";
2
+ import { afterEach, beforeEach, describe, expect, it } from "vitest";
3
+ import { MockApiServer } from "../mock-server.js";
4
+ import { buildMockProject, cliSession, expectSuccessfulApiCall, setupTestDirectory } from "../utils.js";
5
+ describe("alpic playground headers (E2E)", () => {
6
+ let mockServer;
7
+ let serverUrl;
8
+ let cwd;
9
+ let binPath;
10
+ const projectId = "test-project-id";
11
+ const teamId = "mock-team-id";
12
+ const environmentId = "test-env-id";
13
+ const environmentName = "production";
14
+ beforeEach(async () => {
15
+ mockServer = new MockApiServer();
16
+ serverUrl = await mockServer.start();
17
+ const setup = await setupTestDirectory();
18
+ cwd = setup.cwd;
19
+ binPath = setup.binPath;
20
+ mockServer.addProject(buildMockProject({
21
+ projectId,
22
+ teamId,
23
+ projectName: "test-project",
24
+ environmentId,
25
+ environmentName,
26
+ }));
27
+ });
28
+ afterEach(async () => {
29
+ await mockServer.stop();
30
+ if (cwd) {
31
+ rmSync(cwd, { recursive: true, force: true });
32
+ }
33
+ });
34
+ describe("add", () => {
35
+ it("adds a header with all flags", async () => {
36
+ const { exitCode, output } = await cliSession(process.execPath, [
37
+ binPath,
38
+ "playground",
39
+ "headers",
40
+ "add",
41
+ "--environment-id",
42
+ environmentId,
43
+ "--name",
44
+ "X-Api-Key",
45
+ "--description",
46
+ "API key for authentication",
47
+ "--required",
48
+ "--secret",
49
+ "--non-interactive",
50
+ ], {
51
+ cwd,
52
+ env: {
53
+ ALPIC_API_BASE_URL: serverUrl,
54
+ ALPIC_API_KEY: "test-api-key",
55
+ },
56
+ }, async (cli) => {
57
+ await cli.expect("added");
58
+ });
59
+ expect(exitCode).toBe(0);
60
+ expect(output).toContain("X-Api-Key");
61
+ expect(output).toContain("added");
62
+ const call = mockServer.getLastCall("PUT", `/v1/environments/${environmentId}/playground`);
63
+ expectSuccessfulApiCall(call);
64
+ expect(call?.input).toMatchObject({
65
+ headers: [
66
+ {
67
+ name: "X-Api-Key",
68
+ description: "API key for authentication",
69
+ isRequired: true,
70
+ isSecret: true,
71
+ },
72
+ ],
73
+ });
74
+ });
75
+ it("adds a header with --no-required and --no-secret", async () => {
76
+ const { exitCode } = await cliSession(process.execPath, [
77
+ binPath,
78
+ "playground",
79
+ "headers",
80
+ "add",
81
+ "--environment-id",
82
+ environmentId,
83
+ "--name",
84
+ "X-Custom",
85
+ "--description",
86
+ "A custom header",
87
+ "--no-required",
88
+ "--no-secret",
89
+ "--non-interactive",
90
+ ], {
91
+ cwd,
92
+ env: {
93
+ ALPIC_API_BASE_URL: serverUrl,
94
+ ALPIC_API_KEY: "test-api-key",
95
+ },
96
+ }, async (cli) => {
97
+ await cli.expect("added");
98
+ });
99
+ expect(exitCode).toBe(0);
100
+ const call = mockServer.getLastCall("PUT", `/v1/environments/${environmentId}/playground`);
101
+ expectSuccessfulApiCall(call);
102
+ expect(call?.input).toMatchObject({
103
+ headers: [
104
+ {
105
+ name: "X-Custom",
106
+ description: "A custom header",
107
+ isRequired: false,
108
+ isSecret: false,
109
+ },
110
+ ],
111
+ });
112
+ });
113
+ it("appends to existing headers", async () => {
114
+ mockServer.setPlayground(environmentId, {
115
+ isPlaygroundEnabled: true,
116
+ serverMetadata: {
117
+ name: "Server",
118
+ description: "Desc",
119
+ headers: [{ name: "X-Existing", description: "Existing header", isRequired: false, isSecret: false }],
120
+ examplePrompts: [],
121
+ },
122
+ });
123
+ const { exitCode } = await cliSession(process.execPath, [
124
+ binPath,
125
+ "playground",
126
+ "headers",
127
+ "add",
128
+ "--environment-id",
129
+ environmentId,
130
+ "--name",
131
+ "X-New",
132
+ "--description",
133
+ "New header",
134
+ "--non-interactive",
135
+ ], {
136
+ cwd,
137
+ env: {
138
+ ALPIC_API_BASE_URL: serverUrl,
139
+ ALPIC_API_KEY: "test-api-key",
140
+ },
141
+ }, async (cli) => {
142
+ await cli.expect("added");
143
+ });
144
+ expect(exitCode).toBe(0);
145
+ const call = mockServer.getLastCall("PUT", `/v1/environments/${environmentId}/playground`);
146
+ expectSuccessfulApiCall(call);
147
+ expect(call?.input).toMatchObject({
148
+ headers: [
149
+ { name: "X-Existing", description: "Existing header", isRequired: false, isSecret: false },
150
+ { name: "X-New", description: "New header" },
151
+ ],
152
+ });
153
+ });
154
+ it("errors when header name already exists", async () => {
155
+ mockServer.setPlayground(environmentId, {
156
+ isPlaygroundEnabled: true,
157
+ serverMetadata: {
158
+ name: "Server",
159
+ description: "Desc",
160
+ headers: [{ name: "X-Api-Key", description: "Existing", isRequired: false, isSecret: false }],
161
+ examplePrompts: [],
162
+ },
163
+ });
164
+ const { exitCode, output } = await cliSession(process.execPath, [
165
+ binPath,
166
+ "playground",
167
+ "headers",
168
+ "add",
169
+ "--environment-id",
170
+ environmentId,
171
+ "--name",
172
+ "X-Api-Key",
173
+ "--description",
174
+ "Duplicate",
175
+ "--non-interactive",
176
+ ], {
177
+ cwd,
178
+ env: {
179
+ ALPIC_API_BASE_URL: serverUrl,
180
+ ALPIC_API_KEY: "test-api-key",
181
+ },
182
+ });
183
+ expect(exitCode).toBe(1);
184
+ expect(output).toContain('"X-Api-Key" already exists');
185
+ });
186
+ });
187
+ describe("list", () => {
188
+ it("shows no headers message when none configured", async () => {
189
+ const { exitCode, output } = await cliSession(process.execPath, [binPath, "playground", "headers", "list", "--environment-id", environmentId], {
190
+ cwd,
191
+ env: {
192
+ ALPIC_API_BASE_URL: serverUrl,
193
+ ALPIC_API_KEY: "test-api-key",
194
+ },
195
+ }, async (cli) => {
196
+ await cli.expect("No headers configured");
197
+ });
198
+ expect(exitCode).toBe(0);
199
+ expect(output).toContain("No headers configured");
200
+ });
201
+ it("shows headers in a table", async () => {
202
+ mockServer.setPlayground(environmentId, {
203
+ isPlaygroundEnabled: true,
204
+ serverMetadata: {
205
+ name: "Server",
206
+ description: "Desc",
207
+ headers: [
208
+ { name: "X-Api-Key", description: "API key", isRequired: true, isSecret: true },
209
+ { name: "X-Custom", description: "Custom header", isRequired: false, isSecret: false },
210
+ ],
211
+ examplePrompts: [],
212
+ },
213
+ });
214
+ const { exitCode, output } = await cliSession(process.execPath, [binPath, "playground", "headers", "list", "--environment-id", environmentId], {
215
+ cwd,
216
+ env: {
217
+ ALPIC_API_BASE_URL: serverUrl,
218
+ ALPIC_API_KEY: "test-api-key",
219
+ },
220
+ }, async (cli) => {
221
+ await cli.expect("X-Api-Key");
222
+ });
223
+ expect(exitCode).toBe(0);
224
+ expect(output).toContain("X-Api-Key");
225
+ expect(output).toContain("X-Custom");
226
+ expect(output).toContain("API key");
227
+ });
228
+ });
229
+ describe("remove", () => {
230
+ it("removes a header in non-interactive mode", async () => {
231
+ mockServer.setPlayground(environmentId, {
232
+ isPlaygroundEnabled: true,
233
+ serverMetadata: {
234
+ name: "Server",
235
+ description: "Desc",
236
+ headers: [
237
+ { name: "X-Api-Key", description: "API key", isRequired: true, isSecret: true },
238
+ { name: "X-Custom", description: "Custom", isRequired: false, isSecret: false },
239
+ ],
240
+ examplePrompts: [],
241
+ },
242
+ });
243
+ const { exitCode, output } = await cliSession(process.execPath, [
244
+ binPath,
245
+ "playground",
246
+ "headers",
247
+ "remove",
248
+ "--environment-id",
249
+ environmentId,
250
+ "--name",
251
+ "X-Api-Key",
252
+ "--non-interactive",
253
+ ], {
254
+ cwd,
255
+ env: {
256
+ ALPIC_API_BASE_URL: serverUrl,
257
+ ALPIC_API_KEY: "test-api-key",
258
+ },
259
+ }, async (cli) => {
260
+ await cli.expect("removed");
261
+ });
262
+ expect(exitCode).toBe(0);
263
+ expect(output).toContain("X-Api-Key");
264
+ expect(output).toContain("removed");
265
+ const call = mockServer.getLastCall("PUT", `/v1/environments/${environmentId}/playground`);
266
+ expectSuccessfulApiCall(call);
267
+ expect(call?.input).toMatchObject({
268
+ headers: [{ name: "X-Custom", description: "Custom", isRequired: false, isSecret: false }],
269
+ });
270
+ });
271
+ it("errors when no headers to remove", async () => {
272
+ const { exitCode, output } = await cliSession(process.execPath, [
273
+ binPath,
274
+ "playground",
275
+ "headers",
276
+ "remove",
277
+ "--environment-id",
278
+ environmentId,
279
+ "--name",
280
+ "X-Api-Key",
281
+ "--non-interactive",
282
+ ], {
283
+ cwd,
284
+ env: {
285
+ ALPIC_API_BASE_URL: serverUrl,
286
+ ALPIC_API_KEY: "test-api-key",
287
+ },
288
+ });
289
+ expect(exitCode).toBe(1);
290
+ expect(output).toContain("No headers to remove");
291
+ });
292
+ it("errors when header name not found", async () => {
293
+ mockServer.setPlayground(environmentId, {
294
+ isPlaygroundEnabled: true,
295
+ serverMetadata: {
296
+ name: "Server",
297
+ description: "Desc",
298
+ headers: [{ name: "X-Api-Key", description: "API key", isRequired: true, isSecret: true }],
299
+ examplePrompts: [],
300
+ },
301
+ });
302
+ const { exitCode, output } = await cliSession(process.execPath, [
303
+ binPath,
304
+ "playground",
305
+ "headers",
306
+ "remove",
307
+ "--environment-id",
308
+ environmentId,
309
+ "--name",
310
+ "X-Nonexistent",
311
+ "--non-interactive",
312
+ ], {
313
+ cwd,
314
+ env: {
315
+ ALPIC_API_BASE_URL: serverUrl,
316
+ ALPIC_API_KEY: "test-api-key",
317
+ },
318
+ });
319
+ expect(exitCode).toBe(1);
320
+ expect(output).toContain('"X-Nonexistent" not found');
321
+ });
322
+ });
323
+ }, 15_000);
324
+ //# sourceMappingURL=playground-headers.e2e.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"playground-headers.e2e.test.js","sourceRoot":"","sources":["../../../src/__tests__/playground/playground-headers.e2e.test.ts"],"names":[],"mappings":"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"}