aj-tool 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (120) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +167 -0
  3. package/bin/aj.js +2 -0
  4. package/dist/cli.d.ts +2 -0
  5. package/dist/cli.d.ts.map +1 -0
  6. package/dist/cli.js +64 -0
  7. package/dist/cli.js.map +1 -0
  8. package/dist/commands/apikey/get.d.ts +3 -0
  9. package/dist/commands/apikey/get.d.ts.map +1 -0
  10. package/dist/commands/apikey/get.js +25 -0
  11. package/dist/commands/apikey/get.js.map +1 -0
  12. package/dist/commands/auth/login.d.ts +3 -0
  13. package/dist/commands/auth/login.d.ts.map +1 -0
  14. package/dist/commands/auth/login.js +38 -0
  15. package/dist/commands/auth/login.js.map +1 -0
  16. package/dist/commands/auth/logout.d.ts +3 -0
  17. package/dist/commands/auth/logout.d.ts.map +1 -0
  18. package/dist/commands/auth/logout.js +12 -0
  19. package/dist/commands/auth/logout.js.map +1 -0
  20. package/dist/commands/auth/whoami.d.ts +3 -0
  21. package/dist/commands/auth/whoami.d.ts.map +1 -0
  22. package/dist/commands/auth/whoami.js +24 -0
  23. package/dist/commands/auth/whoami.js.map +1 -0
  24. package/dist/commands/request/get.d.ts +3 -0
  25. package/dist/commands/request/get.d.ts.map +1 -0
  26. package/dist/commands/request/get.js +46 -0
  27. package/dist/commands/request/get.js.map +1 -0
  28. package/dist/commands/request/index.d.ts +3 -0
  29. package/dist/commands/request/index.d.ts.map +1 -0
  30. package/dist/commands/request/index.js +10 -0
  31. package/dist/commands/request/index.js.map +1 -0
  32. package/dist/commands/request/list.d.ts +3 -0
  33. package/dist/commands/request/list.d.ts.map +1 -0
  34. package/dist/commands/request/list.js +37 -0
  35. package/dist/commands/request/list.js.map +1 -0
  36. package/dist/commands/rule/create.d.ts +3 -0
  37. package/dist/commands/rule/create.d.ts.map +1 -0
  38. package/dist/commands/rule/create.js +35 -0
  39. package/dist/commands/rule/create.js.map +1 -0
  40. package/dist/commands/rule/delete.d.ts +3 -0
  41. package/dist/commands/rule/delete.d.ts.map +1 -0
  42. package/dist/commands/rule/delete.js +32 -0
  43. package/dist/commands/rule/delete.js.map +1 -0
  44. package/dist/commands/rule/index.d.ts +3 -0
  45. package/dist/commands/rule/index.d.ts.map +1 -0
  46. package/dist/commands/rule/index.js +12 -0
  47. package/dist/commands/rule/index.js.map +1 -0
  48. package/dist/commands/rule/list.d.ts +3 -0
  49. package/dist/commands/rule/list.d.ts.map +1 -0
  50. package/dist/commands/rule/list.js +34 -0
  51. package/dist/commands/rule/list.js.map +1 -0
  52. package/dist/commands/site/create.d.ts +3 -0
  53. package/dist/commands/site/create.d.ts.map +1 -0
  54. package/dist/commands/site/create.js +29 -0
  55. package/dist/commands/site/create.js.map +1 -0
  56. package/dist/commands/site/delete.d.ts +3 -0
  57. package/dist/commands/site/delete.d.ts.map +1 -0
  58. package/dist/commands/site/delete.js +32 -0
  59. package/dist/commands/site/delete.js.map +1 -0
  60. package/dist/commands/site/index.d.ts +3 -0
  61. package/dist/commands/site/index.d.ts.map +1 -0
  62. package/dist/commands/site/index.js +12 -0
  63. package/dist/commands/site/index.js.map +1 -0
  64. package/dist/commands/site/list.d.ts +3 -0
  65. package/dist/commands/site/list.d.ts.map +1 -0
  66. package/dist/commands/site/list.js +22 -0
  67. package/dist/commands/site/list.js.map +1 -0
  68. package/dist/commands/site/rename.d.ts +3 -0
  69. package/dist/commands/site/rename.d.ts.map +1 -0
  70. package/dist/commands/site/rename.js +27 -0
  71. package/dist/commands/site/rename.js.map +1 -0
  72. package/dist/commands/team/create.d.ts +3 -0
  73. package/dist/commands/team/create.d.ts.map +1 -0
  74. package/dist/commands/team/create.js +24 -0
  75. package/dist/commands/team/create.js.map +1 -0
  76. package/dist/commands/team/delete.d.ts +3 -0
  77. package/dist/commands/team/delete.d.ts.map +1 -0
  78. package/dist/commands/team/delete.js +34 -0
  79. package/dist/commands/team/delete.js.map +1 -0
  80. package/dist/commands/team/index.d.ts +3 -0
  81. package/dist/commands/team/index.d.ts.map +1 -0
  82. package/dist/commands/team/index.js +10 -0
  83. package/dist/commands/team/index.js.map +1 -0
  84. package/dist/commands/team/list.d.ts +3 -0
  85. package/dist/commands/team/list.d.ts.map +1 -0
  86. package/dist/commands/team/list.js +24 -0
  87. package/dist/commands/team/list.js.map +1 -0
  88. package/dist/lib/api-client.d.ts +25 -0
  89. package/dist/lib/api-client.d.ts.map +1 -0
  90. package/dist/lib/api-client.js +130 -0
  91. package/dist/lib/api-client.js.map +1 -0
  92. package/dist/lib/auth.d.ts +5 -0
  93. package/dist/lib/auth.d.ts.map +1 -0
  94. package/dist/lib/auth.js +29 -0
  95. package/dist/lib/auth.js.map +1 -0
  96. package/dist/lib/config.d.ts +8 -0
  97. package/dist/lib/config.d.ts.map +1 -0
  98. package/dist/lib/config.js +36 -0
  99. package/dist/lib/config.js.map +1 -0
  100. package/dist/lib/constants.d.ts +7 -0
  101. package/dist/lib/constants.d.ts.map +1 -0
  102. package/dist/lib/constants.js +12 -0
  103. package/dist/lib/constants.js.map +1 -0
  104. package/dist/lib/errors.d.ts +18 -0
  105. package/dist/lib/errors.d.ts.map +1 -0
  106. package/dist/lib/errors.js +35 -0
  107. package/dist/lib/errors.js.map +1 -0
  108. package/dist/lib/output.d.ts +18 -0
  109. package/dist/lib/output.d.ts.map +1 -0
  110. package/dist/lib/output.js +101 -0
  111. package/dist/lib/output.js.map +1 -0
  112. package/dist/lib/types.d.ts +508 -0
  113. package/dist/lib/types.d.ts.map +1 -0
  114. package/dist/lib/types.js +104 -0
  115. package/dist/lib/types.js.map +1 -0
  116. package/dist/lib/validators.d.ts +10 -0
  117. package/dist/lib/validators.d.ts.map +1 -0
  118. package/dist/lib/validators.js +60 -0
  119. package/dist/lib/validators.js.map +1 -0
  120. package/package.json +40 -0
@@ -0,0 +1,130 @@
1
+ import { z } from "zod";
2
+ import { API_BASE_CORE, API_BASE_APP, API_BASE_AUTH, USER_AGENT, } from "./constants.js";
3
+ import { ApiError, AuthError, NotFoundError } from "./errors.js";
4
+ import { debug } from "./output.js";
5
+ import { SessionInfoSchema, TeamListSchema, TeamCreateResponseSchema, TeamDeleteResponseSchema, SiteSchema, SiteListSchema, PaginatedRequestsSchema, RequestDetailSchema, RulesMapSchema, RuleCreateResponseSchema, ApiErrorResponseSchema, } from "./types.js";
6
+ export class ArcjetApiClient {
7
+ session;
8
+ constructor(session) {
9
+ this.session = session;
10
+ }
11
+ async request(baseUrl, method, path, schema, body) {
12
+ const url = `${baseUrl}${path}`;
13
+ debug(`${method} ${url}`);
14
+ const headers = {
15
+ "User-Agent": USER_AGENT,
16
+ Accept: "application/json",
17
+ Cookie: `session=${this.session}`,
18
+ };
19
+ if (body !== undefined) {
20
+ headers["Content-Type"] = "application/json";
21
+ }
22
+ let response;
23
+ try {
24
+ response = await fetch(url, {
25
+ method,
26
+ headers,
27
+ body: body !== undefined ? JSON.stringify(body) : undefined,
28
+ });
29
+ }
30
+ catch (err) {
31
+ const message = err instanceof Error ? err.message : "Unknown network error";
32
+ throw new ApiError(`Network error: ${message}`);
33
+ }
34
+ if (response.status === 400 || response.status === 401) {
35
+ throw new AuthError("Session expired or invalid. Run `aj login` to re-authenticate.");
36
+ }
37
+ if (response.status === 403) {
38
+ const errorBody = await this.tryParseError(response);
39
+ throw new ApiError(errorBody ?? "Forbidden: you do not have access to this resource.", 403);
40
+ }
41
+ if (response.status === 404) {
42
+ throw new NotFoundError();
43
+ }
44
+ if (!response.ok) {
45
+ const errorBody = await this.tryParseError(response);
46
+ throw new ApiError(errorBody ?? `API error: HTTP ${response.status}`, response.status);
47
+ }
48
+ const json = await response.json();
49
+ debug(`Response: ${JSON.stringify(json).slice(0, 200)}`);
50
+ const parsed = schema.safeParse(json);
51
+ if (!parsed.success) {
52
+ debug(`Schema validation error: ${parsed.error.message}`);
53
+ throw new ApiError("Unexpected API response format. The API may have changed.");
54
+ }
55
+ return parsed.data;
56
+ }
57
+ async tryParseError(response) {
58
+ try {
59
+ const json = await response.json();
60
+ const parsed = ApiErrorResponseSchema.safeParse(json);
61
+ if (parsed.success) {
62
+ const parts = [parsed.data.message, parsed.data.details].filter(Boolean);
63
+ if (parts.length > 0) {
64
+ return parts.join(": ");
65
+ }
66
+ }
67
+ }
68
+ catch {
69
+ // Ignore parse errors
70
+ }
71
+ return null;
72
+ }
73
+ // ── Auth ─────────────────────────────────────────────────────
74
+ async validateSession() {
75
+ return this.request(API_BASE_AUTH, "GET", "/validate", SessionInfoSchema);
76
+ }
77
+ // ── Teams ────────────────────────────────────────────────────
78
+ async listTeams() {
79
+ return this.request(API_BASE_CORE, "GET", "/v1/teams", TeamListSchema);
80
+ }
81
+ async createTeam(name) {
82
+ return this.request(API_BASE_APP, "POST", "/teams", TeamCreateResponseSchema, { name });
83
+ }
84
+ async deleteTeam(teamId, name) {
85
+ return this.request(API_BASE_APP, "DELETE", `/teams/${teamId}`, TeamDeleteResponseSchema, { name });
86
+ }
87
+ // ── Sites ────────────────────────────────────────────────────
88
+ async listSites(teamId) {
89
+ return this.request(API_BASE_CORE, "GET", `/v1/teams/${teamId}/sites`, SiteListSchema);
90
+ }
91
+ async createSite(teamId, name) {
92
+ return this.request(API_BASE_CORE, "POST", `/v1/teams/${teamId}/sites`, SiteSchema, { name });
93
+ }
94
+ async getSite(siteId) {
95
+ return this.request(API_BASE_CORE, "GET", `/v1/sites/${siteId}`, SiteSchema);
96
+ }
97
+ async renameSite(siteId, name) {
98
+ return this.request(API_BASE_CORE, "PATCH", `/v1/sites/${siteId}`, SiteSchema, { name });
99
+ }
100
+ async deleteSite(siteId) {
101
+ return this.request(API_BASE_CORE, "DELETE", `/v1/sites/${siteId}`, SiteSchema);
102
+ }
103
+ // ── Requests ─────────────────────────────────────────────────
104
+ async listRequests(siteId, options) {
105
+ const params = new URLSearchParams();
106
+ if (options?.limit) {
107
+ params.set("limit", String(options.limit));
108
+ }
109
+ if (options?.cursor) {
110
+ params.set("cursor", options.cursor);
111
+ }
112
+ const qs = params.toString();
113
+ const path = `/v1/sites/${siteId}/requests${qs ? `?${qs}` : ""}`;
114
+ return this.request(API_BASE_CORE, "GET", path, PaginatedRequestsSchema);
115
+ }
116
+ async getRequest(siteId, requestId) {
117
+ return this.request(API_BASE_CORE, "GET", `/v1/sites/${siteId}/requests/${requestId}`, RequestDetailSchema);
118
+ }
119
+ // ── Rules ────────────────────────────────────────────────────
120
+ async listRules(siteId) {
121
+ return this.request(API_BASE_CORE, "GET", `/v1/sites/${siteId}/rules`, RulesMapSchema);
122
+ }
123
+ async createRule(siteId, ruleConfig) {
124
+ return this.request(API_BASE_CORE, "POST", `/v1/sites/${siteId}/rules`, RuleCreateResponseSchema, ruleConfig);
125
+ }
126
+ async deleteRule(siteId, ruleId) {
127
+ await this.request(API_BASE_CORE, "DELETE", `/v1/sites/${siteId}/rules/${ruleId}`, z.object({}).passthrough());
128
+ }
129
+ }
130
+ //# sourceMappingURL=api-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../src/lib/api-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare function getSession(): string | undefined;
2
+ export declare function requireAuth(): string;
3
+ export declare function saveSession(session: string): void;
4
+ export declare function clearSession(): void;
5
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/lib/auth.ts"],"names":[],"mappings":"AAGA,wBAAgB,UAAU,IAAI,MAAM,GAAG,SAAS,CAQ/C;AAED,wBAAgB,WAAW,IAAI,MAAM,CAMpC;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAIjD;AAED,wBAAgB,YAAY,IAAI,IAAI,CAInC"}
@@ -0,0 +1,29 @@
1
+ import { loadConfig, saveConfig } from "./config.js";
2
+ import { AuthError } from "./errors.js";
3
+ export function getSession() {
4
+ // Priority: ARCJET_SESSION env var > config file
5
+ const envSession = process.env["ARCJET_SESSION"];
6
+ if (envSession) {
7
+ return envSession;
8
+ }
9
+ const config = loadConfig();
10
+ return config.session;
11
+ }
12
+ export function requireAuth() {
13
+ const session = getSession();
14
+ if (!session) {
15
+ throw new AuthError();
16
+ }
17
+ return session;
18
+ }
19
+ export function saveSession(session) {
20
+ const config = loadConfig();
21
+ config.session = session;
22
+ saveConfig(config);
23
+ }
24
+ export function clearSession() {
25
+ const config = loadConfig();
26
+ delete config.session;
27
+ saveConfig(config);
28
+ }
29
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/lib/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,MAAM,UAAU,UAAU;IACxB,iDAAiD;IACjD,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IACjD,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,OAAO,MAAM,CAAC,OAAO,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;IAC7B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,SAAS,EAAE,CAAC;IACxB,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,UAAU,CAAC,MAAM,CAAC,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,OAAO,MAAM,CAAC,OAAO,CAAC;IACtB,UAAU,CAAC,MAAM,CAAC,CAAC;AACrB,CAAC"}
@@ -0,0 +1,8 @@
1
+ export interface ArcjetCliConfig {
2
+ session?: string;
3
+ defaultTeamId?: string;
4
+ }
5
+ export declare function loadConfig(): ArcjetCliConfig;
6
+ export declare function saveConfig(config: ArcjetCliConfig): void;
7
+ export declare function clearConfig(): void;
8
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAYD,wBAAgB,UAAU,IAAI,eAAe,CAO5C;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,eAAe,GAAG,IAAI,CASxD;AAED,wBAAgB,WAAW,IAAI,IAAI,CAKlC"}
@@ -0,0 +1,36 @@
1
+ import { existsSync, mkdirSync, readFileSync, writeFileSync, unlinkSync } from "node:fs";
2
+ import { homedir } from "node:os";
3
+ import { join } from "node:path";
4
+ function getConfigDir() {
5
+ const xdg = process.env["XDG_CONFIG_HOME"];
6
+ const base = xdg || join(homedir(), ".config");
7
+ return join(base, "arcjet");
8
+ }
9
+ function getConfigPath() {
10
+ return join(getConfigDir(), "config.json");
11
+ }
12
+ export function loadConfig() {
13
+ const path = getConfigPath();
14
+ if (!existsSync(path)) {
15
+ return {};
16
+ }
17
+ const raw = readFileSync(path, "utf-8");
18
+ return JSON.parse(raw);
19
+ }
20
+ export function saveConfig(config) {
21
+ const dir = getConfigDir();
22
+ if (!existsSync(dir)) {
23
+ mkdirSync(dir, { recursive: true, mode: 0o700 });
24
+ }
25
+ const path = getConfigPath();
26
+ writeFileSync(path, JSON.stringify(config, null, 2) + "\n", {
27
+ mode: 0o600,
28
+ });
29
+ }
30
+ export function clearConfig() {
31
+ const path = getConfigPath();
32
+ if (existsSync(path)) {
33
+ unlinkSync(path);
34
+ }
35
+ }
36
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACzF,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAOjC,SAAS,YAAY;IACnB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,GAAG,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;IAC/C,OAAO,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC9B,CAAC;AAED,SAAS,aAAa;IACpB,OAAO,IAAI,CAAC,YAAY,EAAE,EAAE,aAAa,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,MAAM,IAAI,GAAG,aAAa,EAAE,CAAC;IAC7B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACxC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAoB,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAAuB;IAChD,MAAM,GAAG,GAAG,YAAY,EAAE,CAAC;IAC3B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACrB,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACnD,CAAC;IACD,MAAM,IAAI,GAAG,aAAa,EAAE,CAAC;IAC7B,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE;QAC1D,IAAI,EAAE,KAAK;KACZ,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,MAAM,IAAI,GAAG,aAAa,EAAE,CAAC;IAC7B,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACrB,UAAU,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC;AACH,CAAC"}
@@ -0,0 +1,7 @@
1
+ export declare const VERSION: string;
2
+ export declare const USER_AGENT: string;
3
+ export declare const API_BASE_CORE = "https://api.arcjet.com";
4
+ export declare const API_BASE_APP = "https://app.arcjet.com/api/2023-11-08";
5
+ export declare const API_BASE_AUTH = "https://auth.arcjet.com";
6
+ export declare const API_BASE_BILLING = "https://billing.arcjet.com";
7
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/lib/constants.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,OAAO,QAAc,CAAC;AACnC,eAAO,MAAM,UAAU,QAA0B,CAAC;AAElD,eAAO,MAAM,aAAa,2BAA2B,CAAC;AACtD,eAAO,MAAM,YAAY,0CAA0C,CAAC;AACpE,eAAO,MAAM,aAAa,4BAA4B,CAAC;AACvD,eAAO,MAAM,gBAAgB,+BAA+B,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { readFileSync } from "node:fs";
2
+ import { fileURLToPath } from "node:url";
3
+ import { dirname, join } from "node:path";
4
+ const __dirname = dirname(fileURLToPath(import.meta.url));
5
+ const pkg = JSON.parse(readFileSync(join(__dirname, "..", "..", "package.json"), "utf-8"));
6
+ export const VERSION = pkg.version;
7
+ export const USER_AGENT = `arcjet-cli/${VERSION}`;
8
+ export const API_BASE_CORE = "https://api.arcjet.com";
9
+ export const API_BASE_APP = "https://app.arcjet.com/api/2023-11-08";
10
+ export const API_BASE_AUTH = "https://auth.arcjet.com";
11
+ export const API_BASE_BILLING = "https://billing.arcjet.com";
12
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/lib/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE1C,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CACpB,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAC5C,CAAC;AAEzB,MAAM,CAAC,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;AACnC,MAAM,CAAC,MAAM,UAAU,GAAG,cAAc,OAAO,EAAE,CAAC;AAElD,MAAM,CAAC,MAAM,aAAa,GAAG,wBAAwB,CAAC;AACtD,MAAM,CAAC,MAAM,YAAY,GAAG,uCAAuC,CAAC;AACpE,MAAM,CAAC,MAAM,aAAa,GAAG,yBAAyB,CAAC;AACvD,MAAM,CAAC,MAAM,gBAAgB,GAAG,4BAA4B,CAAC"}
@@ -0,0 +1,18 @@
1
+ export declare class ArcjetCliError extends Error {
2
+ exitCode: number;
3
+ constructor(message: string, exitCode?: number);
4
+ }
5
+ export declare class AuthError extends ArcjetCliError {
6
+ constructor(message?: string);
7
+ }
8
+ export declare class NotFoundError extends ArcjetCliError {
9
+ constructor(message?: string);
10
+ }
11
+ export declare class ValidationError extends ArcjetCliError {
12
+ constructor(message: string);
13
+ }
14
+ export declare class ApiError extends ArcjetCliError {
15
+ statusCode: number | undefined;
16
+ constructor(message: string, statusCode?: number);
17
+ }
18
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/lib/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,cAAe,SAAQ,KAAK;IACvC,QAAQ,EAAE,MAAM,CAAC;gBAEL,OAAO,EAAE,MAAM,EAAE,QAAQ,SAAI;CAK1C;AAED,qBAAa,SAAU,SAAQ,cAAc;gBAC/B,OAAO,SAAyC;CAI7D;AAED,qBAAa,aAAc,SAAQ,cAAc;gBACnC,OAAO,SAAwB;CAI5C;AAED,qBAAa,eAAgB,SAAQ,cAAc;gBACrC,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,QAAS,SAAQ,cAAc;IAC1C,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;gBAEnB,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM;CAKjD"}
@@ -0,0 +1,35 @@
1
+ export class ArcjetCliError extends Error {
2
+ exitCode;
3
+ constructor(message, exitCode = 1) {
4
+ super(message);
5
+ this.name = "ArcjetCliError";
6
+ this.exitCode = exitCode;
7
+ }
8
+ }
9
+ export class AuthError extends ArcjetCliError {
10
+ constructor(message = "Not logged in. Run `aj login` first.") {
11
+ super(message, 1);
12
+ this.name = "AuthError";
13
+ }
14
+ }
15
+ export class NotFoundError extends ArcjetCliError {
16
+ constructor(message = "Resource not found.") {
17
+ super(message, 1);
18
+ this.name = "NotFoundError";
19
+ }
20
+ }
21
+ export class ValidationError extends ArcjetCliError {
22
+ constructor(message) {
23
+ super(message, 2);
24
+ this.name = "ValidationError";
25
+ }
26
+ }
27
+ export class ApiError extends ArcjetCliError {
28
+ statusCode;
29
+ constructor(message, statusCode) {
30
+ super(message, 1);
31
+ this.name = "ApiError";
32
+ this.statusCode = statusCode;
33
+ }
34
+ }
35
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/lib/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,cAAe,SAAQ,KAAK;IACvC,QAAQ,CAAS;IAEjB,YAAY,OAAe,EAAE,QAAQ,GAAG,CAAC;QACvC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;QAC7B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;CACF;AAED,MAAM,OAAO,SAAU,SAAQ,cAAc;IAC3C,YAAY,OAAO,GAAG,sCAAsC;QAC1D,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAClB,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;IAC1B,CAAC;CACF;AAED,MAAM,OAAO,aAAc,SAAQ,cAAc;IAC/C,YAAY,OAAO,GAAG,qBAAqB;QACzC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAClB,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAC9B,CAAC;CACF;AAED,MAAM,OAAO,eAAgB,SAAQ,cAAc;IACjD,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAClB,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;CACF;AAED,MAAM,OAAO,QAAS,SAAQ,cAAc;IAC1C,UAAU,CAAqB;IAE/B,YAAY,OAAe,EAAE,UAAmB;QAC9C,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QAClB,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;QACvB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;CACF"}
@@ -0,0 +1,18 @@
1
+ export declare function configure(globalOpts: {
2
+ json?: boolean;
3
+ color?: boolean;
4
+ verbose?: boolean;
5
+ }): void;
6
+ export declare function isJsonMode(): boolean;
7
+ export declare function isVerbose(): boolean;
8
+ export declare function success(message: string): void;
9
+ export declare function warning(message: string): void;
10
+ export declare function error(message: string): void;
11
+ export declare function info(message: string): void;
12
+ export declare function debug(message: string): void;
13
+ export declare function printJson(data: unknown): void;
14
+ export declare function printTable(headers: string[], rows: string[][]): void;
15
+ export declare function printRecord(record: Record<string, string>): void;
16
+ export declare function confirm(message: string): Promise<boolean>;
17
+ export declare function prompt(message: string): Promise<string>;
18
+ //# sourceMappingURL=output.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/lib/output.ts"],"names":[],"mappings":"AAUA,wBAAgB,SAAS,CAAC,UAAU,EAAE;IACpC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,GAAG,IAAI,CAMP;AAED,wBAAgB,UAAU,IAAI,OAAO,CAEpC;AAED,wBAAgB,SAAS,IAAI,OAAO,CAEnC;AAMD,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAG7C;AAED,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAG7C;AAED,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE3C;AAED,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAG1C;AAED,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAG3C;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAE7C;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,CAyBpE;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAQhE;AAED,wBAAsB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAa/D;AAED,wBAAsB,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAa7D"}
@@ -0,0 +1,101 @@
1
+ import pc from "picocolors";
2
+ let opts = { json: false, color: true, verbose: false };
3
+ export function configure(globalOpts) {
4
+ opts = {
5
+ json: globalOpts.json ?? false,
6
+ color: globalOpts.color ?? true,
7
+ verbose: globalOpts.verbose ?? false,
8
+ };
9
+ }
10
+ export function isJsonMode() {
11
+ return opts.json;
12
+ }
13
+ export function isVerbose() {
14
+ return opts.verbose;
15
+ }
16
+ function c(fn, text) {
17
+ return opts.color ? fn(text) : text;
18
+ }
19
+ export function success(message) {
20
+ if (opts.json)
21
+ return;
22
+ console.log(c(pc.green, "v") + " " + message);
23
+ }
24
+ export function warning(message) {
25
+ if (opts.json)
26
+ return;
27
+ console.log(c(pc.yellow, "!") + " " + message);
28
+ }
29
+ export function error(message) {
30
+ console.error(c(pc.red, "x") + " " + message);
31
+ }
32
+ export function info(message) {
33
+ if (opts.json)
34
+ return;
35
+ console.log(message);
36
+ }
37
+ export function debug(message) {
38
+ if (!opts.verbose)
39
+ return;
40
+ console.error(c(pc.dim, "[debug] " + message));
41
+ }
42
+ export function printJson(data) {
43
+ console.log(JSON.stringify(data, null, 2));
44
+ }
45
+ export function printTable(headers, rows) {
46
+ if (opts.json)
47
+ return;
48
+ if (rows.length === 0) {
49
+ info("No results.");
50
+ return;
51
+ }
52
+ // Calculate column widths
53
+ const widths = headers.map((h, i) => Math.max(h.length, ...rows.map((r) => (r[i] ?? "").length)));
54
+ // Print header
55
+ const headerLine = headers
56
+ .map((h, i) => h.padEnd(widths[i] ?? 0))
57
+ .join(" ");
58
+ console.log(c(pc.bold, headerLine));
59
+ console.log(widths.map((w) => "-".repeat(w)).join(" "));
60
+ // Print rows
61
+ for (const row of rows) {
62
+ const line = row.map((cell, i) => cell.padEnd(widths[i] ?? 0)).join(" ");
63
+ console.log(line);
64
+ }
65
+ }
66
+ export function printRecord(record) {
67
+ if (opts.json)
68
+ return;
69
+ const maxKeyLen = Math.max(...Object.keys(record).map((k) => k.length));
70
+ for (const [key, value] of Object.entries(record)) {
71
+ const label = c(pc.bold, key.padEnd(maxKeyLen));
72
+ console.log(`${label} ${value}`);
73
+ }
74
+ }
75
+ export async function confirm(message) {
76
+ const { createInterface } = await import("node:readline");
77
+ const rl = createInterface({
78
+ input: process.stdin,
79
+ output: process.stdout,
80
+ });
81
+ return new Promise((resolve) => {
82
+ rl.question(`${message} [y/N] `, (answer) => {
83
+ rl.close();
84
+ resolve(answer.toLowerCase() === "y" || answer.toLowerCase() === "yes");
85
+ });
86
+ });
87
+ }
88
+ export async function prompt(message) {
89
+ const { createInterface } = await import("node:readline");
90
+ const rl = createInterface({
91
+ input: process.stdin,
92
+ output: process.stdout,
93
+ });
94
+ return new Promise((resolve) => {
95
+ rl.question(message, (answer) => {
96
+ rl.close();
97
+ resolve(answer.trim());
98
+ });
99
+ });
100
+ }
101
+ //# sourceMappingURL=output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.js","sourceRoot":"","sources":["../../src/lib/output.ts"],"names":[],"mappings":"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"}