@enactprotocol/cli 2.0.3 → 2.0.5

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 (38) hide show
  1. package/dist/commands/get/index.js +4 -4
  2. package/dist/commands/get/index.js.map +1 -1
  3. package/dist/commands/publish/index.d.ts.map +1 -1
  4. package/dist/commands/publish/index.js +17 -1
  5. package/dist/commands/publish/index.js.map +1 -1
  6. package/dist/commands/run/index.d.ts.map +1 -1
  7. package/dist/commands/run/index.js +8 -1
  8. package/dist/commands/run/index.js.map +1 -1
  9. package/dist/commands/search/index.d.ts.map +1 -1
  10. package/dist/commands/search/index.js +22 -1
  11. package/dist/commands/search/index.js.map +1 -1
  12. package/dist/commands/sign/index.d.ts.map +1 -1
  13. package/dist/commands/sign/index.js +33 -17
  14. package/dist/commands/sign/index.js.map +1 -1
  15. package/dist/index.d.ts +1 -1
  16. package/dist/index.js +2 -4
  17. package/dist/index.js.map +1 -1
  18. package/dist/utils/auth.d.ts +14 -0
  19. package/dist/utils/auth.d.ts.map +1 -0
  20. package/dist/utils/auth.js +64 -0
  21. package/dist/utils/auth.js.map +1 -0
  22. package/dist/utils/index.d.ts +1 -0
  23. package/dist/utils/index.d.ts.map +1 -1
  24. package/dist/utils/index.js +2 -0
  25. package/dist/utils/index.js.map +1 -1
  26. package/package.json +5 -5
  27. package/src/commands/get/index.ts +5 -5
  28. package/src/commands/publish/index.ts +23 -0
  29. package/src/commands/run/index.ts +10 -1
  30. package/src/commands/search/index.ts +30 -1
  31. package/src/commands/sign/index.ts +48 -20
  32. package/src/index.ts +2 -4
  33. package/src/utils/auth.ts +87 -0
  34. package/src/utils/index.ts +3 -0
  35. package/tests/commands/get.test.ts +8 -6
  36. package/tests/commands/sign.test.ts +59 -0
  37. package/tests/utils/auth.test.ts +45 -0
  38. package/tsconfig.tsbuildinfo +1 -1
@@ -161,4 +161,63 @@ command: "echo hello"
161
161
  expect(predicateType).toContain("tool");
162
162
  });
163
163
  });
164
+
165
+ describe("remote tool reference parsing", () => {
166
+ test("parses simple remote tool reference with version", () => {
167
+ const ref = "alice/greeter@1.2.0";
168
+ const atIndex = ref.lastIndexOf("@");
169
+ const name = ref.slice(0, atIndex);
170
+ const version = ref.slice(atIndex + 1);
171
+
172
+ expect(name).toBe("alice/greeter");
173
+ expect(version).toBe("1.2.0");
174
+ });
175
+
176
+ test("parses namespaced tool reference with version", () => {
177
+ const ref = "org/utils/greeter@2.0.0";
178
+ const atIndex = ref.lastIndexOf("@");
179
+ const name = ref.slice(0, atIndex);
180
+ const version = ref.slice(atIndex + 1);
181
+
182
+ expect(name).toBe("org/utils/greeter");
183
+ expect(version).toBe("2.0.0");
184
+ });
185
+
186
+ test("detects remote vs local tool reference", () => {
187
+ const isRemoteToolRef = (path: string): boolean => {
188
+ // Remote refs contain @ for version and don't start with . or /
189
+ return (
190
+ !path.startsWith(".") && !path.startsWith("/") && path.includes("@") && path.includes("/")
191
+ );
192
+ };
193
+
194
+ expect(isRemoteToolRef("alice/greeter@1.0.0")).toBe(true);
195
+ expect(isRemoteToolRef("./local-tool")).toBe(false);
196
+ expect(isRemoteToolRef("/absolute/path/tool")).toBe(false);
197
+ expect(isRemoteToolRef("examples/hello-python")).toBe(false);
198
+ });
199
+
200
+ test("requires version in remote tool reference", () => {
201
+ const hasVersion = (ref: string): boolean => {
202
+ return ref.includes("@") && ref.lastIndexOf("@") > 0;
203
+ };
204
+
205
+ expect(hasVersion("alice/greeter@1.0.0")).toBe(true);
206
+ expect(hasVersion("alice/greeter")).toBe(false);
207
+ });
208
+
209
+ test("validates semver version format", () => {
210
+ const isValidSemver = (version: string): boolean => {
211
+ const semverRegex = /^\d+\.\d+\.\d+(-[\w.]+)?(\+[\w.]+)?$/;
212
+ return semverRegex.test(version);
213
+ };
214
+
215
+ expect(isValidSemver("1.0.0")).toBe(true);
216
+ expect(isValidSemver("2.1.3")).toBe(true);
217
+ expect(isValidSemver("1.0.0-alpha")).toBe(true);
218
+ expect(isValidSemver("1.0.0-beta.1")).toBe(true);
219
+ expect(isValidSemver("invalid")).toBe(false);
220
+ expect(isValidSemver("1.0")).toBe(false);
221
+ });
222
+ });
164
223
  });
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Tests for auth utilities
3
+ */
4
+
5
+ import { describe, expect, test } from "bun:test";
6
+ import { extractNamespace } from "../../src/utils/auth";
7
+
8
+ describe("auth utils", () => {
9
+ describe("extractNamespace", () => {
10
+ test("extracts namespace from simple tool name", () => {
11
+ expect(extractNamespace("alice/greeter")).toBe("alice");
12
+ });
13
+
14
+ test("extracts namespace from nested tool name", () => {
15
+ expect(extractNamespace("alice/utils/greeter")).toBe("alice");
16
+ });
17
+
18
+ test("extracts namespace from deeply nested tool name", () => {
19
+ expect(extractNamespace("alice/utils/text/greeter")).toBe("alice");
20
+ });
21
+
22
+ test("returns empty string for tool name without namespace", () => {
23
+ expect(extractNamespace("greeter")).toBe("greeter");
24
+ });
25
+
26
+ test("returns empty string for empty input", () => {
27
+ expect(extractNamespace("")).toBe("");
28
+ });
29
+
30
+ test("handles namespace with hyphens", () => {
31
+ expect(extractNamespace("my-org/my-tool")).toBe("my-org");
32
+ });
33
+
34
+ test("handles namespace with underscores", () => {
35
+ expect(extractNamespace("my_org/my_tool")).toBe("my_org");
36
+ });
37
+
38
+ test("handles namespace with numbers", () => {
39
+ expect(extractNamespace("user123/tool456")).toBe("user123");
40
+ });
41
+ });
42
+
43
+ // Note: getCurrentUsername tests would require mocking the keyring and fetch
44
+ // which is more complex. The function is tested indirectly through e2e tests.
45
+ });