@better-i18n/admin 0.2.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 (41) hide show
  1. package/dist/analytics/index.d.ts +14 -0
  2. package/dist/analytics/index.d.ts.map +1 -0
  3. package/dist/analytics/index.js +45 -0
  4. package/dist/analytics/index.js.map +1 -0
  5. package/dist/client.d.ts +15 -0
  6. package/dist/client.d.ts.map +1 -0
  7. package/dist/client.js +35 -0
  8. package/dist/client.js.map +1 -0
  9. package/dist/content/index.d.ts +34 -0
  10. package/dist/content/index.d.ts.map +1 -0
  11. package/dist/content/index.js +68 -0
  12. package/dist/content/index.js.map +1 -0
  13. package/dist/index.d.ts +21 -0
  14. package/dist/index.d.ts.map +1 -0
  15. package/dist/index.js +77 -0
  16. package/dist/index.js.map +1 -0
  17. package/dist/keys/index.d.ts +13 -0
  18. package/dist/keys/index.d.ts.map +1 -0
  19. package/dist/keys/index.js +17 -0
  20. package/dist/keys/index.js.map +1 -0
  21. package/dist/languages/index.d.ts +12 -0
  22. package/dist/languages/index.d.ts.map +1 -0
  23. package/dist/languages/index.js +14 -0
  24. package/dist/languages/index.js.map +1 -0
  25. package/dist/projects/index.d.ts +8 -0
  26. package/dist/projects/index.d.ts.map +1 -0
  27. package/dist/projects/index.js +11 -0
  28. package/dist/projects/index.js.map +1 -0
  29. package/dist/sync/index.d.ts +12 -0
  30. package/dist/sync/index.d.ts.map +1 -0
  31. package/dist/sync/index.js +14 -0
  32. package/dist/sync/index.js.map +1 -0
  33. package/dist/translations/index.d.ts +14 -0
  34. package/dist/translations/index.d.ts.map +1 -0
  35. package/dist/translations/index.js +20 -0
  36. package/dist/translations/index.js.map +1 -0
  37. package/dist/types.d.ts +54 -0
  38. package/dist/types.d.ts.map +1 -0
  39. package/dist/types.js +2 -0
  40. package/dist/types.js.map +1 -0
  41. package/package.json +75 -0
@@ -0,0 +1,14 @@
1
+ import type { ViewsResponse, SingleViewResponse, StatsResponse, ViewsOptions } from "../types.js";
2
+ import type { ProjectScope } from "../client.js";
3
+ export interface AnalyticsClientConfig {
4
+ apiKey: string;
5
+ contentApiUrl?: string;
6
+ }
7
+ export declare function createAnalyticsNamespace(config: AnalyticsClientConfig, scope: ProjectScope): {
8
+ views(modelSlug: string, entryOrOpts?: string | ViewsOptions, opts?: ViewsOptions): Promise<ViewsResponse | SingleViewResponse>;
9
+ stats(modelSlug: string, opts?: ViewsOptions & {
10
+ entrySlug?: string;
11
+ }): Promise<StatsResponse>;
12
+ };
13
+ export type AnalyticsNamespace = ReturnType<typeof createAnalyticsNamespace>;
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/analytics/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAClG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAID,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,qBAAqB,EAAE,KAAK,EAAE,YAAY;qBA4BhE,MAAM,gBAAgB,MAAM,GAAG,YAAY,SAAS,YAAY,GAAG,OAAO,CAAC,aAAa,GAAG,kBAAkB,CAAC;qBAS9G,MAAM,SAAS,YAAY,GAAG;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,aAAa,CAAC;EAOvG;AAED,MAAM,MAAM,kBAAkB,GAAG,UAAU,CAAC,OAAO,wBAAwB,CAAC,CAAC"}
@@ -0,0 +1,45 @@
1
+ const DEFAULT_CONTENT_API = "https://content.better-i18n.com";
2
+ export function createAnalyticsNamespace(config, scope) {
3
+ const baseUrl = (config.contentApiUrl ?? DEFAULT_CONTENT_API).replace(/\/$/, "");
4
+ const { orgSlug, projectSlug } = scope;
5
+ async function request(path, params) {
6
+ const url = new URL(`${baseUrl}${path}`);
7
+ if (params) {
8
+ for (const [k, v] of Object.entries(params)) {
9
+ if (v)
10
+ url.searchParams.set(k, v);
11
+ }
12
+ }
13
+ const res = await fetch(url.toString(), {
14
+ headers: { "x-api-key": config.apiKey },
15
+ });
16
+ if (!res.ok) {
17
+ if (res.status === 401)
18
+ throw new Error("Invalid API key");
19
+ if (res.status === 403)
20
+ throw new Error("Public keys cannot read analytics. Use your project API key.");
21
+ if (res.status === 404)
22
+ throw new Error("Project or model not found");
23
+ const body = await res.text().catch(() => "");
24
+ throw new Error(`Analytics API error ${res.status}: ${body}`);
25
+ }
26
+ return res.json();
27
+ }
28
+ return {
29
+ async views(modelSlug, entryOrOpts, opts) {
30
+ const entrySlug = typeof entryOrOpts === "string" ? entryOrOpts : undefined;
31
+ const options = typeof entryOrOpts === "object" ? entryOrOpts : opts;
32
+ const path = entrySlug
33
+ ? `/v1/analytics/views/${orgSlug}/${projectSlug}/${modelSlug}/${entrySlug}`
34
+ : `/v1/analytics/views/${orgSlug}/${projectSlug}/${modelSlug}`;
35
+ return request(path, options?.period ? { period: options.period } : undefined);
36
+ },
37
+ async stats(modelSlug, opts) {
38
+ const path = opts?.entrySlug
39
+ ? `/v1/analytics/stats/${orgSlug}/${projectSlug}/${modelSlug}/${opts.entrySlug}`
40
+ : `/v1/analytics/stats/${orgSlug}/${projectSlug}/${modelSlug}`;
41
+ return request(path, opts?.period ? { period: opts.period } : undefined);
42
+ },
43
+ };
44
+ }
45
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/analytics/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { APIClient } from "@better-i18n/mcp-types";
2
+ export interface AdminClientConfig {
3
+ apiKey: string;
4
+ projectId: string;
5
+ apiUrl?: string;
6
+ debug?: boolean;
7
+ fetch?: typeof fetch;
8
+ }
9
+ export interface ProjectScope {
10
+ orgSlug: string;
11
+ projectSlug: string;
12
+ }
13
+ export declare function parseProjectId(projectId: string): ProjectScope | null;
14
+ export declare function createAPIClient(config: AdminClientConfig): APIClient;
15
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAExD,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACrB;AAKD,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAarE;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,iBAAiB,GAAG,SAAS,CAoBpE"}
package/dist/client.js ADDED
@@ -0,0 +1,35 @@
1
+ import { createTRPCClient, httpBatchLink } from "@trpc/client";
2
+ const DEFAULT_API_URL = "https://api.better-i18n.com";
3
+ const UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
4
+ export function parseProjectId(projectId) {
5
+ if (projectId.includes("/")) {
6
+ const parts = projectId.split("/");
7
+ if (parts.length === 2 && parts[0] && parts[1]) {
8
+ return { orgSlug: parts[0], projectSlug: parts[1] };
9
+ }
10
+ }
11
+ if (UUID_RE.test(projectId)) {
12
+ return null;
13
+ }
14
+ throw new Error(`Invalid projectId "${projectId}". Use "org/project" slug (e.g. "nomadvibe/packervibe") or a project UUID.`);
15
+ }
16
+ export function createAPIClient(config) {
17
+ const baseUrl = (config.apiUrl ?? DEFAULT_API_URL).replace(/\/$/, "");
18
+ const url = baseUrl.endsWith("/api/trpc")
19
+ ? baseUrl
20
+ : `${baseUrl}/api/trpc`;
21
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
22
+ const client = createTRPCClient({
23
+ links: [
24
+ httpBatchLink({
25
+ url,
26
+ headers: () => ({
27
+ "x-api-key": config.apiKey,
28
+ }),
29
+ fetch: config.fetch ?? fetch,
30
+ }),
31
+ ],
32
+ });
33
+ return client;
34
+ }
35
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAgB/D,MAAM,eAAe,GAAG,6BAA6B,CAAC;AACtD,MAAM,OAAO,GAAG,iEAAiE,CAAC;AAElF,MAAM,UAAU,cAAc,CAAC,SAAiB;IAC9C,IAAI,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;YAC/C,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QACtD,CAAC;IACH,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,IAAI,KAAK,CACb,sBAAsB,SAAS,4EAA4E,CAC5G,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,MAAyB;IACvD,MAAM,OAAO,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,eAAe,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACtE,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;QACvC,CAAC,CAAC,OAAO;QACT,CAAC,CAAC,GAAG,OAAO,WAAW,CAAC;IAE1B,8DAA8D;IAC9D,MAAM,MAAM,GAAG,gBAAgB,CAAM;QACnC,KAAK,EAAE;YACL,aAAa,CAAC;gBACZ,GAAG;gBACH,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;oBACd,WAAW,EAAE,MAAM,CAAC,MAAM;iBAC3B,CAAC;gBACF,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,KAAK;aAC7B,CAAC;SACH;KACF,CAAC,CAAC;IAEH,OAAO,MAA8B,CAAC;AACxC,CAAC"}
@@ -0,0 +1,34 @@
1
+ import type { APIClient } from "@better-i18n/mcp-types";
2
+ import type { ListContentModelsInput, GetContentModelInput, CreateContentModelInput, UpdateContentModelInput, DeleteContentModelInput, AddFieldInput, UpdateFieldInput, RemoveFieldInput, ReorderFieldsInput, ListContentEntriesInput, GetContentEntryInput, CreateContentEntryInput, UpdateContentEntryInput, PublishContentEntryInput, DeleteContentEntryInput, DuplicateContentEntryInput, BulkCreateEntriesInput, BulkUpdateEntriesInput, BulkPublishEntriesInput } from "@better-i18n/mcp-types";
3
+ import type { ProjectScope } from "../client.js";
4
+ type WithoutScope<T> = Omit<T, "orgSlug" | "projectSlug">;
5
+ export declare function createContentNamespace(client: APIClient, scope: ProjectScope): {
6
+ models: {
7
+ list(input?: WithoutScope<ListContentModelsInput>): Promise<import("@better-i18n/mcp-types").CompactListContentModelsResponse>;
8
+ get(input: WithoutScope<GetContentModelInput>): Promise<import("@better-i18n/mcp-types").CompactGetContentModelResponse>;
9
+ create(input: WithoutScope<CreateContentModelInput>): Promise<import("@better-i18n/mcp-types").CompactGetContentModelResponse>;
10
+ update(input: WithoutScope<UpdateContentModelInput>): Promise<import("@better-i18n/mcp-types").CompactGetContentModelResponse>;
11
+ delete(input: WithoutScope<DeleteContentModelInput>): Promise<import("@better-i18n/mcp-types").CompactDeleteContentModelResponse>;
12
+ };
13
+ fields: {
14
+ add(input: WithoutScope<AddFieldInput>): Promise<import("@better-i18n/mcp-types").CompactContentModelField>;
15
+ update(input: WithoutScope<UpdateFieldInput>): Promise<import("@better-i18n/mcp-types").CompactContentModelField>;
16
+ remove(input: WithoutScope<RemoveFieldInput>): Promise<import("@better-i18n/mcp-types").CompactRemoveFieldResponse>;
17
+ reorder(input: WithoutScope<ReorderFieldsInput>): Promise<import("@better-i18n/mcp-types").CompactReorderFieldsResponse>;
18
+ };
19
+ entries: {
20
+ list(input?: WithoutScope<ListContentEntriesInput>): Promise<import("@better-i18n/mcp-types").CompactListContentEntriesResponse | import("@better-i18n/mcp-types").CompactListContentEntriesCompactResponse>;
21
+ get(input: WithoutScope<GetContentEntryInput>): Promise<import("@better-i18n/mcp-types").CompactContentEntryDetail | import("@better-i18n/mcp-types").CompactContentEntryDetailMin>;
22
+ create(input: WithoutScope<CreateContentEntryInput>): Promise<import("@better-i18n/mcp-types").CompactContentEntryDetailMin>;
23
+ update(input: WithoutScope<UpdateContentEntryInput>): Promise<import("@better-i18n/mcp-types").CompactContentEntryDetailMin>;
24
+ publish(input: WithoutScope<PublishContentEntryInput>): Promise<import("@better-i18n/mcp-types").CompactContentEntryDetailMin>;
25
+ delete(input: WithoutScope<DeleteContentEntryInput>): Promise<import("@better-i18n/mcp-types").CompactDeleteContentEntryResponse>;
26
+ duplicate(input: WithoutScope<DuplicateContentEntryInput>): Promise<import("@better-i18n/mcp-types").CompactContentEntryDetailMin>;
27
+ bulkCreate(input: WithoutScope<BulkCreateEntriesInput>): Promise<import("@better-i18n/mcp-types").CompactBulkCreateEntriesResponse>;
28
+ bulkUpdate(input: WithoutScope<BulkUpdateEntriesInput>): Promise<import("@better-i18n/mcp-types").CompactBulkUpdateEntriesResponse>;
29
+ bulkPublish(input: WithoutScope<BulkPublishEntriesInput>): Promise<import("@better-i18n/mcp-types").CompactBulkPublishEntriesResponse>;
30
+ };
31
+ };
32
+ export type ContentNamespace = ReturnType<typeof createContentNamespace>;
33
+ export {};
34
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/content/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EACV,sBAAsB,EACtB,oBAAoB,EACpB,uBAAuB,EACvB,uBAAuB,EACvB,uBAAuB,EACvB,aAAa,EACb,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,uBAAuB,EACvB,oBAAoB,EACpB,uBAAuB,EACvB,uBAAuB,EACvB,wBAAwB,EACxB,uBAAuB,EACvB,0BAA0B,EAC1B,sBAAsB,EACtB,sBAAsB,EACtB,uBAAuB,EACxB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,KAAK,YAAY,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,SAAS,GAAG,aAAa,CAAC,CAAC;AAE1D,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,YAAY;;qBAGpD,YAAY,CAAC,sBAAsB,CAAC;mBAGtC,YAAY,CAAC,oBAAoB,CAAC;sBAG/B,YAAY,CAAC,uBAAuB,CAAC;sBAGrC,YAAY,CAAC,uBAAuB,CAAC;sBAGrC,YAAY,CAAC,uBAAuB,CAAC;;;mBAMxC,YAAY,CAAC,aAAa,CAAC;sBAGxB,YAAY,CAAC,gBAAgB,CAAC;sBAG9B,YAAY,CAAC,gBAAgB,CAAC;uBAG7B,YAAY,CAAC,kBAAkB,CAAC;;;qBAMlC,YAAY,CAAC,uBAAuB,CAAC;mBAGvC,YAAY,CAAC,oBAAoB,CAAC;sBAG/B,YAAY,CAAC,uBAAuB,CAAC;sBAGrC,YAAY,CAAC,uBAAuB,CAAC;uBAGpC,YAAY,CAAC,wBAAwB,CAAC;sBAGvC,YAAY,CAAC,uBAAuB,CAAC;yBAGlC,YAAY,CAAC,0BAA0B,CAAC;0BAGvC,YAAY,CAAC,sBAAsB,CAAC;0BAGpC,YAAY,CAAC,sBAAsB,CAAC;2BAGnC,YAAY,CAAC,uBAAuB,CAAC;;EAKnE;AAED,MAAM,MAAM,gBAAgB,GAAG,UAAU,CAAC,OAAO,sBAAsB,CAAC,CAAC"}
@@ -0,0 +1,68 @@
1
+ export function createContentNamespace(client, scope) {
2
+ return {
3
+ models: {
4
+ async list(input) {
5
+ return client.mcpContent.listContentModels.query({ ...scope, ...input });
6
+ },
7
+ async get(input) {
8
+ return client.mcpContent.getContentModel.query({ ...scope, ...input });
9
+ },
10
+ async create(input) {
11
+ return client.mcpContent.createContentModel.mutate({ ...scope, ...input });
12
+ },
13
+ async update(input) {
14
+ return client.mcpContent.updateContentModel.mutate({ ...scope, ...input });
15
+ },
16
+ async delete(input) {
17
+ return client.mcpContent.deleteContentModel.mutate({ ...scope, ...input });
18
+ },
19
+ },
20
+ fields: {
21
+ async add(input) {
22
+ return client.mcpContent.addField.mutate({ ...scope, ...input });
23
+ },
24
+ async update(input) {
25
+ return client.mcpContent.updateField.mutate({ ...scope, ...input });
26
+ },
27
+ async remove(input) {
28
+ return client.mcpContent.removeField.mutate({ ...scope, ...input });
29
+ },
30
+ async reorder(input) {
31
+ return client.mcpContent.reorderFields.mutate({ ...scope, ...input });
32
+ },
33
+ },
34
+ entries: {
35
+ async list(input) {
36
+ return client.mcpContent.listContentEntries.query({ ...scope, ...input });
37
+ },
38
+ async get(input) {
39
+ return client.mcpContent.getContentEntry.query({ ...scope, ...input });
40
+ },
41
+ async create(input) {
42
+ return client.mcpContent.createContentEntry.mutate({ ...scope, ...input });
43
+ },
44
+ async update(input) {
45
+ return client.mcpContent.updateContentEntry.mutate({ ...scope, ...input });
46
+ },
47
+ async publish(input) {
48
+ return client.mcpContent.publishContentEntry.mutate({ ...scope, ...input });
49
+ },
50
+ async delete(input) {
51
+ return client.mcpContent.deleteContentEntry.mutate({ ...scope, ...input });
52
+ },
53
+ async duplicate(input) {
54
+ return client.mcpContent.duplicateContentEntry.mutate({ ...scope, ...input });
55
+ },
56
+ async bulkCreate(input) {
57
+ return client.mcpContent.bulkCreateEntries.mutate({ ...scope, ...input });
58
+ },
59
+ async bulkUpdate(input) {
60
+ return client.mcpContent.bulkUpdateEntries.mutate({ ...scope, ...input });
61
+ },
62
+ async bulkPublish(input) {
63
+ return client.mcpContent.bulkPublishEntries.mutate({ ...scope, ...input });
64
+ },
65
+ },
66
+ };
67
+ }
68
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/content/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { type AdminClientConfig } from "./client.js";
2
+ import { createProjectsNamespace } from "./projects/index.js";
3
+ import { createKeysNamespace } from "./keys/index.js";
4
+ import { createTranslationsNamespace } from "./translations/index.js";
5
+ import { createSyncNamespace } from "./sync/index.js";
6
+ import { createLanguagesNamespace } from "./languages/index.js";
7
+ import { createContentNamespace } from "./content/index.js";
8
+ import { createAnalyticsNamespace } from "./analytics/index.js";
9
+ export interface BetterAdminClient {
10
+ projects: ReturnType<typeof createProjectsNamespace>;
11
+ keys: ReturnType<typeof createKeysNamespace>;
12
+ translations: ReturnType<typeof createTranslationsNamespace>;
13
+ sync: ReturnType<typeof createSyncNamespace>;
14
+ languages: ReturnType<typeof createLanguagesNamespace>;
15
+ content: ReturnType<typeof createContentNamespace>;
16
+ analytics: ReturnType<typeof createAnalyticsNamespace>;
17
+ }
18
+ export declare function createAdminClient(config: AdminClientConfig): BetterAdminClient;
19
+ export { type AdminClientConfig, type ProjectScope } from "./client.js";
20
+ export * from "./types.js";
21
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmC,KAAK,iBAAiB,EAAqB,MAAM,aAAa,CAAC;AACzG,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAGhE,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAC;IACrD,IAAI,EAAE,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC;IAC7C,YAAY,EAAE,UAAU,CAAC,OAAO,2BAA2B,CAAC,CAAC;IAC7D,IAAI,EAAE,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC;IAC7C,SAAS,EAAE,UAAU,CAAC,OAAO,wBAAwB,CAAC,CAAC;IACvD,OAAO,EAAE,UAAU,CAAC,OAAO,sBAAsB,CAAC,CAAC;IACnD,SAAS,EAAE,UAAU,CAAC,OAAO,wBAAwB,CAAC,CAAC;CACxD;AAqBD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,GAAG,iBAAiB,CAoB9E;AAgDD,OAAO,EAAE,KAAK,iBAAiB,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AACxE,cAAc,YAAY,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,77 @@
1
+ import { createAPIClient, parseProjectId } from "./client.js";
2
+ import { createProjectsNamespace } from "./projects/index.js";
3
+ import { createKeysNamespace } from "./keys/index.js";
4
+ import { createTranslationsNamespace } from "./translations/index.js";
5
+ import { createSyncNamespace } from "./sync/index.js";
6
+ import { createLanguagesNamespace } from "./languages/index.js";
7
+ import { createContentNamespace } from "./content/index.js";
8
+ import { createAnalyticsNamespace } from "./analytics/index.js";
9
+ async function resolveScope(trpcClient, projectId) {
10
+ const parsed = parseProjectId(projectId);
11
+ if (parsed)
12
+ return parsed;
13
+ const result = await trpcClient.mcp.listProjects.query();
14
+ const match = result
15
+ .projects.find((p) => p.id === projectId);
16
+ if (!match) {
17
+ throw new Error(`Project with UUID "${projectId}" not found. Check your projectId.`);
18
+ }
19
+ const parts = match.slug.split("/");
20
+ return { orgSlug: parts[0], projectSlug: parts[1] };
21
+ }
22
+ export function createAdminClient(config) {
23
+ const trpcClient = createAPIClient(config);
24
+ const parsed = parseProjectId(config.projectId);
25
+ if (parsed) {
26
+ return buildClient(trpcClient, parsed, config);
27
+ }
28
+ let resolvedScope = null;
29
+ const scopePromise = resolveScope(trpcClient, config.projectId).then((s) => {
30
+ resolvedScope = s;
31
+ return s;
32
+ });
33
+ async function getScope() {
34
+ if (resolvedScope)
35
+ return resolvedScope;
36
+ return scopePromise;
37
+ }
38
+ return buildLazyClient(trpcClient, getScope, config);
39
+ }
40
+ function buildClient(trpcClient, scope, config) {
41
+ return {
42
+ projects: createProjectsNamespace(trpcClient, scope),
43
+ keys: createKeysNamespace(trpcClient, scope),
44
+ translations: createTranslationsNamespace(trpcClient, scope),
45
+ sync: createSyncNamespace(trpcClient, scope),
46
+ languages: createLanguagesNamespace(trpcClient, scope),
47
+ content: createContentNamespace(trpcClient, scope),
48
+ analytics: createAnalyticsNamespace({ apiKey: config.apiKey }, scope),
49
+ };
50
+ }
51
+ function buildLazyClient(trpcClient, getScope, config) {
52
+ function lazy(factory) {
53
+ return new Proxy({}, {
54
+ get(_, prop) {
55
+ return async (...args) => {
56
+ const scope = await getScope();
57
+ const real = factory(scope);
58
+ const fn = real[prop];
59
+ if (typeof fn === "function")
60
+ return fn(...args);
61
+ return fn;
62
+ };
63
+ },
64
+ });
65
+ }
66
+ return {
67
+ projects: lazy((s) => createProjectsNamespace(trpcClient, s)),
68
+ keys: lazy((s) => createKeysNamespace(trpcClient, s)),
69
+ translations: lazy((s) => createTranslationsNamespace(trpcClient, s)),
70
+ sync: lazy((s) => createSyncNamespace(trpcClient, s)),
71
+ languages: lazy((s) => createLanguagesNamespace(trpcClient, s)),
72
+ content: lazy((s) => createContentNamespace(trpcClient, s)),
73
+ analytics: lazy((s) => createAnalyticsNamespace({ apiKey: config.apiKey }, s)),
74
+ };
75
+ }
76
+ export * from "./types.js";
77
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { APIClient } from "@better-i18n/mcp-types";
2
+ import type { ListKeysInput, CreateKeysInput, UpdateKeysInput, DeleteKeysInput } from "@better-i18n/mcp-types";
3
+ import type { ProjectScope } from "../client.js";
4
+ type WithoutScope<T> = Omit<T, "orgSlug" | "projectSlug">;
5
+ export declare function createKeysNamespace(client: APIClient, scope: ProjectScope): {
6
+ list(input?: WithoutScope<ListKeysInput>): Promise<import("@better-i18n/mcp-types").CompactListKeysResponse>;
7
+ create(input: WithoutScope<CreateKeysInput>): Promise<import("@better-i18n/mcp-types").CompactCreateKeysResponse>;
8
+ update(input: WithoutScope<UpdateKeysInput>): Promise<import("@better-i18n/mcp-types").CompactUpdateKeysResponse>;
9
+ delete(input: WithoutScope<DeleteKeysInput>): Promise<import("@better-i18n/mcp-types").CompactDeleteKeysResponse>;
10
+ };
11
+ export type KeysNamespace = ReturnType<typeof createKeysNamespace>;
12
+ export {};
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/keys/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EACV,aAAa,EACb,eAAe,EACf,eAAe,EACf,eAAe,EAChB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,KAAK,YAAY,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,SAAS,GAAG,aAAa,CAAC,CAAC;AAE1D,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,YAAY;iBAEnD,YAAY,CAAC,aAAa,CAAC;kBAI1B,YAAY,CAAC,eAAe,CAAC;kBAI7B,YAAY,CAAC,eAAe,CAAC;kBAI7B,YAAY,CAAC,eAAe,CAAC;EAIpD;AAED,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC"}
@@ -0,0 +1,17 @@
1
+ export function createKeysNamespace(client, scope) {
2
+ return {
3
+ async list(input) {
4
+ return client.mcp.listKeys.query({ ...scope, ...input });
5
+ },
6
+ async create(input) {
7
+ return client.mcp.createKeys.mutate({ ...scope, ...input });
8
+ },
9
+ async update(input) {
10
+ return client.mcp.updateKeys.mutate({ ...scope, ...input });
11
+ },
12
+ async delete(input) {
13
+ return client.mcp.deleteKeys.mutate({ ...scope, ...input });
14
+ },
15
+ };
16
+ }
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/keys/index.ts"],"names":[],"mappings":"AAWA,MAAM,UAAU,mBAAmB,CAAC,MAAiB,EAAE,KAAmB;IACxE,OAAO;QACL,KAAK,CAAC,IAAI,CAAC,KAAmC;YAC5C,OAAO,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;QAC3D,CAAC;QAED,KAAK,CAAC,MAAM,CAAC,KAAoC;YAC/C,OAAO,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,GAAG,KAAK,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;QAC9D,CAAC;QAED,KAAK,CAAC,MAAM,CAAC,KAAoC;YAC/C,OAAO,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,GAAG,KAAK,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;QAC9D,CAAC;QAED,KAAK,CAAC,MAAM,CAAC,KAAoC;YAC/C,OAAO,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,GAAG,KAAK,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;QAC9D,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { APIClient } from "@better-i18n/mcp-types";
2
+ import type { AddLanguagesInput, UpdateLanguagesInput, DeleteLanguagesInput } from "@better-i18n/mcp-types";
3
+ import type { ProjectScope } from "../client.js";
4
+ type WithoutScope<T> = Omit<T, "orgSlug" | "projectSlug">;
5
+ export declare function createLanguagesNamespace(client: APIClient, scope: ProjectScope): {
6
+ add(input: WithoutScope<AddLanguagesInput>): Promise<import("@better-i18n/mcp-types").AddLanguagesResponse>;
7
+ update(input: WithoutScope<UpdateLanguagesInput>): Promise<import("@better-i18n/mcp-types").UpdateLanguagesResponse>;
8
+ delete(input: WithoutScope<DeleteLanguagesInput>): Promise<import("@better-i18n/mcp-types").DeleteLanguagesResponse>;
9
+ };
10
+ export type LanguagesNamespace = ReturnType<typeof createLanguagesNamespace>;
11
+ export {};
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/languages/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EACV,iBAAiB,EACjB,oBAAoB,EACpB,oBAAoB,EACrB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,KAAK,YAAY,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,SAAS,GAAG,aAAa,CAAC,CAAC;AAE1D,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,YAAY;eAE1D,YAAY,CAAC,iBAAiB,CAAC;kBAI5B,YAAY,CAAC,oBAAoB,CAAC;kBAIlC,YAAY,CAAC,oBAAoB,CAAC;EAIzD;AAED,MAAM,MAAM,kBAAkB,GAAG,UAAU,CAAC,OAAO,wBAAwB,CAAC,CAAC"}
@@ -0,0 +1,14 @@
1
+ export function createLanguagesNamespace(client, scope) {
2
+ return {
3
+ async add(input) {
4
+ return client.mcp.addLanguages.mutate({ ...scope, ...input });
5
+ },
6
+ async update(input) {
7
+ return client.mcp.updateLanguages.mutate({ ...scope, ...input });
8
+ },
9
+ async delete(input) {
10
+ return client.mcp.deleteLanguages.mutate({ ...scope, ...input });
11
+ },
12
+ };
13
+ }
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/languages/index.ts"],"names":[],"mappings":"AAUA,MAAM,UAAU,wBAAwB,CAAC,MAAiB,EAAE,KAAmB;IAC7E,OAAO;QACL,KAAK,CAAC,GAAG,CAAC,KAAsC;YAC9C,OAAO,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,GAAG,KAAK,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;QAChE,CAAC;QAED,KAAK,CAAC,MAAM,CAAC,KAAyC;YACpD,OAAO,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,GAAG,KAAK,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;QACnE,CAAC;QAED,KAAK,CAAC,MAAM,CAAC,KAAyC;YACpD,OAAO,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,GAAG,KAAK,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;QACnE,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { APIClient } from "@better-i18n/mcp-types";
2
+ import type { ProjectScope } from "../client.js";
3
+ export declare function createProjectsNamespace(client: APIClient, scope: ProjectScope): {
4
+ get(): Promise<import("@better-i18n/mcp-types").CompactGetProjectResponse>;
5
+ list(): Promise<import("@better-i18n/mcp-types").ListProjectsResponse>;
6
+ };
7
+ export type ProjectsNamespace = ReturnType<typeof createProjectsNamespace>;
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/projects/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,YAAY;;;EAU7E;AAED,MAAM,MAAM,iBAAiB,GAAG,UAAU,CAAC,OAAO,uBAAuB,CAAC,CAAC"}
@@ -0,0 +1,11 @@
1
+ export function createProjectsNamespace(client, scope) {
2
+ return {
3
+ async get() {
4
+ return client.mcp.getProject.query(scope);
5
+ },
6
+ async list() {
7
+ return client.mcp.listProjects.query();
8
+ },
9
+ };
10
+ }
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/projects/index.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,uBAAuB,CAAC,MAAiB,EAAE,KAAmB;IAC5E,OAAO;QACL,KAAK,CAAC,GAAG;YACP,OAAO,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC5C,CAAC;QAED,KAAK,CAAC,IAAI;YACR,OAAO,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;QACzC,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { APIClient } from "@better-i18n/mcp-types";
2
+ import type { GetSyncsInput, GetSyncInput, CancelSyncInput } from "@better-i18n/mcp-types";
3
+ import type { ProjectScope } from "../client.js";
4
+ type WithoutScope<T> = Omit<T, "orgSlug" | "projectSlug">;
5
+ export declare function createSyncNamespace(client: APIClient, scope: ProjectScope): {
6
+ list(input?: WithoutScope<GetSyncsInput>): Promise<import("@better-i18n/mcp-types").CompactGetSyncsResponse>;
7
+ get(input: WithoutScope<GetSyncInput>): Promise<import("@better-i18n/mcp-types").CompactGetSyncResponse>;
8
+ cancel(input: WithoutScope<CancelSyncInput>): Promise<import("@better-i18n/mcp-types").CompactCancelSyncResponse>;
9
+ };
10
+ export type SyncNamespace = ReturnType<typeof createSyncNamespace>;
11
+ export {};
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sync/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EACZ,eAAe,EAChB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,KAAK,YAAY,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,SAAS,GAAG,aAAa,CAAC,CAAC;AAE1D,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,YAAY;iBAEnD,YAAY,CAAC,aAAa,CAAC;eAI7B,YAAY,CAAC,YAAY,CAAC;kBAIvB,YAAY,CAAC,eAAe,CAAC;EAIpD;AAED,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC"}
@@ -0,0 +1,14 @@
1
+ export function createSyncNamespace(client, scope) {
2
+ return {
3
+ async list(input) {
4
+ return client.mcp.getSyncs.query({ ...scope, ...input });
5
+ },
6
+ async get(input) {
7
+ return client.mcp.getSync.query({ ...scope, ...input });
8
+ },
9
+ async cancel(input) {
10
+ return client.mcp.cancelSync.mutate({ ...scope, ...input });
11
+ },
12
+ };
13
+ }
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sync/index.ts"],"names":[],"mappings":"AAUA,MAAM,UAAU,mBAAmB,CAAC,MAAiB,EAAE,KAAmB;IACxE,OAAO;QACL,KAAK,CAAC,IAAI,CAAC,KAAmC;YAC5C,OAAO,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;QAC3D,CAAC;QAED,KAAK,CAAC,GAAG,CAAC,KAAiC;YACzC,OAAO,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;QAC1D,CAAC;QAED,KAAK,CAAC,MAAM,CAAC,KAAoC;YAC/C,OAAO,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,GAAG,KAAK,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;QAC9D,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { APIClient } from "@better-i18n/mcp-types";
2
+ import type { GetTranslationsInput, SetTranslationsInput, PublishInput, GetTranslationContextInput } from "@better-i18n/mcp-types";
3
+ import type { ProjectScope } from "../client.js";
4
+ type WithoutScope<T> = Omit<T, "orgSlug" | "projectSlug">;
5
+ export declare function createTranslationsNamespace(client: APIClient, scope: ProjectScope): {
6
+ get(input?: WithoutScope<GetTranslationsInput>): Promise<import("@better-i18n/mcp-types").GetTranslationsResponse | import("@better-i18n/mcp-types").CompactGetTranslationsCompactResponse>;
7
+ set(input: WithoutScope<SetTranslationsInput>): Promise<import("@better-i18n/mcp-types").CompactSetTranslationsResponse>;
8
+ publish(input?: WithoutScope<PublishInput>): Promise<import("@better-i18n/mcp-types").PublishResponse>;
9
+ context(input?: WithoutScope<GetTranslationContextInput>): Promise<import("@better-i18n/mcp-types").CompactGetTranslationContextResponse>;
10
+ pendingChanges(): Promise<import("@better-i18n/mcp-types").CompactGetPendingChangesResponse>;
11
+ };
12
+ export type TranslationsNamespace = ReturnType<typeof createTranslationsNamespace>;
13
+ export {};
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/translations/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,KAAK,EACV,oBAAoB,EACpB,oBAAoB,EACpB,YAAY,EACZ,0BAA0B,EAE3B,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,KAAK,YAAY,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,SAAS,GAAG,aAAa,CAAC,CAAC;AAE1D,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,YAAY;gBAE5D,YAAY,CAAC,oBAAoB,CAAC;eAInC,YAAY,CAAC,oBAAoB,CAAC;oBAI7B,YAAY,CAAC,YAAY,CAAC;oBAI1B,YAAY,CAAC,0BAA0B,CAAC;;EAQjE;AAED,MAAM,MAAM,qBAAqB,GAAG,UAAU,CAAC,OAAO,2BAA2B,CAAC,CAAC"}
@@ -0,0 +1,20 @@
1
+ export function createTranslationsNamespace(client, scope) {
2
+ return {
3
+ async get(input) {
4
+ return client.mcp.getAllTranslations.query({ ...scope, ...input });
5
+ },
6
+ async set(input) {
7
+ return client.mcp.setTranslations.mutate({ ...scope, ...input });
8
+ },
9
+ async publish(input) {
10
+ return client.mcp.publishTranslations.mutate({ ...scope, ...input });
11
+ },
12
+ async context(input) {
13
+ return client.mcp.getTranslationContext.query({ ...scope, ...input });
14
+ },
15
+ async pendingChanges() {
16
+ return client.mcp.getPendingChanges.query(scope);
17
+ },
18
+ };
19
+ }
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/translations/index.ts"],"names":[],"mappings":"AAYA,MAAM,UAAU,2BAA2B,CAAC,MAAiB,EAAE,KAAmB;IAChF,OAAO;QACL,KAAK,CAAC,GAAG,CAAC,KAA0C;YAClD,OAAO,MAAM,CAAC,GAAG,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;QACrE,CAAC;QAED,KAAK,CAAC,GAAG,CAAC,KAAyC;YACjD,OAAO,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,GAAG,KAAK,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;QACnE,CAAC;QAED,KAAK,CAAC,OAAO,CAAC,KAAkC;YAC9C,OAAO,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE,GAAG,KAAK,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;QACvE,CAAC;QAED,KAAK,CAAC,OAAO,CAAC,KAAgD;YAC5D,OAAO,MAAM,CAAC,GAAG,CAAC,qBAAqB,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK,EAAE,GAAG,KAAK,EAAE,CAAC,CAAC;QACxE,CAAC;QAED,KAAK,CAAC,cAAc;YAClB,OAAO,MAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACnD,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,54 @@
1
+ export type { AdminClientConfig } from "./client.js";
2
+ export type Period = "24h" | "7d" | "30d" | "90d";
3
+ export interface ViewsResponse {
4
+ views: Record<string, number>;
5
+ period: string;
6
+ cachedAt: string;
7
+ }
8
+ export interface SingleViewResponse {
9
+ views: number;
10
+ period: string;
11
+ cachedAt: string;
12
+ }
13
+ export interface StatsResponse {
14
+ overview: {
15
+ totalViews: number;
16
+ uniqueEntries: number;
17
+ };
18
+ viewsByEntry: Array<{
19
+ slug: string;
20
+ views: number;
21
+ }>;
22
+ viewsByLanguage: Array<{
23
+ language: string;
24
+ views: number;
25
+ }>;
26
+ viewsByCountry: Array<{
27
+ country: string;
28
+ views: number;
29
+ }>;
30
+ viewsOverTime: Array<{
31
+ timestamp: string;
32
+ views: number;
33
+ }>;
34
+ period: string;
35
+ cachedAt: string;
36
+ }
37
+ export interface ViewsOptions {
38
+ period?: Period;
39
+ }
40
+ export interface EventsQueryOptions {
41
+ period?: Period;
42
+ event?: string;
43
+ entrySlug?: string;
44
+ }
45
+ export interface EventsResponse {
46
+ events: Array<{
47
+ event: string;
48
+ count: number;
49
+ slug?: string;
50
+ }>;
51
+ period: string;
52
+ total: number;
53
+ }
54
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAErD,MAAM,MAAM,MAAM,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,CAAC;AAElD,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAA;KAAE,CAAC;IACxD,YAAY,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrD,eAAe,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC5D,cAAc,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC1D,aAAa,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC3D,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,KAAK,CAAC;QACZ,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC,CAAC;IACH,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,75 @@
1
+ {
2
+ "name": "@better-i18n/admin",
3
+ "version": "0.2.0",
4
+ "description": "Server-side admin SDK for Better i18n — manage projects, keys, translations, content, and analytics programmatically",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "default": "./dist/index.js"
12
+ },
13
+ "./projects": {
14
+ "types": "./dist/projects/index.d.ts",
15
+ "default": "./dist/projects/index.js"
16
+ },
17
+ "./keys": {
18
+ "types": "./dist/keys/index.d.ts",
19
+ "default": "./dist/keys/index.js"
20
+ },
21
+ "./translations": {
22
+ "types": "./dist/translations/index.d.ts",
23
+ "default": "./dist/translations/index.js"
24
+ },
25
+ "./content": {
26
+ "types": "./dist/content/index.d.ts",
27
+ "default": "./dist/content/index.js"
28
+ },
29
+ "./analytics": {
30
+ "types": "./dist/analytics/index.d.ts",
31
+ "default": "./dist/analytics/index.js"
32
+ },
33
+ "./sync": {
34
+ "types": "./dist/sync/index.d.ts",
35
+ "default": "./dist/sync/index.js"
36
+ }
37
+ },
38
+ "files": [
39
+ "dist",
40
+ "README.md"
41
+ ],
42
+ "scripts": {
43
+ "build": "tsc",
44
+ "dev": "tsc --watch",
45
+ "typecheck": "tsc --noEmit",
46
+ "clean": "rm -rf dist"
47
+ },
48
+ "dependencies": {
49
+ "@trpc/client": "^11.0.0"
50
+ },
51
+ "devDependencies": {
52
+ "@better-i18n/mcp-types": "0.0.2",
53
+ "typescript": "^5.7.0"
54
+ },
55
+ "peerDependencies": {
56
+ "@better-i18n/mcp-types": "0.0.2"
57
+ },
58
+ "keywords": [
59
+ "better-i18n",
60
+ "admin",
61
+ "sdk",
62
+ "i18n",
63
+ "cms",
64
+ "analytics"
65
+ ],
66
+ "license": "MIT",
67
+ "repository": {
68
+ "type": "git",
69
+ "url": "https://github.com/better-i18n/oss",
70
+ "directory": "packages/admin"
71
+ },
72
+ "engines": {
73
+ "node": ">=18.0.0"
74
+ }
75
+ }