@nextsparkjs/core 0.1.0-beta.195 → 0.1.0-beta.196
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/dist/components/billing/InvoicesPagination.js +2 -2
- package/dist/components/dashboard/navigation/DynamicNavigation.js +2 -2
- package/dist/components/settings/layouts/SettingsSidebar.d.ts.map +1 -1
- package/dist/components/settings/layouts/SettingsSidebar.js +0 -1
- package/dist/components/teams/CreateTeamButton.js +2 -2
- package/dist/components/teams/CreateTeamDialog.js +1 -1
- package/dist/components/teams/InviteMemberButton.js +3 -3
- package/dist/components/teams/InviteMemberDialog.js +1 -1
- package/dist/components/teams/TeamPendingInvitations.js +2 -2
- package/dist/lib/api/api-error.d.ts +2 -0
- package/dist/lib/api/api-error.d.ts.map +1 -1
- package/dist/lib/api/api-error.js +3 -1
- package/dist/lib/api/auth/dual-auth.d.ts +2 -1
- package/dist/lib/api/auth/dual-auth.d.ts.map +1 -1
- package/dist/lib/api/auth/dual-auth.js +22 -4
- package/dist/lib/api/auth/scope-policy.d.ts +6 -3
- package/dist/lib/api/auth/scope-policy.d.ts.map +1 -1
- package/dist/lib/api/cors-response.d.ts +3 -2
- package/dist/lib/api/cors-response.d.ts.map +1 -1
- package/dist/lib/api/cors-response.js +8 -6
- package/dist/lib/api/entity/generic-handler.d.ts.map +1 -1
- package/dist/lib/api/entity/generic-handler.js +0 -3
- package/dist/lib/api/helpers.d.ts.map +1 -1
- package/dist/lib/api/helpers.js +5 -22
- package/dist/lib/api/permission-middleware.d.ts.map +1 -1
- package/dist/lib/api/permission-middleware.js +0 -2
- package/dist/lib/api/rate-limit.d.ts +8 -0
- package/dist/lib/api/rate-limit.d.ts.map +1 -1
- package/dist/lib/api/rate-limit.js +34 -3
- package/dist/lib/api/request-origin.d.ts.map +1 -1
- package/dist/lib/api/request-origin.js +1 -1
- package/dist/lib/auth/runtime-readiness.d.ts.map +1 -1
- package/dist/lib/auth/runtime-readiness.js +2 -0
- package/dist/lib/auth/sample-accounts.d.ts +17 -0
- package/dist/lib/auth/sample-accounts.d.ts.map +1 -0
- package/dist/lib/auth/sample-accounts.js +22 -0
- package/dist/lib/auth.d.ts.map +1 -1
- package/dist/lib/auth.js +6 -3
- package/dist/lib/cache/public-entity-cache.d.ts +21 -0
- package/dist/lib/cache/public-entity-cache.d.ts.map +1 -0
- package/dist/lib/cache/public-entity-cache.js +25 -0
- package/dist/lib/entities/entity-hooks.d.ts.map +1 -1
- package/dist/lib/entities/entity-hooks.js +4 -0
- package/dist/lib/mcp/errors.d.ts +2 -0
- package/dist/lib/mcp/errors.d.ts.map +1 -1
- package/dist/lib/mcp/errors.js +3 -1
- package/dist/lib/mcp/index.d.ts +1 -1
- package/dist/lib/mcp/index.d.ts.map +1 -1
- package/dist/lib/mcp/index.js +2 -1
- package/dist/lib/services/generic-entity.service.d.ts.map +1 -1
- package/dist/lib/services/generic-entity.service.js +2 -0
- package/dist/lib/teams/actions.d.ts.map +1 -1
- package/dist/lib/teams/actions.js +0 -1
- package/dist/messages/de/billing.json +12 -1
- package/dist/messages/de/common.json +2 -0
- package/dist/messages/de/docs.json +1 -0
- package/dist/messages/de/features.json +16 -4
- package/dist/messages/de/home.json +5 -0
- package/dist/messages/de/index.d.ts +68 -25
- package/dist/messages/de/index.d.ts.map +1 -1
- package/dist/messages/de/index.js +2 -0
- package/dist/messages/de/index.ts +2 -0
- package/dist/messages/de/settings.json +1 -0
- package/dist/messages/de/teams.json +3 -18
- package/dist/messages/en/billing.json +1 -1
- package/dist/messages/en/common.json +2 -0
- package/dist/messages/en/docs.json +1 -0
- package/dist/messages/en/features.json +16 -4
- package/dist/messages/en/home.json +5 -0
- package/dist/messages/en/index.d.ts +58 -25
- package/dist/messages/en/index.d.ts.map +1 -1
- package/dist/messages/en/index.js +2 -0
- package/dist/messages/en/index.ts +2 -0
- package/dist/messages/en/settings.json +1 -0
- package/dist/messages/en/teams.json +3 -18
- package/dist/messages/es/billing.json +1 -1
- package/dist/messages/es/common.json +2 -0
- package/dist/messages/es/docs.json +1 -0
- package/dist/messages/es/features.json +16 -4
- package/dist/messages/es/home.json +5 -0
- package/dist/messages/es/index.d.ts +41 -8
- package/dist/messages/es/index.d.ts.map +1 -1
- package/dist/messages/es/index.js +2 -0
- package/dist/messages/es/index.ts +2 -0
- package/dist/messages/es/settings.json +1 -0
- package/dist/messages/es/teams.json +3 -0
- package/dist/messages/fr/billing.json +12 -1
- package/dist/messages/fr/common.json +2 -0
- package/dist/messages/fr/docs.json +1 -0
- package/dist/messages/fr/features.json +16 -4
- package/dist/messages/fr/home.json +5 -0
- package/dist/messages/fr/index.d.ts +68 -25
- package/dist/messages/fr/index.d.ts.map +1 -1
- package/dist/messages/fr/index.js +2 -0
- package/dist/messages/fr/index.ts +2 -0
- package/dist/messages/fr/settings.json +1 -0
- package/dist/messages/fr/teams.json +3 -18
- package/dist/messages/it/billing.json +12 -1
- package/dist/messages/it/common.json +2 -0
- package/dist/messages/it/docs.json +1 -0
- package/dist/messages/it/features.json +16 -4
- package/dist/messages/it/home.json +5 -0
- package/dist/messages/it/index.d.ts +68 -25
- package/dist/messages/it/index.d.ts.map +1 -1
- package/dist/messages/it/index.js +2 -0
- package/dist/messages/it/index.ts +2 -0
- package/dist/messages/it/settings.json +1 -0
- package/dist/messages/it/teams.json +3 -18
- package/dist/messages/pt/billing.json +12 -1
- package/dist/messages/pt/common.json +2 -0
- package/dist/messages/pt/docs.json +1 -0
- package/dist/messages/pt/features.json +16 -4
- package/dist/messages/pt/home.json +5 -0
- package/dist/messages/pt/index.d.ts +68 -25
- package/dist/messages/pt/index.d.ts.map +1 -1
- package/dist/messages/pt/index.js +2 -0
- package/dist/messages/pt/index.ts +2 -0
- package/dist/messages/pt/settings.json +1 -0
- package/dist/messages/pt/teams.json +3 -18
- package/dist/migrations/029_sample_accounts_outside_development.sql +55 -0
- package/dist/migrations/090_sample_data.sql +10 -0
- package/dist/routes/_internal/entity-permission-layout.d.ts.map +1 -1
- package/dist/routes/_internal/entity-permission-layout.js +0 -7
- package/dist/routes/api/mcp/route.d.ts.map +1 -1
- package/dist/routes/api/mcp/route.js +7 -1
- package/dist/routes/api/v1/media/upload/route.d.ts +2 -1
- package/dist/routes/api/v1/media/upload/route.d.ts.map +1 -1
- package/dist/routes/api/v1/media/upload/route.js +10 -2
- package/dist/routes/api/v1/teams/[teamId]/members/route.d.ts.map +1 -1
- package/dist/routes/api/v1/teams/[teamId]/members/route.js +12 -10
- package/dist/routes/api/v1/teams/switch/route.d.ts.map +1 -1
- package/dist/routes/api/v1/teams/switch/route.js +4 -1
- package/dist/routes/dashboard/settings/password/page.d.ts.map +1 -1
- package/dist/routes/dashboard/settings/password/page.js +10 -12
- package/dist/routes/devtools/config/page.js +1 -1
- package/dist/routes/devtools/page.js +1 -1
- package/dist/routes/devtools/scheduled-actions/page.js +1 -1
- package/dist/routes/devtools/tests/[[...path]]/page.js +1 -1
- package/dist/templates/ci-workflows/github/cypress-regression.yml +1 -1
- package/dist/templates/ci-workflows/github/cypress-smoke.yml +2 -1
- package/dist/templates/projects/starter/README.md +2 -0
- package/dist/templates/projects/starter/docs/public/01-overview/01-introduction.md +2 -0
- package/dist/templates/projects/starter/templates/dashboard/analytics/layout.tsx +14 -0
- package/dist/templates/proxy.ts +15 -8
- package/dist/templates/public/uploads/README.md +5 -94
- package/migrations/029_sample_accounts_outside_development.sql +55 -0
- package/migrations/090_sample_data.sql +10 -0
- package/package.json +2 -2
- package/scripts/build/registry/host/__tests__/host-proxy-areas.test.mjs +72 -1
- package/scripts/build/registry/host/proxy-areas.mjs +65 -2
- package/scripts/db/run-migrations.mjs +30 -10
- package/scripts/db/sample-data.mjs +44 -0
- package/scripts/db/verify-theme-migrations.mjs +6 -0
- package/templates/ci-workflows/github/cypress-regression.yml +1 -1
- package/templates/ci-workflows/github/cypress-smoke.yml +2 -1
- package/templates/projects/starter/README.md +2 -0
- package/templates/projects/starter/docs/public/01-overview/01-introduction.md +2 -0
- package/templates/projects/starter/templates/dashboard/analytics/layout.tsx +14 -0
- package/templates/proxy.ts +15 -8
- package/templates/public/uploads/README.md +5 -94
- package/tests/jest/__mocks__/@nextsparkjs/registries/api-presets-registry.ts +2 -0
- package/tests/jest/__mocks__/@nextsparkjs/registries/mcp-registry.ts +2 -0
- package/dist/templates/projects/starter/public/brand/.gitkeep +0 -0
- package/dist/templates/public/uploads/.gitignore +0 -6
- package/dist/templates/public/uploads/temp/.gitkeep +0 -1
- package/templates/projects/starter/public/brand/.gitkeep +0 -0
- package/templates/public/uploads/.gitignore +0 -6
- package/templates/public/uploads/temp/.gitkeep +0 -1
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
const SAMPLE_PASSWORD_HASHES = [
|
|
2
|
+
"22de14d5472248ed0bece911df908b2a:d29576424798ba6845d348a3767c0b0f38a00f2aca461b3b1d34b99a93cab06c86774c6edb183e6d6ec47457649b032a49a7b60a48f6f4f7fbbc4ea40258f19f",
|
|
3
|
+
"3db9e98e2b4d3caca97fdf2783791cbc:34b293de615caf277a237773208858e960ea8aa10f1f5c5c309b632f192cac34d52ceafbd338385616f4929e4b1b6c055b67429c6722ffdb80b01d9bf4764866"
|
|
4
|
+
];
|
|
5
|
+
async function warnSampleAccountsAtStartup(env = process.env, queryRows) {
|
|
6
|
+
if (env.NODE_ENV !== "production") return;
|
|
7
|
+
try {
|
|
8
|
+
const run = queryRows ?? (await import("../db.js")).queryRows;
|
|
9
|
+
const [row] = await run(
|
|
10
|
+
`SELECT count(*)::int AS count FROM "account" WHERE "providerId" = 'credential' AND "password" = ANY($1)`,
|
|
11
|
+
[SAMPLE_PASSWORD_HASHES]
|
|
12
|
+
);
|
|
13
|
+
if (row && row.count > 0) {
|
|
14
|
+
console.warn(`[auth-readiness] ${row.count} account(s) still have a sample-data password; pnpm db:migrate disables them once; if it already ran, see the CHANGELOG upgrade notes`);
|
|
15
|
+
}
|
|
16
|
+
} catch {
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
export {
|
|
20
|
+
SAMPLE_PASSWORD_HASHES,
|
|
21
|
+
warnSampleAccountsAtStartup
|
|
22
|
+
};
|
package/dist/lib/auth.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/lib/auth.ts"],"names":[],"mappings":"AAUA,OAAO,EAA0F,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAC;AAmBjI;;;;;;;;;;;;;GAaG;AACH,wBAAsB,4BAA4B,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAQlF;AAED;;;;;;;;;GASG;AACH,wBAAsB,6BAA6B,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAEnF;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/lib/auth.ts"],"names":[],"mappings":"AAUA,OAAO,EAA0F,KAAK,QAAQ,EAAE,MAAM,UAAU,CAAC;AAmBjI;;;;;;;;;;;;;GAaG;AACH,wBAAsB,4BAA4B,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAQlF;AAED;;;;;;;;;GASG;AACH,wBAAsB,6BAA6B,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAEnF;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA4HD,eAAO,MAAM,IAAI,qEAiXf,CAAC;AAEH,MAAM,MAAM,OAAO,GAAG,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;AACjD,MAAM,MAAM,WAAW,GAAG,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,GAAG;IAC1D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,kBAAkB,EAAE,QAAQ,EAAE,CAAC;CAC/C,CAAC;AAEF;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC;IAC5B,IAAI,EAAE,WAAW,CAAC;CACnB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAO9B"}
|
package/dist/lib/auth.js
CHANGED
|
@@ -42,13 +42,16 @@ const databaseUrl = process.env.DATABASE_SERVICE_URL || process.env.DATABASE_URL
|
|
|
42
42
|
const cleanUrl = stripSSLParams(databaseUrl);
|
|
43
43
|
const isPoolerUrl = /:6543(\/|$|\?)/.test(databaseUrl) || /pooler/i.test(databaseUrl);
|
|
44
44
|
const connectionString = isPoolerUrl ? cleanUrl.includes("?") ? `${cleanUrl}&pgbouncer=true` : `${cleanUrl}?pgbouncer=true` : cleanUrl;
|
|
45
|
-
const
|
|
45
|
+
const AUTH_POOLS = /* @__PURE__ */ Symbol.for("nextspark.auth.pools");
|
|
46
|
+
const authPools = globalThis[AUTH_POOLS] ??= /* @__PURE__ */ new Map();
|
|
47
|
+
const pool = authPools.get(databaseUrl) ?? new Pool({
|
|
46
48
|
connectionString,
|
|
47
49
|
ssl: parseSSLConfig(databaseUrl),
|
|
48
50
|
connectionTimeoutMillis: 1e4,
|
|
49
51
|
idleTimeoutMillis: 3e4,
|
|
50
52
|
max: 20
|
|
51
53
|
});
|
|
54
|
+
authPools.set(databaseUrl, pool);
|
|
52
55
|
const sessionConfig = resolveSessionConfig(AUTH_CONFIG);
|
|
53
56
|
const otpConfig = resolveOtpConfig(AUTH_CONFIG);
|
|
54
57
|
function resolveNonOwnerSignupRole() {
|
|
@@ -277,7 +280,7 @@ const auth = betterAuth({
|
|
|
277
280
|
if (registrationMode === "domain-restricted" || registrationMode === "domain-open") {
|
|
278
281
|
const allowedDomains = ((_d = (_c = AUTH_CONFIG) == null ? void 0 : _c.registration) == null ? void 0 : _d.allowedDomains) ?? [];
|
|
279
282
|
if (allowedDomains.length > 0 && !isDomainAllowed(user.email, allowedDomains)) {
|
|
280
|
-
console.log(`[Auth] Blocked registration for ${user.email}: domain not in allowedDomains (allowed: ${allowedDomains.join(", ")})`);
|
|
283
|
+
console.log(`[Auth] Blocked registration for a user at ${user.email.split("@").pop()}: domain not in allowedDomains (allowed: ${allowedDomains.join(", ")})`);
|
|
281
284
|
throw new Error(`DOMAIN_NOT_ALLOWED: Email domain not authorized. Please use an email from: ${allowedDomains.join(", ")}`);
|
|
282
285
|
}
|
|
283
286
|
}
|
|
@@ -344,7 +347,7 @@ const auth = betterAuth({
|
|
|
344
347
|
);
|
|
345
348
|
const email = (_e = result.rows[0]) == null ? void 0 : _e.email;
|
|
346
349
|
if (email && !isDomainAllowed(email, allowedDomains)) {
|
|
347
|
-
console.log(`[Auth] Blocked sign-in for ${email}: domain not in allowedDomains`);
|
|
350
|
+
console.log(`[Auth] Blocked sign-in for a user at ${email.split("@").pop()}: domain not in allowedDomains`);
|
|
348
351
|
return false;
|
|
349
352
|
}
|
|
350
353
|
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { EntityConfig } from '../entities/types';
|
|
2
|
+
/**
|
|
3
|
+
* The public pages of an entity are cached (`'use cache'` tagged `entity:<slug>` in public-item-route.cc; ISR
|
|
4
|
+
* `revalidate` in the other host), so a write has to expire them. Every writer of an entity ends here: the
|
|
5
|
+
* generic REST handler, the entity handler, GenericEntityService and the server actions reach it through the
|
|
6
|
+
* `afterEntity*` hooks (entity-hooks.ts), and the one write that skips hooks (`deleteMany`) calls it itself.
|
|
7
|
+
*
|
|
8
|
+
* - Cache Components: `entity:<slug>` is on every cached read of the entity's items (found or not found), so
|
|
9
|
+
* one tag covers the old and the new slug of a rename, an unpublished item and a deleted one. It also
|
|
10
|
+
* drops the sibling items' entries; they are read again by their next visit.
|
|
11
|
+
* - ISR: Next tags a page by its route file path, route group included, so the path is `/(public)<basePath>` with
|
|
12
|
+
* 'layout' (item pages and archive of a base path) or the root item route with 'page'. `(public)` is the group the
|
|
13
|
+
* host generator puts those routes in (scripts/build/registry/host/entity-routes.mjs); a test keeps them equal.
|
|
14
|
+
* - Patterns are tagged `patterns` and are expired by their own writes.
|
|
15
|
+
*
|
|
16
|
+
* Outside a request (a script, a test) Next refuses the call; there is no cache to expire there.
|
|
17
|
+
*/
|
|
18
|
+
/** Route group of the generated public routes. Keep equal to the one in scripts/build/registry/host/entity-routes.mjs. */
|
|
19
|
+
export declare const PUBLIC_ROUTE_GROUP = "(public)";
|
|
20
|
+
export declare function expirePublicEntity(config: Pick<EntityConfig, 'slug' | 'access' | 'builder'> | undefined): void;
|
|
21
|
+
//# sourceMappingURL=public-entity-cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"public-entity-cache.d.ts","sourceRoot":"","sources":["../../../src/lib/cache/public-entity-cache.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAIrD;;;;;;;;;;;;;;;GAeG;AACH,0HAA0H;AAC1H,eAAO,MAAM,kBAAkB,aAAa,CAAA;AAE5C,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC,GAAG,SAAS,GAAG,IAAI,CAe9G"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { revalidatePath } from "next/cache";
|
|
2
|
+
import { unstable_rethrow } from "next/navigation";
|
|
3
|
+
import { getEntityBasePath } from "../entities/schema-generator.js";
|
|
4
|
+
import { revalidateTag } from "./revalidate-tag.js";
|
|
5
|
+
const PUBLIC_ROUTE_GROUP = "(public)";
|
|
6
|
+
function expirePublicEntity(config) {
|
|
7
|
+
var _a;
|
|
8
|
+
if (!config) return;
|
|
9
|
+
try {
|
|
10
|
+
if (config.slug === "patterns") revalidateTag("patterns");
|
|
11
|
+
const basePath = getEntityBasePath(config);
|
|
12
|
+
if (!basePath) return;
|
|
13
|
+
revalidateTag(`entity:${config.slug}`);
|
|
14
|
+
const group = `/${PUBLIC_ROUTE_GROUP}`;
|
|
15
|
+
if (basePath === "/") revalidatePath(`${group}${((_a = config.access) == null ? void 0 : _a.allowNestedSlugs) ? "/[...slug]" : "/[slug]"}`, "page");
|
|
16
|
+
else revalidatePath(`${group}${basePath}`, "layout");
|
|
17
|
+
} catch (error) {
|
|
18
|
+
unstable_rethrow(error);
|
|
19
|
+
console.warn(`[public-entity-cache] could not expire the public pages of ${config.slug}: ${error instanceof Error ? error.message : error}`);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
export {
|
|
23
|
+
PUBLIC_ROUTE_GROUP,
|
|
24
|
+
expirePublicEntity
|
|
25
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entity-hooks.d.ts","sourceRoot":"","sources":["../../../src/lib/entities/entity-hooks.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"entity-hooks.d.ts","sourceRoot":"","sources":["../../../src/lib/entities/entity-hooks.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { getGlobalHooks } from "../plugins/hook-system.js";
|
|
2
2
|
import { getEntityBySlug, getRegisteredEntities } from "./queries.js";
|
|
3
|
+
import { expirePublicEntity } from "../cache/public-entity-cache.js";
|
|
3
4
|
const CONFIG_HOOKS_REGISTERED_KEY = "__ENTITY_CONFIG_HOOKS_REGISTERED__";
|
|
4
5
|
function toHookContext(entityName, operation, data, userId) {
|
|
5
6
|
return {
|
|
@@ -100,6 +101,7 @@ class EntityHookManager {
|
|
|
100
101
|
userId,
|
|
101
102
|
operation: "create"
|
|
102
103
|
};
|
|
104
|
+
expirePublicEntity(hookData.entityConfig);
|
|
103
105
|
await this.hooks.doAction(
|
|
104
106
|
`entity.${entityName}.created`,
|
|
105
107
|
hookData
|
|
@@ -141,6 +143,7 @@ class EntityHookManager {
|
|
|
141
143
|
userId,
|
|
142
144
|
operation: "update"
|
|
143
145
|
};
|
|
146
|
+
expirePublicEntity(hookData.entityConfig);
|
|
144
147
|
await this.hooks.doAction(
|
|
145
148
|
`entity.${entityName}.updated`,
|
|
146
149
|
hookData
|
|
@@ -179,6 +182,7 @@ class EntityHookManager {
|
|
|
179
182
|
userId,
|
|
180
183
|
operation: "delete"
|
|
181
184
|
};
|
|
185
|
+
expirePublicEntity(hookData.entityConfig);
|
|
182
186
|
await this.hooks.doAction(
|
|
183
187
|
`entity.${entityName}.deleted`,
|
|
184
188
|
hookData
|
package/dist/lib/mcp/errors.d.ts
CHANGED
|
@@ -11,6 +11,8 @@ interface ErrorContext {
|
|
|
11
11
|
operation: string;
|
|
12
12
|
hints?: string[];
|
|
13
13
|
}
|
|
14
|
+
/** What an MCP client is told when its API key is over its request limit. */
|
|
15
|
+
export declare const RATE_LIMIT_MESSAGE = "Request limit reached. Wait a minute before retrying; for large loads use the batch tools if the entity exposes them.";
|
|
14
16
|
export declare function translateApiError(result: EntityApiResult, context: ErrorContext): string;
|
|
15
17
|
export {};
|
|
16
18
|
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/lib/mcp/errors.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAE9C,UAAU,YAAY;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;CACjB;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,YAAY,GAAG,MAAM,CA4CxF"}
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/lib/mcp/errors.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAE9C,UAAU,YAAY;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;CACjB;AAED,6EAA6E;AAC7E,eAAO,MAAM,kBAAkB,0HAC0F,CAAA;AAEzH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,YAAY,GAAG,MAAM,CA4CxF"}
|
package/dist/lib/mcp/errors.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
const RATE_LIMIT_MESSAGE = "Request limit reached. Wait a minute before retrying; for large loads use the batch tools if the entity exposes them.";
|
|
1
2
|
function translateApiError(result, context) {
|
|
2
3
|
var _a;
|
|
3
4
|
const { status, body } = result;
|
|
@@ -17,7 +18,7 @@ function translateApiError(result, context) {
|
|
|
17
18
|
case "UNIQUE_CONSTRAINT_VIOLATION":
|
|
18
19
|
return `A record for ${context.slug} already exists with that unique value${detail}. Look it up with the list tool and update it instead of creating it.`;
|
|
19
20
|
case "RATE_LIMIT_EXCEEDED":
|
|
20
|
-
return
|
|
21
|
+
return RATE_LIMIT_MESSAGE;
|
|
21
22
|
default:
|
|
22
23
|
break;
|
|
23
24
|
}
|
|
@@ -62,5 +63,6 @@ function formatDetails(details) {
|
|
|
62
63
|
return ` Detail: ${JSON.stringify(details).slice(0, 300)}.`;
|
|
63
64
|
}
|
|
64
65
|
export {
|
|
66
|
+
RATE_LIMIT_MESSAGE,
|
|
65
67
|
translateApiError
|
|
66
68
|
};
|
package/dist/lib/mcp/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export { createMcpEngine, type McpEngine } from './engine';
|
|
2
2
|
export { executeEntityOperation } from './executor';
|
|
3
3
|
export { auditToolCall } from './audit';
|
|
4
|
-
export { translateApiError } from './errors';
|
|
4
|
+
export { RATE_LIMIT_MESSAGE, translateApiError } from './errors';
|
|
5
5
|
export { buildEntitySchemas, type EntitySchemaBundle, type SchemaBuilderContext } from './schema-builder';
|
|
6
6
|
export { StatelessJsonRpcTransport } from './transport';
|
|
7
7
|
export { generateEntityTools, toolToken, listArgsToQuery, normalizeDateFields, errorResult, } from './tool-generator';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/mcp/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,KAAK,SAAS,EAAE,MAAM,UAAU,CAAA;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAA;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/mcp/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,KAAK,SAAS,EAAE,MAAM,UAAU,CAAA;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAA;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AACvC,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAA;AAChE,OAAO,EAAE,kBAAkB,EAAE,KAAK,kBAAkB,EAAE,KAAK,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AACzG,OAAO,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAA;AACvD,OAAO,EACL,mBAAmB,EACnB,SAAS,EACT,eAAe,EACf,mBAAmB,EACnB,WAAW,GACZ,MAAM,kBAAkB,CAAA;AACzB,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,YAAY,EACjB,KAAK,QAAQ,EACb,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,GAC1B,MAAM,SAAS,CAAA"}
|
package/dist/lib/mcp/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createMcpEngine } from "./engine.js";
|
|
2
2
|
import { executeEntityOperation } from "./executor.js";
|
|
3
3
|
import { auditToolCall } from "./audit.js";
|
|
4
|
-
import { translateApiError } from "./errors.js";
|
|
4
|
+
import { RATE_LIMIT_MESSAGE, translateApiError } from "./errors.js";
|
|
5
5
|
import { buildEntitySchemas } from "./schema-builder.js";
|
|
6
6
|
import { StatelessJsonRpcTransport } from "./transport.js";
|
|
7
7
|
import {
|
|
@@ -18,6 +18,7 @@ import {
|
|
|
18
18
|
export {
|
|
19
19
|
MUTATION_OPERATIONS,
|
|
20
20
|
McpToolError,
|
|
21
|
+
RATE_LIMIT_MESSAGE,
|
|
21
22
|
StatelessJsonRpcTransport,
|
|
22
23
|
auditToolCall,
|
|
23
24
|
buildEntitySchemas,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generic-entity.service.d.ts","sourceRoot":"","sources":["../../../src/lib/services/generic-entity.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;
|
|
1
|
+
{"version":3,"file":"generic-entity.service.d.ts","sourceRoot":"","sources":["../../../src/lib/services/generic-entity.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { queryWithRLS, queryOneWithRLS, mutateWithRLS } from "../db.js";
|
|
2
2
|
import { entityRegistry } from "../entities/registry.js";
|
|
3
|
+
import { expirePublicEntity } from "../cache/public-entity-cache.js";
|
|
3
4
|
import {
|
|
4
5
|
beforeEntityCreate,
|
|
5
6
|
afterEntityCreate,
|
|
@@ -570,6 +571,7 @@ class GenericEntityService {
|
|
|
570
571
|
params,
|
|
571
572
|
userId
|
|
572
573
|
);
|
|
574
|
+
if (result.rowCount > 0) expirePublicEntity(entityConfig);
|
|
573
575
|
return result.rowCount;
|
|
574
576
|
}
|
|
575
577
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../../../src/lib/teams/actions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAGH,OAAO,KAAK,EAAE,IAAI,EAAc,QAAQ,EAAE,MAAM,SAAS,CAAA;AAEzD;;;;;;;GAOG;AACH,wBAAsB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgE7E;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAW1D;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC,CAGtD;AAED;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,MAAM,EACd,IAAI,GAAE,QAAmB,EACzB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CA8Bf;AAED;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,aAAa,GAAE,QAAQ,EAAuB,GAC7C,OAAO,CAAC,OAAO,CAAC,CAYlB;AAED;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAQ1B;AAED;;;;;;GAMG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,OAAO,CAAC,CAQlB;AAED;;;;;GAKG;AACH,wBAAsB,uBAAuB,CAAC,MAAM,EAAE,MAAM;;QAEpD,MAAM;UACJ,MAAM;UACN,MAAM;iBACC,MAAM,GAAG,IAAI;aACjB,MAAM;eACJ,MAAM,GAAG,IAAI;cACd,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;eAClB,MAAM;eACN,MAAM;cACP,QAAQ;cACR,MAAM;KAyBnB;AAED;;;;;;GAMG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,CAAC,IAAI,GAAG;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,IAAI,CAAC,CAqBlD;AAED;;;;;;GAMG;AACH,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM;QAGR,MAAM;YACF,MAAM;YACN,MAAM;UACR,QAAQ;eACH,MAAM,GAAG,IAAI;cACd,MAAM;eACL,MAAM;eACN,MAAM;cACP,MAAM,GAAG,IAAI;eACZ,MAAM;eACN,MAAM,GAAG,IAAI;KAuB3B;AAED;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,MAAM,EACZ,aAAa,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,OAAO,CAAC,CAclB;AAED;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../../../src/lib/teams/actions.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAGH,OAAO,KAAK,EAAE,IAAI,EAAc,QAAQ,EAAE,MAAM,SAAS,CAAA;AAEzD;;;;;;;GAOG;AACH,wBAAsB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgE7E;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAW1D;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,OAAO,CAAC,CAGtD;AAED;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,MAAM,EACd,IAAI,GAAE,QAAmB,EACzB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CA8Bf;AAED;;;;;;;GAOG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,aAAa,GAAE,QAAQ,EAAuB,GAC7C,OAAO,CAAC,OAAO,CAAC,CAYlB;AAED;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAQ1B;AAED;;;;;;GAMG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,OAAO,CAAC,CAQlB;AAED;;;;;GAKG;AACH,wBAAsB,uBAAuB,CAAC,MAAM,EAAE,MAAM;;QAEpD,MAAM;UACJ,MAAM;UACN,MAAM;iBACC,MAAM,GAAG,IAAI;aACjB,MAAM;eACJ,MAAM,GAAG,IAAI;cACd,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;eAClB,MAAM;eACN,MAAM;cACP,QAAQ;cACR,MAAM;KAyBnB;AAED;;;;;;GAMG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,CAAC,IAAI,GAAG;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,IAAI,CAAC,CAqBlD;AAED;;;;;;GAMG;AACH,wBAAsB,uBAAuB,CAC3C,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM;QAGR,MAAM;YACF,MAAM;YACN,MAAM;UACR,QAAQ;eACH,MAAM,GAAG,IAAI;cACd,MAAM;eACL,MAAM;eACN,MAAM;cACP,MAAM,GAAG,IAAI;eACZ,MAAM;eACN,MAAM,GAAG,IAAI;KAuB3B;AAED;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,IAAI,EAAE,MAAM,EACZ,aAAa,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,OAAO,CAAC,CAclB;AAED;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,OAAO,CAAC,CAWlB;AAED;;;;;;GAMG;AACH,wBAAsB,UAAU,CAC9B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CA2Bf"}
|
|
@@ -190,7 +190,6 @@ async function switchActiveTeam(userId, teamId) {
|
|
|
190
190
|
if (!isMember) {
|
|
191
191
|
throw new Error("User is not a member of this team");
|
|
192
192
|
}
|
|
193
|
-
console.log(`User ${userId} switched to team ${teamId}`);
|
|
194
193
|
return true;
|
|
195
194
|
}
|
|
196
195
|
async function deleteTeam(teamId, userId) {
|
|
@@ -7,7 +7,6 @@
|
|
|
7
7
|
"contactUs": "Kontaktieren Sie uns",
|
|
8
8
|
"unlimited": "Unbegrenzt",
|
|
9
9
|
"upgrade": "Upgrade",
|
|
10
|
-
"downgrade": "Downgrade",
|
|
11
10
|
"cancelSubscription": "Abonnement kuendigen",
|
|
12
11
|
"upgradeDescription": "Waehlen Sie den Tarif, der am besten zu Ihren Beduerfnissen passt",
|
|
13
12
|
"monthly": "Monatlich",
|
|
@@ -159,6 +158,18 @@
|
|
|
159
158
|
"failed": "Fehlgeschlagen"
|
|
160
159
|
},
|
|
161
160
|
|
|
161
|
+
"changePlan": {
|
|
162
|
+
"title": "Tarif wechseln",
|
|
163
|
+
"from": "Aktueller Tarif",
|
|
164
|
+
"to": "Neuer Tarif",
|
|
165
|
+
"upgradeDescription": "Ihre Abrechnung wird für den laufenden Zeitraum anteilig angepasst",
|
|
166
|
+
"downgradeDescription": "Bestehende Ressourcen bleiben zugänglich, das Anlegen neuer kann jedoch eingeschränkt sein",
|
|
167
|
+
"downgradeToFreeDescription": "Ihr Abonnement wird gekündigt und Sie wechseln zum kostenlosen Tarif",
|
|
168
|
+
"confirm": "Wechsel bestätigen",
|
|
169
|
+
"cancel": "Abbrechen",
|
|
170
|
+
"confirming": "Tarif wird geändert..."
|
|
171
|
+
},
|
|
172
|
+
|
|
162
173
|
"quota": {
|
|
163
174
|
"limitReached": "Sie haben Ihr Limit fuer {entity} erreicht",
|
|
164
175
|
"limitReachedDetail": "Ihr aktueller Tarif erlaubt keine weiteren {entity}. Fuehren Sie ein Upgrade durch, um weiterzuwachsen.",
|
|
@@ -1,8 +1,20 @@
|
|
|
1
1
|
{
|
|
2
2
|
"analytics": {
|
|
3
|
-
"title": "",
|
|
4
|
-
"benefit1": "",
|
|
5
|
-
"benefit2": "",
|
|
6
|
-
"benefit3": ""
|
|
3
|
+
"title": "Erweiterte Analysen",
|
|
4
|
+
"benefit1": "Echtzeit-Metriken",
|
|
5
|
+
"benefit2": "Benutzerdefinierter Report-Builder",
|
|
6
|
+
"benefit3": "Export nach PDF/CSV"
|
|
7
|
+
},
|
|
8
|
+
"webhooks": {
|
|
9
|
+
"title": "Webhooks",
|
|
10
|
+
"benefit1": "HTTP-Callbacks für Ereignisse",
|
|
11
|
+
"benefit2": "Benutzerdefinierte Payload-Vorlagen",
|
|
12
|
+
"benefit3": "Wiederholungslogik und Protokollierung"
|
|
13
|
+
},
|
|
14
|
+
"automation": {
|
|
15
|
+
"title": "Aufgabenautomatisierung",
|
|
16
|
+
"benefit1": "Automatische Aufgabenerstellung",
|
|
17
|
+
"benefit2": "Geplante Aktionen",
|
|
18
|
+
"benefit3": "Workflow-Trigger"
|
|
7
19
|
}
|
|
8
20
|
}
|
|
@@ -422,14 +422,6 @@ declare const _default: {
|
|
|
422
422
|
contactUs: string;
|
|
423
423
|
unlimited: string;
|
|
424
424
|
upgrade: string;
|
|
425
|
-
downgrade: {
|
|
426
|
-
title: string;
|
|
427
|
-
description: string;
|
|
428
|
-
resource_over: string;
|
|
429
|
-
policy: string;
|
|
430
|
-
confirm: string;
|
|
431
|
-
cancel: string;
|
|
432
|
-
};
|
|
433
425
|
cancelSubscription: string;
|
|
434
426
|
upgradeDescription: string;
|
|
435
427
|
monthly: string;
|
|
@@ -536,6 +528,14 @@ declare const _default: {
|
|
|
536
528
|
featureNotAvailable: string;
|
|
537
529
|
upgradeRequired: string;
|
|
538
530
|
};
|
|
531
|
+
downgrade: {
|
|
532
|
+
title: string;
|
|
533
|
+
description: string;
|
|
534
|
+
resource_over: string;
|
|
535
|
+
policy: string;
|
|
536
|
+
confirm: string;
|
|
537
|
+
cancel: string;
|
|
538
|
+
};
|
|
539
539
|
portal: {
|
|
540
540
|
manage: string;
|
|
541
541
|
loading: string;
|
|
@@ -563,6 +563,17 @@ declare const _default: {
|
|
|
563
563
|
pending: string;
|
|
564
564
|
failed: string;
|
|
565
565
|
};
|
|
566
|
+
changePlan: {
|
|
567
|
+
title: string;
|
|
568
|
+
from: string;
|
|
569
|
+
to: string;
|
|
570
|
+
upgradeDescription: string;
|
|
571
|
+
downgradeDescription: string;
|
|
572
|
+
downgradeToFreeDescription: string;
|
|
573
|
+
confirm: string;
|
|
574
|
+
cancel: string;
|
|
575
|
+
confirming: string;
|
|
576
|
+
};
|
|
566
577
|
quota: {
|
|
567
578
|
limitReached: string;
|
|
568
579
|
limitReachedDetail: string;
|
|
@@ -598,6 +609,8 @@ declare const _default: {
|
|
|
598
609
|
signingOut: string;
|
|
599
610
|
};
|
|
600
611
|
readonly common: {
|
|
612
|
+
soon: string;
|
|
613
|
+
comingSoon: string;
|
|
601
614
|
navigation: {
|
|
602
615
|
dashboard: string;
|
|
603
616
|
settings: string;
|
|
@@ -1238,6 +1251,7 @@ declare const _default: {
|
|
|
1238
1251
|
home: string;
|
|
1239
1252
|
};
|
|
1240
1253
|
sidebar: {
|
|
1254
|
+
close: string;
|
|
1241
1255
|
open: string;
|
|
1242
1256
|
label: string;
|
|
1243
1257
|
};
|
|
@@ -1356,6 +1370,26 @@ declare const _default: {
|
|
|
1356
1370
|
idCopied: string;
|
|
1357
1371
|
};
|
|
1358
1372
|
};
|
|
1373
|
+
readonly features: {
|
|
1374
|
+
analytics: {
|
|
1375
|
+
title: string;
|
|
1376
|
+
benefit1: string;
|
|
1377
|
+
benefit2: string;
|
|
1378
|
+
benefit3: string;
|
|
1379
|
+
};
|
|
1380
|
+
webhooks: {
|
|
1381
|
+
title: string;
|
|
1382
|
+
benefit1: string;
|
|
1383
|
+
benefit2: string;
|
|
1384
|
+
benefit3: string;
|
|
1385
|
+
};
|
|
1386
|
+
automation: {
|
|
1387
|
+
title: string;
|
|
1388
|
+
benefit1: string;
|
|
1389
|
+
benefit2: string;
|
|
1390
|
+
benefit3: string;
|
|
1391
|
+
};
|
|
1392
|
+
};
|
|
1359
1393
|
readonly footer: {
|
|
1360
1394
|
product: string;
|
|
1361
1395
|
features: string;
|
|
@@ -1390,6 +1424,11 @@ declare const _default: {
|
|
|
1390
1424
|
title: string;
|
|
1391
1425
|
subtitle: string;
|
|
1392
1426
|
};
|
|
1427
|
+
auth: {
|
|
1428
|
+
signIn: string;
|
|
1429
|
+
createAccount: string;
|
|
1430
|
+
goToDashboard: string;
|
|
1431
|
+
};
|
|
1393
1432
|
};
|
|
1394
1433
|
readonly navigation: {
|
|
1395
1434
|
home: string;
|
|
@@ -1893,6 +1932,7 @@ declare const _default: {
|
|
|
1893
1932
|
refunded: string;
|
|
1894
1933
|
};
|
|
1895
1934
|
pagination: {
|
|
1935
|
+
page: string;
|
|
1896
1936
|
showing: string;
|
|
1897
1937
|
previous: string;
|
|
1898
1938
|
next: string;
|
|
@@ -2129,18 +2169,6 @@ declare const _default: {
|
|
|
2129
2169
|
readonly teams: {
|
|
2130
2170
|
title: string;
|
|
2131
2171
|
description: string;
|
|
2132
|
-
entity: {
|
|
2133
|
-
description: string;
|
|
2134
|
-
plural: string;
|
|
2135
|
-
};
|
|
2136
|
-
fields: {
|
|
2137
|
-
name: string;
|
|
2138
|
-
slug: string;
|
|
2139
|
-
description: string;
|
|
2140
|
-
email: string;
|
|
2141
|
-
role: string;
|
|
2142
|
-
joinedAt: string;
|
|
2143
|
-
};
|
|
2144
2172
|
types: {
|
|
2145
2173
|
personal: string;
|
|
2146
2174
|
work: string;
|
|
@@ -2157,6 +2185,10 @@ declare const _default: {
|
|
|
2157
2185
|
member: string;
|
|
2158
2186
|
viewer: string;
|
|
2159
2187
|
};
|
|
2188
|
+
entity: {
|
|
2189
|
+
description: string;
|
|
2190
|
+
plural: string;
|
|
2191
|
+
};
|
|
2160
2192
|
actions: {
|
|
2161
2193
|
create: string;
|
|
2162
2194
|
creating: string;
|
|
@@ -2230,6 +2262,7 @@ declare const _default: {
|
|
|
2230
2262
|
joined: string;
|
|
2231
2263
|
};
|
|
2232
2264
|
invitations: {
|
|
2265
|
+
expired: string;
|
|
2233
2266
|
title: string;
|
|
2234
2267
|
description: string;
|
|
2235
2268
|
pending: string;
|
|
@@ -2247,6 +2280,7 @@ declare const _default: {
|
|
|
2247
2280
|
cancelError: string;
|
|
2248
2281
|
};
|
|
2249
2282
|
invite: {
|
|
2283
|
+
limitReached: string;
|
|
2250
2284
|
title: string;
|
|
2251
2285
|
description: string;
|
|
2252
2286
|
emailLabel: string;
|
|
@@ -2274,11 +2308,6 @@ declare const _default: {
|
|
|
2274
2308
|
billing: string;
|
|
2275
2309
|
danger: string;
|
|
2276
2310
|
};
|
|
2277
|
-
messages: {
|
|
2278
|
-
created: string;
|
|
2279
|
-
loading: string;
|
|
2280
|
-
memberInvited: string;
|
|
2281
|
-
};
|
|
2282
2311
|
errors: {
|
|
2283
2312
|
notFound: string;
|
|
2284
2313
|
notMember: string;
|
|
@@ -2292,6 +2321,20 @@ declare const _default: {
|
|
|
2292
2321
|
title: string;
|
|
2293
2322
|
description: string;
|
|
2294
2323
|
};
|
|
2324
|
+
fields: {
|
|
2325
|
+
name: string;
|
|
2326
|
+
slug: string;
|
|
2327
|
+
description: string;
|
|
2328
|
+
email: string;
|
|
2329
|
+
role: string;
|
|
2330
|
+
joinedAt: string;
|
|
2331
|
+
};
|
|
2332
|
+
messages: {
|
|
2333
|
+
cancelling: string;
|
|
2334
|
+
created: string;
|
|
2335
|
+
loading: string;
|
|
2336
|
+
memberInvited: string;
|
|
2337
|
+
};
|
|
2295
2338
|
};
|
|
2296
2339
|
readonly validation: {
|
|
2297
2340
|
email: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/messages/de/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/messages/de/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsBA,wBAsBU"}
|
|
@@ -8,6 +8,7 @@ import devtools from "./devtools.json";
|
|
|
8
8
|
import docs from "./docs.json";
|
|
9
9
|
import email from "./email.json";
|
|
10
10
|
import entities from "./entities.json";
|
|
11
|
+
import features from "./features.json";
|
|
11
12
|
import footer from "./footer.json";
|
|
12
13
|
import home from "./home.json";
|
|
13
14
|
import navigation from "./navigation.json";
|
|
@@ -29,6 +30,7 @@ var de_default = {
|
|
|
29
30
|
docs,
|
|
30
31
|
email,
|
|
31
32
|
entities,
|
|
33
|
+
features,
|
|
32
34
|
footer,
|
|
33
35
|
home,
|
|
34
36
|
navigation,
|
|
@@ -8,6 +8,7 @@ import devtools from './devtools.json'
|
|
|
8
8
|
import docs from './docs.json'
|
|
9
9
|
import email from './email.json'
|
|
10
10
|
import entities from './entities.json'
|
|
11
|
+
import features from './features.json'
|
|
11
12
|
import footer from './footer.json'
|
|
12
13
|
import home from './home.json'
|
|
13
14
|
import navigation from './navigation.json'
|
|
@@ -30,6 +31,7 @@ export default {
|
|
|
30
31
|
docs,
|
|
31
32
|
email,
|
|
32
33
|
entities,
|
|
34
|
+
features,
|
|
33
35
|
footer,
|
|
34
36
|
home,
|
|
35
37
|
navigation,
|