@hexclave/shared 1.0.0 → 1.0.2
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/ai/llms/llms.d.ts +17 -0
- package/dist/ai/llms/llms.d.ts.map +1 -0
- package/dist/ai/llms/llms.js +36 -0
- package/dist/ai/llms/llms.js.map +1 -0
- package/dist/ai/unified-prompts/reminders.js +2 -2
- package/dist/ai/unified-prompts/reminders.js.map +1 -1
- package/dist/ai/unified-prompts/skill-site-prompt-parts/ai-setup-prompt.d.ts.map +1 -1
- package/dist/ai/unified-prompts/skill-site-prompt-parts/ai-setup-prompt.js +3 -1
- package/dist/ai/unified-prompts/skill-site-prompt-parts/ai-setup-prompt.js.map +1 -1
- package/dist/ai/unified-prompts/skill-site-prompt-parts/docs-index.d.ts +7 -1
- package/dist/ai/unified-prompts/skill-site-prompt-parts/docs-index.d.ts.map +1 -1
- package/dist/ai/unified-prompts/skill-site-prompt-parts/docs-index.js +6 -5
- package/dist/ai/unified-prompts/skill-site-prompt-parts/docs-index.js.map +1 -1
- package/dist/ai/unified-prompts/skill-site-prompt-parts/docs-json.generated.d.ts +172 -0
- package/dist/ai/unified-prompts/skill-site-prompt-parts/docs-json.generated.d.ts.map +1 -0
- package/dist/ai/unified-prompts/skill-site-prompt-parts/docs-json.generated.js +280 -0
- package/dist/ai/unified-prompts/skill-site-prompt-parts/docs-json.generated.js.map +1 -0
- package/dist/ai/unified-prompts/skill-site-prompt.d.ts +2 -1
- package/dist/ai/unified-prompts/skill-site-prompt.d.ts.map +1 -1
- package/dist/ai/unified-prompts/skill-site-prompt.js +36 -32
- package/dist/ai/unified-prompts/skill-site-prompt.js.map +1 -1
- package/dist/config/schema-fuzzer.test.js +1 -0
- package/dist/config/schema-fuzzer.test.js.map +1 -1
- package/dist/config/schema.d.ts +201 -197
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +6 -0
- package/dist/config/schema.js.map +1 -1
- package/dist/config-authoring.d.ts +5 -1
- package/dist/config-authoring.d.ts.map +1 -1
- package/dist/config-authoring.js +5 -0
- package/dist/config-authoring.js.map +1 -1
- package/dist/config-rendering.d.ts +6 -6
- package/dist/config-rendering.d.ts.map +1 -1
- package/dist/config-rendering.js +25 -17
- package/dist/config-rendering.js.map +1 -1
- package/dist/esm/ai/llms/llms.d.ts +17 -0
- package/dist/esm/ai/llms/llms.d.ts.map +1 -0
- package/dist/esm/ai/llms/llms.js +30 -0
- package/dist/esm/ai/llms/llms.js.map +1 -0
- package/dist/esm/ai/unified-prompts/reminders.js +2 -2
- package/dist/esm/ai/unified-prompts/reminders.js.map +1 -1
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/ai-setup-prompt.d.ts.map +1 -1
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/ai-setup-prompt.js +3 -1
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/ai-setup-prompt.js.map +1 -1
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/docs-index.d.ts +7 -1
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/docs-index.d.ts.map +1 -1
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/docs-index.js +4 -4
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/docs-index.js.map +1 -1
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/docs-json.generated.d.ts +173 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/docs-json.generated.d.ts.map +1 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/docs-json.generated.js +279 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt-parts/docs-json.generated.js.map +1 -0
- package/dist/esm/ai/unified-prompts/skill-site-prompt.d.ts +2 -1
- package/dist/esm/ai/unified-prompts/skill-site-prompt.d.ts.map +1 -1
- package/dist/esm/ai/unified-prompts/skill-site-prompt.js +36 -33
- package/dist/esm/ai/unified-prompts/skill-site-prompt.js.map +1 -1
- package/dist/esm/config/schema-fuzzer.test.js +1 -0
- package/dist/esm/config/schema-fuzzer.test.js.map +1 -1
- package/dist/esm/config/schema.d.ts +201 -197
- package/dist/esm/config/schema.d.ts.map +1 -1
- package/dist/esm/config/schema.js +6 -0
- package/dist/esm/config/schema.js.map +1 -1
- package/dist/esm/config-authoring.d.ts +5 -1
- package/dist/esm/config-authoring.d.ts.map +1 -1
- package/dist/esm/config-authoring.js +5 -1
- package/dist/esm/config-authoring.js.map +1 -1
- package/dist/esm/config-rendering.d.ts +6 -6
- package/dist/esm/config-rendering.d.ts.map +1 -1
- package/dist/esm/config-rendering.js +25 -17
- package/dist/esm/config-rendering.js.map +1 -1
- package/dist/esm/hooks/use-hover.d.ts +1 -1
- package/dist/esm/hooks/use-hover.d.ts.map +1 -1
- package/dist/esm/hooks/use-hover.js.map +1 -1
- package/dist/esm/interface/admin-interface.js +1 -1
- package/dist/esm/interface/admin-metrics.d.ts +8 -8
- package/dist/esm/interface/client-interface.js +1 -1
- package/dist/esm/interface/conversations.d.ts +32 -32
- package/dist/esm/interface/crud/current-user.d.ts +8 -8
- package/dist/esm/interface/crud/email-outbox.d.ts +218 -218
- package/dist/esm/interface/crud/products.d.ts +20 -20
- package/dist/esm/interface/crud/products.d.ts.map +1 -1
- package/dist/esm/interface/crud/project-api-keys.d.ts +3 -3
- package/dist/esm/interface/crud/projects.d.ts +36 -36
- package/dist/esm/interface/crud/team-member-profiles.d.ts +16 -16
- package/dist/esm/interface/crud/transactions.d.ts +23 -23
- package/dist/esm/interface/crud/transactions.d.ts.map +1 -1
- package/dist/esm/interface/crud/users.d.ts +14 -14
- package/dist/esm/interface/server-interface.js +1 -1
- package/dist/esm/interface/webhooks.d.ts +4 -4
- package/dist/esm/known-errors.d.ts +7 -7
- package/dist/esm/schema-fields.d.ts +7 -6
- package/dist/esm/schema-fields.d.ts.map +1 -1
- package/dist/esm/schema-fields.js +5 -1
- package/dist/esm/schema-fields.js.map +1 -1
- package/dist/esm/stack-config-file.js.map +1 -1
- package/dist/esm/utils/cloud-hosts.d.ts +42 -0
- package/dist/esm/utils/cloud-hosts.d.ts.map +1 -0
- package/dist/esm/utils/cloud-hosts.js +92 -0
- package/dist/esm/utils/cloud-hosts.js.map +1 -0
- package/dist/esm/utils/errors.d.ts +9 -2
- package/dist/esm/utils/errors.d.ts.map +1 -1
- package/dist/esm/utils/errors.js +16 -5
- package/dist/esm/utils/errors.js.map +1 -1
- package/dist/esm/utils/promises.js +1 -1
- package/dist/esm/utils/react.d.ts.map +1 -1
- package/dist/esm/utils/react.js +4 -4
- package/dist/esm/utils/react.js.map +1 -1
- package/dist/esm/utils/redirect-urls.d.ts.map +1 -1
- package/dist/esm/utils/redirect-urls.js +3 -3
- package/dist/esm/utils/redirect-urls.js.map +1 -1
- package/dist/esm/utils/urls.d.ts.map +1 -1
- package/dist/esm/utils/urls.js +2 -2
- package/dist/esm/utils/urls.js.map +1 -1
- package/dist/hooks/use-hover.d.ts +1 -1
- package/dist/hooks/use-hover.d.ts.map +1 -1
- package/dist/hooks/use-hover.js.map +1 -1
- package/dist/{index-D9ysacya.d.ts → index-fQbeILq7.d.ts} +1 -1
- package/dist/{index-D9ysacya.d.ts.map → index-fQbeILq7.d.ts.map} +1 -1
- package/dist/interface/admin-interface.js +1 -1
- package/dist/interface/admin-metrics.d.ts +8 -8
- package/dist/interface/client-interface.d.ts +1 -1
- package/dist/interface/client-interface.js +1 -1
- package/dist/interface/conversations.d.ts +32 -32
- package/dist/interface/crud/current-user.d.ts +8 -8
- package/dist/interface/crud/email-outbox.d.ts +218 -218
- package/dist/interface/crud/products.d.ts +20 -20
- package/dist/interface/crud/products.d.ts.map +1 -1
- package/dist/interface/crud/project-api-keys.d.ts +3 -3
- package/dist/interface/crud/projects.d.ts +36 -36
- package/dist/interface/crud/team-member-profiles.d.ts +16 -16
- package/dist/interface/crud/transactions.d.ts +23 -23
- package/dist/interface/crud/transactions.d.ts.map +1 -1
- package/dist/interface/crud/users.d.ts +14 -14
- package/dist/interface/server-interface.js +1 -1
- package/dist/interface/webhooks.d.ts +4 -4
- package/dist/known-errors.d.ts +7 -7
- package/dist/schema-fields.d.ts +7 -6
- package/dist/schema-fields.d.ts.map +1 -1
- package/dist/schema-fields.js +5 -0
- package/dist/schema-fields.js.map +1 -1
- package/dist/stack-config-file.js.map +1 -1
- package/dist/utils/cloud-hosts.d.ts +42 -0
- package/dist/utils/cloud-hosts.d.ts.map +1 -0
- package/dist/utils/cloud-hosts.js +97 -0
- package/dist/utils/cloud-hosts.js.map +1 -0
- package/dist/utils/errors.d.ts +9 -2
- package/dist/utils/errors.d.ts.map +1 -1
- package/dist/utils/errors.js +16 -4
- package/dist/utils/errors.js.map +1 -1
- package/dist/utils/passkey.d.ts +1 -1
- package/dist/utils/promises.js +1 -1
- package/dist/utils/react.d.ts.map +1 -1
- package/dist/utils/react.js +4 -4
- package/dist/utils/react.js.map +1 -1
- package/dist/utils/redirect-urls.d.ts.map +1 -1
- package/dist/utils/redirect-urls.js +3 -3
- package/dist/utils/redirect-urls.js.map +1 -1
- package/dist/utils/urls.d.ts.map +1 -1
- package/dist/utils/urls.js +2 -2
- package/dist/utils/urls.js.map +1 -1
- package/package.json +1 -1
|
@@ -2,16 +2,16 @@ import { parseStackConfigFileContent, renderConfigFileContent } from "./stack-co
|
|
|
2
2
|
|
|
3
3
|
//#region src/config-rendering.d.ts
|
|
4
4
|
/**
|
|
5
|
-
* Given a list of dependency names (from package.json), returns the
|
|
6
|
-
*
|
|
7
|
-
*
|
|
5
|
+
* Given a list of dependency names (from package.json), returns the SDK
|
|
6
|
+
* package that should be used for the `StackConfig` import, or `undefined`
|
|
7
|
+
* if none of the known packages are installed.
|
|
8
8
|
*/
|
|
9
|
-
declare function
|
|
9
|
+
declare function detectConfigImportPackage(dependencies: string[]): string | undefined;
|
|
10
10
|
/**
|
|
11
11
|
* Walks up from `dir` to find the nearest `package.json` and returns the
|
|
12
|
-
* best
|
|
12
|
+
* best SDK package to use for the `StackConfig` type import.
|
|
13
13
|
*/
|
|
14
14
|
declare function detectImportPackageFromDir(dir: string): string | undefined;
|
|
15
15
|
//#endregion
|
|
16
|
-
export {
|
|
16
|
+
export { detectConfigImportPackage, detectImportPackageFromDir, parseStackConfigFileContent, renderConfigFileContent };
|
|
17
17
|
//# sourceMappingURL=config-rendering.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-rendering.d.ts","names":[],"sources":["../../src/config-rendering.ts"],"mappings":";;;;
|
|
1
|
+
{"version":3,"file":"config-rendering.d.ts","names":[],"sources":["../../src/config-rendering.ts"],"mappings":";;;;AA2BA;;;;iBAAgB,yBAAA,CAA0B,YAAA;AAa1C;;;;AAAA,iBAAgB,0BAAA,CAA2B,GAAA"}
|
|
@@ -5,25 +5,31 @@ import { parseStackConfigFileContent, renderConfigFileContent } from "./stack-co
|
|
|
5
5
|
//#region src/config-rendering.ts
|
|
6
6
|
/**
|
|
7
7
|
* Packages that export the `StackConfig` type, in priority order.
|
|
8
|
-
* The first match found in a project's dependencies wins.
|
|
8
|
+
* The first match found in a project's dependencies wins. Hexclave-branded
|
|
9
|
+
* packages come first (canonical); the legacy `@stackframe/*` names remain
|
|
10
|
+
* so projects pinned to the last legacy release still render a config file
|
|
11
|
+
* that compiles against their installed SDK.
|
|
9
12
|
*/
|
|
10
|
-
const
|
|
13
|
+
const CONFIG_IMPORT_PACKAGES = [
|
|
11
14
|
"@hexclave/next",
|
|
12
15
|
"@hexclave/react",
|
|
13
16
|
"@hexclave/js",
|
|
17
|
+
"@stackframe/stack",
|
|
18
|
+
"@stackframe/react",
|
|
19
|
+
"@stackframe/js",
|
|
14
20
|
"@stackframe/template"
|
|
15
21
|
];
|
|
16
22
|
/**
|
|
17
|
-
* Given a list of dependency names (from package.json), returns the
|
|
18
|
-
*
|
|
19
|
-
*
|
|
23
|
+
* Given a list of dependency names (from package.json), returns the SDK
|
|
24
|
+
* package that should be used for the `StackConfig` import, or `undefined`
|
|
25
|
+
* if none of the known packages are installed.
|
|
20
26
|
*/
|
|
21
|
-
function
|
|
22
|
-
for (const pkg of
|
|
27
|
+
function detectConfigImportPackage(dependencies) {
|
|
28
|
+
for (const pkg of CONFIG_IMPORT_PACKAGES) if (dependencies.includes(pkg)) return pkg;
|
|
23
29
|
}
|
|
24
30
|
/**
|
|
25
31
|
* Walks up from `dir` to find the nearest `package.json` and returns the
|
|
26
|
-
* best
|
|
32
|
+
* best SDK package to use for the `StackConfig` type import.
|
|
27
33
|
*/
|
|
28
34
|
function detectImportPackageFromDir(dir) {
|
|
29
35
|
let current = dir;
|
|
@@ -31,7 +37,7 @@ function detectImportPackageFromDir(dir) {
|
|
|
31
37
|
const pkgPath = path.join(current, "package.json");
|
|
32
38
|
if (existsSync(pkgPath)) try {
|
|
33
39
|
const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
|
|
34
|
-
return
|
|
40
|
+
return detectConfigImportPackage([...Object.keys(pkg.dependencies ?? {}), ...Object.keys(pkg.devDependencies ?? {})]);
|
|
35
41
|
} catch {
|
|
36
42
|
return;
|
|
37
43
|
}
|
|
@@ -94,15 +100,17 @@ function detectImportPackageFromDir(dir) {
|
|
|
94
100
|
(void 0)?.test("renderConfigFileContent defaults to @hexclave/js", ({ expect }) => {
|
|
95
101
|
expect(renderConfigFileContent({})).toContain("import type { StackConfig } from \"@hexclave/js\";");
|
|
96
102
|
});
|
|
97
|
-
(void 0)?.test("
|
|
98
|
-
expect(
|
|
99
|
-
expect(
|
|
100
|
-
expect(
|
|
101
|
-
expect(
|
|
102
|
-
expect(
|
|
103
|
-
expect(
|
|
103
|
+
(void 0)?.test("detectConfigImportPackage picks first matching package by priority", ({ expect }) => {
|
|
104
|
+
expect(detectConfigImportPackage(["@hexclave/next", "@hexclave/js"])).toBe("@hexclave/next");
|
|
105
|
+
expect(detectConfigImportPackage(["@hexclave/react", "@hexclave/js"])).toBe("@hexclave/react");
|
|
106
|
+
expect(detectConfigImportPackage(["@hexclave/js"])).toBe("@hexclave/js");
|
|
107
|
+
expect(detectConfigImportPackage(["@stackframe/stack", "@hexclave/next"])).toBe("@hexclave/next");
|
|
108
|
+
expect(detectConfigImportPackage(["@stackframe/stack"])).toBe("@stackframe/stack");
|
|
109
|
+
expect(detectConfigImportPackage(["@stackframe/template"])).toBe("@stackframe/template");
|
|
110
|
+
expect(detectConfigImportPackage(["lodash", "express"])).toBeUndefined();
|
|
111
|
+
expect(detectConfigImportPackage([])).toBeUndefined();
|
|
104
112
|
});
|
|
105
113
|
|
|
106
114
|
//#endregion
|
|
107
|
-
export {
|
|
115
|
+
export { detectConfigImportPackage, detectImportPackageFromDir, parseStackConfigFileContent, renderConfigFileContent };
|
|
108
116
|
//# sourceMappingURL=config-rendering.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config-rendering.js","names":[],"sources":["../../src/config-rendering.ts"],"sourcesContent":["import { existsSync, readFileSync } from \"fs\";\nimport path from \"path\";\nimport { parseStackConfigFileContent, renderConfigFileContent } from \"./stack-config-file\";\nexport { parseStackConfigFileContent, renderConfigFileContent };\n\n/**\n * Packages that export the `StackConfig` type, in priority order.\n * The first match found in a project's dependencies wins.\n */\nconst
|
|
1
|
+
{"version":3,"file":"config-rendering.js","names":[],"sources":["../../src/config-rendering.ts"],"sourcesContent":["import { existsSync, readFileSync } from \"fs\";\nimport path from \"path\";\nimport { parseStackConfigFileContent, renderConfigFileContent } from \"./stack-config-file\";\nexport { parseStackConfigFileContent, renderConfigFileContent };\n\n/**\n * Packages that export the `StackConfig` type, in priority order.\n * The first match found in a project's dependencies wins. Hexclave-branded\n * packages come first (canonical); the legacy `@stackframe/*` names remain\n * so projects pinned to the last legacy release still render a config file\n * that compiles against their installed SDK.\n */\nconst CONFIG_IMPORT_PACKAGES = [\n \"@hexclave/next\",\n \"@hexclave/react\",\n \"@hexclave/js\",\n \"@stackframe/stack\",\n \"@stackframe/react\",\n \"@stackframe/js\",\n \"@stackframe/template\",\n] as const;\n\n/**\n * Given a list of dependency names (from package.json), returns the SDK\n * package that should be used for the `StackConfig` import, or `undefined`\n * if none of the known packages are installed.\n */\nexport function detectConfigImportPackage(dependencies: string[]): string | undefined {\n for (const pkg of CONFIG_IMPORT_PACKAGES) {\n if (dependencies.includes(pkg)) {\n return pkg;\n }\n }\n return undefined;\n}\n\n/**\n * Walks up from `dir` to find the nearest `package.json` and returns the\n * best SDK package to use for the `StackConfig` type import.\n */\nexport function detectImportPackageFromDir(dir: string): string | undefined {\n let current = dir;\n while (true) {\n const pkgPath = path.join(current, \"package.json\");\n if (existsSync(pkgPath)) {\n try {\n const pkg = JSON.parse(readFileSync(pkgPath, \"utf-8\"));\n const deps = [\n ...Object.keys(pkg.dependencies ?? {}),\n ...Object.keys(pkg.devDependencies ?? {}),\n ];\n return detectConfigImportPackage(deps);\n } catch {\n return undefined;\n }\n }\n const parent = path.dirname(current);\n if (parent === current) break;\n current = parent;\n }\n return undefined;\n}\n\nimport.meta.vitest?.test(\"renderConfigFileContent normalizes config exports\", ({ expect }) => {\n expect(renderConfigFileContent({\n \"payments.items.todos.displayName\": \"Todo Slots\",\n \"payments.items.todos.customerType\": \"user\",\n })).toContain(`export const config: StackConfig = {\n \"payments\": {\n \"items\": {\n \"todos\": {\n \"displayName\": \"Todo Slots\",\n \"customerType\": \"user\"\n }\n }\n }\n};`);\n});\n\nimport.meta.vitest?.test(\"parseStackConfigFileContent parses static config exports\", ({ expect }) => {\n expect(parseStackConfigFileContent(`\n import type { StackConfig } from \"@hexclave/js\";\n export const config: StackConfig = {\n auth: { allowSignUp: true },\n payments: { testMode: false },\n };\n `, \"stack.config.ts\")).toMatchInlineSnapshot(`\n {\n \"auth\": {\n \"allowSignUp\": true,\n },\n \"payments\": {\n \"testMode\": false,\n },\n }\n `);\n});\n\nimport.meta.vitest?.test(\"parseStackConfigFileContent parses show-onboarding\", ({ expect }) => {\n expect(parseStackConfigFileContent('export const config = \"show-onboarding\";', \"stack.config.ts\")).toBe(\"show-onboarding\");\n});\n\nimport.meta.vitest?.test(\"parseStackConfigFileContent rejects dynamic config exports\", ({ expect }) => {\n expect(() => parseStackConfigFileContent(\"export const config = makeConfig();\", \"stack.config.ts\")).toThrow(/Unsupported config expression/);\n});\n\nimport.meta.vitest?.test(\"renderConfigFileContent rejects conflicting dotted keys\", ({ expect }) => {\n expect(() => renderConfigFileContent({\n \"a.b\": 1,\n \"a.b.c\": 2,\n })).toThrowError(/conflicting keys.*\"a\\.b\\.c\"/);\n});\n\nimport.meta.vitest?.test(\"renderConfigFileContent rejects invalid config exports\", ({ expect }) => {\n expect(() => renderConfigFileContent(null)).toThrowErrorMatchingInlineSnapshot(\n `[Error: Invalid config: expected a plain object.]`,\n );\n});\n\nimport.meta.vitest?.test(\"renderConfigFileContent uses custom import package\", ({ expect }) => {\n const content = renderConfigFileContent({}, \"@hexclave/next\");\n expect(content).toContain('import type { StackConfig } from \"@hexclave/next\";');\n});\n\nimport.meta.vitest?.test(\"renderConfigFileContent defaults to @hexclave/js\", ({ expect }) => {\n const content = renderConfigFileContent({});\n expect(content).toContain('import type { StackConfig } from \"@hexclave/js\";');\n});\n\nimport.meta.vitest?.test(\"detectConfigImportPackage picks first matching package by priority\", ({ expect }) => {\n expect(detectConfigImportPackage([\"@hexclave/next\", \"@hexclave/js\"])).toBe(\"@hexclave/next\");\n expect(detectConfigImportPackage([\"@hexclave/react\", \"@hexclave/js\"])).toBe(\"@hexclave/react\");\n expect(detectConfigImportPackage([\"@hexclave/js\"])).toBe(\"@hexclave/js\");\n // Hexclave names take priority over legacy stackframe names when both appear.\n expect(detectConfigImportPackage([\"@stackframe/stack\", \"@hexclave/next\"])).toBe(\"@hexclave/next\");\n // Legacy fallback still works for projects pinned to the last @stackframe/* release.\n expect(detectConfigImportPackage([\"@stackframe/stack\"])).toBe(\"@stackframe/stack\");\n expect(detectConfigImportPackage([\"@stackframe/template\"])).toBe(\"@stackframe/template\");\n expect(detectConfigImportPackage([\"lodash\", \"express\"])).toBeUndefined();\n expect(detectConfigImportPackage([])).toBeUndefined();\n});\n"],"mappings":";;;;;;;;;;;;AAYA,MAAM,yBAAyB;CAC7B;CACA;CACA;CACA;CACA;CACA;CACA;CACD;;;;;;AAOD,SAAgB,0BAA0B,cAA4C;AACpF,MAAK,MAAM,OAAO,uBAChB,KAAI,aAAa,SAAS,IAAI,CAC5B,QAAO;;;;;;AAUb,SAAgB,2BAA2B,KAAiC;CAC1E,IAAI,UAAU;AACd,QAAO,MAAM;EACX,MAAM,UAAU,KAAK,KAAK,SAAS,eAAe;AAClD,MAAI,WAAW,QAAQ,CACrB,KAAI;GACF,MAAM,MAAM,KAAK,MAAM,aAAa,SAAS,QAAQ,CAAC;AAKtD,UAAO,0BAJM,CACX,GAAG,OAAO,KAAK,IAAI,gBAAgB,EAAE,CAAC,EACtC,GAAG,OAAO,KAAK,IAAI,mBAAmB,EAAE,CAAC,CAC1C,CACqC;UAChC;AACN;;EAGJ,MAAM,SAAS,KAAK,QAAQ,QAAQ;AACpC,MAAI,WAAW,QAAS;AACxB,YAAU;;;CAKd,SAAW,KAAC,sDAAwD,EAAA,aAAa;AAC/E,QAAO,wBAAwB;EAC7B,oCAAoC;EACpC,qCAAqC;EACtC,CAAC,CAAC,CAAC,UAAU;;;;;;;;;IASZ;EACF;CAEF,SAAW,KAAC,6DAA+D,EAAA,aAAa;AACtF,QAAO,4BAA4B;;;;;;KAMhC,kBAAkB,CAAC,CAAC,sBAAsB;;;;;;;;;IAS3C;EACF;CAEF,SAAW,KAAC,uDAAsD,EAAA,aAAgB;AAChF,QAAO,4BAA4B,8CAA4C,kBAAkB,CAAC,CAAC,KAAK,kBAAkB;EAC1H;CAEF,SAAW,KAAC,+DAAiE,EAAA,aAAa;AACxF,cAAa,4BAA4B,uCAAuC,kBAAkB,CAAC,CAAC,QAAQ,gCAAgC;EAC5I;CAEF,SAAW,KAAC,4DAAgE,EAAC,aAAU;AACrF,cAAa,wBAAwB;EACnC,OAAO;EACP,SAAS;EACV,CAAC,CAAC,CAAC,aAAa,8BAA8B;EAC/C;CAEF,SAAW,KAAC,2DAA6D,EAAA,aAAa;AACpF,cAAa,wBAAwB,KAAK,CAAC,CAAC,mCAC1C,oDACD;EACD;CAEF,SAAW,KAAC,uDAAyD,EAAA,aAAa;AAEhF,QADgB,wBAAwB,EAAE,EAAE,iBAAiB,CAC9C,CAAC,UAAU,uDAAqD;EAC/E;CAEF,SAAW,KAAC,qDAAmD,EAAQ,aAAS;AAE9E,QADgB,wBAAwB,EAAE,CAAC,CAC5B,CAAC,UAAU,qDAAmD;EAC7E;CAEF,SAAW,KAAC,uEAAwE,EAAA,aAAc;AAChG,QAAO,0BAA0B,CAAC,kBAAkB,eAAe,CAAC,CAAC,CAAC,KAAK,iBAAiB;AAC5F,QAAO,0BAA0B,CAAC,mBAAmB,eAAe,CAAC,CAAC,CAAC,KAAK,kBAAkB;AAC9F,QAAO,0BAA0B,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,eAAe;AAExE,QAAO,0BAA0B,CAAC,qBAAqB,iBAAiB,CAAC,CAAC,CAAC,KAAK,iBAAiB;AAEjG,QAAO,0BAA0B,CAAC,oBAAoB,CAAC,CAAC,CAAC,KAAK,oBAAoB;AAClF,QAAO,0BAA0B,CAAC,uBAAuB,CAAC,CAAC,CAAC,KAAK,uBAAuB;AACxF,QAAO,0BAA0B,CAAC,UAAU,UAAU,CAAC,CAAC,CAAC,eAAe;AACxE,QAAO,0BAA0B,EAAE,CAAC,CAAC,CAAC,eAAe;EACrD"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
//#region src/hooks/use-hover.d.ts
|
|
2
|
-
declare function useHover<T extends HTMLElement>(ref: React.RefObject<T>, options?: {
|
|
2
|
+
declare function useHover<T extends HTMLElement | null>(ref: React.RefObject<T>, options?: {
|
|
3
3
|
onMouseEnter?: () => void;
|
|
4
4
|
onMouseLeave?: () => void;
|
|
5
5
|
}): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-hover.d.ts","names":[],"sources":["../../../src/hooks/use-hover.tsx"],"mappings":";iBAGgB,QAAA,WAAmB,WAAA,
|
|
1
|
+
{"version":3,"file":"use-hover.d.ts","names":[],"sources":["../../../src/hooks/use-hover.tsx"],"mappings":";iBAGgB,QAAA,WAAmB,WAAA,QAAA,CACjC,GAAA,EAAK,KAAA,CAAM,SAAA,CAAU,CAAA,GACrB,OAAA;EACE,YAAA;EACA,YAAA;AAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-hover.js","names":[],"sources":["../../../src/hooks/use-hover.tsx"],"sourcesContent":["import { useLayoutEffect } from \"react\";\nimport { useRefState } from \"../utils/react\";\n\nexport function useHover<T extends HTMLElement>(\n ref: React.RefObject<T>,\n options: {\n onMouseEnter?: () => void,\n onMouseLeave?: () => void,\n } = {},\n): boolean {\n // Internal counter: mouseenter++ / mouseleave-- (isHovering = counter > 0)\n const counter = useRefState(0);\n\n useLayoutEffect(() => {\n const el = ref.current;\n if (!el) return;\n let incr = 0;\n let prevInside = false;\n\n const contains = (r: DOMRect, x: number, y: number) =>\n x >= r.left && x <= r.right && y >= r.top && y <= r.bottom;\n\n const enter = () => {\n incr++;\n counter.set(c => c + 1);\n if (counter.current === 1) {\n options.onMouseEnter?.();\n }\n };\n\n const leave = () => {\n incr--;\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n counter.set(c => c - 1);\n if (counter.current === 0) {\n options.onMouseLeave?.();\n }\n });\n });\n };\n\n const topMatchesTarget = (x: number, y: number) => {\n const top = document.elementFromPoint(x, y);\n return !!(top && (top === el || el.contains(top)));\n };\n\n const processPoint = (x: number, y: number) => {\n const rect = el.getBoundingClientRect();\n\n // True “hoverability”: inside rect AND not occluded by others\n const inside = contains(rect, x, y) && topMatchesTarget(x, y);\n if (inside && !prevInside) {\n enter();\n } else if (!inside && prevInside) {\n leave();\n }\n prevInside = inside;\n };\n\n const onMove = (e: PointerEvent) => {\n if (e.pointerType !== \"mouse\") return; // keep it hover-only\n // Use coalesced points when available\n const batch = e.getCoalescedEvents();\n if (batch.length) {\n for (let eventIndex = 0; eventIndex < batch.length - 1; eventIndex++) {\n const e1 = batch[eventIndex];\n const e2 = batch[eventIndex + 1];\n const steps = 10;\n for (let i = 0; i <= steps; i++) {\n processPoint(e1.clientX + (e2.clientX - e1.clientX) * i / steps, e1.clientY + (e2.clientY - e1.clientY) * i / steps);\n }\n }\n } else {\n processPoint(e.clientX, e.clientY);\n }\n };\n\n window.addEventListener(\"pointermove\", onMove, { passive: true });\n\n return () => {\n window.removeEventListener(\"pointermove\", onMove);\n counter.set(c => c - incr);\n };\n }, []);\n\n return counter.current > 0;\n}\n"],"mappings":";;;;AAGA,SAAgB,SACd,KACA,UAGI,EAAE,EACG;CAET,MAAM,UAAU,YAAY,EAAE;AAE9B,uBAAsB;EACpB,MAAM,KAAK,IAAI;AACf,MAAI,CAAC,GAAI;EACT,IAAI,OAAO;EACX,IAAI,aAAa;EAEjB,MAAM,YAAY,GAAY,GAAW,MACvC,KAAK,EAAE,QAAQ,KAAK,EAAE,SAAS,KAAK,EAAE,OAAO,KAAK,EAAE;EAEtD,MAAM,cAAc;AAClB;AACA,WAAQ,KAAI,MAAK,IAAI,EAAE;AACvB,OAAI,QAAQ,YAAY,EACtB,SAAQ,gBAAgB;;EAI5B,MAAM,cAAc;AAClB;AACA,+BAA4B;AAC1B,gCAA4B;AAC1B,aAAQ,KAAI,MAAK,IAAI,EAAE;AACvB,SAAI,QAAQ,YAAY,EACtB,SAAQ,gBAAgB;MAE1B;KACF;;EAGJ,MAAM,oBAAoB,GAAW,MAAc;GACjD,MAAM,MAAM,SAAS,iBAAiB,GAAG,EAAE;AAC3C,UAAO,CAAC,EAAE,QAAQ,QAAQ,MAAM,GAAG,SAAS,IAAI;;EAGlD,MAAM,gBAAgB,GAAW,MAAc;GAI7C,MAAM,SAAS,SAHF,GAAG,uBAAuB,EAGT,GAAG,EAAE,IAAI,iBAAiB,GAAG,EAAE;AAC7D,OAAI,UAAU,CAAC,WACb,QAAO;YACE,CAAC,UAAU,WACpB,QAAO;AAET,gBAAa;;EAGf,MAAM,UAAU,MAAoB;AAClC,OAAI,EAAE,gBAAgB,QAAS;GAE/B,MAAM,QAAQ,EAAE,oBAAoB;AACpC,OAAI,MAAM,OACR,MAAK,IAAI,aAAa,GAAG,aAAa,MAAM,SAAS,GAAG,cAAc;IACpE,MAAM,KAAK,MAAM;IACjB,MAAM,KAAK,MAAM,aAAa;IAC9B,MAAM,QAAQ;AACd,SAAK,IAAI,IAAI,GAAG,KAAK,OAAO,IAC1B,cAAa,GAAG,WAAW,GAAG,UAAU,GAAG,WAAW,IAAI,OAAO,GAAG,WAAW,GAAG,UAAU,GAAG,WAAW,IAAI,MAAM;;OAIxH,cAAa,EAAE,SAAS,EAAE,QAAQ;;AAItC,SAAO,iBAAiB,eAAe,QAAQ,EAAE,SAAS,MAAM,CAAC;AAEjE,eAAa;AACX,UAAO,oBAAoB,eAAe,OAAO;AACjD,WAAQ,KAAI,MAAK,IAAI,KAAK;;IAE3B,EAAE,CAAC;AAEN,QAAO,QAAQ,UAAU"}
|
|
1
|
+
{"version":3,"file":"use-hover.js","names":[],"sources":["../../../src/hooks/use-hover.tsx"],"sourcesContent":["import { useLayoutEffect } from \"react\";\nimport { useRefState } from \"../utils/react\";\n\nexport function useHover<T extends HTMLElement | null>(\n ref: React.RefObject<T>,\n options: {\n onMouseEnter?: () => void,\n onMouseLeave?: () => void,\n } = {},\n): boolean {\n // Internal counter: mouseenter++ / mouseleave-- (isHovering = counter > 0)\n const counter = useRefState(0);\n\n useLayoutEffect(() => {\n const el = ref.current;\n if (!el) return;\n let incr = 0;\n let prevInside = false;\n\n const contains = (r: DOMRect, x: number, y: number) =>\n x >= r.left && x <= r.right && y >= r.top && y <= r.bottom;\n\n const enter = () => {\n incr++;\n counter.set(c => c + 1);\n if (counter.current === 1) {\n options.onMouseEnter?.();\n }\n };\n\n const leave = () => {\n incr--;\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n counter.set(c => c - 1);\n if (counter.current === 0) {\n options.onMouseLeave?.();\n }\n });\n });\n };\n\n const topMatchesTarget = (x: number, y: number) => {\n const top = document.elementFromPoint(x, y);\n return !!(top && (top === el || el.contains(top)));\n };\n\n const processPoint = (x: number, y: number) => {\n const rect = el.getBoundingClientRect();\n\n // True “hoverability”: inside rect AND not occluded by others\n const inside = contains(rect, x, y) && topMatchesTarget(x, y);\n if (inside && !prevInside) {\n enter();\n } else if (!inside && prevInside) {\n leave();\n }\n prevInside = inside;\n };\n\n const onMove = (e: PointerEvent) => {\n if (e.pointerType !== \"mouse\") return; // keep it hover-only\n // Use coalesced points when available\n const batch = e.getCoalescedEvents();\n if (batch.length) {\n for (let eventIndex = 0; eventIndex < batch.length - 1; eventIndex++) {\n const e1 = batch[eventIndex];\n const e2 = batch[eventIndex + 1];\n const steps = 10;\n for (let i = 0; i <= steps; i++) {\n processPoint(e1.clientX + (e2.clientX - e1.clientX) * i / steps, e1.clientY + (e2.clientY - e1.clientY) * i / steps);\n }\n }\n } else {\n processPoint(e.clientX, e.clientY);\n }\n };\n\n window.addEventListener(\"pointermove\", onMove, { passive: true });\n\n return () => {\n window.removeEventListener(\"pointermove\", onMove);\n counter.set(c => c - incr);\n };\n }, []);\n\n return counter.current > 0;\n}\n"],"mappings":";;;;AAGA,SAAgB,SACd,KACA,UAGI,EAAE,EACG;CAET,MAAM,UAAU,YAAY,EAAE;AAE9B,uBAAsB;EACpB,MAAM,KAAK,IAAI;AACf,MAAI,CAAC,GAAI;EACT,IAAI,OAAO;EACX,IAAI,aAAa;EAEjB,MAAM,YAAY,GAAY,GAAW,MACvC,KAAK,EAAE,QAAQ,KAAK,EAAE,SAAS,KAAK,EAAE,OAAO,KAAK,EAAE;EAEtD,MAAM,cAAc;AAClB;AACA,WAAQ,KAAI,MAAK,IAAI,EAAE;AACvB,OAAI,QAAQ,YAAY,EACtB,SAAQ,gBAAgB;;EAI5B,MAAM,cAAc;AAClB;AACA,+BAA4B;AAC1B,gCAA4B;AAC1B,aAAQ,KAAI,MAAK,IAAI,EAAE;AACvB,SAAI,QAAQ,YAAY,EACtB,SAAQ,gBAAgB;MAE1B;KACF;;EAGJ,MAAM,oBAAoB,GAAW,MAAc;GACjD,MAAM,MAAM,SAAS,iBAAiB,GAAG,EAAE;AAC3C,UAAO,CAAC,EAAE,QAAQ,QAAQ,MAAM,GAAG,SAAS,IAAI;;EAGlD,MAAM,gBAAgB,GAAW,MAAc;GAI7C,MAAM,SAAS,SAHF,GAAG,uBAAuB,EAGT,GAAG,EAAE,IAAI,iBAAiB,GAAG,EAAE;AAC7D,OAAI,UAAU,CAAC,WACb,QAAO;YACE,CAAC,UAAU,WACpB,QAAO;AAET,gBAAa;;EAGf,MAAM,UAAU,MAAoB;AAClC,OAAI,EAAE,gBAAgB,QAAS;GAE/B,MAAM,QAAQ,EAAE,oBAAoB;AACpC,OAAI,MAAM,OACR,MAAK,IAAI,aAAa,GAAG,aAAa,MAAM,SAAS,GAAG,cAAc;IACpE,MAAM,KAAK,MAAM;IACjB,MAAM,KAAK,MAAM,aAAa;IAC9B,MAAM,QAAQ;AACd,SAAK,IAAI,IAAI,GAAG,KAAK,OAAO,IAC1B,cAAa,GAAG,WAAW,GAAG,UAAU,GAAG,WAAW,IAAI,OAAO,GAAG,WAAW,GAAG,UAAU,GAAG,WAAW,IAAI,MAAM;;OAIxH,cAAa,EAAE,SAAS,EAAE,QAAQ;;AAItC,SAAO,iBAAiB,eAAe,QAAQ,EAAE,SAAS,MAAM,CAAC;AAEjE,eAAa;AACX,UAAO,oBAAoB,eAAe,OAAO;AACjD,WAAQ,KAAI,MAAK,IAAI,KAAK;;IAE3B,EAAE,CAAC;AAEN,QAAO,QAAQ,UAAU"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Result } from "../utils/results.js";
|
|
2
|
-
import { KnownErrors } from "../known-errors.js";
|
|
3
2
|
import { urlString } from "../utils/urls.js";
|
|
3
|
+
import { KnownErrors } from "../known-errors.js";
|
|
4
4
|
import { HexclaveServerInterface } from "./server-interface.js";
|
|
5
5
|
|
|
6
6
|
//#region src/interface/admin-interface.ts
|
|
@@ -150,16 +150,16 @@ declare const MetricsEmailOverviewSchema: yup.ObjectSchema<{
|
|
|
150
150
|
activity: number;
|
|
151
151
|
}[];
|
|
152
152
|
daily_emails_by_status: {
|
|
153
|
-
date: string;
|
|
154
153
|
ok: number;
|
|
155
154
|
error: number;
|
|
155
|
+
date: string;
|
|
156
156
|
in_progress: number;
|
|
157
157
|
}[];
|
|
158
158
|
emails_sent: number;
|
|
159
159
|
recent_emails: {
|
|
160
160
|
id: string;
|
|
161
|
-
subject: string;
|
|
162
161
|
status: string;
|
|
162
|
+
subject: string;
|
|
163
163
|
created_at_millis: number;
|
|
164
164
|
}[];
|
|
165
165
|
deliverability_status: {
|
|
@@ -310,8 +310,8 @@ declare const UserActivityResponseBodySchema: yup.ObjectSchema<{
|
|
|
310
310
|
data_points: undefined;
|
|
311
311
|
}, "">;
|
|
312
312
|
declare const MetricsActiveUsersByCountrySchema: yup.MixedSchema<Record<string, {
|
|
313
|
-
display_name: string | null;
|
|
314
313
|
id: string;
|
|
314
|
+
display_name: string | null;
|
|
315
315
|
primary_email: string | null;
|
|
316
316
|
profile_image_url: string | null;
|
|
317
317
|
signed_up_at_millis: number;
|
|
@@ -330,24 +330,24 @@ declare const MetricsResponseBodySchema: yup.ObjectSchema<{
|
|
|
330
330
|
}[];
|
|
331
331
|
users_by_country: Record<string, number>;
|
|
332
332
|
active_users_by_country: Record<string, {
|
|
333
|
-
display_name: string | null;
|
|
334
333
|
id: string;
|
|
334
|
+
display_name: string | null;
|
|
335
335
|
primary_email: string | null;
|
|
336
336
|
profile_image_url: string | null;
|
|
337
337
|
signed_up_at_millis: number;
|
|
338
338
|
last_active_at_millis: number | null;
|
|
339
339
|
}[]>;
|
|
340
340
|
recently_registered: {
|
|
341
|
-
display_name: string | null;
|
|
342
341
|
id: string;
|
|
342
|
+
display_name: string | null;
|
|
343
343
|
primary_email: string | null;
|
|
344
344
|
profile_image_url: string | null;
|
|
345
345
|
signed_up_at_millis: number;
|
|
346
346
|
last_active_at_millis: number | null;
|
|
347
347
|
}[];
|
|
348
348
|
recently_active: {
|
|
349
|
-
display_name: string | null;
|
|
350
349
|
id: string;
|
|
350
|
+
display_name: string | null;
|
|
351
351
|
primary_email: string | null;
|
|
352
352
|
profile_image_url: string | null;
|
|
353
353
|
signed_up_at_millis: number;
|
|
@@ -422,16 +422,16 @@ declare const MetricsResponseBodySchema: yup.ObjectSchema<{
|
|
|
422
422
|
emails_by_status: Record<string, number>;
|
|
423
423
|
total_emails: number;
|
|
424
424
|
daily_emails_by_status: {
|
|
425
|
-
date: string;
|
|
426
425
|
ok: number;
|
|
427
426
|
error: number;
|
|
427
|
+
date: string;
|
|
428
428
|
in_progress: number;
|
|
429
429
|
}[];
|
|
430
430
|
emails_sent: number;
|
|
431
431
|
recent_emails: {
|
|
432
432
|
id: string;
|
|
433
|
-
subject: string;
|
|
434
433
|
status: string;
|
|
434
|
+
subject: string;
|
|
435
435
|
created_at_millis: number;
|
|
436
436
|
}[];
|
|
437
437
|
deliverability_status: {
|
|
@@ -3,8 +3,8 @@ import { filterUndefined, filterUndefinedOrNull } from "../utils/objects.js";
|
|
|
3
3
|
import { deindent } from "../utils/strings.js";
|
|
4
4
|
import { publishableClientKeyNotNecessarySentinel } from "../utils/oauth.js";
|
|
5
5
|
import { Result } from "../utils/results.js";
|
|
6
|
-
import { KnownError, KnownErrors } from "../known-errors.js";
|
|
7
6
|
import { urlString } from "../utils/urls.js";
|
|
7
|
+
import { KnownError, KnownErrors } from "../known-errors.js";
|
|
8
8
|
import { AccessToken, InternalSession } from "../sessions.js";
|
|
9
9
|
import { generateSecureRandomString } from "../utils/crypto.js";
|
|
10
10
|
import { globalVar } from "../utils/globals.js";
|
|
@@ -139,8 +139,8 @@ declare const conversationMessageSchema: yup$1.ObjectSchema<{
|
|
|
139
139
|
createdAt: string;
|
|
140
140
|
sender: {
|
|
141
141
|
type: "user" | "agent" | "system";
|
|
142
|
-
displayName: string | null;
|
|
143
142
|
id: string | null;
|
|
143
|
+
displayName: string | null;
|
|
144
144
|
primaryEmail: string | null;
|
|
145
145
|
};
|
|
146
146
|
}, yup$1.AnyObject, {
|
|
@@ -173,19 +173,7 @@ declare const conversationListResponseSchema: yup$1.ObjectSchema<{
|
|
|
173
173
|
lastOutboundAt?: string | null | undefined;
|
|
174
174
|
closedAt?: string | null | undefined;
|
|
175
175
|
recordMetadata?: {} | null | undefined;
|
|
176
|
-
conversationId: string;
|
|
177
|
-
userId: string | null;
|
|
178
|
-
teamId: string | null;
|
|
179
|
-
userDisplayName: string | null;
|
|
180
|
-
userPrimaryEmail: string | null;
|
|
181
|
-
userProfileImageUrl: string | null;
|
|
182
|
-
subject: string;
|
|
183
|
-
status: "pending" | "open" | "closed";
|
|
184
|
-
priority: "low" | "normal" | "high" | "urgent";
|
|
185
176
|
source: "email" | "manual" | "chat" | "api";
|
|
186
|
-
lastMessageType: "message" | "internal-note" | "status-change";
|
|
187
|
-
preview: string | null;
|
|
188
|
-
lastActivityAt: string;
|
|
189
177
|
metadata: {
|
|
190
178
|
assignedToUserId: string | null;
|
|
191
179
|
assignedToDisplayName: string | null;
|
|
@@ -196,6 +184,18 @@ declare const conversationListResponseSchema: yup$1.ObjectSchema<{
|
|
|
196
184
|
lastCustomerReplyAt: string | null;
|
|
197
185
|
lastAgentReplyAt: string | null;
|
|
198
186
|
};
|
|
187
|
+
status: "pending" | "open" | "closed";
|
|
188
|
+
subject: string;
|
|
189
|
+
conversationId: string;
|
|
190
|
+
userId: string | null;
|
|
191
|
+
teamId: string | null;
|
|
192
|
+
userDisplayName: string | null;
|
|
193
|
+
userPrimaryEmail: string | null;
|
|
194
|
+
userProfileImageUrl: string | null;
|
|
195
|
+
priority: "low" | "normal" | "high" | "urgent";
|
|
196
|
+
lastMessageType: "message" | "internal-note" | "status-change";
|
|
197
|
+
preview: string | null;
|
|
198
|
+
lastActivityAt: string;
|
|
199
199
|
}[];
|
|
200
200
|
hasMore: boolean;
|
|
201
201
|
}, yup$1.AnyObject, {
|
|
@@ -211,19 +211,7 @@ declare const conversationDetailResponseSchema: yup$1.ObjectSchema<{
|
|
|
211
211
|
lastOutboundAt?: string | null | undefined;
|
|
212
212
|
closedAt?: string | null | undefined;
|
|
213
213
|
recordMetadata?: {} | null | undefined;
|
|
214
|
-
conversationId: string;
|
|
215
|
-
userId: string | null;
|
|
216
|
-
teamId: string | null;
|
|
217
|
-
userDisplayName: string | null;
|
|
218
|
-
userPrimaryEmail: string | null;
|
|
219
|
-
userProfileImageUrl: string | null;
|
|
220
|
-
subject: string;
|
|
221
|
-
status: "pending" | "open" | "closed";
|
|
222
|
-
priority: "low" | "normal" | "high" | "urgent";
|
|
223
214
|
source: "email" | "manual" | "chat" | "api";
|
|
224
|
-
lastMessageType: "message" | "internal-note" | "status-change";
|
|
225
|
-
preview: string | null;
|
|
226
|
-
lastActivityAt: string;
|
|
227
215
|
metadata: {
|
|
228
216
|
assignedToUserId: string | null;
|
|
229
217
|
assignedToDisplayName: string | null;
|
|
@@ -234,31 +222,43 @@ declare const conversationDetailResponseSchema: yup$1.ObjectSchema<{
|
|
|
234
222
|
lastCustomerReplyAt: string | null;
|
|
235
223
|
lastAgentReplyAt: string | null;
|
|
236
224
|
};
|
|
225
|
+
status: "pending" | "open" | "closed";
|
|
226
|
+
subject: string;
|
|
227
|
+
conversationId: string;
|
|
228
|
+
userId: string | null;
|
|
229
|
+
teamId: string | null;
|
|
230
|
+
userDisplayName: string | null;
|
|
231
|
+
userPrimaryEmail: string | null;
|
|
232
|
+
userProfileImageUrl: string | null;
|
|
233
|
+
priority: "low" | "normal" | "high" | "urgent";
|
|
234
|
+
lastMessageType: "message" | "internal-note" | "status-change";
|
|
235
|
+
preview: string | null;
|
|
236
|
+
lastActivityAt: string;
|
|
237
237
|
};
|
|
238
238
|
messages: {
|
|
239
|
+
body: string | null;
|
|
240
|
+
source: "email" | "manual" | "chat" | "api";
|
|
241
|
+
metadata: {} | null;
|
|
239
242
|
id: string;
|
|
243
|
+
status: "pending" | "open" | "closed";
|
|
244
|
+
subject: string;
|
|
240
245
|
conversationId: string;
|
|
241
246
|
userId: string | null;
|
|
242
247
|
teamId: string | null;
|
|
243
|
-
subject: string;
|
|
244
|
-
status: "pending" | "open" | "closed";
|
|
245
248
|
priority: "low" | "normal" | "high" | "urgent";
|
|
246
|
-
source: "email" | "manual" | "chat" | "api";
|
|
247
|
-
metadata: {} | null;
|
|
248
249
|
createdAt: string;
|
|
249
250
|
messageType: "message" | "internal-note" | "status-change";
|
|
250
|
-
body: string | null;
|
|
251
251
|
attachments: {}[];
|
|
252
252
|
sender: {
|
|
253
253
|
type: "user" | "agent" | "system";
|
|
254
|
-
displayName: string | null;
|
|
255
254
|
id: string | null;
|
|
255
|
+
displayName: string | null;
|
|
256
256
|
primaryEmail: string | null;
|
|
257
257
|
};
|
|
258
258
|
}[];
|
|
259
259
|
entryPoints: {
|
|
260
|
-
id: string;
|
|
261
260
|
metadata: {} | null;
|
|
261
|
+
id: string;
|
|
262
262
|
createdAt: string;
|
|
263
263
|
updatedAt: string;
|
|
264
264
|
channelType: string;
|
|
@@ -12,14 +12,14 @@ declare const currentUserCrud: ______crud0.CrudSchemaFromOptions<{
|
|
|
12
12
|
type: "anonymous" | "email_not_verified" | "restricted_by_administrator";
|
|
13
13
|
} | null;
|
|
14
14
|
requires_totp_mfa: boolean;
|
|
15
|
-
display_name: string | null;
|
|
16
|
-
client_metadata: {} | null;
|
|
17
|
-
client_read_only_metadata: {} | null;
|
|
18
15
|
id: string;
|
|
16
|
+
display_name: string | null;
|
|
19
17
|
primary_email: string | null;
|
|
20
|
-
primary_email_verified: boolean;
|
|
21
18
|
profile_image_url: string | null;
|
|
22
19
|
signed_up_at_millis: number;
|
|
20
|
+
client_metadata: {} | null;
|
|
21
|
+
client_read_only_metadata: {} | null;
|
|
22
|
+
primary_email_verified: boolean;
|
|
23
23
|
has_password: boolean;
|
|
24
24
|
otp_auth_enabled: boolean;
|
|
25
25
|
passkey_auth_enabled: boolean;
|
|
@@ -35,8 +35,8 @@ declare const currentUserCrud: ______crud0.CrudSchemaFromOptions<{
|
|
|
35
35
|
selected_team: {
|
|
36
36
|
client_metadata?: {} | null | undefined;
|
|
37
37
|
client_read_only_metadata?: {} | null | undefined;
|
|
38
|
-
display_name: string;
|
|
39
38
|
id: string;
|
|
39
|
+
display_name: string;
|
|
40
40
|
profile_image_url: string | null;
|
|
41
41
|
} | null;
|
|
42
42
|
}, yup$1.AnyObject, {
|
|
@@ -91,10 +91,10 @@ declare const currentUserCrud: ______crud0.CrudSchemaFromOptions<{
|
|
|
91
91
|
client_metadata?: {} | null | undefined;
|
|
92
92
|
client_read_only_metadata?: {} | null | undefined;
|
|
93
93
|
server_metadata?: {} | null | undefined;
|
|
94
|
-
display_name: string;
|
|
95
94
|
id: string;
|
|
96
|
-
profile_image_url: string | null;
|
|
97
95
|
created_at_millis: number;
|
|
96
|
+
display_name: string;
|
|
97
|
+
profile_image_url: string | null;
|
|
98
98
|
} | null;
|
|
99
99
|
selected_team_id: string | null;
|
|
100
100
|
profile_image_url: string | null;
|
|
@@ -175,9 +175,9 @@ declare const currentUserCrud: ______crud0.CrudSchemaFromOptions<{
|
|
|
175
175
|
clientUpdateSchema: yup$1.ObjectSchema<{
|
|
176
176
|
selected_team_id: string | null | undefined;
|
|
177
177
|
display_name: string | null | undefined;
|
|
178
|
-
client_metadata: {} | null | undefined;
|
|
179
178
|
primary_email: string | null | undefined;
|
|
180
179
|
profile_image_url: string | null | undefined;
|
|
180
|
+
client_metadata: {} | null | undefined;
|
|
181
181
|
otp_auth_enabled: boolean | undefined;
|
|
182
182
|
passkey_auth_enabled: boolean | undefined;
|
|
183
183
|
totp_secret_base64: string | null | undefined;
|