@eide/foir-cli 0.1.22 → 0.1.24
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/auth/credentials.d.ts +10 -8
- package/dist/auth/credentials.d.ts.map +1 -1
- package/dist/auth/credentials.js +72 -12
- package/dist/cli.js +6 -0
- package/dist/codegen/fetch-customer-profile-schema.d.ts.map +1 -1
- package/dist/codegen/fetch-customer-profile-schema.js +4 -4
- package/dist/codegen/fetch-models.d.ts.map +1 -1
- package/dist/codegen/fetch-models.js +7 -7
- package/dist/codegen/field-mapping.d.ts.map +1 -1
- package/dist/codegen/field-mapping.js +1 -2
- package/dist/codegen/generators/static-documents.d.ts.map +1 -1
- package/dist/codegen/generators/static-documents.js +31 -29
- package/dist/codegen/generators/typed-operations.d.ts.map +1 -1
- package/dist/commands/api-keys.d.ts.map +1 -1
- package/dist/commands/api-keys.js +5 -5
- package/dist/commands/auth-config.d.ts +4 -0
- package/dist/commands/auth-config.d.ts.map +1 -0
- package/dist/commands/auth-config.js +37 -0
- package/dist/commands/auth-providers.d.ts.map +1 -1
- package/dist/commands/auth-providers.js +6 -6
- package/dist/commands/context.d.ts.map +1 -1
- package/dist/commands/context.js +7 -8
- package/dist/commands/customer-profiles.d.ts.map +1 -1
- package/dist/commands/customer-profiles.js +5 -5
- package/dist/commands/customers.d.ts.map +1 -1
- package/dist/commands/customers.js +6 -6
- package/dist/commands/embeddings.d.ts +4 -0
- package/dist/commands/embeddings.d.ts.map +1 -0
- package/dist/commands/embeddings.js +139 -0
- package/dist/commands/experiments.d.ts.map +1 -1
- package/dist/commands/experiments.js +12 -12
- package/dist/commands/extensions.d.ts.map +1 -1
- package/dist/commands/extensions.js +6 -6
- package/dist/commands/files.d.ts.map +1 -1
- package/dist/commands/files.js +8 -8
- package/dist/commands/hooks.d.ts +4 -0
- package/dist/commands/hooks.d.ts.map +1 -0
- package/dist/commands/hooks.js +182 -0
- package/dist/commands/locales.d.ts.map +1 -1
- package/dist/commands/locales.js +18 -13
- package/dist/commands/models.d.ts.map +1 -1
- package/dist/commands/models.js +11 -11
- package/dist/commands/notes.d.ts.map +1 -1
- package/dist/commands/notes.js +18 -8
- package/dist/commands/notifications.d.ts.map +1 -1
- package/dist/commands/notifications.js +4 -4
- package/dist/commands/operations.d.ts.map +1 -1
- package/dist/commands/operations.js +126 -12
- package/dist/commands/pull.d.ts.map +1 -1
- package/dist/commands/pull.js +2 -2
- package/dist/commands/records.d.ts.map +1 -1
- package/dist/commands/records.js +32 -20
- package/dist/commands/schedules.d.ts.map +1 -1
- package/dist/commands/schedules.js +9 -9
- package/dist/commands/search.d.ts.map +1 -1
- package/dist/commands/search.js +2 -2
- package/dist/commands/segments.d.ts.map +1 -1
- package/dist/commands/segments.js +9 -9
- package/dist/commands/select-project.d.ts.map +1 -1
- package/dist/commands/select-project.js +8 -9
- package/dist/commands/settings.d.ts.map +1 -1
- package/dist/commands/settings.js +8 -8
- package/dist/commands/variant-catalog.d.ts.map +1 -1
- package/dist/commands/variant-catalog.js +7 -7
- package/dist/commands/whoami.d.ts.map +1 -1
- package/dist/commands/whoami.js +9 -8
- package/dist/config/pull-config.js +2 -2
- package/dist/config/types.d.ts +1 -1
- package/dist/config/types.d.ts.map +1 -1
- package/dist/graphql/generated.d.ts +8134 -0
- package/dist/graphql/generated.d.ts.map +1 -0
- package/dist/graphql/generated.js +133 -0
- package/dist/lib/client.d.ts +1 -0
- package/dist/lib/client.d.ts.map +1 -1
- package/dist/lib/client.js +10 -7
- package/dist/lib/config.js +1 -1
- package/dist/lib/errors.d.ts.map +1 -1
- package/dist/lib/errors.js +11 -0
- package/package.json +32 -10
- package/dist/graphql/queries.d.ts +0 -115
- package/dist/graphql/queries.d.ts.map +0 -1
- package/dist/graphql/queries.js +0 -459
|
@@ -7,23 +7,25 @@ export interface StoredCredentials {
|
|
|
7
7
|
email: string;
|
|
8
8
|
name: string;
|
|
9
9
|
};
|
|
10
|
-
selectedProject?: {
|
|
11
|
-
id: string;
|
|
12
|
-
name: string;
|
|
13
|
-
tenantId: string;
|
|
14
|
-
apiKey?: string;
|
|
15
|
-
apiKeyId?: string;
|
|
16
|
-
};
|
|
17
10
|
}
|
|
18
11
|
export declare function getCredentialsDir(): string;
|
|
19
12
|
export declare function getCredentialsPath(): string;
|
|
20
13
|
export declare function getCredentials(): Promise<StoredCredentials | null>;
|
|
21
14
|
export declare function writeCredentials(credentials: StoredCredentials): Promise<void>;
|
|
22
|
-
export declare function updateCredentials(updates: Partial<StoredCredentials>): Promise<void>;
|
|
23
15
|
export declare function deleteCredentials(): Promise<void>;
|
|
24
16
|
export declare function isTokenExpired(credentials: StoredCredentials): boolean;
|
|
25
17
|
export declare function getValidCredentials(refreshFn?: (refreshToken: string) => Promise<{
|
|
26
18
|
accessToken: string;
|
|
27
19
|
expiresAt: string;
|
|
28
20
|
}>): Promise<StoredCredentials | null>;
|
|
21
|
+
export interface ProjectContext {
|
|
22
|
+
id: string;
|
|
23
|
+
name: string;
|
|
24
|
+
tenantId: string;
|
|
25
|
+
apiKey?: string;
|
|
26
|
+
apiKeyId?: string;
|
|
27
|
+
}
|
|
28
|
+
export declare function getProjectContext(): Promise<ProjectContext | null>;
|
|
29
|
+
export declare function writeProjectContext(project: ProjectContext): Promise<void>;
|
|
30
|
+
export declare function deleteProjectContext(): Promise<void>;
|
|
29
31
|
//# sourceMappingURL=credentials.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../src/auth/credentials.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"credentials.d.ts","sourceRoot":"","sources":["../../src/auth/credentials.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE;QACJ,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAYD,wBAAsB,cAAc,IAAI,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAUxE;AAED,wBAAsB,gBAAgB,CACpC,WAAW,EAAE,iBAAiB,GAC7B,OAAO,CAAC,IAAI,CAAC,CAMf;AAED,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAQvD;AAED,wBAAgB,cAAc,CAAC,WAAW,EAAE,iBAAiB,GAAG,OAAO,CAItE;AAED,wBAAsB,mBAAmB,CACvC,SAAS,CAAC,EAAE,CACV,YAAY,EAAE,MAAM,KACjB,OAAO,CAAC;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,GACvD,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAoBnC;AAMD,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AA4CD,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAUxE;AAED,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,IAAI,CAAC,CAOf;AAED,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC,CAQ1D"}
|
package/dist/auth/credentials.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { promises as fs } from 'fs';
|
|
2
|
-
import { join } from 'path';
|
|
1
|
+
import { promises as fs, statSync } from 'fs';
|
|
2
|
+
import { join, dirname } from 'path';
|
|
3
3
|
import { homedir } from 'os';
|
|
4
4
|
export function getCredentialsDir() {
|
|
5
5
|
return join(homedir(), '.foir');
|
|
@@ -7,8 +7,7 @@ export function getCredentialsDir() {
|
|
|
7
7
|
export function getCredentialsPath() {
|
|
8
8
|
return join(getCredentialsDir(), 'credentials.json');
|
|
9
9
|
}
|
|
10
|
-
async function
|
|
11
|
-
const dir = getCredentialsDir();
|
|
10
|
+
async function ensureDir(dir) {
|
|
12
11
|
try {
|
|
13
12
|
await fs.mkdir(dir, { recursive: true, mode: 0o700 });
|
|
14
13
|
}
|
|
@@ -31,19 +30,12 @@ export async function getCredentials() {
|
|
|
31
30
|
}
|
|
32
31
|
}
|
|
33
32
|
export async function writeCredentials(credentials) {
|
|
34
|
-
await
|
|
33
|
+
await ensureDir(getCredentialsDir());
|
|
35
34
|
const path = getCredentialsPath();
|
|
36
35
|
await fs.writeFile(path, JSON.stringify(credentials, null, 2), {
|
|
37
36
|
mode: 0o600,
|
|
38
37
|
});
|
|
39
38
|
}
|
|
40
|
-
export async function updateCredentials(updates) {
|
|
41
|
-
const existing = await getCredentials();
|
|
42
|
-
if (!existing) {
|
|
43
|
-
throw new Error('No credentials found. Run `foir login` first.');
|
|
44
|
-
}
|
|
45
|
-
await writeCredentials({ ...existing, ...updates });
|
|
46
|
-
}
|
|
47
39
|
export async function deleteCredentials() {
|
|
48
40
|
try {
|
|
49
41
|
await fs.unlink(getCredentialsPath());
|
|
@@ -77,3 +69,71 @@ export async function getValidCredentials(refreshFn) {
|
|
|
77
69
|
}
|
|
78
70
|
return credentials;
|
|
79
71
|
}
|
|
72
|
+
const REPO_ROOT_MARKERS = [
|
|
73
|
+
'.git',
|
|
74
|
+
'foir.config.ts',
|
|
75
|
+
'.foirrc.ts',
|
|
76
|
+
'foir.config.js',
|
|
77
|
+
'.foirrc.js',
|
|
78
|
+
'foir.config.mjs',
|
|
79
|
+
'.foirrc.mjs',
|
|
80
|
+
];
|
|
81
|
+
/**
|
|
82
|
+
* Walk up from cwd looking for markers that indicate the repo root.
|
|
83
|
+
* Returns cwd as fallback if no marker is found.
|
|
84
|
+
*/
|
|
85
|
+
function findRepoRoot(from = process.cwd()) {
|
|
86
|
+
let dir = from;
|
|
87
|
+
while (true) {
|
|
88
|
+
for (const marker of REPO_ROOT_MARKERS) {
|
|
89
|
+
try {
|
|
90
|
+
statSync(join(dir, marker));
|
|
91
|
+
return dir;
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
// not found, continue
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
const parent = dirname(dir);
|
|
98
|
+
if (parent === dir) {
|
|
99
|
+
return from; // filesystem root reached, fallback to cwd
|
|
100
|
+
}
|
|
101
|
+
dir = parent;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
function getProjectContextDir() {
|
|
105
|
+
return join(findRepoRoot(), '.foir');
|
|
106
|
+
}
|
|
107
|
+
function getProjectContextPath() {
|
|
108
|
+
return join(getProjectContextDir(), 'project.json');
|
|
109
|
+
}
|
|
110
|
+
export async function getProjectContext() {
|
|
111
|
+
try {
|
|
112
|
+
const content = await fs.readFile(getProjectContextPath(), 'utf-8');
|
|
113
|
+
return JSON.parse(content);
|
|
114
|
+
}
|
|
115
|
+
catch (error) {
|
|
116
|
+
if (error.code === 'ENOENT') {
|
|
117
|
+
return null;
|
|
118
|
+
}
|
|
119
|
+
throw error;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
export async function writeProjectContext(project) {
|
|
123
|
+
const dir = getProjectContextDir();
|
|
124
|
+
await ensureDir(dir);
|
|
125
|
+
const filePath = getProjectContextPath();
|
|
126
|
+
await fs.writeFile(filePath, JSON.stringify(project, null, 2), {
|
|
127
|
+
mode: 0o600,
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
export async function deleteProjectContext() {
|
|
131
|
+
try {
|
|
132
|
+
await fs.unlink(getProjectContextPath());
|
|
133
|
+
}
|
|
134
|
+
catch (error) {
|
|
135
|
+
if (error.code !== 'ENOENT') {
|
|
136
|
+
throw error;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
package/dist/cli.js
CHANGED
|
@@ -27,6 +27,7 @@ import { registerApiKeysCommands } from './commands/api-keys.js';
|
|
|
27
27
|
import { registerAuthProvidersCommands } from './commands/auth-providers.js';
|
|
28
28
|
import { registerExtensionsCommands } from './commands/extensions.js';
|
|
29
29
|
import { registerOperationsCommands } from './commands/operations.js';
|
|
30
|
+
import { registerHooksCommands } from './commands/hooks.js';
|
|
30
31
|
import { registerSchedulesCommands } from './commands/schedules.js';
|
|
31
32
|
import { registerMediaCommands } from './commands/media.js';
|
|
32
33
|
import { registerContextCommands } from './commands/context.js';
|
|
@@ -35,6 +36,8 @@ import { registerLocalesCommands } from './commands/locales.js';
|
|
|
35
36
|
import { registerFilesCommands } from './commands/files.js';
|
|
36
37
|
import { registerNotesCommands } from './commands/notes.js';
|
|
37
38
|
import { registerVariantCatalogCommands } from './commands/variant-catalog.js';
|
|
39
|
+
import { registerAuthConfigCommands } from './commands/auth-config.js';
|
|
40
|
+
import { registerEmbeddingsCommands } from './commands/embeddings.js';
|
|
38
41
|
import { registerPullCommand } from './commands/pull.js';
|
|
39
42
|
import { registerCreateExtensionCommand } from './commands/create-extension.js';
|
|
40
43
|
const program = new Command();
|
|
@@ -72,6 +75,7 @@ registerApiKeysCommands(program, getGlobalOpts);
|
|
|
72
75
|
registerAuthProvidersCommands(program, getGlobalOpts);
|
|
73
76
|
registerExtensionsCommands(program, getGlobalOpts);
|
|
74
77
|
registerOperationsCommands(program, getGlobalOpts);
|
|
78
|
+
registerHooksCommands(program, getGlobalOpts);
|
|
75
79
|
registerSchedulesCommands(program, getGlobalOpts);
|
|
76
80
|
registerMediaCommands(program, getGlobalOpts);
|
|
77
81
|
registerContextCommands(program, getGlobalOpts);
|
|
@@ -80,6 +84,8 @@ registerLocalesCommands(program, getGlobalOpts);
|
|
|
80
84
|
registerFilesCommands(program, getGlobalOpts);
|
|
81
85
|
registerNotesCommands(program, getGlobalOpts);
|
|
82
86
|
registerVariantCatalogCommands(program, getGlobalOpts);
|
|
87
|
+
registerAuthConfigCommands(program, getGlobalOpts);
|
|
88
|
+
registerEmbeddingsCommands(program, getGlobalOpts);
|
|
83
89
|
// Codegen
|
|
84
90
|
registerPullCommand(program, getGlobalOpts);
|
|
85
91
|
// Scaffolding
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch-customer-profile-schema.d.ts","sourceRoot":"","sources":["../../src/codegen/fetch-customer-profile-schema.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE5D,MAAM,WAAW,4BAA4B;IAC3C,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;CACjB;
|
|
1
|
+
{"version":3,"file":"fetch-customer-profile-schema.d.ts","sourceRoot":"","sources":["../../src/codegen/fetch-customer-profile-schema.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE5D,MAAM,WAAW,4BAA4B;IAC3C,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,0BAA0B,CAC9C,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,4BAA4B,GAAG,IAAI,CAAC,CAiB9C"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Fetches the customer profile schema from the platform GraphQL API for codegen.
|
|
3
3
|
*/
|
|
4
|
-
import {
|
|
4
|
+
import { GetCustomerProfileSchemaDocument } from '../graphql/generated.js';
|
|
5
5
|
export async function fetchCustomerProfileSchema(client) {
|
|
6
|
-
const data = await client.request(
|
|
6
|
+
const data = await client.request(GetCustomerProfileSchemaDocument);
|
|
7
7
|
if (!data.customerProfileSchema)
|
|
8
8
|
return null;
|
|
9
9
|
return {
|
|
@@ -13,8 +13,8 @@ export async function fetchCustomerProfileSchema(client) {
|
|
|
13
13
|
key: f.key,
|
|
14
14
|
type: f.type,
|
|
15
15
|
label: f.label,
|
|
16
|
-
required: f.required,
|
|
17
|
-
helpText: f.helpText,
|
|
16
|
+
required: f.required ?? undefined,
|
|
17
|
+
helpText: f.helpText ?? undefined,
|
|
18
18
|
options: f.config,
|
|
19
19
|
})),
|
|
20
20
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch-models.d.ts","sourceRoot":"","sources":["../../src/codegen/fetch-models.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE5D,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,cAAc,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,EAAE;QACR,OAAO,EAAE,OAAO,CAAC;QACjB,iBAAiB,EAAE,OAAO,CAAC;KAC5B,CAAC;IACF,UAAU,CAAC,EAAE;QACX,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,EAAE,KAAK,CAAC;YAAE,SAAS,EAAE,MAAM,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACvD,CAAC;CACH;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAC5B,MAAM,EAAE,kBAAkB,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;
|
|
1
|
+
{"version":3,"file":"fetch-models.d.ts","sourceRoot":"","sources":["../../src/codegen/fetch-models.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAE5D,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,cAAc,EAAE,OAAO,CAAC;IACxB,OAAO,CAAC,EAAE;QACR,OAAO,EAAE,OAAO,CAAC;QACjB,iBAAiB,EAAE,OAAO,CAAC;KAC5B,CAAC;IACF,UAAU,CAAC,EAAE;QACX,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,EAAE,KAAK,CAAC;YAAE,SAAS,EAAE,MAAM,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACvD,CAAC;CACH;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAC5B,MAAM,EAAE,kBAAkB,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAyBD;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC3B,iBAAiB,CAyCnB;AAED,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC,YAAY,EAAE,CAAC,CAiBzB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,YAAY,EAAE,EACtB,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,aAAa,CAAC,EAAE,OAAO,CAAA;CAAE,GACpD,YAAY,EAAE,CAahB"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Fetches models from the platform GraphQL API and transforms them for codegen.
|
|
3
3
|
*/
|
|
4
|
-
import {
|
|
4
|
+
import { ModelsForCodegenDocument } from '../graphql/generated.js';
|
|
5
5
|
function normalizeConfig(raw) {
|
|
6
6
|
return {
|
|
7
7
|
records: Boolean(raw.records ?? true),
|
|
@@ -66,18 +66,18 @@ export function normalizeField(raw) {
|
|
|
66
66
|
};
|
|
67
67
|
}
|
|
68
68
|
export async function fetchModelsForCodegen(client) {
|
|
69
|
-
const data = await client.request(
|
|
69
|
+
const data = await client.request(ModelsForCodegenDocument, {
|
|
70
70
|
limit: 500,
|
|
71
71
|
});
|
|
72
72
|
return data.models.items.map((item) => ({
|
|
73
73
|
key: item.key,
|
|
74
74
|
name: item.name,
|
|
75
|
-
pluralName: item.pluralName,
|
|
76
|
-
description: item.description,
|
|
77
|
-
category: item.category,
|
|
75
|
+
pluralName: item.pluralName ?? undefined,
|
|
76
|
+
description: item.description ?? undefined,
|
|
77
|
+
category: item.category ?? undefined,
|
|
78
78
|
fields: (item.fields ?? []).map((f) => normalizeField(f)),
|
|
79
|
-
config: normalizeConfig(item.config ?? {}),
|
|
80
|
-
hooks: item.hooks,
|
|
79
|
+
config: normalizeConfig((item.config ?? {})),
|
|
80
|
+
hooks: (item.hooks ?? undefined),
|
|
81
81
|
}));
|
|
82
82
|
}
|
|
83
83
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"field-mapping.d.ts","sourceRoot":"","sources":["../../src/codegen/field-mapping.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,qBAAqB,aAoBhC,CAAC;AAEH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAoD1D,CAAC;AAEF,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,wBAAgB,YAAY,CAC1B,KAAK,EAAE,iBAAiB,EACxB,IAAI,GAAE,QAAQ,GAAG,OAAkB,GAClC,MAAM,CAqCR;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,iBAAiB,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"field-mapping.d.ts","sourceRoot":"","sources":["../../src/codegen/field-mapping.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,qBAAqB,aAoBhC,CAAC;AAEH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAoD1D,CAAC;AAEF,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED,wBAAgB,YAAY,CAC1B,KAAK,EAAE,iBAAiB,EACxB,IAAI,GAAE,QAAQ,GAAG,OAAkB,GAClC,MAAM,CAqCR;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,iBAAiB,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC,CAW3E;AAED,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,iBAAiB,EAAE,GAC1B,GAAG,CAAC,MAAM,CAAC,CAcb;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAK/C;AAED,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAIhD;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAMpD;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAKrD;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,CA2EjE"}
|
|
@@ -205,8 +205,7 @@ export function generateFieldDef(field) {
|
|
|
205
205
|
.join(', ');
|
|
206
206
|
parts.push(`options: [${optionsStr}]`);
|
|
207
207
|
}
|
|
208
|
-
if (field.type === 'reference' &&
|
|
209
|
-
field.options?.referenceTypes) {
|
|
208
|
+
if (field.type === 'reference' && field.options?.referenceTypes) {
|
|
210
209
|
const refTypes = field.options.referenceTypes;
|
|
211
210
|
parts.push(`referenceTypes: [${refTypes.map((t) => `'${t}'`).join(', ')}]`);
|
|
212
211
|
if (field.options.multiple)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"static-documents.d.ts","sourceRoot":"","sources":["../../../src/codegen/generators/static-documents.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"static-documents.d.ts","sourceRoot":"","sources":["../../../src/codegen/generators/static-documents.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAquB1D,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,QAAQ,CAAC,YAAY,CAAC,GAC9B,kBAAkB,EAAE,CAkCtB"}
|
|
@@ -686,42 +686,35 @@ mutation UpdateSharePermission($shareId: ID!, $permission: SharePermission!) {
|
|
|
686
686
|
}
|
|
687
687
|
`;
|
|
688
688
|
}
|
|
689
|
-
function
|
|
690
|
-
return `#
|
|
689
|
+
function embeddingsDocument() {
|
|
690
|
+
return `# Vector embedding operations (search, write, delete)
|
|
691
691
|
${HEADER}
|
|
692
692
|
|
|
693
|
-
query
|
|
694
|
-
|
|
693
|
+
query SearchEmbeddings($input: SearchEmbeddingsInput!) {
|
|
694
|
+
searchEmbeddings(input: $input) {
|
|
695
695
|
recordId
|
|
696
|
-
source
|
|
697
696
|
modelKey
|
|
698
697
|
naturalKey
|
|
698
|
+
key
|
|
699
699
|
similarity
|
|
700
|
-
|
|
700
|
+
metadata
|
|
701
701
|
}
|
|
702
702
|
}
|
|
703
703
|
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
704
|
+
mutation WriteEmbeddings($input: WriteEmbeddingsInput!) {
|
|
705
|
+
writeEmbeddings(input: $input) {
|
|
706
|
+
written
|
|
707
|
+
errors {
|
|
708
|
+
recordId
|
|
709
|
+
key
|
|
710
|
+
message
|
|
711
|
+
}
|
|
711
712
|
}
|
|
712
713
|
}
|
|
713
714
|
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
mutation GenerateEmbedding($recordId: ID!, $modelKey: String!, $source: EmbeddingSource!) {
|
|
719
|
-
generateEmbedding(recordId: $recordId, modelKey: $modelKey, source: $source) {
|
|
720
|
-
success
|
|
721
|
-
embeddingId
|
|
722
|
-
recordId
|
|
723
|
-
tokenCount
|
|
724
|
-
dimensions
|
|
715
|
+
mutation DeleteEmbeddings($input: DeleteEmbeddingsInput!) {
|
|
716
|
+
deleteEmbeddings(input: $input) {
|
|
717
|
+
deleted
|
|
725
718
|
}
|
|
726
719
|
}
|
|
727
720
|
`;
|
|
@@ -745,21 +738,30 @@ export function generateStaticDocuments(domains) {
|
|
|
745
738
|
if (domains.auth)
|
|
746
739
|
files.push({ filename: 'auth.graphql', content: authDocument() });
|
|
747
740
|
if (domains.authProviders)
|
|
748
|
-
files.push({
|
|
741
|
+
files.push({
|
|
742
|
+
filename: 'auth-providers.graphql',
|
|
743
|
+
content: authProvidersDocument(),
|
|
744
|
+
});
|
|
749
745
|
if (domains.files)
|
|
750
746
|
files.push({ filename: 'files.graphql', content: filesDocument() });
|
|
751
747
|
if (domains.sync)
|
|
752
748
|
files.push({ filename: 'sync.graphql', content: syncDocument() });
|
|
753
749
|
if (domains.notifications)
|
|
754
|
-
files.push({
|
|
750
|
+
files.push({
|
|
751
|
+
filename: 'notifications.graphql',
|
|
752
|
+
content: notificationsDocument(),
|
|
753
|
+
});
|
|
755
754
|
if (domains.operations)
|
|
756
|
-
files.push({
|
|
755
|
+
files.push({
|
|
756
|
+
filename: 'operations.graphql',
|
|
757
|
+
content: operationsDocument(),
|
|
758
|
+
});
|
|
757
759
|
if (domains.schedules)
|
|
758
760
|
files.push({ filename: 'schedules.graphql', content: schedulesDocument() });
|
|
759
761
|
if (domains.sharing)
|
|
760
762
|
files.push({ filename: 'sharing.graphql', content: sharingDocument() });
|
|
761
|
-
if (domains.
|
|
762
|
-
files.push({ filename: '
|
|
763
|
+
if (domains.embeddings)
|
|
764
|
+
files.push({ filename: 'embeddings.graphql', content: embeddingsDocument() });
|
|
763
765
|
if (domains.analytics)
|
|
764
766
|
files.push({ filename: 'analytics.graphql', content: analyticsDocument() });
|
|
765
767
|
return files;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"typed-operations.d.ts","sourceRoot":"","sources":["../../../src/codegen/generators/typed-operations.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGvD,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,YAAY,EACnB,YAAY,EAAE,MAAM,GACnB,MAAM,CA4QR;AAED;;GAEG;AACH,wBAAgB,mBAAmB,
|
|
1
|
+
{"version":3,"file":"typed-operations.d.ts","sourceRoot":"","sources":["../../../src/codegen/generators/typed-operations.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGvD,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,YAAY,EACnB,YAAY,EAAE,MAAM,GACnB,MAAM,CA4QR;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAG5E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-keys.d.ts","sourceRoot":"","sources":["../../src/commands/api-keys.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAYtD,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,MAAM,aAAa,GAC9B,IAAI,
|
|
1
|
+
{"version":3,"file":"api-keys.d.ts","sourceRoot":"","sources":["../../src/commands/api-keys.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAYtD,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,MAAM,aAAa,GAC9B,IAAI,CA6JN"}
|
|
@@ -3,7 +3,7 @@ import { withErrorHandler } from '../lib/errors.js';
|
|
|
3
3
|
import { createClient } from '../lib/client.js';
|
|
4
4
|
import { formatOutput, formatList, timeAgo, success } from '../lib/output.js';
|
|
5
5
|
import { confirmAction } from '../lib/input.js';
|
|
6
|
-
import {
|
|
6
|
+
import { ListApiKeysDocument, CreateApiKeyDocument, RotateApiKeyDocument, RevokeApiKeyDocument, } from '../graphql/generated.js';
|
|
7
7
|
export function registerApiKeysCommands(program, globalOpts) {
|
|
8
8
|
const apiKeys = program.command('api-keys').description('Manage API keys');
|
|
9
9
|
// list
|
|
@@ -16,7 +16,7 @@ export function registerApiKeysCommands(program, globalOpts) {
|
|
|
16
16
|
.action(withErrorHandler(globalOpts, async (cmdOpts) => {
|
|
17
17
|
const opts = globalOpts();
|
|
18
18
|
const client = await createClient(opts);
|
|
19
|
-
const data = await client.request(
|
|
19
|
+
const data = await client.request(ListApiKeysDocument, {
|
|
20
20
|
includeInactive: !!cmdOpts.includeInactive,
|
|
21
21
|
search: cmdOpts.search,
|
|
22
22
|
limit: parseInt(String(cmdOpts.limit ?? '50'), 10),
|
|
@@ -65,7 +65,7 @@ export function registerApiKeysCommands(program, globalOpts) {
|
|
|
65
65
|
};
|
|
66
66
|
if (cmdOpts.projectId)
|
|
67
67
|
input.projectId = cmdOpts.projectId;
|
|
68
|
-
const data = await client.request(
|
|
68
|
+
const data = await client.request(CreateApiKeyDocument, { input });
|
|
69
69
|
if (opts.json || opts.jsonl) {
|
|
70
70
|
formatOutput(data.createApiKey, opts);
|
|
71
71
|
}
|
|
@@ -92,7 +92,7 @@ export function registerApiKeysCommands(program, globalOpts) {
|
|
|
92
92
|
return;
|
|
93
93
|
}
|
|
94
94
|
const client = await createClient(opts);
|
|
95
|
-
const data = await client.request(
|
|
95
|
+
const data = await client.request(RotateApiKeyDocument, { id });
|
|
96
96
|
if (opts.json || opts.jsonl) {
|
|
97
97
|
formatOutput(data.rotateApiKey, opts);
|
|
98
98
|
}
|
|
@@ -116,7 +116,7 @@ export function registerApiKeysCommands(program, globalOpts) {
|
|
|
116
116
|
return;
|
|
117
117
|
}
|
|
118
118
|
const client = await createClient(opts);
|
|
119
|
-
const data = await client.request(
|
|
119
|
+
const data = await client.request(RevokeApiKeyDocument, { id });
|
|
120
120
|
if (opts.json || opts.jsonl) {
|
|
121
121
|
formatOutput(data.revokeApiKey, opts);
|
|
122
122
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-config.d.ts","sourceRoot":"","sources":["../../src/commands/auth-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAStD,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,MAAM,aAAa,GAC9B,IAAI,CA0CN"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { withErrorHandler } from '../lib/errors.js';
|
|
2
|
+
import { createClient } from '../lib/client.js';
|
|
3
|
+
import { formatOutput } from '../lib/output.js';
|
|
4
|
+
import { GetCustomerAuthConfigDocument, VerifyCustomerTokenDocument, } from '../graphql/generated.js';
|
|
5
|
+
export function registerAuthConfigCommands(program, globalOpts) {
|
|
6
|
+
const auth = program
|
|
7
|
+
.command('auth')
|
|
8
|
+
.description('Customer auth configuration');
|
|
9
|
+
// config
|
|
10
|
+
auth
|
|
11
|
+
.command('config')
|
|
12
|
+
.description('Get customer auth signing configuration')
|
|
13
|
+
.option('--show-key', 'Show the full signing key (masked by default)')
|
|
14
|
+
.action(withErrorHandler(globalOpts, async (cmdOpts) => {
|
|
15
|
+
const opts = globalOpts();
|
|
16
|
+
const client = await createClient(opts);
|
|
17
|
+
const data = await client.request(GetCustomerAuthConfigDocument);
|
|
18
|
+
const config = data.customerAuthConfig;
|
|
19
|
+
// Mask the signing key unless --show-key is passed
|
|
20
|
+
if (!cmdOpts.showKey && config.signingKey) {
|
|
21
|
+
const key = config.signingKey;
|
|
22
|
+
config.signingKey =
|
|
23
|
+
key.slice(0, 4) + '…' + key.slice(-4);
|
|
24
|
+
}
|
|
25
|
+
formatOutput(config, opts);
|
|
26
|
+
}));
|
|
27
|
+
// verify-token
|
|
28
|
+
auth
|
|
29
|
+
.command('verify-token <token>')
|
|
30
|
+
.description('Verify a customer JWT token')
|
|
31
|
+
.action(withErrorHandler(globalOpts, async (token) => {
|
|
32
|
+
const opts = globalOpts();
|
|
33
|
+
const client = await createClient(opts);
|
|
34
|
+
const data = await client.request(VerifyCustomerTokenDocument, { token });
|
|
35
|
+
formatOutput(data.verifyCustomerToken, opts);
|
|
36
|
+
}));
|
|
37
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth-providers.d.ts","sourceRoot":"","sources":["../../src/commands/auth-providers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAsBtD,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,MAAM,aAAa,GAC9B,IAAI,
|
|
1
|
+
{"version":3,"file":"auth-providers.d.ts","sourceRoot":"","sources":["../../src/commands/auth-providers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAsBtD,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,MAAM,aAAa,GAC9B,IAAI,CAuPN"}
|
|
@@ -3,7 +3,7 @@ import { withErrorHandler } from '../lib/errors.js';
|
|
|
3
3
|
import { createClient } from '../lib/client.js';
|
|
4
4
|
import { formatOutput, formatList, success } from '../lib/output.js';
|
|
5
5
|
import { parseInputData, confirmAction } from '../lib/input.js';
|
|
6
|
-
import {
|
|
6
|
+
import { ListAuthProvidersDocument, GetAuthProviderDocument, CreateAuthProviderDocument, UpdateAuthProviderDocument, DeleteAuthProviderDocument, } from '../graphql/generated.js';
|
|
7
7
|
const VALID_TYPES = [
|
|
8
8
|
'OAUTH2',
|
|
9
9
|
'TOKEN_SSO',
|
|
@@ -24,7 +24,7 @@ export function registerAuthProvidersCommands(program, globalOpts) {
|
|
|
24
24
|
.action(withErrorHandler(globalOpts, async (cmdOpts) => {
|
|
25
25
|
const opts = globalOpts();
|
|
26
26
|
const client = await createClient(opts);
|
|
27
|
-
const data = await client.request(
|
|
27
|
+
const data = await client.request(ListAuthProvidersDocument, {
|
|
28
28
|
enabledOnly: !!cmdOpts.enabledOnly,
|
|
29
29
|
});
|
|
30
30
|
formatList(data.customerAuthProviders, opts, {
|
|
@@ -56,7 +56,7 @@ export function registerAuthProvidersCommands(program, globalOpts) {
|
|
|
56
56
|
.action(withErrorHandler(globalOpts, async (id) => {
|
|
57
57
|
const opts = globalOpts();
|
|
58
58
|
const client = await createClient(opts);
|
|
59
|
-
const data = await client.request(
|
|
59
|
+
const data = await client.request(GetAuthProviderDocument, { id });
|
|
60
60
|
if (!data.customerAuthProvider) {
|
|
61
61
|
throw new Error(`Auth provider not found: ${id}`);
|
|
62
62
|
}
|
|
@@ -121,7 +121,7 @@ export function registerAuthProvidersCommands(program, globalOpts) {
|
|
|
121
121
|
if (cmdOpts.captureMetadata !== undefined)
|
|
122
122
|
input.captureMetadata = true;
|
|
123
123
|
const client = await createClient(opts);
|
|
124
|
-
const data = await client.request(
|
|
124
|
+
const data = await client.request(CreateAuthProviderDocument, { input });
|
|
125
125
|
if (opts.json || opts.jsonl) {
|
|
126
126
|
formatOutput(data.createCustomerAuthProvider, opts);
|
|
127
127
|
}
|
|
@@ -170,7 +170,7 @@ export function registerAuthProvidersCommands(program, globalOpts) {
|
|
|
170
170
|
throw new Error('No update fields provided.');
|
|
171
171
|
}
|
|
172
172
|
const client = await createClient(opts);
|
|
173
|
-
const data = await client.request(
|
|
173
|
+
const data = await client.request(UpdateAuthProviderDocument, { id, input });
|
|
174
174
|
if (opts.json || opts.jsonl) {
|
|
175
175
|
formatOutput(data.updateCustomerAuthProvider, opts);
|
|
176
176
|
}
|
|
@@ -191,7 +191,7 @@ export function registerAuthProvidersCommands(program, globalOpts) {
|
|
|
191
191
|
return;
|
|
192
192
|
}
|
|
193
193
|
const client = await createClient(opts);
|
|
194
|
-
const data = await client.request(
|
|
194
|
+
const data = await client.request(DeleteAuthProviderDocument, { id });
|
|
195
195
|
if (opts.json || opts.jsonl) {
|
|
196
196
|
formatOutput({ deleted: data.deleteCustomerAuthProvider, id }, opts);
|
|
197
197
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/commands/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/commands/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMzC,OAAO,EAGL,KAAK,aAAa,EACnB,MAAM,kBAAkB,CAAC;AA8B1B,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,MAAM,aAAa,GAC9B,IAAI,CAkIN"}
|
package/dist/commands/context.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { getCredentials,
|
|
1
|
+
import { getCredentials, getProjectContext, writeProjectContext, } from '../auth/credentials.js';
|
|
2
2
|
import { getApiUrl, getGraphQLEndpoint, } from '../lib/config.js';
|
|
3
3
|
import { withErrorHandler } from '../lib/errors.js';
|
|
4
4
|
import { formatList, success } from '../lib/output.js';
|
|
@@ -34,9 +34,10 @@ export function registerContextCommands(program, globalOpts) {
|
|
|
34
34
|
throw new Error('Not logged in. Run `foir login` first.');
|
|
35
35
|
const apiUrl = getApiUrl(opts);
|
|
36
36
|
const data = await gqlRequest(apiUrl, credentials.accessToken, `query { sessionContext { projectId availableProjects { id name tenantId } } }`);
|
|
37
|
+
const projectContext = await getProjectContext();
|
|
37
38
|
const projects = data.sessionContext.availableProjects.map((p) => ({
|
|
38
39
|
...p,
|
|
39
|
-
current: p.id ===
|
|
40
|
+
current: p.id === projectContext?.id ? '*' : '',
|
|
40
41
|
}));
|
|
41
42
|
formatList(projects, opts, {
|
|
42
43
|
columns: [
|
|
@@ -61,12 +62,10 @@ export function registerContextCommands(program, globalOpts) {
|
|
|
61
62
|
const project = data.sessionContext.availableProjects.find((p) => p.id === projectId);
|
|
62
63
|
if (!project)
|
|
63
64
|
throw new Error(`Project "${projectId}" not found.`);
|
|
64
|
-
await
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
tenantId: project.tenantId,
|
|
69
|
-
},
|
|
65
|
+
await writeProjectContext({
|
|
66
|
+
id: project.id,
|
|
67
|
+
name: project.name,
|
|
68
|
+
tenantId: project.tenantId,
|
|
70
69
|
});
|
|
71
70
|
success(`Switched to project: ${project.name}`);
|
|
72
71
|
console.log('Run `foir select-project` to provision a new API key for this project.');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"customer-profiles.d.ts","sourceRoot":"","sources":["../../src/commands/customer-profiles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAYtD,wBAAgB,gCAAgC,CAC9C,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,MAAM,aAAa,GAC9B,IAAI,
|
|
1
|
+
{"version":3,"file":"customer-profiles.d.ts","sourceRoot":"","sources":["../../src/commands/customer-profiles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAYtD,wBAAgB,gCAAgC,CAC9C,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,MAAM,aAAa,GAC9B,IAAI,CA0HN"}
|
|
@@ -2,7 +2,7 @@ import { withErrorHandler } from '../lib/errors.js';
|
|
|
2
2
|
import { createClient } from '../lib/client.js';
|
|
3
3
|
import { formatOutput, success } from '../lib/output.js';
|
|
4
4
|
import { parseInputData } from '../lib/input.js';
|
|
5
|
-
import {
|
|
5
|
+
import { GetCustomerProfileSchemaDocument, UpdateCustomerProfileSchemaDocument, GetCustomerProfileDocument, SetCustomerProfileDocument, } from '../graphql/generated.js';
|
|
6
6
|
export function registerCustomerProfilesCommands(program, globalOpts) {
|
|
7
7
|
const cp = program
|
|
8
8
|
.command('customer-profiles')
|
|
@@ -19,7 +19,7 @@ export function registerCustomerProfilesCommands(program, globalOpts) {
|
|
|
19
19
|
.action(withErrorHandler(globalOpts, async () => {
|
|
20
20
|
const opts = globalOpts();
|
|
21
21
|
const client = await createClient(opts);
|
|
22
|
-
const data = await client.request(
|
|
22
|
+
const data = await client.request(GetCustomerProfileSchemaDocument);
|
|
23
23
|
if (!data.customerProfileSchema) {
|
|
24
24
|
if (opts.json || opts.jsonl) {
|
|
25
25
|
formatOutput(null, opts);
|
|
@@ -49,7 +49,7 @@ export function registerCustomerProfilesCommands(program, globalOpts) {
|
|
|
49
49
|
fields: inputData.fields,
|
|
50
50
|
publicFields: inputData.publicFields ?? undefined,
|
|
51
51
|
};
|
|
52
|
-
const data = await client.request(
|
|
52
|
+
const data = await client.request(UpdateCustomerProfileSchemaDocument, variables);
|
|
53
53
|
formatOutput(data.updateCustomerProfileSchema, opts);
|
|
54
54
|
if (!(opts.json || opts.jsonl || opts.quiet)) {
|
|
55
55
|
const version = data.updateCustomerProfileSchema.version;
|
|
@@ -67,7 +67,7 @@ export function registerCustomerProfilesCommands(program, globalOpts) {
|
|
|
67
67
|
.action(withErrorHandler(globalOpts, async (customerId) => {
|
|
68
68
|
const opts = globalOpts();
|
|
69
69
|
const client = await createClient(opts);
|
|
70
|
-
const data = await client.request(
|
|
70
|
+
const data = await client.request(GetCustomerProfileDocument, { customerId });
|
|
71
71
|
if (!data.customerProfile) {
|
|
72
72
|
throw new Error(`No profile found for customer "${customerId}".`);
|
|
73
73
|
}
|
|
@@ -85,7 +85,7 @@ export function registerCustomerProfilesCommands(program, globalOpts) {
|
|
|
85
85
|
const inputData = await parseInputData(cmdOpts);
|
|
86
86
|
// Accept either { data: {...} } or the raw data object
|
|
87
87
|
const profileData = inputData.data ?? inputData;
|
|
88
|
-
const data = await client.request(
|
|
88
|
+
const data = await client.request(SetCustomerProfileDocument, {
|
|
89
89
|
customerId,
|
|
90
90
|
data: profileData,
|
|
91
91
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"customers.d.ts","sourceRoot":"","sources":["../../src/commands/customers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAatD,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,MAAM,aAAa,GAC9B,IAAI,
|
|
1
|
+
{"version":3,"file":"customers.d.ts","sourceRoot":"","sources":["../../src/commands/customers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAatD,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,MAAM,aAAa,GAC9B,IAAI,CA2IN"}
|