@replanejs/admin 0.8.11
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/LICENSE +21 -0
- package/dist/index.cjs +232 -0
- package/dist/index.d.cts +313 -0
- package/dist/index.d.cts.map +1 -0
- package/dist/index.d.ts +313 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +229 -0
- package/dist/index.js.map +1 -0
- package/package.json +59 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Dmitry Tilyupo
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
|
|
2
|
+
//#region src/version.ts
|
|
3
|
+
const VERSION = "0.8.11";
|
|
4
|
+
const DEFAULT_AGENT = `replane-js-admin/${VERSION}`;
|
|
5
|
+
|
|
6
|
+
//#endregion
|
|
7
|
+
//#region src/client.ts
|
|
8
|
+
/**
|
|
9
|
+
* Error thrown by the Admin API client
|
|
10
|
+
*/
|
|
11
|
+
var ReplaneAdminError = class extends Error {
|
|
12
|
+
constructor(message, status, response) {
|
|
13
|
+
super(message);
|
|
14
|
+
this.status = status;
|
|
15
|
+
this.response = response;
|
|
16
|
+
this.name = "ReplaneAdminError";
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Admin API client for Replane
|
|
21
|
+
*
|
|
22
|
+
* Provides programmatic access to manage projects, configs, environments,
|
|
23
|
+
* SDK keys, and members.
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```typescript
|
|
27
|
+
* import { ReplaneAdmin } from "@replanejs/admin";
|
|
28
|
+
*
|
|
29
|
+
* const admin = new ReplaneAdmin({
|
|
30
|
+
* baseUrl: "https://app.replane.dev",
|
|
31
|
+
* apiKey: "rpa_...",
|
|
32
|
+
* });
|
|
33
|
+
*
|
|
34
|
+
* // List all projects
|
|
35
|
+
* const { projects } = await admin.projects.list();
|
|
36
|
+
*
|
|
37
|
+
* // Create a new config
|
|
38
|
+
* const { id } = await admin.configs.create("project-id", {
|
|
39
|
+
* name: "my-config",
|
|
40
|
+
* description: "My config",
|
|
41
|
+
* editors: [],
|
|
42
|
+
* maintainers: [],
|
|
43
|
+
* base: { value: true, schema: null, overrides: [] },
|
|
44
|
+
* variants: [],
|
|
45
|
+
* });
|
|
46
|
+
* ```
|
|
47
|
+
*/
|
|
48
|
+
var ReplaneAdmin = class {
|
|
49
|
+
apiKey;
|
|
50
|
+
baseUrl;
|
|
51
|
+
agent;
|
|
52
|
+
fetchFn;
|
|
53
|
+
projects;
|
|
54
|
+
configs;
|
|
55
|
+
environments;
|
|
56
|
+
sdkKeys;
|
|
57
|
+
members;
|
|
58
|
+
constructor(options) {
|
|
59
|
+
this.apiKey = options.apiKey;
|
|
60
|
+
this.baseUrl = `${options.baseUrl.replace(/\/$/, "")}/api/admin/v1`;
|
|
61
|
+
this.agent = options.agent ?? DEFAULT_AGENT;
|
|
62
|
+
this.fetchFn = options.fetchFn ?? globalThis.fetch;
|
|
63
|
+
this.projects = new ProjectsApi(this);
|
|
64
|
+
this.configs = new ConfigsApi(this);
|
|
65
|
+
this.environments = new EnvironmentsApi(this);
|
|
66
|
+
this.sdkKeys = new SdkKeysApi(this);
|
|
67
|
+
this.members = new MembersApi(this);
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Make an authenticated request to the Admin API
|
|
71
|
+
* @internal
|
|
72
|
+
*/
|
|
73
|
+
async request(method, path, body) {
|
|
74
|
+
const url = `${this.baseUrl}${path}`;
|
|
75
|
+
const headers = {
|
|
76
|
+
Authorization: `Bearer ${this.apiKey}`,
|
|
77
|
+
"User-Agent": this.agent
|
|
78
|
+
};
|
|
79
|
+
if (body !== void 0) headers["Content-Type"] = "application/json";
|
|
80
|
+
const response = await this.fetchFn(url, {
|
|
81
|
+
method,
|
|
82
|
+
headers,
|
|
83
|
+
body: body !== void 0 ? JSON.stringify(body) : void 0
|
|
84
|
+
});
|
|
85
|
+
if (!response.ok) {
|
|
86
|
+
let errorResponse;
|
|
87
|
+
try {
|
|
88
|
+
errorResponse = await response.json();
|
|
89
|
+
} catch {}
|
|
90
|
+
throw new ReplaneAdminError(errorResponse?.error ?? `Request failed with status ${response.status}`, response.status, errorResponse);
|
|
91
|
+
}
|
|
92
|
+
if (response.status === 204) return void 0;
|
|
93
|
+
return response.json();
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
/**
|
|
97
|
+
* Projects API
|
|
98
|
+
*/
|
|
99
|
+
var ProjectsApi = class {
|
|
100
|
+
constructor(client) {
|
|
101
|
+
this.client = client;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* List all projects
|
|
105
|
+
*/
|
|
106
|
+
async list() {
|
|
107
|
+
return this.client.request("GET", "/projects");
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Get a project by ID
|
|
111
|
+
*/
|
|
112
|
+
async get(projectId) {
|
|
113
|
+
return this.client.request("GET", `/projects/${projectId}`);
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Create a new project
|
|
117
|
+
*/
|
|
118
|
+
async create(data) {
|
|
119
|
+
return this.client.request("POST", "/projects", data);
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Update a project
|
|
123
|
+
*/
|
|
124
|
+
async update(projectId, data) {
|
|
125
|
+
return this.client.request("PATCH", `/projects/${projectId}`, data);
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Delete a project
|
|
129
|
+
*/
|
|
130
|
+
async delete(projectId) {
|
|
131
|
+
return this.client.request("DELETE", `/projects/${projectId}`);
|
|
132
|
+
}
|
|
133
|
+
};
|
|
134
|
+
/**
|
|
135
|
+
* Configs API
|
|
136
|
+
*/
|
|
137
|
+
var ConfigsApi = class {
|
|
138
|
+
constructor(client) {
|
|
139
|
+
this.client = client;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* List all configs in a project
|
|
143
|
+
*/
|
|
144
|
+
async list(projectId) {
|
|
145
|
+
return this.client.request("GET", `/projects/${projectId}/configs`);
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Get a config by name
|
|
149
|
+
*/
|
|
150
|
+
async get(projectId, configName) {
|
|
151
|
+
return this.client.request("GET", `/projects/${projectId}/configs/${encodeURIComponent(configName)}`);
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Create a new config
|
|
155
|
+
*/
|
|
156
|
+
async create(projectId, data) {
|
|
157
|
+
return this.client.request("POST", `/projects/${projectId}/configs`, data);
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Update a config
|
|
161
|
+
*/
|
|
162
|
+
async update(projectId, configName, data) {
|
|
163
|
+
return this.client.request("PUT", `/projects/${projectId}/configs/${encodeURIComponent(configName)}`, data);
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Delete a config
|
|
167
|
+
*/
|
|
168
|
+
async delete(projectId, configName) {
|
|
169
|
+
return this.client.request("DELETE", `/projects/${projectId}/configs/${encodeURIComponent(configName)}`);
|
|
170
|
+
}
|
|
171
|
+
};
|
|
172
|
+
/**
|
|
173
|
+
* Environments API
|
|
174
|
+
*/
|
|
175
|
+
var EnvironmentsApi = class {
|
|
176
|
+
constructor(client) {
|
|
177
|
+
this.client = client;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* List all environments in a project
|
|
181
|
+
*/
|
|
182
|
+
async list(projectId) {
|
|
183
|
+
return this.client.request("GET", `/projects/${projectId}/environments`);
|
|
184
|
+
}
|
|
185
|
+
};
|
|
186
|
+
/**
|
|
187
|
+
* SDK Keys API
|
|
188
|
+
*/
|
|
189
|
+
var SdkKeysApi = class {
|
|
190
|
+
constructor(client) {
|
|
191
|
+
this.client = client;
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* List all SDK keys in a project
|
|
195
|
+
*/
|
|
196
|
+
async list(projectId) {
|
|
197
|
+
return this.client.request("GET", `/projects/${projectId}/sdk-keys`);
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Create a new SDK key
|
|
201
|
+
* Note: The returned key is only shown once and cannot be retrieved again
|
|
202
|
+
*/
|
|
203
|
+
async create(projectId, data) {
|
|
204
|
+
return this.client.request("POST", `/projects/${projectId}/sdk-keys`, data);
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Delete an SDK key
|
|
208
|
+
*/
|
|
209
|
+
async delete(projectId, sdkKeyId) {
|
|
210
|
+
return this.client.request("DELETE", `/projects/${projectId}/sdk-keys/${sdkKeyId}`);
|
|
211
|
+
}
|
|
212
|
+
};
|
|
213
|
+
/**
|
|
214
|
+
* Members API
|
|
215
|
+
*/
|
|
216
|
+
var MembersApi = class {
|
|
217
|
+
constructor(client) {
|
|
218
|
+
this.client = client;
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* List all members in a project
|
|
222
|
+
*/
|
|
223
|
+
async list(projectId) {
|
|
224
|
+
return this.client.request("GET", `/projects/${projectId}/members`);
|
|
225
|
+
}
|
|
226
|
+
};
|
|
227
|
+
|
|
228
|
+
//#endregion
|
|
229
|
+
exports.DEFAULT_AGENT = DEFAULT_AGENT;
|
|
230
|
+
exports.ReplaneAdmin = ReplaneAdmin;
|
|
231
|
+
exports.ReplaneAdminError = ReplaneAdminError;
|
|
232
|
+
exports.VERSION = VERSION;
|
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,313 @@
|
|
|
1
|
+
//#region src/types.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Admin API Types for Replane
|
|
4
|
+
*/
|
|
5
|
+
type ConfigValue = unknown;
|
|
6
|
+
type ConfigSchema = unknown;
|
|
7
|
+
interface Override {
|
|
8
|
+
condition: OverrideCondition;
|
|
9
|
+
value: ConfigValue;
|
|
10
|
+
}
|
|
11
|
+
interface OverrideCondition {
|
|
12
|
+
type: string;
|
|
13
|
+
[key: string]: unknown;
|
|
14
|
+
}
|
|
15
|
+
interface Project {
|
|
16
|
+
id: string;
|
|
17
|
+
name: string;
|
|
18
|
+
description: string;
|
|
19
|
+
createdAt: string;
|
|
20
|
+
updatedAt: string;
|
|
21
|
+
}
|
|
22
|
+
interface CreateProjectRequest {
|
|
23
|
+
name: string;
|
|
24
|
+
description: string;
|
|
25
|
+
}
|
|
26
|
+
interface UpdateProjectRequest {
|
|
27
|
+
name?: string;
|
|
28
|
+
description?: string;
|
|
29
|
+
}
|
|
30
|
+
interface ProjectListResponse {
|
|
31
|
+
projects: Project[];
|
|
32
|
+
}
|
|
33
|
+
interface CreateProjectResponse {
|
|
34
|
+
id: string;
|
|
35
|
+
}
|
|
36
|
+
interface UpdateProjectResponse {
|
|
37
|
+
id: string;
|
|
38
|
+
}
|
|
39
|
+
interface ConfigBase {
|
|
40
|
+
value: ConfigValue;
|
|
41
|
+
schema: ConfigSchema | null;
|
|
42
|
+
overrides: Override[];
|
|
43
|
+
}
|
|
44
|
+
interface ConfigVariant {
|
|
45
|
+
environmentId: string;
|
|
46
|
+
value: ConfigValue;
|
|
47
|
+
schema: ConfigSchema | null;
|
|
48
|
+
overrides: Override[];
|
|
49
|
+
useBaseSchema: boolean;
|
|
50
|
+
}
|
|
51
|
+
interface Config {
|
|
52
|
+
id: string;
|
|
53
|
+
name: string;
|
|
54
|
+
description?: string;
|
|
55
|
+
version: number;
|
|
56
|
+
base: ConfigBase;
|
|
57
|
+
variants: ConfigVariant[];
|
|
58
|
+
editors: string[];
|
|
59
|
+
createdAt: string;
|
|
60
|
+
updatedAt: string;
|
|
61
|
+
}
|
|
62
|
+
interface ConfigListItem {
|
|
63
|
+
id: string;
|
|
64
|
+
name: string;
|
|
65
|
+
description?: string;
|
|
66
|
+
version: number;
|
|
67
|
+
createdAt: string;
|
|
68
|
+
updatedAt: string;
|
|
69
|
+
}
|
|
70
|
+
interface ConfigListResponse {
|
|
71
|
+
configs: ConfigListItem[];
|
|
72
|
+
}
|
|
73
|
+
interface CreateConfigRequest {
|
|
74
|
+
name: string;
|
|
75
|
+
description: string;
|
|
76
|
+
editors: string[];
|
|
77
|
+
maintainers: string[];
|
|
78
|
+
base: ConfigBase;
|
|
79
|
+
variants: ConfigVariant[];
|
|
80
|
+
}
|
|
81
|
+
interface UpdateConfigRequest {
|
|
82
|
+
description: string;
|
|
83
|
+
editors: string[];
|
|
84
|
+
base: ConfigBase;
|
|
85
|
+
variants: ConfigVariant[];
|
|
86
|
+
}
|
|
87
|
+
interface CreateConfigResponse {
|
|
88
|
+
id: string;
|
|
89
|
+
}
|
|
90
|
+
interface UpdateConfigResponse {
|
|
91
|
+
id: string;
|
|
92
|
+
version: number;
|
|
93
|
+
}
|
|
94
|
+
interface Environment {
|
|
95
|
+
id: string;
|
|
96
|
+
name: string;
|
|
97
|
+
order: number;
|
|
98
|
+
}
|
|
99
|
+
interface EnvironmentListResponse {
|
|
100
|
+
environments: Environment[];
|
|
101
|
+
}
|
|
102
|
+
interface SdkKey {
|
|
103
|
+
id: string;
|
|
104
|
+
name: string;
|
|
105
|
+
description: string;
|
|
106
|
+
environmentId: string;
|
|
107
|
+
createdAt: string;
|
|
108
|
+
}
|
|
109
|
+
interface SdkKeyWithToken extends SdkKey {
|
|
110
|
+
key: string;
|
|
111
|
+
}
|
|
112
|
+
interface SdkKeyListResponse {
|
|
113
|
+
sdkKeys: SdkKey[];
|
|
114
|
+
}
|
|
115
|
+
interface CreateSdkKeyRequest {
|
|
116
|
+
name: string;
|
|
117
|
+
description?: string;
|
|
118
|
+
environmentId: string;
|
|
119
|
+
}
|
|
120
|
+
interface Member {
|
|
121
|
+
email: string;
|
|
122
|
+
role: string;
|
|
123
|
+
}
|
|
124
|
+
interface MemberListResponse {
|
|
125
|
+
members: Member[];
|
|
126
|
+
}
|
|
127
|
+
interface ApiError {
|
|
128
|
+
error: string;
|
|
129
|
+
}
|
|
130
|
+
interface ReplaneAdminOptions {
|
|
131
|
+
/**
|
|
132
|
+
* Admin API key (starts with rpa_)
|
|
133
|
+
*/
|
|
134
|
+
apiKey: string;
|
|
135
|
+
/**
|
|
136
|
+
* Base URL for Replane instance
|
|
137
|
+
* @example "https://app.replane.dev"
|
|
138
|
+
*/
|
|
139
|
+
baseUrl: string;
|
|
140
|
+
/**
|
|
141
|
+
* Custom agent identifier for tracking SDK usage
|
|
142
|
+
* @default "replane-admin/{version}"
|
|
143
|
+
*/
|
|
144
|
+
agent?: string;
|
|
145
|
+
/**
|
|
146
|
+
* Custom fetch function for making HTTP requests.
|
|
147
|
+
* Useful for testing or environments without global fetch.
|
|
148
|
+
* @default globalThis.fetch
|
|
149
|
+
*/
|
|
150
|
+
fetchFn?: typeof fetch;
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=types.d.ts.map
|
|
153
|
+
//#endregion
|
|
154
|
+
//#region src/client.d.ts
|
|
155
|
+
/**
|
|
156
|
+
* Error thrown by the Admin API client
|
|
157
|
+
*/
|
|
158
|
+
declare class ReplaneAdminError extends Error {
|
|
159
|
+
readonly status: number;
|
|
160
|
+
readonly response?: ApiError | undefined;
|
|
161
|
+
constructor(message: string, status: number, response?: ApiError | undefined);
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Admin API client for Replane
|
|
165
|
+
*
|
|
166
|
+
* Provides programmatic access to manage projects, configs, environments,
|
|
167
|
+
* SDK keys, and members.
|
|
168
|
+
*
|
|
169
|
+
* @example
|
|
170
|
+
* ```typescript
|
|
171
|
+
* import { ReplaneAdmin } from "@replanejs/admin";
|
|
172
|
+
*
|
|
173
|
+
* const admin = new ReplaneAdmin({
|
|
174
|
+
* baseUrl: "https://app.replane.dev",
|
|
175
|
+
* apiKey: "rpa_...",
|
|
176
|
+
* });
|
|
177
|
+
*
|
|
178
|
+
* // List all projects
|
|
179
|
+
* const { projects } = await admin.projects.list();
|
|
180
|
+
*
|
|
181
|
+
* // Create a new config
|
|
182
|
+
* const { id } = await admin.configs.create("project-id", {
|
|
183
|
+
* name: "my-config",
|
|
184
|
+
* description: "My config",
|
|
185
|
+
* editors: [],
|
|
186
|
+
* maintainers: [],
|
|
187
|
+
* base: { value: true, schema: null, overrides: [] },
|
|
188
|
+
* variants: [],
|
|
189
|
+
* });
|
|
190
|
+
* ```
|
|
191
|
+
*/
|
|
192
|
+
declare class ReplaneAdmin {
|
|
193
|
+
private readonly apiKey;
|
|
194
|
+
private readonly baseUrl;
|
|
195
|
+
private readonly agent;
|
|
196
|
+
private readonly fetchFn;
|
|
197
|
+
readonly projects: ProjectsApi;
|
|
198
|
+
readonly configs: ConfigsApi;
|
|
199
|
+
readonly environments: EnvironmentsApi;
|
|
200
|
+
readonly sdkKeys: SdkKeysApi;
|
|
201
|
+
readonly members: MembersApi;
|
|
202
|
+
constructor(options: ReplaneAdminOptions);
|
|
203
|
+
/**
|
|
204
|
+
* Make an authenticated request to the Admin API
|
|
205
|
+
* @internal
|
|
206
|
+
*/
|
|
207
|
+
request<T>(method: "GET" | "POST" | "PUT" | "DELETE" | "PATCH", path: string, body?: unknown): Promise<T>;
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Projects API
|
|
211
|
+
*/
|
|
212
|
+
declare class ProjectsApi {
|
|
213
|
+
private readonly client;
|
|
214
|
+
constructor(client: ReplaneAdmin);
|
|
215
|
+
/**
|
|
216
|
+
* List all projects
|
|
217
|
+
*/
|
|
218
|
+
list(): Promise<ProjectListResponse>;
|
|
219
|
+
/**
|
|
220
|
+
* Get a project by ID
|
|
221
|
+
*/
|
|
222
|
+
get(projectId: string): Promise<Project>;
|
|
223
|
+
/**
|
|
224
|
+
* Create a new project
|
|
225
|
+
*/
|
|
226
|
+
create(data: CreateProjectRequest): Promise<CreateProjectResponse>;
|
|
227
|
+
/**
|
|
228
|
+
* Update a project
|
|
229
|
+
*/
|
|
230
|
+
update(projectId: string, data: UpdateProjectRequest): Promise<UpdateProjectResponse>;
|
|
231
|
+
/**
|
|
232
|
+
* Delete a project
|
|
233
|
+
*/
|
|
234
|
+
delete(projectId: string): Promise<void>;
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Configs API
|
|
238
|
+
*/
|
|
239
|
+
declare class ConfigsApi {
|
|
240
|
+
private readonly client;
|
|
241
|
+
constructor(client: ReplaneAdmin);
|
|
242
|
+
/**
|
|
243
|
+
* List all configs in a project
|
|
244
|
+
*/
|
|
245
|
+
list(projectId: string): Promise<ConfigListResponse>;
|
|
246
|
+
/**
|
|
247
|
+
* Get a config by name
|
|
248
|
+
*/
|
|
249
|
+
get(projectId: string, configName: string): Promise<Config>;
|
|
250
|
+
/**
|
|
251
|
+
* Create a new config
|
|
252
|
+
*/
|
|
253
|
+
create(projectId: string, data: CreateConfigRequest): Promise<CreateConfigResponse>;
|
|
254
|
+
/**
|
|
255
|
+
* Update a config
|
|
256
|
+
*/
|
|
257
|
+
update(projectId: string, configName: string, data: UpdateConfigRequest): Promise<UpdateConfigResponse>;
|
|
258
|
+
/**
|
|
259
|
+
* Delete a config
|
|
260
|
+
*/
|
|
261
|
+
delete(projectId: string, configName: string): Promise<void>;
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Environments API
|
|
265
|
+
*/
|
|
266
|
+
declare class EnvironmentsApi {
|
|
267
|
+
private readonly client;
|
|
268
|
+
constructor(client: ReplaneAdmin);
|
|
269
|
+
/**
|
|
270
|
+
* List all environments in a project
|
|
271
|
+
*/
|
|
272
|
+
list(projectId: string): Promise<EnvironmentListResponse>;
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* SDK Keys API
|
|
276
|
+
*/
|
|
277
|
+
declare class SdkKeysApi {
|
|
278
|
+
private readonly client;
|
|
279
|
+
constructor(client: ReplaneAdmin);
|
|
280
|
+
/**
|
|
281
|
+
* List all SDK keys in a project
|
|
282
|
+
*/
|
|
283
|
+
list(projectId: string): Promise<SdkKeyListResponse>;
|
|
284
|
+
/**
|
|
285
|
+
* Create a new SDK key
|
|
286
|
+
* Note: The returned key is only shown once and cannot be retrieved again
|
|
287
|
+
*/
|
|
288
|
+
create(projectId: string, data: CreateSdkKeyRequest): Promise<SdkKeyWithToken>;
|
|
289
|
+
/**
|
|
290
|
+
* Delete an SDK key
|
|
291
|
+
*/
|
|
292
|
+
delete(projectId: string, sdkKeyId: string): Promise<void>;
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* Members API
|
|
296
|
+
*/
|
|
297
|
+
declare class MembersApi {
|
|
298
|
+
private readonly client;
|
|
299
|
+
constructor(client: ReplaneAdmin);
|
|
300
|
+
/**
|
|
301
|
+
* List all members in a project
|
|
302
|
+
*/
|
|
303
|
+
list(projectId: string): Promise<MemberListResponse>;
|
|
304
|
+
}
|
|
305
|
+
//#endregion
|
|
306
|
+
//#region src/version.d.ts
|
|
307
|
+
declare const VERSION = "0.8.11";
|
|
308
|
+
declare const DEFAULT_AGENT = "replane-js-admin/0.8.11";
|
|
309
|
+
//# sourceMappingURL=version.d.ts.map
|
|
310
|
+
|
|
311
|
+
//#endregion
|
|
312
|
+
export { type ApiError, type Config, type ConfigBase, type ConfigListItem, type ConfigListResponse, type ConfigSchema, type ConfigValue, type ConfigVariant, type CreateConfigRequest, type CreateConfigResponse, type CreateProjectRequest, type CreateProjectResponse, type CreateSdkKeyRequest, DEFAULT_AGENT, type Environment, type EnvironmentListResponse, type Member, type MemberListResponse, type Override, type OverrideCondition, type Project, type ProjectListResponse, ReplaneAdmin, ReplaneAdminError, type ReplaneAdminOptions, type SdkKey, type SdkKeyListResponse, type SdkKeyWithToken, type UpdateConfigRequest, type UpdateConfigResponse, type UpdateProjectRequest, type UpdateProjectResponse, VERSION };
|
|
313
|
+
//# sourceMappingURL=index.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/types.ts","../src/client.ts","../src/version.ts"],"sourcesContent":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,313 @@
|
|
|
1
|
+
//#region src/types.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Admin API Types for Replane
|
|
4
|
+
*/
|
|
5
|
+
type ConfigValue = unknown;
|
|
6
|
+
type ConfigSchema = unknown;
|
|
7
|
+
interface Override {
|
|
8
|
+
condition: OverrideCondition;
|
|
9
|
+
value: ConfigValue;
|
|
10
|
+
}
|
|
11
|
+
interface OverrideCondition {
|
|
12
|
+
type: string;
|
|
13
|
+
[key: string]: unknown;
|
|
14
|
+
}
|
|
15
|
+
interface Project {
|
|
16
|
+
id: string;
|
|
17
|
+
name: string;
|
|
18
|
+
description: string;
|
|
19
|
+
createdAt: string;
|
|
20
|
+
updatedAt: string;
|
|
21
|
+
}
|
|
22
|
+
interface CreateProjectRequest {
|
|
23
|
+
name: string;
|
|
24
|
+
description: string;
|
|
25
|
+
}
|
|
26
|
+
interface UpdateProjectRequest {
|
|
27
|
+
name?: string;
|
|
28
|
+
description?: string;
|
|
29
|
+
}
|
|
30
|
+
interface ProjectListResponse {
|
|
31
|
+
projects: Project[];
|
|
32
|
+
}
|
|
33
|
+
interface CreateProjectResponse {
|
|
34
|
+
id: string;
|
|
35
|
+
}
|
|
36
|
+
interface UpdateProjectResponse {
|
|
37
|
+
id: string;
|
|
38
|
+
}
|
|
39
|
+
interface ConfigBase {
|
|
40
|
+
value: ConfigValue;
|
|
41
|
+
schema: ConfigSchema | null;
|
|
42
|
+
overrides: Override[];
|
|
43
|
+
}
|
|
44
|
+
interface ConfigVariant {
|
|
45
|
+
environmentId: string;
|
|
46
|
+
value: ConfigValue;
|
|
47
|
+
schema: ConfigSchema | null;
|
|
48
|
+
overrides: Override[];
|
|
49
|
+
useBaseSchema: boolean;
|
|
50
|
+
}
|
|
51
|
+
interface Config {
|
|
52
|
+
id: string;
|
|
53
|
+
name: string;
|
|
54
|
+
description?: string;
|
|
55
|
+
version: number;
|
|
56
|
+
base: ConfigBase;
|
|
57
|
+
variants: ConfigVariant[];
|
|
58
|
+
editors: string[];
|
|
59
|
+
createdAt: string;
|
|
60
|
+
updatedAt: string;
|
|
61
|
+
}
|
|
62
|
+
interface ConfigListItem {
|
|
63
|
+
id: string;
|
|
64
|
+
name: string;
|
|
65
|
+
description?: string;
|
|
66
|
+
version: number;
|
|
67
|
+
createdAt: string;
|
|
68
|
+
updatedAt: string;
|
|
69
|
+
}
|
|
70
|
+
interface ConfigListResponse {
|
|
71
|
+
configs: ConfigListItem[];
|
|
72
|
+
}
|
|
73
|
+
interface CreateConfigRequest {
|
|
74
|
+
name: string;
|
|
75
|
+
description: string;
|
|
76
|
+
editors: string[];
|
|
77
|
+
maintainers: string[];
|
|
78
|
+
base: ConfigBase;
|
|
79
|
+
variants: ConfigVariant[];
|
|
80
|
+
}
|
|
81
|
+
interface UpdateConfigRequest {
|
|
82
|
+
description: string;
|
|
83
|
+
editors: string[];
|
|
84
|
+
base: ConfigBase;
|
|
85
|
+
variants: ConfigVariant[];
|
|
86
|
+
}
|
|
87
|
+
interface CreateConfigResponse {
|
|
88
|
+
id: string;
|
|
89
|
+
}
|
|
90
|
+
interface UpdateConfigResponse {
|
|
91
|
+
id: string;
|
|
92
|
+
version: number;
|
|
93
|
+
}
|
|
94
|
+
interface Environment {
|
|
95
|
+
id: string;
|
|
96
|
+
name: string;
|
|
97
|
+
order: number;
|
|
98
|
+
}
|
|
99
|
+
interface EnvironmentListResponse {
|
|
100
|
+
environments: Environment[];
|
|
101
|
+
}
|
|
102
|
+
interface SdkKey {
|
|
103
|
+
id: string;
|
|
104
|
+
name: string;
|
|
105
|
+
description: string;
|
|
106
|
+
environmentId: string;
|
|
107
|
+
createdAt: string;
|
|
108
|
+
}
|
|
109
|
+
interface SdkKeyWithToken extends SdkKey {
|
|
110
|
+
key: string;
|
|
111
|
+
}
|
|
112
|
+
interface SdkKeyListResponse {
|
|
113
|
+
sdkKeys: SdkKey[];
|
|
114
|
+
}
|
|
115
|
+
interface CreateSdkKeyRequest {
|
|
116
|
+
name: string;
|
|
117
|
+
description?: string;
|
|
118
|
+
environmentId: string;
|
|
119
|
+
}
|
|
120
|
+
interface Member {
|
|
121
|
+
email: string;
|
|
122
|
+
role: string;
|
|
123
|
+
}
|
|
124
|
+
interface MemberListResponse {
|
|
125
|
+
members: Member[];
|
|
126
|
+
}
|
|
127
|
+
interface ApiError {
|
|
128
|
+
error: string;
|
|
129
|
+
}
|
|
130
|
+
interface ReplaneAdminOptions {
|
|
131
|
+
/**
|
|
132
|
+
* Admin API key (starts with rpa_)
|
|
133
|
+
*/
|
|
134
|
+
apiKey: string;
|
|
135
|
+
/**
|
|
136
|
+
* Base URL for Replane instance
|
|
137
|
+
* @example "https://app.replane.dev"
|
|
138
|
+
*/
|
|
139
|
+
baseUrl: string;
|
|
140
|
+
/**
|
|
141
|
+
* Custom agent identifier for tracking SDK usage
|
|
142
|
+
* @default "replane-admin/{version}"
|
|
143
|
+
*/
|
|
144
|
+
agent?: string;
|
|
145
|
+
/**
|
|
146
|
+
* Custom fetch function for making HTTP requests.
|
|
147
|
+
* Useful for testing or environments without global fetch.
|
|
148
|
+
* @default globalThis.fetch
|
|
149
|
+
*/
|
|
150
|
+
fetchFn?: typeof fetch;
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=types.d.ts.map
|
|
153
|
+
//#endregion
|
|
154
|
+
//#region src/client.d.ts
|
|
155
|
+
/**
|
|
156
|
+
* Error thrown by the Admin API client
|
|
157
|
+
*/
|
|
158
|
+
declare class ReplaneAdminError extends Error {
|
|
159
|
+
readonly status: number;
|
|
160
|
+
readonly response?: ApiError | undefined;
|
|
161
|
+
constructor(message: string, status: number, response?: ApiError | undefined);
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Admin API client for Replane
|
|
165
|
+
*
|
|
166
|
+
* Provides programmatic access to manage projects, configs, environments,
|
|
167
|
+
* SDK keys, and members.
|
|
168
|
+
*
|
|
169
|
+
* @example
|
|
170
|
+
* ```typescript
|
|
171
|
+
* import { ReplaneAdmin } from "@replanejs/admin";
|
|
172
|
+
*
|
|
173
|
+
* const admin = new ReplaneAdmin({
|
|
174
|
+
* baseUrl: "https://app.replane.dev",
|
|
175
|
+
* apiKey: "rpa_...",
|
|
176
|
+
* });
|
|
177
|
+
*
|
|
178
|
+
* // List all projects
|
|
179
|
+
* const { projects } = await admin.projects.list();
|
|
180
|
+
*
|
|
181
|
+
* // Create a new config
|
|
182
|
+
* const { id } = await admin.configs.create("project-id", {
|
|
183
|
+
* name: "my-config",
|
|
184
|
+
* description: "My config",
|
|
185
|
+
* editors: [],
|
|
186
|
+
* maintainers: [],
|
|
187
|
+
* base: { value: true, schema: null, overrides: [] },
|
|
188
|
+
* variants: [],
|
|
189
|
+
* });
|
|
190
|
+
* ```
|
|
191
|
+
*/
|
|
192
|
+
declare class ReplaneAdmin {
|
|
193
|
+
private readonly apiKey;
|
|
194
|
+
private readonly baseUrl;
|
|
195
|
+
private readonly agent;
|
|
196
|
+
private readonly fetchFn;
|
|
197
|
+
readonly projects: ProjectsApi;
|
|
198
|
+
readonly configs: ConfigsApi;
|
|
199
|
+
readonly environments: EnvironmentsApi;
|
|
200
|
+
readonly sdkKeys: SdkKeysApi;
|
|
201
|
+
readonly members: MembersApi;
|
|
202
|
+
constructor(options: ReplaneAdminOptions);
|
|
203
|
+
/**
|
|
204
|
+
* Make an authenticated request to the Admin API
|
|
205
|
+
* @internal
|
|
206
|
+
*/
|
|
207
|
+
request<T>(method: "GET" | "POST" | "PUT" | "DELETE" | "PATCH", path: string, body?: unknown): Promise<T>;
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Projects API
|
|
211
|
+
*/
|
|
212
|
+
declare class ProjectsApi {
|
|
213
|
+
private readonly client;
|
|
214
|
+
constructor(client: ReplaneAdmin);
|
|
215
|
+
/**
|
|
216
|
+
* List all projects
|
|
217
|
+
*/
|
|
218
|
+
list(): Promise<ProjectListResponse>;
|
|
219
|
+
/**
|
|
220
|
+
* Get a project by ID
|
|
221
|
+
*/
|
|
222
|
+
get(projectId: string): Promise<Project>;
|
|
223
|
+
/**
|
|
224
|
+
* Create a new project
|
|
225
|
+
*/
|
|
226
|
+
create(data: CreateProjectRequest): Promise<CreateProjectResponse>;
|
|
227
|
+
/**
|
|
228
|
+
* Update a project
|
|
229
|
+
*/
|
|
230
|
+
update(projectId: string, data: UpdateProjectRequest): Promise<UpdateProjectResponse>;
|
|
231
|
+
/**
|
|
232
|
+
* Delete a project
|
|
233
|
+
*/
|
|
234
|
+
delete(projectId: string): Promise<void>;
|
|
235
|
+
}
|
|
236
|
+
/**
|
|
237
|
+
* Configs API
|
|
238
|
+
*/
|
|
239
|
+
declare class ConfigsApi {
|
|
240
|
+
private readonly client;
|
|
241
|
+
constructor(client: ReplaneAdmin);
|
|
242
|
+
/**
|
|
243
|
+
* List all configs in a project
|
|
244
|
+
*/
|
|
245
|
+
list(projectId: string): Promise<ConfigListResponse>;
|
|
246
|
+
/**
|
|
247
|
+
* Get a config by name
|
|
248
|
+
*/
|
|
249
|
+
get(projectId: string, configName: string): Promise<Config>;
|
|
250
|
+
/**
|
|
251
|
+
* Create a new config
|
|
252
|
+
*/
|
|
253
|
+
create(projectId: string, data: CreateConfigRequest): Promise<CreateConfigResponse>;
|
|
254
|
+
/**
|
|
255
|
+
* Update a config
|
|
256
|
+
*/
|
|
257
|
+
update(projectId: string, configName: string, data: UpdateConfigRequest): Promise<UpdateConfigResponse>;
|
|
258
|
+
/**
|
|
259
|
+
* Delete a config
|
|
260
|
+
*/
|
|
261
|
+
delete(projectId: string, configName: string): Promise<void>;
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Environments API
|
|
265
|
+
*/
|
|
266
|
+
declare class EnvironmentsApi {
|
|
267
|
+
private readonly client;
|
|
268
|
+
constructor(client: ReplaneAdmin);
|
|
269
|
+
/**
|
|
270
|
+
* List all environments in a project
|
|
271
|
+
*/
|
|
272
|
+
list(projectId: string): Promise<EnvironmentListResponse>;
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* SDK Keys API
|
|
276
|
+
*/
|
|
277
|
+
declare class SdkKeysApi {
|
|
278
|
+
private readonly client;
|
|
279
|
+
constructor(client: ReplaneAdmin);
|
|
280
|
+
/**
|
|
281
|
+
* List all SDK keys in a project
|
|
282
|
+
*/
|
|
283
|
+
list(projectId: string): Promise<SdkKeyListResponse>;
|
|
284
|
+
/**
|
|
285
|
+
* Create a new SDK key
|
|
286
|
+
* Note: The returned key is only shown once and cannot be retrieved again
|
|
287
|
+
*/
|
|
288
|
+
create(projectId: string, data: CreateSdkKeyRequest): Promise<SdkKeyWithToken>;
|
|
289
|
+
/**
|
|
290
|
+
* Delete an SDK key
|
|
291
|
+
*/
|
|
292
|
+
delete(projectId: string, sdkKeyId: string): Promise<void>;
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* Members API
|
|
296
|
+
*/
|
|
297
|
+
declare class MembersApi {
|
|
298
|
+
private readonly client;
|
|
299
|
+
constructor(client: ReplaneAdmin);
|
|
300
|
+
/**
|
|
301
|
+
* List all members in a project
|
|
302
|
+
*/
|
|
303
|
+
list(projectId: string): Promise<MemberListResponse>;
|
|
304
|
+
}
|
|
305
|
+
//#endregion
|
|
306
|
+
//#region src/version.d.ts
|
|
307
|
+
declare const VERSION = "0.8.11";
|
|
308
|
+
declare const DEFAULT_AGENT = "replane-js-admin/0.8.11";
|
|
309
|
+
//# sourceMappingURL=version.d.ts.map
|
|
310
|
+
|
|
311
|
+
//#endregion
|
|
312
|
+
export { type ApiError, type Config, type ConfigBase, type ConfigListItem, type ConfigListResponse, type ConfigSchema, type ConfigValue, type ConfigVariant, type CreateConfigRequest, type CreateConfigResponse, type CreateProjectRequest, type CreateProjectResponse, type CreateSdkKeyRequest, DEFAULT_AGENT, type Environment, type EnvironmentListResponse, type Member, type MemberListResponse, type Override, type OverrideCondition, type Project, type ProjectListResponse, ReplaneAdmin, ReplaneAdminError, type ReplaneAdminOptions, type SdkKey, type SdkKeyListResponse, type SdkKeyWithToken, type UpdateConfigRequest, type UpdateConfigResponse, type UpdateProjectRequest, type UpdateProjectResponse, VERSION };
|
|
313
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/types.ts","../src/client.ts","../src/version.ts"],"sourcesContent":[],"mappings":"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"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
//#region src/version.ts
|
|
2
|
+
const VERSION = "0.8.11";
|
|
3
|
+
const DEFAULT_AGENT = `replane-js-admin/${VERSION}`;
|
|
4
|
+
|
|
5
|
+
//#endregion
|
|
6
|
+
//#region src/client.ts
|
|
7
|
+
/**
|
|
8
|
+
* Error thrown by the Admin API client
|
|
9
|
+
*/
|
|
10
|
+
var ReplaneAdminError = class extends Error {
|
|
11
|
+
constructor(message, status, response) {
|
|
12
|
+
super(message);
|
|
13
|
+
this.status = status;
|
|
14
|
+
this.response = response;
|
|
15
|
+
this.name = "ReplaneAdminError";
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Admin API client for Replane
|
|
20
|
+
*
|
|
21
|
+
* Provides programmatic access to manage projects, configs, environments,
|
|
22
|
+
* SDK keys, and members.
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```typescript
|
|
26
|
+
* import { ReplaneAdmin } from "@replanejs/admin";
|
|
27
|
+
*
|
|
28
|
+
* const admin = new ReplaneAdmin({
|
|
29
|
+
* baseUrl: "https://app.replane.dev",
|
|
30
|
+
* apiKey: "rpa_...",
|
|
31
|
+
* });
|
|
32
|
+
*
|
|
33
|
+
* // List all projects
|
|
34
|
+
* const { projects } = await admin.projects.list();
|
|
35
|
+
*
|
|
36
|
+
* // Create a new config
|
|
37
|
+
* const { id } = await admin.configs.create("project-id", {
|
|
38
|
+
* name: "my-config",
|
|
39
|
+
* description: "My config",
|
|
40
|
+
* editors: [],
|
|
41
|
+
* maintainers: [],
|
|
42
|
+
* base: { value: true, schema: null, overrides: [] },
|
|
43
|
+
* variants: [],
|
|
44
|
+
* });
|
|
45
|
+
* ```
|
|
46
|
+
*/
|
|
47
|
+
var ReplaneAdmin = class {
|
|
48
|
+
apiKey;
|
|
49
|
+
baseUrl;
|
|
50
|
+
agent;
|
|
51
|
+
fetchFn;
|
|
52
|
+
projects;
|
|
53
|
+
configs;
|
|
54
|
+
environments;
|
|
55
|
+
sdkKeys;
|
|
56
|
+
members;
|
|
57
|
+
constructor(options) {
|
|
58
|
+
this.apiKey = options.apiKey;
|
|
59
|
+
this.baseUrl = `${options.baseUrl.replace(/\/$/, "")}/api/admin/v1`;
|
|
60
|
+
this.agent = options.agent ?? DEFAULT_AGENT;
|
|
61
|
+
this.fetchFn = options.fetchFn ?? globalThis.fetch;
|
|
62
|
+
this.projects = new ProjectsApi(this);
|
|
63
|
+
this.configs = new ConfigsApi(this);
|
|
64
|
+
this.environments = new EnvironmentsApi(this);
|
|
65
|
+
this.sdkKeys = new SdkKeysApi(this);
|
|
66
|
+
this.members = new MembersApi(this);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Make an authenticated request to the Admin API
|
|
70
|
+
* @internal
|
|
71
|
+
*/
|
|
72
|
+
async request(method, path, body) {
|
|
73
|
+
const url = `${this.baseUrl}${path}`;
|
|
74
|
+
const headers = {
|
|
75
|
+
Authorization: `Bearer ${this.apiKey}`,
|
|
76
|
+
"User-Agent": this.agent
|
|
77
|
+
};
|
|
78
|
+
if (body !== void 0) headers["Content-Type"] = "application/json";
|
|
79
|
+
const response = await this.fetchFn(url, {
|
|
80
|
+
method,
|
|
81
|
+
headers,
|
|
82
|
+
body: body !== void 0 ? JSON.stringify(body) : void 0
|
|
83
|
+
});
|
|
84
|
+
if (!response.ok) {
|
|
85
|
+
let errorResponse;
|
|
86
|
+
try {
|
|
87
|
+
errorResponse = await response.json();
|
|
88
|
+
} catch {}
|
|
89
|
+
throw new ReplaneAdminError(errorResponse?.error ?? `Request failed with status ${response.status}`, response.status, errorResponse);
|
|
90
|
+
}
|
|
91
|
+
if (response.status === 204) return void 0;
|
|
92
|
+
return response.json();
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
/**
|
|
96
|
+
* Projects API
|
|
97
|
+
*/
|
|
98
|
+
var ProjectsApi = class {
|
|
99
|
+
constructor(client) {
|
|
100
|
+
this.client = client;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* List all projects
|
|
104
|
+
*/
|
|
105
|
+
async list() {
|
|
106
|
+
return this.client.request("GET", "/projects");
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Get a project by ID
|
|
110
|
+
*/
|
|
111
|
+
async get(projectId) {
|
|
112
|
+
return this.client.request("GET", `/projects/${projectId}`);
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Create a new project
|
|
116
|
+
*/
|
|
117
|
+
async create(data) {
|
|
118
|
+
return this.client.request("POST", "/projects", data);
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Update a project
|
|
122
|
+
*/
|
|
123
|
+
async update(projectId, data) {
|
|
124
|
+
return this.client.request("PATCH", `/projects/${projectId}`, data);
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Delete a project
|
|
128
|
+
*/
|
|
129
|
+
async delete(projectId) {
|
|
130
|
+
return this.client.request("DELETE", `/projects/${projectId}`);
|
|
131
|
+
}
|
|
132
|
+
};
|
|
133
|
+
/**
|
|
134
|
+
* Configs API
|
|
135
|
+
*/
|
|
136
|
+
var ConfigsApi = class {
|
|
137
|
+
constructor(client) {
|
|
138
|
+
this.client = client;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* List all configs in a project
|
|
142
|
+
*/
|
|
143
|
+
async list(projectId) {
|
|
144
|
+
return this.client.request("GET", `/projects/${projectId}/configs`);
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Get a config by name
|
|
148
|
+
*/
|
|
149
|
+
async get(projectId, configName) {
|
|
150
|
+
return this.client.request("GET", `/projects/${projectId}/configs/${encodeURIComponent(configName)}`);
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Create a new config
|
|
154
|
+
*/
|
|
155
|
+
async create(projectId, data) {
|
|
156
|
+
return this.client.request("POST", `/projects/${projectId}/configs`, data);
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Update a config
|
|
160
|
+
*/
|
|
161
|
+
async update(projectId, configName, data) {
|
|
162
|
+
return this.client.request("PUT", `/projects/${projectId}/configs/${encodeURIComponent(configName)}`, data);
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Delete a config
|
|
166
|
+
*/
|
|
167
|
+
async delete(projectId, configName) {
|
|
168
|
+
return this.client.request("DELETE", `/projects/${projectId}/configs/${encodeURIComponent(configName)}`);
|
|
169
|
+
}
|
|
170
|
+
};
|
|
171
|
+
/**
|
|
172
|
+
* Environments API
|
|
173
|
+
*/
|
|
174
|
+
var EnvironmentsApi = class {
|
|
175
|
+
constructor(client) {
|
|
176
|
+
this.client = client;
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* List all environments in a project
|
|
180
|
+
*/
|
|
181
|
+
async list(projectId) {
|
|
182
|
+
return this.client.request("GET", `/projects/${projectId}/environments`);
|
|
183
|
+
}
|
|
184
|
+
};
|
|
185
|
+
/**
|
|
186
|
+
* SDK Keys API
|
|
187
|
+
*/
|
|
188
|
+
var SdkKeysApi = class {
|
|
189
|
+
constructor(client) {
|
|
190
|
+
this.client = client;
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* List all SDK keys in a project
|
|
194
|
+
*/
|
|
195
|
+
async list(projectId) {
|
|
196
|
+
return this.client.request("GET", `/projects/${projectId}/sdk-keys`);
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Create a new SDK key
|
|
200
|
+
* Note: The returned key is only shown once and cannot be retrieved again
|
|
201
|
+
*/
|
|
202
|
+
async create(projectId, data) {
|
|
203
|
+
return this.client.request("POST", `/projects/${projectId}/sdk-keys`, data);
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Delete an SDK key
|
|
207
|
+
*/
|
|
208
|
+
async delete(projectId, sdkKeyId) {
|
|
209
|
+
return this.client.request("DELETE", `/projects/${projectId}/sdk-keys/${sdkKeyId}`);
|
|
210
|
+
}
|
|
211
|
+
};
|
|
212
|
+
/**
|
|
213
|
+
* Members API
|
|
214
|
+
*/
|
|
215
|
+
var MembersApi = class {
|
|
216
|
+
constructor(client) {
|
|
217
|
+
this.client = client;
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* List all members in a project
|
|
221
|
+
*/
|
|
222
|
+
async list(projectId) {
|
|
223
|
+
return this.client.request("GET", `/projects/${projectId}/members`);
|
|
224
|
+
}
|
|
225
|
+
};
|
|
226
|
+
|
|
227
|
+
//#endregion
|
|
228
|
+
export { DEFAULT_AGENT, ReplaneAdmin, ReplaneAdminError, VERSION };
|
|
229
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["message: string","status: number","response?: ApiError","options: ReplaneAdminOptions","method: \"GET\" | \"POST\" | \"PUT\" | \"DELETE\" | \"PATCH\"","path: string","body?: unknown","headers: Record<string, string>","errorResponse: ApiError | undefined","client: ReplaneAdmin","projectId: string","data: CreateProjectRequest","data: UpdateProjectRequest","configName: string","data: CreateConfigRequest","data: UpdateConfigRequest","data: CreateSdkKeyRequest","sdkKeyId: string"],"sources":["../src/version.ts","../src/client.ts"],"sourcesContent":["// Auto-generated - do not edit manually\nexport const VERSION = \"0.8.11\";\nexport const DEFAULT_AGENT = `replane-js-admin/${VERSION}`;\n","import type {\n ReplaneAdminOptions,\n Project,\n ProjectListResponse,\n CreateProjectRequest,\n CreateProjectResponse,\n UpdateProjectRequest,\n UpdateProjectResponse,\n Config,\n ConfigListResponse,\n CreateConfigRequest,\n CreateConfigResponse,\n UpdateConfigRequest,\n UpdateConfigResponse,\n EnvironmentListResponse,\n SdkKeyListResponse,\n SdkKeyWithToken,\n CreateSdkKeyRequest,\n MemberListResponse,\n ApiError,\n} from \"./types.js\";\nimport { DEFAULT_AGENT } from \"./version.js\";\n\n/**\n * Error thrown by the Admin API client\n */\nexport class ReplaneAdminError extends Error {\n constructor(\n message: string,\n public readonly status: number,\n public readonly response?: ApiError\n ) {\n super(message);\n this.name = \"ReplaneAdminError\";\n }\n}\n\n/**\n * Admin API client for Replane\n *\n * Provides programmatic access to manage projects, configs, environments,\n * SDK keys, and members.\n *\n * @example\n * ```typescript\n * import { ReplaneAdmin } from \"@replanejs/admin\";\n *\n * const admin = new ReplaneAdmin({\n * baseUrl: \"https://app.replane.dev\",\n * apiKey: \"rpa_...\",\n * });\n *\n * // List all projects\n * const { projects } = await admin.projects.list();\n *\n * // Create a new config\n * const { id } = await admin.configs.create(\"project-id\", {\n * name: \"my-config\",\n * description: \"My config\",\n * editors: [],\n * maintainers: [],\n * base: { value: true, schema: null, overrides: [] },\n * variants: [],\n * });\n * ```\n */\nexport class ReplaneAdmin {\n private readonly apiKey: string;\n private readonly baseUrl: string;\n private readonly agent: string;\n private readonly fetchFn: typeof fetch;\n\n public readonly projects: ProjectsApi;\n public readonly configs: ConfigsApi;\n public readonly environments: EnvironmentsApi;\n public readonly sdkKeys: SdkKeysApi;\n public readonly members: MembersApi;\n\n constructor(options: ReplaneAdminOptions) {\n this.apiKey = options.apiKey;\n this.baseUrl = `${options.baseUrl.replace(/\\/$/, \"\")}/api/admin/v1`;\n this.agent = options.agent ?? DEFAULT_AGENT;\n this.fetchFn = options.fetchFn ?? globalThis.fetch;\n\n this.projects = new ProjectsApi(this);\n this.configs = new ConfigsApi(this);\n this.environments = new EnvironmentsApi(this);\n this.sdkKeys = new SdkKeysApi(this);\n this.members = new MembersApi(this);\n }\n\n /**\n * Make an authenticated request to the Admin API\n * @internal\n */\n async request<T>(\n method: \"GET\" | \"POST\" | \"PUT\" | \"DELETE\" | \"PATCH\",\n path: string,\n body?: unknown\n ): Promise<T> {\n const url = `${this.baseUrl}${path}`;\n\n const headers: Record<string, string> = {\n Authorization: `Bearer ${this.apiKey}`,\n \"User-Agent\": this.agent,\n };\n\n if (body !== undefined) {\n headers[\"Content-Type\"] = \"application/json\";\n }\n\n const response = await this.fetchFn(url, {\n method,\n headers,\n body: body !== undefined ? JSON.stringify(body) : undefined,\n });\n\n if (!response.ok) {\n let errorResponse: ApiError | undefined;\n try {\n errorResponse = await response.json();\n } catch {\n // Ignore JSON parse errors\n }\n throw new ReplaneAdminError(\n errorResponse?.error ?? `Request failed with status ${response.status}`,\n response.status,\n errorResponse\n );\n }\n\n // Handle 204 No Content\n if (response.status === 204) {\n return undefined as T;\n }\n\n return response.json();\n }\n}\n\n/**\n * Projects API\n */\nclass ProjectsApi {\n constructor(private readonly client: ReplaneAdmin) {}\n\n /**\n * List all projects\n */\n async list(): Promise<ProjectListResponse> {\n return this.client.request<ProjectListResponse>(\"GET\", \"/projects\");\n }\n\n /**\n * Get a project by ID\n */\n async get(projectId: string): Promise<Project> {\n return this.client.request<Project>(\"GET\", `/projects/${projectId}`);\n }\n\n /**\n * Create a new project\n */\n async create(data: CreateProjectRequest): Promise<CreateProjectResponse> {\n return this.client.request<CreateProjectResponse>(\"POST\", \"/projects\", data);\n }\n\n /**\n * Update a project\n */\n async update(projectId: string, data: UpdateProjectRequest): Promise<UpdateProjectResponse> {\n return this.client.request<UpdateProjectResponse>(\"PATCH\", `/projects/${projectId}`, data);\n }\n\n /**\n * Delete a project\n */\n async delete(projectId: string): Promise<void> {\n return this.client.request<void>(\"DELETE\", `/projects/${projectId}`);\n }\n}\n\n/**\n * Configs API\n */\nclass ConfigsApi {\n constructor(private readonly client: ReplaneAdmin) {}\n\n /**\n * List all configs in a project\n */\n async list(projectId: string): Promise<ConfigListResponse> {\n return this.client.request<ConfigListResponse>(\"GET\", `/projects/${projectId}/configs`);\n }\n\n /**\n * Get a config by name\n */\n async get(projectId: string, configName: string): Promise<Config> {\n return this.client.request<Config>(\n \"GET\",\n `/projects/${projectId}/configs/${encodeURIComponent(configName)}`\n );\n }\n\n /**\n * Create a new config\n */\n async create(projectId: string, data: CreateConfigRequest): Promise<CreateConfigResponse> {\n return this.client.request<CreateConfigResponse>(\n \"POST\",\n `/projects/${projectId}/configs`,\n data\n );\n }\n\n /**\n * Update a config\n */\n async update(\n projectId: string,\n configName: string,\n data: UpdateConfigRequest\n ): Promise<UpdateConfigResponse> {\n return this.client.request<UpdateConfigResponse>(\n \"PUT\",\n `/projects/${projectId}/configs/${encodeURIComponent(configName)}`,\n data\n );\n }\n\n /**\n * Delete a config\n */\n async delete(projectId: string, configName: string): Promise<void> {\n return this.client.request<void>(\n \"DELETE\",\n `/projects/${projectId}/configs/${encodeURIComponent(configName)}`\n );\n }\n}\n\n/**\n * Environments API\n */\nclass EnvironmentsApi {\n constructor(private readonly client: ReplaneAdmin) {}\n\n /**\n * List all environments in a project\n */\n async list(projectId: string): Promise<EnvironmentListResponse> {\n return this.client.request<EnvironmentListResponse>(\n \"GET\",\n `/projects/${projectId}/environments`\n );\n }\n}\n\n/**\n * SDK Keys API\n */\nclass SdkKeysApi {\n constructor(private readonly client: ReplaneAdmin) {}\n\n /**\n * List all SDK keys in a project\n */\n async list(projectId: string): Promise<SdkKeyListResponse> {\n return this.client.request<SdkKeyListResponse>(\"GET\", `/projects/${projectId}/sdk-keys`);\n }\n\n /**\n * Create a new SDK key\n * Note: The returned key is only shown once and cannot be retrieved again\n */\n async create(projectId: string, data: CreateSdkKeyRequest): Promise<SdkKeyWithToken> {\n return this.client.request<SdkKeyWithToken>(\"POST\", `/projects/${projectId}/sdk-keys`, data);\n }\n\n /**\n * Delete an SDK key\n */\n async delete(projectId: string, sdkKeyId: string): Promise<void> {\n return this.client.request<void>(\"DELETE\", `/projects/${projectId}/sdk-keys/${sdkKeyId}`);\n }\n}\n\n/**\n * Members API\n */\nclass MembersApi {\n constructor(private readonly client: ReplaneAdmin) {}\n\n /**\n * List all members in a project\n */\n async list(projectId: string): Promise<MemberListResponse> {\n return this.client.request<MemberListResponse>(\"GET\", `/projects/${projectId}/members`);\n }\n}\n"],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@replanejs/admin",
|
|
3
|
+
"version": "0.8.11",
|
|
4
|
+
"description": "Admin API SDK for Replane - programmatic management of projects, configs, environments, and SDK keys",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.cjs",
|
|
7
|
+
"module": "./dist/index.js",
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"types": "./dist/index.d.ts",
|
|
12
|
+
"import": "./dist/index.js",
|
|
13
|
+
"require": "./dist/index.cjs"
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
"files": [
|
|
17
|
+
"dist"
|
|
18
|
+
],
|
|
19
|
+
"sideEffects": false,
|
|
20
|
+
"keywords": [
|
|
21
|
+
"replane",
|
|
22
|
+
"admin",
|
|
23
|
+
"api",
|
|
24
|
+
"sdk",
|
|
25
|
+
"feature-flags",
|
|
26
|
+
"remote-config",
|
|
27
|
+
"configuration",
|
|
28
|
+
"management"
|
|
29
|
+
],
|
|
30
|
+
"author": "",
|
|
31
|
+
"license": "MIT",
|
|
32
|
+
"repository": {
|
|
33
|
+
"type": "git",
|
|
34
|
+
"url": "https://github.com/replane-dev/replane-javascript",
|
|
35
|
+
"directory": "packages/admin"
|
|
36
|
+
},
|
|
37
|
+
"bugs": {
|
|
38
|
+
"url": "https://github.com/replane-dev/replane-javascript/issues"
|
|
39
|
+
},
|
|
40
|
+
"homepage": "https://github.com/replane-dev/replane-javascript#readme",
|
|
41
|
+
"devDependencies": {
|
|
42
|
+
"tsdown": "^0.11.9",
|
|
43
|
+
"typescript": "^5.4.0",
|
|
44
|
+
"vitest": "^3.2.4"
|
|
45
|
+
},
|
|
46
|
+
"engines": {
|
|
47
|
+
"node": ">=18.0.0"
|
|
48
|
+
},
|
|
49
|
+
"publishConfig": {
|
|
50
|
+
"access": "public"
|
|
51
|
+
},
|
|
52
|
+
"scripts": {
|
|
53
|
+
"prebuild": "node ../../scripts/update-version.js .",
|
|
54
|
+
"build": "tsdown",
|
|
55
|
+
"dev": "tsdown --watch",
|
|
56
|
+
"test": "vitest run",
|
|
57
|
+
"typecheck": "tsc --noEmit"
|
|
58
|
+
}
|
|
59
|
+
}
|