@payloadcms/figma 0.0.1-alpha.49 → 0.0.1-alpha.50
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/api/control-plane.d.ts +23 -14
- package/dist/api/control-plane.js +23 -22
- package/dist/api/figma-api.js +3 -5
- package/dist/auth/project-token.js +2 -2
- package/dist/auth/token-store.d.ts +29 -2
- package/dist/auth/token-store.js +38 -1
- package/dist/auth/types.d.ts +10 -0
- package/dist/cli.js +18 -9
- package/dist/commands/debug.js +31 -26
- package/dist/commands/deploy.d.ts +3 -1
- package/dist/commands/deploy.js +27 -15
- package/dist/commands/env.d.ts +13 -0
- package/dist/commands/env.js +88 -0
- package/dist/commands/init.d.ts +2 -0
- package/dist/commands/init.js +49 -52
- package/dist/commands/list-tokens.js +2 -2
- package/dist/commands/login.js +3 -3
- package/dist/commands/logout.js +2 -2
- package/dist/config/oauth.d.ts +1 -1
- package/dist/config/oauth.js +3 -4
- package/dist/constants.d.ts +11 -7
- package/dist/constants.js +14 -9
- package/dist/db-content-api/index.js +6 -11
- package/dist/oauth/strategy/index.js +2 -2
- package/dist/oauth/utilities/refreshTokens.js +2 -2
- package/dist/plugin/build-config.d.ts +0 -10
- package/dist/plugin/build-config.js +57 -22
- package/dist/templates/.env.example +4 -10
- package/dist/types.d.ts +2 -0
- package/dist/utils/cache-bootstrap.d.ts +8 -0
- package/dist/utils/cache-bootstrap.js +18 -0
- package/dist/utils/messages.js +15 -2
- package/dist/utils/resolve-environment.d.ts +14 -0
- package/dist/utils/resolve-environment.js +28 -0
- package/package.json +3 -2
- package/dist/api/control-plane.d.ts.map +0 -1
- package/dist/api/control-plane.js.map +0 -1
- package/dist/api/figma-api.d.ts.map +0 -1
- package/dist/api/figma-api.js.map +0 -1
- package/dist/auth/browser.d.ts.map +0 -1
- package/dist/auth/browser.js.map +0 -1
- package/dist/auth/callback-server.d.ts.map +0 -1
- package/dist/auth/callback-server.js.map +0 -1
- package/dist/auth/crypto-utils.d.ts.map +0 -1
- package/dist/auth/crypto-utils.js.map +0 -1
- package/dist/auth/jwt-validator.d.ts.map +0 -1
- package/dist/auth/jwt-validator.js.map +0 -1
- package/dist/auth/oauth-flow.d.ts.map +0 -1
- package/dist/auth/oauth-flow.js.map +0 -1
- package/dist/auth/pkce.d.ts.map +0 -1
- package/dist/auth/pkce.js.map +0 -1
- package/dist/auth/project-token.d.ts.map +0 -1
- package/dist/auth/project-token.js.map +0 -1
- package/dist/auth/refresh.d.ts.map +0 -1
- package/dist/auth/refresh.js.map +0 -1
- package/dist/auth/token-store.d.ts.map +0 -1
- package/dist/auth/token-store.js.map +0 -1
- package/dist/auth/types.d.ts.map +0 -1
- package/dist/auth/types.js.map +0 -1
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js.map +0 -1
- package/dist/commands/build-lambda-zip.d.ts.map +0 -1
- package/dist/commands/build-lambda-zip.js.map +0 -1
- package/dist/commands/debug.d.ts.map +0 -1
- package/dist/commands/debug.js.map +0 -1
- package/dist/commands/deploy.d.ts.map +0 -1
- package/dist/commands/deploy.js.map +0 -1
- package/dist/commands/init.d.ts.map +0 -1
- package/dist/commands/init.js.map +0 -1
- package/dist/commands/list-tokens.d.ts.map +0 -1
- package/dist/commands/list-tokens.js.map +0 -1
- package/dist/commands/login.d.ts.map +0 -1
- package/dist/commands/login.js.map +0 -1
- package/dist/commands/logout.d.ts.map +0 -1
- package/dist/commands/logout.js.map +0 -1
- package/dist/config/oauth.d.ts.map +0 -1
- package/dist/config/oauth.js.map +0 -1
- package/dist/constants.d.ts.map +0 -1
- package/dist/constants.js.map +0 -1
- package/dist/db-content-api/generated/content-api-types.d.ts.map +0 -1
- package/dist/db-content-api/generated/content-api-types.js.map +0 -1
- package/dist/db-content-api/index.d.ts.map +0 -1
- package/dist/db-content-api/index.js.map +0 -1
- package/dist/db-content-api/temp-utilities/slug.d.ts.map +0 -1
- package/dist/db-content-api/temp-utilities/slug.js.map +0 -1
- package/dist/db-content-api/temp-utilities/sorting.d.ts.map +0 -1
- package/dist/db-content-api/temp-utilities/sorting.js.map +0 -1
- package/dist/db-content-api/temp-utilities/types.d.ts.map +0 -1
- package/dist/db-content-api/temp-utilities/types.js.map +0 -1
- package/dist/db-content-api/temp-utilities/unwrapDocument.d.ts.map +0 -1
- package/dist/db-content-api/temp-utilities/unwrapDocument.js.map +0 -1
- package/dist/db-content-api/utilities/auth.d.ts.map +0 -1
- package/dist/db-content-api/utilities/auth.js.map +0 -1
- package/dist/db-content-api/utilities/data/applyDefaults.d.ts.map +0 -1
- package/dist/db-content-api/utilities/data/applyDefaults.js.map +0 -1
- package/dist/db-content-api/utilities/data/castFieldValue.d.ts.map +0 -1
- package/dist/db-content-api/utilities/data/castFieldValue.js.map +0 -1
- package/dist/db-content-api/utilities/data/index.d.ts.map +0 -1
- package/dist/db-content-api/utilities/data/index.js.map +0 -1
- package/dist/db-content-api/utilities/data/removeVirtualFields.d.ts.map +0 -1
- package/dist/db-content-api/utilities/data/removeVirtualFields.js.map +0 -1
- package/dist/db-content-api/utilities/data/stripFields.d.ts.map +0 -1
- package/dist/db-content-api/utilities/data/stripFields.js.map +0 -1
- package/dist/db-content-api/utilities/data/transformPublishedLocale.d.ts.map +0 -1
- package/dist/db-content-api/utilities/data/transformPublishedLocale.js.map +0 -1
- package/dist/db-content-api/utilities/joins.d.ts.map +0 -1
- package/dist/db-content-api/utilities/joins.js.map +0 -1
- package/dist/db-content-api/utilities/locale/index.d.ts.map +0 -1
- package/dist/db-content-api/utilities/locale/index.js.map +0 -1
- package/dist/db-content-api/utilities/meta/buildLocalizedPaths.d.ts.map +0 -1
- package/dist/db-content-api/utilities/meta/buildLocalizedPaths.js.map +0 -1
- package/dist/db-content-api/utilities/meta/buildMeta.d.ts.map +0 -1
- package/dist/db-content-api/utilities/meta/buildMeta.js.map +0 -1
- package/dist/db-content-api/utilities/meta/buildPathTypes.d.ts.map +0 -1
- package/dist/db-content-api/utilities/meta/buildPathTypes.js.map +0 -1
- package/dist/db-content-api/utilities/where.d.ts.map +0 -1
- package/dist/db-content-api/utilities/where.js.map +0 -1
- package/dist/endpoints/health.d.ts.map +0 -1
- package/dist/endpoints/health.js.map +0 -1
- package/dist/endpoints/schema.d.ts.map +0 -1
- package/dist/endpoints/schema.js.map +0 -1
- package/dist/exports/client.d.ts.map +0 -1
- package/dist/exports/client.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/oauth/components/FigmaAvatar/index.d.ts.map +0 -1
- package/dist/oauth/components/FigmaAvatar/index.js.map +0 -1
- package/dist/oauth/components/FigmaAvatarCell/index.d.ts.map +0 -1
- package/dist/oauth/components/FigmaAvatarCell/index.js.map +0 -1
- package/dist/oauth/components/FigmaAvatarPlaceholder/index.d.ts.map +0 -1
- package/dist/oauth/components/FigmaAvatarPlaceholder/index.js.map +0 -1
- package/dist/oauth/components/LoginButton/index.d.ts.map +0 -1
- package/dist/oauth/components/LoginButton/index.js.map +0 -1
- package/dist/oauth/components/LogoutButton/index.d.ts.map +0 -1
- package/dist/oauth/components/LogoutButton/index.js.map +0 -1
- package/dist/oauth/defaults.d.ts.map +0 -1
- package/dist/oauth/defaults.js.map +0 -1
- package/dist/oauth/endpoints/getLoginEndpoint.d.ts.map +0 -1
- package/dist/oauth/endpoints/getLoginEndpoint.js.map +0 -1
- package/dist/oauth/endpoints/getLogoutEndpoint.d.ts.map +0 -1
- package/dist/oauth/endpoints/getLogoutEndpoint.js.map +0 -1
- package/dist/oauth/endpoints/getMetaEndpoint.d.ts.map +0 -1
- package/dist/oauth/endpoints/getMetaEndpoint.js.map +0 -1
- package/dist/oauth/endpoints/getRedirectToLoginEndpoint.d.ts.map +0 -1
- package/dist/oauth/endpoints/getRedirectToLoginEndpoint.js.map +0 -1
- package/dist/oauth/exports/client.d.ts.map +0 -1
- package/dist/oauth/exports/client.js.map +0 -1
- package/dist/oauth/hooks/afterLogout.d.ts.map +0 -1
- package/dist/oauth/hooks/afterLogout.js.map +0 -1
- package/dist/oauth/hooks/me.d.ts.map +0 -1
- package/dist/oauth/hooks/me.js.map +0 -1
- package/dist/oauth/hooks/refresh.d.ts.map +0 -1
- package/dist/oauth/hooks/refresh.js.map +0 -1
- package/dist/oauth/index.d.ts.map +0 -1
- package/dist/oauth/index.js.map +0 -1
- package/dist/oauth/strategy/index.d.ts.map +0 -1
- package/dist/oauth/strategy/index.js.map +0 -1
- package/dist/oauth/types.d.ts.map +0 -1
- package/dist/oauth/types.js.map +0 -1
- package/dist/oauth/utilities/clearCookie.d.ts.map +0 -1
- package/dist/oauth/utilities/clearCookie.js.map +0 -1
- package/dist/oauth/utilities/createCookieOptions.d.ts.map +0 -1
- package/dist/oauth/utilities/createCookieOptions.js.map +0 -1
- package/dist/oauth/utilities/createDebugLogger.d.ts.map +0 -1
- package/dist/oauth/utilities/createDebugLogger.js.map +0 -1
- package/dist/oauth/utilities/extractOrigin.d.ts.map +0 -1
- package/dist/oauth/utilities/extractOrigin.js.map +0 -1
- package/dist/oauth/utilities/getAdminCollectionSlug.d.ts.map +0 -1
- package/dist/oauth/utilities/getAdminCollectionSlug.js.map +0 -1
- package/dist/oauth/utilities/getAuthorizeURL.d.ts.map +0 -1
- package/dist/oauth/utilities/getAuthorizeURL.js.map +0 -1
- package/dist/oauth/utilities/getCookieExpiration.d.ts.map +0 -1
- package/dist/oauth/utilities/getCookieExpiration.js.map +0 -1
- package/dist/oauth/utilities/getSecondsFromTokenExp.d.ts.map +0 -1
- package/dist/oauth/utilities/getSecondsFromTokenExp.js.map +0 -1
- package/dist/oauth/utilities/getTokenExp.d.ts.map +0 -1
- package/dist/oauth/utilities/getTokenExp.js.map +0 -1
- package/dist/oauth/utilities/getUsernameField.d.ts.map +0 -1
- package/dist/oauth/utilities/getUsernameField.js.map +0 -1
- package/dist/oauth/utilities/hasUserTokenPropsChanged.d.ts.map +0 -1
- package/dist/oauth/utilities/hasUserTokenPropsChanged.js.map +0 -1
- package/dist/oauth/utilities/isDuplicateKeyError.d.ts.map +0 -1
- package/dist/oauth/utilities/isDuplicateKeyError.js.map +0 -1
- package/dist/oauth/utilities/mergeHeaders.d.ts.map +0 -1
- package/dist/oauth/utilities/mergeHeaders.js.map +0 -1
- package/dist/oauth/utilities/refreshTokens.d.ts.map +0 -1
- package/dist/oauth/utilities/refreshTokens.js.map +0 -1
- package/dist/plugin/adapter.d.ts.map +0 -1
- package/dist/plugin/adapter.js.map +0 -1
- package/dist/plugin/build-config.d.ts.map +0 -1
- package/dist/plugin/build-config.js.map +0 -1
- package/dist/storage-content-api/api-types.d.ts.map +0 -1
- package/dist/storage-content-api/api-types.js.map +0 -1
- package/dist/storage-content-api/client-uploads/ClientUploadHandler.d.ts.map +0 -1
- package/dist/storage-content-api/client-uploads/ClientUploadHandler.js.map +0 -1
- package/dist/storage-content-api/client-uploads/generateSignedURL.d.ts.map +0 -1
- package/dist/storage-content-api/client-uploads/generateSignedURL.js.map +0 -1
- package/dist/storage-content-api/client.d.ts.map +0 -1
- package/dist/storage-content-api/client.js.map +0 -1
- package/dist/storage-content-api/generateURL.d.ts.map +0 -1
- package/dist/storage-content-api/generateURL.js.map +0 -1
- package/dist/storage-content-api/handleDelete.d.ts.map +0 -1
- package/dist/storage-content-api/handleDelete.js.map +0 -1
- package/dist/storage-content-api/handleUpload.d.ts.map +0 -1
- package/dist/storage-content-api/handleUpload.js.map +0 -1
- package/dist/storage-content-api/index.d.ts.map +0 -1
- package/dist/storage-content-api/index.js.map +0 -1
- package/dist/storage-content-api/staticHandler.d.ts.map +0 -1
- package/dist/storage-content-api/staticHandler.js.map +0 -1
- package/dist/storage-content-api/types.d.ts.map +0 -1
- package/dist/storage-content-api/types.js.map +0 -1
- package/dist/storage-content-api/utilities/getSafeFilename.d.ts.map +0 -1
- package/dist/storage-content-api/utilities/getSafeFilename.js.map +0 -1
- package/dist/storage-content-api/utilities/index.d.ts.map +0 -1
- package/dist/storage-content-api/utilities/index.js.map +0 -1
- package/dist/types/config.d.ts.map +0 -1
- package/dist/types/config.js.map +0 -1
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js.map +0 -1
- package/dist/utils/asset-collection.d.ts.map +0 -1
- package/dist/utils/asset-collection.js.map +0 -1
- package/dist/utils/build-detection.d.ts.map +0 -1
- package/dist/utils/build-detection.js.map +0 -1
- package/dist/utils/build-lambda-zip.d.ts.map +0 -1
- package/dist/utils/build-lambda-zip.js.map +0 -1
- package/dist/utils/config.d.ts.map +0 -1
- package/dist/utils/config.js.map +0 -1
- package/dist/utils/download-template.d.ts.map +0 -1
- package/dist/utils/download-template.js.map +0 -1
- package/dist/utils/env-management.d.ts.map +0 -1
- package/dist/utils/env-management.js.map +0 -1
- package/dist/utils/format-env-suffix.d.ts.map +0 -1
- package/dist/utils/format-env-suffix.js.map +0 -1
- package/dist/utils/format.d.ts.map +0 -1
- package/dist/utils/format.js.map +0 -1
- package/dist/utils/formatter.d.ts.map +0 -1
- package/dist/utils/formatter.js.map +0 -1
- package/dist/utils/git.d.ts.map +0 -1
- package/dist/utils/git.js.map +0 -1
- package/dist/utils/is-debug.d.ts.map +0 -1
- package/dist/utils/is-debug.js.map +0 -1
- package/dist/utils/lambda-config.d.ts.map +0 -1
- package/dist/utils/lambda-config.js.map +0 -1
- package/dist/utils/log.d.ts.map +0 -1
- package/dist/utils/log.js.map +0 -1
- package/dist/utils/messages.d.ts.map +0 -1
- package/dist/utils/messages.js.map +0 -1
- package/dist/utils/package-manager.d.ts.map +0 -1
- package/dist/utils/package-manager.js.map +0 -1
- package/dist/utils/payload-config-ast.d.ts.map +0 -1
- package/dist/utils/payload-config-ast.js.map +0 -1
- package/dist/utils/payload-config-finder.d.ts.map +0 -1
- package/dist/utils/payload-config-finder.js.map +0 -1
- package/dist/utils/payload-config-modifier.d.ts.map +0 -1
- package/dist/utils/payload-config-modifier.js.map +0 -1
- package/dist/utils/payload-package-check.d.ts.map +0 -1
- package/dist/utils/payload-package-check.js.map +0 -1
- package/dist/utils/project.d.ts.map +0 -1
- package/dist/utils/project.js.map +0 -1
- package/dist/utils/s3-upload.d.ts.map +0 -1
- package/dist/utils/s3-upload.js.map +0 -1
- package/dist/utils/token-display.d.ts.map +0 -1
- package/dist/utils/token-display.js.map +0 -1
- package/dist/utils/typescript-validator.d.ts.map +0 -1
- package/dist/utils/typescript-validator.js.map +0 -1
- package/dist/utils/version-check.d.ts.map +0 -1
- package/dist/utils/version-check.js.map +0 -1
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import * as p from '@clack/prompts';
|
|
2
|
+
import pc from 'picocolors';
|
|
3
|
+
import { getBootstrapInfo } from '../api/control-plane.js';
|
|
4
|
+
import { getValidAccessToken } from '../auth/oauth-flow.js';
|
|
5
|
+
import { getTokenStore } from '../auth/token-store.js';
|
|
6
|
+
import { cacheAllEnvironments } from '../utils/cache-bootstrap.js';
|
|
7
|
+
import { addOrUpdateEnvVar, getEnvVar } from '../utils/env-management.js';
|
|
8
|
+
import * as log from '../utils/log.js';
|
|
9
|
+
/**
|
|
10
|
+
* Handle the `@payloadcms/figma env [name]` command
|
|
11
|
+
*
|
|
12
|
+
* If name is provided, switches directly. Otherwise lists available
|
|
13
|
+
* environments with an interactive picker.
|
|
14
|
+
* Updates FIGMA_ENVIRONMENT_NAME in .env and caches all bootstrap data.
|
|
15
|
+
*/ export async function envCommand(options) {
|
|
16
|
+
const cwd = process.cwd();
|
|
17
|
+
const projectId = await getEnvVar(cwd, 'FIGMA_PROJECT_ID');
|
|
18
|
+
if (!projectId) {
|
|
19
|
+
p.log.error(pc.red('No project configured. Run `@payloadcms/figma init` first.'));
|
|
20
|
+
process.exit(1);
|
|
21
|
+
}
|
|
22
|
+
const currentEnv = await getEnvVar(cwd, 'FIGMA_ENVIRONMENT_NAME');
|
|
23
|
+
// Authenticate
|
|
24
|
+
const tokenStore = getTokenStore();
|
|
25
|
+
const accessToken = await getValidAccessToken(tokenStore);
|
|
26
|
+
if (!accessToken) {
|
|
27
|
+
p.log.error(pc.red('Not authenticated. Run `@payloadcms/figma login` first.'));
|
|
28
|
+
process.exit(1);
|
|
29
|
+
}
|
|
30
|
+
// Fetch available environments
|
|
31
|
+
const spinner = p.spinner();
|
|
32
|
+
spinner.start('Fetching environments...');
|
|
33
|
+
let environments;
|
|
34
|
+
try {
|
|
35
|
+
const bootstrapInfo = await getBootstrapInfo(accessToken, projectId);
|
|
36
|
+
environments = bootstrapInfo.environments;
|
|
37
|
+
cacheAllEnvironments(tokenStore, projectId, bootstrapInfo);
|
|
38
|
+
} catch (error) {
|
|
39
|
+
spinner.stop(pc.red('✗ Failed to fetch environments'));
|
|
40
|
+
p.log.error(pc.dim(`Details: ${error instanceof Error ? error.message : 'Unknown error'}`));
|
|
41
|
+
process.exit(1);
|
|
42
|
+
}
|
|
43
|
+
if (environments.length === 0) {
|
|
44
|
+
spinner.stop(pc.red('✗ No environments found'));
|
|
45
|
+
process.exit(1);
|
|
46
|
+
}
|
|
47
|
+
spinner.stop(pc.green(`✓ ${environments.length} environment(s) available`));
|
|
48
|
+
// Resolve target environment
|
|
49
|
+
let targetName;
|
|
50
|
+
if (options.name) {
|
|
51
|
+
const match = environments.find((e)=>e.name === options.name);
|
|
52
|
+
if (!match) {
|
|
53
|
+
const available = environments.map((e)=>e.name).join(', ');
|
|
54
|
+
p.log.error(pc.red(`Unknown environment: ${options.name}`));
|
|
55
|
+
p.log.message(`Available: ${available}`);
|
|
56
|
+
process.exit(1);
|
|
57
|
+
}
|
|
58
|
+
targetName = match.name;
|
|
59
|
+
} else if (environments.length === 1) {
|
|
60
|
+
targetName = environments[0].name;
|
|
61
|
+
p.log.message(`Only one environment available: ${pc.cyan(targetName)}`);
|
|
62
|
+
} else {
|
|
63
|
+
const selected = await p.select({
|
|
64
|
+
message: 'Select an environment',
|
|
65
|
+
options: environments.map((env)=>({
|
|
66
|
+
hint: env.name === currentEnv ? 'current' : undefined,
|
|
67
|
+
label: env.name,
|
|
68
|
+
value: env.name
|
|
69
|
+
}))
|
|
70
|
+
});
|
|
71
|
+
if (p.isCancel(selected)) {
|
|
72
|
+
p.cancel('Cancelled');
|
|
73
|
+
process.exit(0);
|
|
74
|
+
}
|
|
75
|
+
targetName = selected;
|
|
76
|
+
}
|
|
77
|
+
if (targetName === currentEnv) {
|
|
78
|
+
p.log.message(`Already on ${pc.cyan(targetName)}`);
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
// Update .env
|
|
82
|
+
await addOrUpdateEnvVar(cwd, 'FIGMA_ENVIRONMENT_NAME', targetName);
|
|
83
|
+
log.debug(`Updated FIGMA_ENVIRONMENT_NAME to ${targetName}`);
|
|
84
|
+
p.log.success(pc.green(`✓ Switched to ${pc.cyan(targetName)}`));
|
|
85
|
+
p.log.message(pc.dim('Restart your dev server to apply the change.'));
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
//# sourceMappingURL=env.js.map
|
package/dist/commands/init.d.ts
CHANGED
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
export interface InitCommandOptions {
|
|
5
5
|
/** Enable debug mode */
|
|
6
6
|
debug?: boolean;
|
|
7
|
+
/** Figma environment name (e.g. 'production', 'staging') */
|
|
8
|
+
env?: string;
|
|
7
9
|
/** Force reconfiguration of existing project */
|
|
8
10
|
force?: boolean;
|
|
9
11
|
/** Content System ID to use */
|
package/dist/commands/init.js
CHANGED
|
@@ -2,12 +2,12 @@ import * as p from '@clack/prompts';
|
|
|
2
2
|
import fs from 'fs/promises';
|
|
3
3
|
import path from 'path';
|
|
4
4
|
import pc from 'picocolors';
|
|
5
|
-
import { ControlPlaneError,
|
|
5
|
+
import { ControlPlaneError, getBootstrapInfo } from '../api/control-plane.js';
|
|
6
6
|
import { FigmaApiError } from '../api/figma-api.js';
|
|
7
7
|
import { getValidAccessToken } from '../auth/oauth-flow.js';
|
|
8
8
|
import { getValidProjectToken, ProjectTokenError } from '../auth/project-token.js';
|
|
9
9
|
import { getTokenStore } from '../auth/token-store.js';
|
|
10
|
-
import { CONTENT_SYSTEM_NOT_FOUND_MESSAGE,
|
|
10
|
+
import { CONTENT_SYSTEM_NOT_FOUND_MESSAGE, getInfraEnvironment } from '../constants.js';
|
|
11
11
|
import { ensureGitignore } from '../utils/config.js';
|
|
12
12
|
import { addOrUpdateEnvVar } from '../utils/env-management.js';
|
|
13
13
|
import { isDebug } from '../utils/is-debug.js';
|
|
@@ -17,8 +17,10 @@ import { detectPackageManagerFromEnvironment, getRunCommand, resolvePackageManag
|
|
|
17
17
|
import { displayManualInstructions, ensurePayloadFigmaConfig } from '../utils/payload-config-modifier.js';
|
|
18
18
|
import { runScript } from '../utils/payload-package-check.js';
|
|
19
19
|
import { detectPayloadProject, hasRequiredDependencies, initializeGitRepo, installDependencies, isInProjectDirectory, scaffoldProject, validatePayloadVersion } from '../utils/project.js';
|
|
20
|
+
import { resolveEnvironment } from '../utils/resolve-environment.js';
|
|
20
21
|
import { checkForUpdates, getOwnVersion } from '../utils/version-check.js';
|
|
21
22
|
import { loginCommand } from './login.js';
|
|
23
|
+
import { cacheAllEnvironments } from '../utils/cache-bootstrap.js';
|
|
22
24
|
/**
|
|
23
25
|
* Generate and store project token for a content system
|
|
24
26
|
* Non-blocking - will show warning but not exit on failure
|
|
@@ -54,19 +56,6 @@ import { loginCommand } from './login.js';
|
|
|
54
56
|
// Don't exit - token generation failure shouldn't block initialization
|
|
55
57
|
}
|
|
56
58
|
}
|
|
57
|
-
/**
|
|
58
|
-
* Fetch dataset info from the API
|
|
59
|
-
* Throws on error - caller must handle
|
|
60
|
-
*/ async function fetchDatasetInfo(accessToken, datasetId) {
|
|
61
|
-
log.debug('Fetching dataset info...');
|
|
62
|
-
const datasetInfo = await getDatasetInfo(accessToken, datasetId);
|
|
63
|
-
log.debug('Dataset info retrieved successfully');
|
|
64
|
-
return {
|
|
65
|
-
oauthClientId: datasetInfo.oauthClientId,
|
|
66
|
-
oauthClientSecret: datasetInfo.oauthClientSecret,
|
|
67
|
-
tenantId: datasetInfo.tenantId
|
|
68
|
-
};
|
|
69
|
-
}
|
|
70
59
|
/**
|
|
71
60
|
* Handle the `init` command
|
|
72
61
|
*
|
|
@@ -82,7 +71,7 @@ import { loginCommand } from './login.js';
|
|
|
82
71
|
const currentVersion = await getOwnVersion();
|
|
83
72
|
await checkForUpdates(currentVersion);
|
|
84
73
|
// Check authentication
|
|
85
|
-
const tokenStore = getTokenStore(
|
|
74
|
+
const tokenStore = getTokenStore();
|
|
86
75
|
const s = p.spinner();
|
|
87
76
|
if (options.skipAuth) {
|
|
88
77
|
// Skip authentication for testing/development
|
|
@@ -120,29 +109,39 @@ import { loginCommand } from './login.js';
|
|
|
120
109
|
// Note: We no longer check for figma.config.json here
|
|
121
110
|
// Instead, the AST detection will check if figma object already exists in payload.config.ts
|
|
122
111
|
// and skip modification if it does (unless --force is used)
|
|
123
|
-
// Step 3: Get
|
|
112
|
+
// Step 3: Get CMS Resource ID (required argument)
|
|
124
113
|
log.debug('Configuring Project...');
|
|
125
114
|
if (!options.id) {
|
|
126
|
-
p.log.error('
|
|
115
|
+
p.log.error('CMS Resource ID is required. Use --id <cms-resource-id>');
|
|
127
116
|
process.exit(1);
|
|
128
117
|
}
|
|
129
|
-
const
|
|
130
|
-
// Fetch
|
|
131
|
-
let
|
|
118
|
+
const cmsResourceId = options.id;
|
|
119
|
+
// Fetch bootstrap info (oauth creds + environments)
|
|
120
|
+
let bootstrapInfo = null;
|
|
121
|
+
let resolvedEnv = null;
|
|
122
|
+
let oauthClientId = null;
|
|
123
|
+
let oauthClientSecret = null;
|
|
132
124
|
if (!options.skipAuth) {
|
|
133
125
|
const accessToken = await getValidAccessToken(tokenStore);
|
|
134
126
|
if (accessToken) {
|
|
135
127
|
try {
|
|
136
|
-
|
|
128
|
+
bootstrapInfo = await getBootstrapInfo(accessToken, cmsResourceId);
|
|
129
|
+
const envName = options.env ?? process.env.FIGMA_ENVIRONMENT_NAME ?? undefined;
|
|
130
|
+
resolvedEnv = resolveEnvironment({
|
|
131
|
+
environmentName: envName,
|
|
132
|
+
environments: bootstrapInfo.environments
|
|
133
|
+
});
|
|
134
|
+
oauthClientId = bootstrapInfo.oauthCredentials.oauthClientId;
|
|
135
|
+
oauthClientSecret = bootstrapInfo.oauthCredentials.oauthClientSecret;
|
|
137
136
|
} catch (error) {
|
|
137
|
+
log.debug(`Control Plane Error: ${error.statusCode} - ${error.message}`);
|
|
138
138
|
if (error instanceof ControlPlaneError && (error.statusCode === 404 || error.statusCode === 410)) {
|
|
139
139
|
p.log.error(pc.red(CONTENT_SYSTEM_NOT_FOUND_MESSAGE));
|
|
140
140
|
process.exit(1);
|
|
141
141
|
}
|
|
142
142
|
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
143
|
-
p.log.error(pc.red(`✗ Unable to fetch
|
|
143
|
+
p.log.error(pc.red(`✗ Unable to fetch project info for "${cmsResourceId}"`));
|
|
144
144
|
p.log.error(pc.dim(`Details: ${message}`));
|
|
145
|
-
p.note('This may indicate the CMS feature is not enabled for your account.\n' + 'Contact support if you believe this is an error.', 'Error');
|
|
146
145
|
process.exit(1);
|
|
147
146
|
}
|
|
148
147
|
}
|
|
@@ -180,7 +179,7 @@ import { loginCommand } from './login.js';
|
|
|
180
179
|
}
|
|
181
180
|
s.start('Checking Payload configuration...');
|
|
182
181
|
const modResult = await ensurePayloadFigmaConfig(process.cwd(), packageManager, {
|
|
183
|
-
contentSystemId
|
|
182
|
+
contentSystemId: resolvedEnv?.contentSystemId ?? cmsResourceId
|
|
184
183
|
});
|
|
185
184
|
if (!modResult.success) {
|
|
186
185
|
s.stop(pc.red('✗ Configuration check failed'));
|
|
@@ -203,18 +202,17 @@ import { loginCommand } from './login.js';
|
|
|
203
202
|
}
|
|
204
203
|
// Write environment variables to .env file
|
|
205
204
|
try {
|
|
206
|
-
await addOrUpdateEnvVar(process.cwd(), '
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
205
|
+
await addOrUpdateEnvVar(process.cwd(), 'FIGMA_PROJECT_ID', cmsResourceId);
|
|
206
|
+
await addOrUpdateEnvVar(process.cwd(), 'FIGMA_ENVIRONMENT_NAME', resolvedEnv?.name ?? 'production');
|
|
207
|
+
log.debug('Added FIGMA_PROJECT_ID and FIGMA_ENVIRONMENT_NAME to .env file');
|
|
208
|
+
const infraEnv = getInfraEnvironment();
|
|
209
|
+
if (infraEnv !== 'production') {
|
|
210
|
+
await addOrUpdateEnvVar(process.cwd(), 'FIGMA_INFRA_ENV', infraEnv);
|
|
211
|
+
log.debug(`Added FIGMA_INFRA_ENV=${infraEnv} to .env file`);
|
|
212
212
|
}
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
await addOrUpdateEnvVar(process.cwd(), 'FIGMA_OAUTH_CLIENT_SECRET', datasetInfo.oauthClientSecret);
|
|
217
|
-
log.debug(`Added FIGMA_TENANT_ID, FIGMA_OAUTH_CLIENT_ID, FIGMA_OAUTH_CLIENT_SECRET to .env file`);
|
|
213
|
+
// Cache all environments in local encrypted store
|
|
214
|
+
if (bootstrapInfo && oauthClientId && oauthClientSecret) {
|
|
215
|
+
cacheAllEnvironments(tokenStore, cmsResourceId, bootstrapInfo);
|
|
218
216
|
}
|
|
219
217
|
} catch (error) {
|
|
220
218
|
p.log.warn(pc.yellow(`⚠ Failed to update .env file: ${error instanceof Error ? error.message : 'Unknown error'}`));
|
|
@@ -250,8 +248,8 @@ import { loginCommand } from './login.js';
|
|
|
250
248
|
'lambda.zip'
|
|
251
249
|
]);
|
|
252
250
|
// Generate project token (unless skipping auth)
|
|
253
|
-
if (!options.skipAuth) {
|
|
254
|
-
await generateProjectTokenWithFeedback(tokenStore, contentSystemId, s);
|
|
251
|
+
if (!options.skipAuth && resolvedEnv) {
|
|
252
|
+
await generateProjectTokenWithFeedback(tokenStore, resolvedEnv.contentSystemId, s);
|
|
255
253
|
}
|
|
256
254
|
// Success message for existing project
|
|
257
255
|
p.outro(pc.green('✓ Project initialized successfully!'));
|
|
@@ -309,7 +307,7 @@ import { loginCommand } from './login.js';
|
|
|
309
307
|
// Modify Payload configuration
|
|
310
308
|
s.start('Checking Payload configuration...');
|
|
311
309
|
const modResult = await ensurePayloadFigmaConfig(fullPath, packageManager, {
|
|
312
|
-
contentSystemId
|
|
310
|
+
contentSystemId: resolvedEnv?.contentSystemId ?? cmsResourceId
|
|
313
311
|
});
|
|
314
312
|
if (!modResult.success) {
|
|
315
313
|
s.stop(pc.red('✗ Configuration check failed'));
|
|
@@ -332,18 +330,17 @@ import { loginCommand } from './login.js';
|
|
|
332
330
|
}
|
|
333
331
|
// Write environment variables to .env file
|
|
334
332
|
try {
|
|
335
|
-
await addOrUpdateEnvVar(fullPath, '
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
333
|
+
await addOrUpdateEnvVar(fullPath, 'FIGMA_PROJECT_ID', cmsResourceId);
|
|
334
|
+
await addOrUpdateEnvVar(fullPath, 'FIGMA_ENVIRONMENT_NAME', resolvedEnv?.name ?? 'production');
|
|
335
|
+
log.debug('Added FIGMA_PROJECT_ID and FIGMA_ENVIRONMENT_NAME to .env file');
|
|
336
|
+
const infraEnv = getInfraEnvironment();
|
|
337
|
+
if (infraEnv !== 'production') {
|
|
338
|
+
await addOrUpdateEnvVar(fullPath, 'FIGMA_INFRA_ENV', infraEnv);
|
|
339
|
+
log.debug(`Added FIGMA_INFRA_ENV=${infraEnv} to .env file`);
|
|
341
340
|
}
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
await addOrUpdateEnvVar(fullPath, 'FIGMA_OAUTH_CLIENT_SECRET', datasetInfo.oauthClientSecret);
|
|
346
|
-
log.debug(`Added FIGMA_TENANT_ID, FIGMA_OAUTH_CLIENT_ID, FIGMA_OAUTH_CLIENT_SECRET to .env file`);
|
|
341
|
+
// Cache all environments in local encrypted store
|
|
342
|
+
if (bootstrapInfo && oauthClientId && oauthClientSecret) {
|
|
343
|
+
cacheAllEnvironments(tokenStore, cmsResourceId, bootstrapInfo);
|
|
347
344
|
}
|
|
348
345
|
} catch (error) {
|
|
349
346
|
p.log.warn(pc.yellow(`⚠ Failed to update .env file: ${error instanceof Error ? error.message : 'Unknown error'}`));
|
|
@@ -351,8 +348,8 @@ import { loginCommand } from './login.js';
|
|
|
351
348
|
// Generate import map to prevent errors on first dev run
|
|
352
349
|
await runScript(fullPath, 'generate:importmap', packageManager);
|
|
353
350
|
// Generate project token (unless skipping auth)
|
|
354
|
-
if (!options.skipAuth) {
|
|
355
|
-
await generateProjectTokenWithFeedback(tokenStore, contentSystemId, s);
|
|
351
|
+
if (!options.skipAuth && resolvedEnv) {
|
|
352
|
+
await generateProjectTokenWithFeedback(tokenStore, resolvedEnv.contentSystemId, s);
|
|
356
353
|
}
|
|
357
354
|
// Initialize git repository (after all files including lock file are ready)
|
|
358
355
|
initializeGitRepo(fullPath);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as p from '@clack/prompts';
|
|
2
2
|
import pc from 'picocolors';
|
|
3
3
|
import { getTokenStore } from '../auth/token-store.js';
|
|
4
|
-
import {
|
|
4
|
+
import { getInfraEnvironment } from '../constants.js';
|
|
5
5
|
import { formatEnvSuffix } from '../utils/format-env-suffix.js';
|
|
6
6
|
import { isDebug } from '../utils/is-debug.js';
|
|
7
7
|
import { formatTimestamp, maskToken, showProjectTokens } from '../utils/token-display.js';
|
|
@@ -21,7 +21,7 @@ const ALL_ENVIRONMENTS = [
|
|
|
21
21
|
}
|
|
22
22
|
} else {
|
|
23
23
|
// Show detailed info for current environment only
|
|
24
|
-
showTokenDetails(
|
|
24
|
+
showTokenDetails(getInfraEnvironment());
|
|
25
25
|
}
|
|
26
26
|
}
|
|
27
27
|
function showTokenDetails(env) {
|
package/dist/commands/login.js
CHANGED
|
@@ -4,7 +4,7 @@ import { CallbackError } from '../auth/callback-server.js';
|
|
|
4
4
|
import { executeOAuthFlow, getValidAccessToken, OAuthFlowError } from '../auth/oauth-flow.js';
|
|
5
5
|
import { getTokenStore } from '../auth/token-store.js';
|
|
6
6
|
import { getOAuthConfig } from '../config/oauth.js';
|
|
7
|
-
import {
|
|
7
|
+
import { getInfraEnvironment } from '../constants.js';
|
|
8
8
|
import { formatEnvSuffix } from '../utils/format-env-suffix.js';
|
|
9
9
|
import * as log from '../utils/log.js';
|
|
10
10
|
/**
|
|
@@ -16,7 +16,7 @@ import * as log from '../utils/log.js';
|
|
|
16
16
|
const { showNextSteps } = args || {
|
|
17
17
|
showNextSteps: false
|
|
18
18
|
};
|
|
19
|
-
const env =
|
|
19
|
+
const env = getInfraEnvironment();
|
|
20
20
|
const tokenStore = getTokenStore(env);
|
|
21
21
|
// Check for existing valid tokens
|
|
22
22
|
try {
|
|
@@ -52,7 +52,7 @@ import * as log from '../utils/log.js';
|
|
|
52
52
|
redirectUri: oauthConfig.redirectUri,
|
|
53
53
|
scopes: oauthConfig.scopes
|
|
54
54
|
});
|
|
55
|
-
const env =
|
|
55
|
+
const env = getInfraEnvironment();
|
|
56
56
|
p.log.success(pc.green(`✓ Logged in${formatEnvSuffix(env)}`));
|
|
57
57
|
if (result.userId) {
|
|
58
58
|
log.debug(`User ID: ${result.userId}`);
|
package/dist/commands/logout.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as p from '@clack/prompts';
|
|
2
2
|
import pc from 'picocolors';
|
|
3
3
|
import { getTokenStore } from '../auth/token-store.js';
|
|
4
|
-
import {
|
|
4
|
+
import { getInfraEnvironment } from '../constants.js';
|
|
5
5
|
import { formatEnvSuffix } from '../utils/format-env-suffix.js';
|
|
6
6
|
import * as log from '../utils/log.js';
|
|
7
7
|
const ALL_ENVIRONMENTS = [
|
|
@@ -14,7 +14,7 @@ const ALL_ENVIRONMENTS = [
|
|
|
14
14
|
* Clears stored tokens (OAuth and project tokens) after confirmation.
|
|
15
15
|
* By default clears only current environment. Use --all for all environments.
|
|
16
16
|
*/ export async function logoutCommand(options = {}) {
|
|
17
|
-
const currentEnv =
|
|
17
|
+
const currentEnv = getInfraEnvironment();
|
|
18
18
|
if (options.all) {
|
|
19
19
|
await logoutAllEnvironments();
|
|
20
20
|
} else {
|
package/dist/config/oauth.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import type { OAuthConfig } from '../auth/types.js';
|
|
|
2
2
|
export declare const DEFAULT_CALLBACK_PORT = 34462;
|
|
3
3
|
/**
|
|
4
4
|
* Get OAuth configuration for current environment
|
|
5
|
-
* Uses
|
|
5
|
+
* Uses getEnvConfig() to determine staging vs production
|
|
6
6
|
*/
|
|
7
7
|
export declare function getOAuthConfig(): OAuthConfig;
|
|
8
8
|
export declare const TOKEN_EXPIRY_BUFFER_SECONDS = 300;
|
package/dist/config/oauth.js
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { getEnvConfig } from '../constants.js';
|
|
2
2
|
export const DEFAULT_CALLBACK_PORT = 34462;
|
|
3
3
|
/**
|
|
4
4
|
* Get OAuth configuration for current environment
|
|
5
|
-
* Uses
|
|
5
|
+
* Uses getEnvConfig() to determine staging vs production
|
|
6
6
|
*/ export function getOAuthConfig() {
|
|
7
|
-
const
|
|
8
|
-
const { apiBaseUrl, authorizationUrl, clientId } = ENV_CONFIG[env];
|
|
7
|
+
const { apiBaseUrl, authorizationUrl, clientId } = getEnvConfig();
|
|
9
8
|
return {
|
|
10
9
|
authorizationUrl,
|
|
11
10
|
clientId: process.env.FIGMA_CLIENT_ID || clientId,
|
package/dist/constants.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Figma environment (production or staging)
|
|
2
|
+
* Figma infrastructure environment (production or staging)
|
|
3
3
|
*/
|
|
4
4
|
export type Environment = 'production' | 'staging';
|
|
5
5
|
type EnvironmentConfig = {
|
|
@@ -18,7 +18,7 @@ type EnvironmentConfig = {
|
|
|
18
18
|
};
|
|
19
19
|
/**
|
|
20
20
|
* Environment-specific configuration for Figma integration.
|
|
21
|
-
* Selected via
|
|
21
|
+
* Selected via FIGMA_INFRA_ENV ('production' | 'staging'), defaults to 'production'.
|
|
22
22
|
*/
|
|
23
23
|
export declare const ENV_CONFIG: Record<Environment, EnvironmentConfig>;
|
|
24
24
|
/**
|
|
@@ -27,14 +27,18 @@ export declare const ENV_CONFIG: Record<Environment, EnvironmentConfig>;
|
|
|
27
27
|
*/
|
|
28
28
|
export declare const CONTENT_SYSTEM_NOT_FOUND_MESSAGE = "Content system not found. Verify your Content System ID is correct, or contact your team admin for assistance.";
|
|
29
29
|
/**
|
|
30
|
-
* Set environment override (used by --env CLI flag)
|
|
30
|
+
* Set infrastructure environment override (used by --infra-env CLI flag)
|
|
31
31
|
* Pass undefined to clear the override
|
|
32
32
|
*/
|
|
33
|
-
export declare function
|
|
33
|
+
export declare function setInfraEnvironment(env: Environment | undefined): void;
|
|
34
34
|
/**
|
|
35
|
-
* Get current Figma environment
|
|
36
|
-
* Priority: 1)
|
|
35
|
+
* Get current Figma infrastructure environment
|
|
36
|
+
* Priority: 1) setInfraEnvironment override, 2) FIGMA_INFRA_ENV env var, 3) .env file, 4) 'production' default
|
|
37
37
|
*/
|
|
38
|
-
|
|
38
|
+
/**
|
|
39
|
+
* Get the resolved EnvironmentConfig for the current infrastructure environment
|
|
40
|
+
*/
|
|
41
|
+
export declare function getEnvConfig(): EnvironmentConfig;
|
|
42
|
+
export declare function getInfraEnvironment(): Environment;
|
|
39
43
|
export {};
|
|
40
44
|
//# sourceMappingURL=constants.d.ts.map
|
package/dist/constants.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { getEnvVarSync } from './utils/env-management.js';
|
|
2
2
|
/**
|
|
3
3
|
* Environment-specific configuration for Figma integration.
|
|
4
|
-
* Selected via
|
|
4
|
+
* Selected via FIGMA_INFRA_ENV ('production' | 'staging'), defaults to 'production'.
|
|
5
5
|
*/ export const ENV_CONFIG = {
|
|
6
6
|
production: {
|
|
7
7
|
apiBaseUrl: 'https://api.figma.com',
|
|
@@ -26,31 +26,36 @@ import { getEnvVarSync } from './utils/env-management.js';
|
|
|
26
26
|
*/ export const CONTENT_SYSTEM_NOT_FOUND_MESSAGE = 'Content system not found. Verify your Content System ID is correct, or contact your team admin for assistance.';
|
|
27
27
|
let envOverride;
|
|
28
28
|
/**
|
|
29
|
-
* Set environment override (used by --env CLI flag)
|
|
29
|
+
* Set infrastructure environment override (used by --infra-env CLI flag)
|
|
30
30
|
* Pass undefined to clear the override
|
|
31
|
-
*/ export function
|
|
31
|
+
*/ export function setInfraEnvironment(env) {
|
|
32
32
|
envOverride = env;
|
|
33
33
|
}
|
|
34
34
|
/**
|
|
35
|
-
* Get current Figma environment
|
|
36
|
-
* Priority: 1)
|
|
37
|
-
*/
|
|
35
|
+
* Get current Figma infrastructure environment
|
|
36
|
+
* Priority: 1) setInfraEnvironment override, 2) FIGMA_INFRA_ENV env var, 3) .env file, 4) 'production' default
|
|
37
|
+
*/ /**
|
|
38
|
+
* Get the resolved EnvironmentConfig for the current infrastructure environment
|
|
39
|
+
*/ export function getEnvConfig() {
|
|
40
|
+
return ENV_CONFIG[getInfraEnvironment()];
|
|
41
|
+
}
|
|
42
|
+
export function getInfraEnvironment() {
|
|
38
43
|
if (envOverride) {
|
|
39
44
|
return envOverride;
|
|
40
45
|
}
|
|
41
46
|
// Check process.env first (case-insensitive)
|
|
42
|
-
if (process.env.
|
|
47
|
+
if (process.env.FIGMA_INFRA_ENV?.toLowerCase() === 'staging') {
|
|
43
48
|
return 'staging';
|
|
44
49
|
}
|
|
45
50
|
// Fall back to .env file in cwd
|
|
46
|
-
const envFileValue = getEnvVarSync(process.cwd(), '
|
|
51
|
+
const envFileValue = getEnvVarSync(process.cwd(), 'FIGMA_INFRA_ENV');
|
|
47
52
|
if (envFileValue) {
|
|
48
53
|
const env = envFileValue.toLowerCase();
|
|
49
54
|
if (env === 'staging') {
|
|
50
55
|
return 'staging';
|
|
51
56
|
}
|
|
52
57
|
if (env !== 'production') {
|
|
53
|
-
console.warn(`Warning: Invalid
|
|
58
|
+
console.warn(`Warning: Invalid FIGMA_INFRA_ENV value "${envFileValue}" in .env file. Using production.`);
|
|
54
59
|
}
|
|
55
60
|
return 'production';
|
|
56
61
|
}
|
|
@@ -182,17 +182,12 @@ async function queryDrafts(args) {
|
|
|
182
182
|
}
|
|
183
183
|
}
|
|
184
184
|
});
|
|
185
|
-
// queryDrafts
|
|
186
|
-
//
|
|
187
|
-
const docs = versionsResult.docs.map((versionDoc)=>{
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
...version,
|
|
192
|
-
// Keep version metadata like parent, but document fields take precedence
|
|
193
|
-
id: version.id
|
|
194
|
-
};
|
|
195
|
-
});
|
|
185
|
+
// queryDrafts returns documents at root level, not nested in 'version'.
|
|
186
|
+
// Only spread version content; version metadata (latest, parent) must not leak.
|
|
187
|
+
const docs = versionsResult.docs.map((versionDoc)=>({
|
|
188
|
+
...versionDoc.version,
|
|
189
|
+
id: versionDoc.parent
|
|
190
|
+
}));
|
|
196
191
|
return {
|
|
197
192
|
...versionsResult,
|
|
198
193
|
docs
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as jose from 'jose';
|
|
2
2
|
import { APIError, parseCookies } from 'payload';
|
|
3
3
|
import { JWTValidationError, validateProjectToken } from '../../auth/jwt-validator.js';
|
|
4
|
-
import {
|
|
4
|
+
import { getInfraEnvironment } from '../../constants.js';
|
|
5
5
|
import { createDebugLogger } from '../utilities/createDebugLogger.js';
|
|
6
6
|
import { getTokenExp } from '../utilities/getTokenExp.js';
|
|
7
7
|
import { mergeHeaders } from '../utilities/mergeHeaders.js';
|
|
@@ -282,7 +282,7 @@ export class Strategy {
|
|
|
282
282
|
}
|
|
283
283
|
async jwtVerify({ payload, token }) {
|
|
284
284
|
try {
|
|
285
|
-
const verified = await validateProjectToken(token,
|
|
285
|
+
const verified = await validateProjectToken(token, getInfraEnvironment());
|
|
286
286
|
if (typeof verified !== 'string') {
|
|
287
287
|
return verified;
|
|
288
288
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { generateCookie } from 'payload';
|
|
2
2
|
import { getProjectToken } from '../../api/figma-api.js';
|
|
3
3
|
import { validateProjectToken } from '../../auth/jwt-validator.js';
|
|
4
|
-
import {
|
|
4
|
+
import { getInfraEnvironment } from '../../constants.js';
|
|
5
5
|
import { createCookieOptions } from './createCookieOptions.js';
|
|
6
6
|
import { createDebugLogger } from './createDebugLogger.js';
|
|
7
7
|
import { getCookieExpiration } from './getCookieExpiration.js';
|
|
@@ -48,7 +48,7 @@ export const refreshTokens = async ({ payload, refreshToken, strategy })=>{
|
|
|
48
48
|
value: token
|
|
49
49
|
});
|
|
50
50
|
headers.append('Set-Cookie', tokenCookie);
|
|
51
|
-
const decodedOauthToken = await validateProjectToken(token,
|
|
51
|
+
const decodedOauthToken = await validateProjectToken(token, getInfraEnvironment());
|
|
52
52
|
return {
|
|
53
53
|
decodedOauthToken,
|
|
54
54
|
headers,
|
|
@@ -46,15 +46,5 @@ export type FigmaConfig = {
|
|
|
46
46
|
useContentSystem?: boolean;
|
|
47
47
|
};
|
|
48
48
|
} & Omit<Config, 'db' | 'editor' | 'secret'> & Partial<Pick<Config, 'db'>>;
|
|
49
|
-
/**
|
|
50
|
-
* Figma platform wrapper for Payload's buildConfig.
|
|
51
|
-
* Automatically injects:
|
|
52
|
-
* - Figma database adapter
|
|
53
|
-
* - Secret (platform-provided)
|
|
54
|
-
* - Default lexicalEditor (if no custom editor specified)
|
|
55
|
-
*
|
|
56
|
-
* @param config - Payload configuration (db and secret omitted, editor optional)
|
|
57
|
-
* @returns Promise<SanitizedConfig> - Built Payload configuration
|
|
58
|
-
*/
|
|
59
49
|
export declare function buildFigmaConfig(config: FigmaConfig): Promise<SanitizedConfig>;
|
|
60
50
|
//# sourceMappingURL=build-config.d.ts.map
|