@payloadcms/figma 0.0.1-alpha.6 → 0.0.1-alpha.61
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 +52 -6
- package/dist/api/control-plane.js +174 -72
- package/dist/api/figma-api.d.ts +22 -1
- package/dist/api/figma-api.js +78 -25
- package/dist/auth/callback-server.js +2 -1
- package/dist/auth/credentials.d.ts +21 -0
- package/dist/auth/credentials.js +21 -0
- package/dist/auth/crypto-utils.d.ts +6 -0
- package/dist/auth/crypto-utils.js +16 -14
- package/dist/auth/jwt-validator.d.ts +2 -1
- package/dist/auth/jwt-validator.js +2 -2
- package/dist/auth/oauth-flow.d.ts +17 -3
- package/dist/auth/oauth-flow.js +63 -16
- package/dist/auth/project-token.js +16 -11
- package/dist/auth/refresh.d.ts +2 -1
- package/dist/auth/refresh.js +25 -12
- package/dist/auth/token-store.d.ts +42 -1
- package/dist/auth/token-store.js +118 -14
- package/dist/auth/types.d.ts +17 -4
- package/dist/cli.js +68 -5
- package/dist/commands/build-lambda-zip.d.ts +5 -0
- package/dist/commands/build-lambda-zip.js +19 -0
- package/dist/commands/debug.d.ts +8 -0
- package/dist/commands/debug.js +176 -0
- package/dist/commands/deploy.d.ts +9 -0
- package/dist/commands/deploy.js +178 -151
- package/dist/commands/env.d.ts +13 -0
- package/dist/commands/env.js +88 -0
- package/dist/commands/init.d.ts +3 -5
- package/dist/commands/init.js +165 -148
- package/dist/commands/list-tokens.d.ts +3 -3
- package/dist/commands/list-tokens.js +22 -7
- package/dist/commands/login.d.ts +8 -1
- package/dist/commands/login.js +33 -15
- package/dist/commands/logout.d.ts +5 -4
- package/dist/commands/logout.js +56 -13
- package/dist/commands/upgrade.d.ts +5 -0
- package/dist/commands/upgrade.js +331 -0
- package/dist/config/oauth.d.ts +4 -14
- package/dist/config/oauth.js +18 -40
- package/dist/constants.d.ts +44 -19
- package/dist/constants.js +73 -20
- package/dist/db-content-api/README.md +98 -0
- package/dist/db-content-api/generated/content-api-types.d.ts +3972 -0
- package/dist/db-content-api/generated/content-api-types.js +7 -0
- package/dist/db-content-api/index.d.ts +21 -0
- package/dist/db-content-api/index.js +914 -0
- package/dist/db-content-api/temp-utilities/slug.d.ts +2 -0
- package/dist/db-content-api/temp-utilities/slug.js +3 -0
- package/dist/db-content-api/temp-utilities/sorting.d.ts +3 -0
- package/dist/db-content-api/temp-utilities/sorting.js +39 -0
- package/dist/db-content-api/temp-utilities/types.d.ts +22 -0
- package/dist/db-content-api/temp-utilities/types.js +15 -0
- package/dist/db-content-api/temp-utilities/unwrapDocument.d.ts +39 -0
- package/dist/db-content-api/temp-utilities/unwrapDocument.js +59 -0
- package/dist/db-content-api/utilities/auth.d.ts +30 -0
- package/dist/db-content-api/utilities/auth.js +81 -0
- package/dist/db-content-api/utilities/data/applyDefaults.d.ts +7 -0
- package/dist/db-content-api/utilities/data/applyDefaults.js +75 -0
- package/dist/db-content-api/utilities/data/castFieldValue.d.ts +11 -0
- package/dist/db-content-api/utilities/data/castFieldValue.js +68 -0
- package/dist/db-content-api/utilities/data/index.d.ts +49 -0
- package/dist/db-content-api/utilities/data/index.js +301 -0
- package/dist/db-content-api/utilities/data/removeVirtualFields.d.ts +12 -0
- package/dist/db-content-api/utilities/data/removeVirtualFields.js +54 -0
- package/dist/db-content-api/utilities/data/stripFields.d.ts +48 -0
- package/dist/db-content-api/utilities/data/stripFields.js +195 -0
- package/dist/db-content-api/utilities/data/transformPublishedLocale.d.ts +23 -0
- package/dist/db-content-api/utilities/data/transformPublishedLocale.js +42 -0
- package/dist/db-content-api/utilities/joins.d.ts +53 -0
- package/dist/db-content-api/utilities/joins.js +139 -0
- package/dist/db-content-api/utilities/locale/index.d.ts +10 -0
- package/dist/db-content-api/utilities/locale/index.js +21 -0
- package/dist/db-content-api/utilities/meta/buildLocalizedPaths.d.ts +11 -0
- package/dist/db-content-api/utilities/meta/buildLocalizedPaths.js +74 -0
- package/dist/db-content-api/utilities/meta/buildMeta.d.ts +42 -0
- package/dist/db-content-api/utilities/meta/buildMeta.js +41 -0
- package/dist/db-content-api/utilities/meta/buildPathTypes.d.ts +17 -0
- package/dist/db-content-api/utilities/meta/buildPathTypes.js +244 -0
- package/dist/db-content-api/utilities/meta/buildUniquePaths.d.ts +13 -0
- package/dist/db-content-api/utilities/meta/buildUniquePaths.js +62 -0
- package/dist/db-content-api/utilities/meta/normalizeLocaleInWhere.d.ts +10 -0
- package/dist/db-content-api/utilities/meta/normalizeLocaleInWhere.js +102 -0
- package/dist/db-content-api/utilities/where.d.ts +20 -0
- package/dist/db-content-api/utilities/where.js +108 -0
- package/dist/deploy/schedule-extract-plugin.d.ts +11 -0
- package/dist/deploy/schedule-extract-plugin.js +34 -0
- package/dist/endpoints/health.d.ts +3 -0
- package/dist/endpoints/health.js +11 -0
- package/dist/endpoints/schema.d.ts +3 -0
- package/dist/endpoints/schema.js +29 -0
- package/dist/exports/client.d.ts +3 -0
- package/dist/exports/client.js +3 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.js +3 -1
- package/dist/oauth/components/FigmaAvatar/index.d.ts +4 -0
- package/dist/oauth/components/FigmaAvatar/index.js +27 -0
- package/dist/oauth/components/FigmaAvatar/index.scss +12 -0
- package/dist/oauth/components/FigmaAvatarCell/index.d.ts +5 -0
- package/dist/oauth/components/FigmaAvatarCell/index.js +25 -0
- package/dist/oauth/components/FigmaAvatarCell/index.scss +5 -0
- package/dist/oauth/components/FigmaAvatarPlaceholder/index.d.ts +9 -0
- package/dist/oauth/components/FigmaAvatarPlaceholder/index.js +37 -0
- package/dist/oauth/components/FigmaAvatarPlaceholder/index.scss +28 -0
- package/dist/oauth/components/LoginButton/index.js +50 -6
- package/dist/oauth/components/LoginButton/index.scss +50 -3
- package/dist/oauth/components/LogoutButton/index.js +5 -4
- package/dist/oauth/defaults.js +67 -10
- package/dist/oauth/endpoints/getLoginEndpoint.js +77 -24
- package/dist/oauth/endpoints/getLogoutEndpoint.js +7 -4
- package/dist/oauth/index.js +40 -13
- package/dist/oauth/strategy/index.d.ts +0 -2
- package/dist/oauth/strategy/index.js +40 -17
- package/dist/oauth/types.d.ts +6 -6
- package/dist/oauth/utilities/isDuplicateKeyError.d.ts +7 -0
- package/dist/oauth/utilities/isDuplicateKeyError.js +14 -0
- package/dist/oauth/utilities/refreshTokens.js +6 -3
- package/dist/plugin/build-config.d.ts +18 -15
- package/dist/plugin/build-config.js +213 -18
- package/dist/storage-content-api/api-types.d.ts +168 -0
- package/dist/storage-content-api/api-types.js +6 -0
- package/dist/storage-content-api/client-uploads/ClientUploadHandler.d.ts +9 -0
- package/dist/storage-content-api/client-uploads/ClientUploadHandler.js +42 -0
- package/dist/storage-content-api/client-uploads/generateSignedURL.d.ts +13 -0
- package/dist/storage-content-api/client-uploads/generateSignedURL.js +39 -0
- package/dist/storage-content-api/client.d.ts +6 -0
- package/dist/storage-content-api/client.js +36 -0
- package/dist/storage-content-api/generateURL.d.ts +7 -0
- package/dist/storage-content-api/generateURL.js +8 -0
- package/dist/storage-content-api/handleDelete.d.ts +8 -0
- package/dist/storage-content-api/handleDelete.js +17 -0
- package/dist/storage-content-api/handleUpload.d.ts +11 -0
- package/dist/storage-content-api/handleUpload.js +144 -0
- package/dist/storage-content-api/index.d.ts +5 -0
- package/dist/storage-content-api/index.js +31 -0
- package/dist/storage-content-api/staticHandler.d.ts +10 -0
- package/dist/storage-content-api/staticHandler.js +56 -0
- package/dist/storage-content-api/types.d.ts +10 -0
- package/dist/storage-content-api/types.js +3 -0
- package/dist/storage-content-api/utilities/getSafeFilename.d.ts +12 -0
- package/dist/storage-content-api/utilities/getSafeFilename.js +61 -0
- package/dist/storage-content-api/utilities/index.d.ts +2 -0
- package/dist/storage-content-api/utilities/index.js +3 -0
- package/dist/templates/.env.example +5 -0
- package/dist/templates/README.md +19 -0
- package/dist/types/config.d.ts +2 -1
- package/dist/types/config.js +0 -2
- package/dist/types.d.ts +8 -1
- package/dist/utils/adapters/nextjs.d.ts +9 -0
- package/dist/utils/adapters/nextjs.js +64 -0
- package/dist/utils/adapters/nitro.d.ts +9 -0
- package/dist/utils/adapters/nitro.js +169 -0
- package/dist/utils/adapters/vite.d.ts +10 -0
- package/dist/utils/adapters/vite.js +33 -0
- package/dist/utils/asset-collection.d.ts +27 -6
- package/dist/utils/asset-collection.js +59 -30
- package/dist/utils/build-detection.d.ts +5 -11
- package/dist/utils/build-detection.js +74 -11
- package/dist/utils/build-lambda-zip.d.ts +14 -0
- package/dist/utils/build-lambda-zip.js +81 -0
- package/dist/utils/cache-bootstrap.d.ts +8 -0
- package/dist/utils/cache-bootstrap.js +18 -0
- package/dist/utils/config.js +1 -1
- package/dist/utils/deploy-adapter.d.ts +40 -0
- package/dist/utils/deploy-adapter.js +58 -0
- package/dist/utils/download-template.js +3 -2
- package/dist/utils/env-management.d.ts +24 -7
- package/dist/utils/env-management.js +119 -64
- package/dist/utils/format-env-suffix.d.ts +12 -0
- package/dist/utils/format-env-suffix.js +13 -0
- package/dist/utils/formatter.js +23 -11
- package/dist/utils/fs-utils.d.ts +6 -0
- package/dist/utils/fs-utils.js +27 -0
- package/dist/utils/handle-upgrade.d.ts +9 -0
- package/dist/utils/handle-upgrade.js +41 -0
- package/dist/utils/lambda-config.d.ts +3 -1
- package/dist/utils/lambda-config.js +75 -78
- package/dist/utils/messages.d.ts +1 -2
- package/dist/utils/messages.js +29 -11
- package/dist/utils/package-manager.d.ts +24 -0
- package/dist/utils/package-manager.js +53 -0
- package/dist/utils/payload-config-ast.d.ts +27 -6
- package/dist/utils/payload-config-ast.js +106 -58
- package/dist/utils/payload-config-finder.d.ts +2 -2
- package/dist/utils/payload-config-finder.js +48 -9
- package/dist/utils/payload-config-modifier.d.ts +1 -1
- package/dist/utils/payload-config-modifier.js +70 -11
- package/dist/utils/payload-package-check.d.ts +12 -1
- package/dist/utils/payload-package-check.js +63 -5
- package/dist/utils/project.d.ts +3 -2
- package/dist/utils/project.js +29 -15
- package/dist/utils/resolve-environment.d.ts +14 -0
- package/dist/utils/resolve-environment.js +31 -0
- package/dist/utils/s3-upload.d.ts +7 -2
- package/dist/utils/s3-upload.js +39 -6
- package/dist/utils/token-display.js +11 -5
- package/dist/utils/typescript-validator.js +4 -6
- package/dist/utils/version-check.d.ts +3 -0
- package/dist/utils/version-check.js +38 -0
- package/package.json +33 -15
- 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/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/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/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/getAdminPath.d.ts +0 -8
- package/dist/oauth/utilities/getAdminPath.d.ts.map +0 -1
- package/dist/oauth/utilities/getAdminPath.js +0 -9
- package/dist/oauth/utilities/getAdminPath.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/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/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/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.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/commands/init.js
CHANGED
|
@@ -2,30 +2,39 @@ 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
|
-
import {
|
|
7
|
+
import { tryGetCredential } from '../auth/oauth-flow.js';
|
|
8
8
|
import { getValidProjectToken, ProjectTokenError } from '../auth/project-token.js';
|
|
9
|
-
import {
|
|
9
|
+
import { getTokenStore } from '../auth/token-store.js';
|
|
10
|
+
import { getInfraEnvironment, getProjectNotFoundMessage } from '../constants.js';
|
|
11
|
+
import { ensureGitignore } from '../utils/config.js';
|
|
12
|
+
import { addOrUpdateEnvVar } from '../utils/env-management.js';
|
|
10
13
|
import { isDebug } from '../utils/is-debug.js';
|
|
14
|
+
import { applyLambdaModifications } from '../utils/lambda-config.js';
|
|
11
15
|
import * as log from '../utils/log.js';
|
|
16
|
+
import { detectPackageManagerFromEnvironment, getRunCommand, resolvePackageManager } from '../utils/package-manager.js';
|
|
12
17
|
import { displayManualInstructions, ensurePayloadFigmaConfig } from '../utils/payload-config-modifier.js';
|
|
18
|
+
import { runScript } from '../utils/payload-package-check.js';
|
|
13
19
|
import { detectPayloadProject, hasRequiredDependencies, initializeGitRepo, installDependencies, isInProjectDirectory, scaffoldProject, validatePayloadVersion } from '../utils/project.js';
|
|
20
|
+
import { resolveEnvironment } from '../utils/resolve-environment.js';
|
|
21
|
+
import { checkForUpdates, getOwnVersion } from '../utils/version-check.js';
|
|
14
22
|
import { loginCommand } from './login.js';
|
|
23
|
+
import { cacheAllEnvironments } from '../utils/cache-bootstrap.js';
|
|
15
24
|
/**
|
|
16
|
-
* Generate and store project token for a
|
|
25
|
+
* Generate and store project token for a content system
|
|
17
26
|
* Non-blocking - will show warning but not exit on failure
|
|
18
27
|
* Only shows feedback if DEBUG mode is enabled, otherwise runs silently
|
|
19
28
|
*
|
|
20
29
|
* @param tokenStore - Token store instance
|
|
21
|
-
* @param
|
|
30
|
+
* @param contentSystemId - Content System ID to generate token for
|
|
22
31
|
* @param spinner - Clack spinner instance for status updates (only used in debug mode)
|
|
23
|
-
*/ async function generateProjectTokenWithFeedback(tokenStore,
|
|
32
|
+
*/ async function generateProjectTokenWithFeedback(tokenStore, contentSystemId, spinner) {
|
|
24
33
|
if (isDebug()) {
|
|
25
34
|
spinner.start('Generating project token...');
|
|
26
35
|
}
|
|
27
36
|
try {
|
|
28
|
-
const projectToken = await getValidProjectToken(tokenStore,
|
|
37
|
+
const projectToken = await getValidProjectToken(tokenStore, contentSystemId);
|
|
29
38
|
if (isDebug()) {
|
|
30
39
|
if (projectToken) {
|
|
31
40
|
spinner.stop(pc.green('✓ Project token generated'));
|
|
@@ -58,108 +67,80 @@ import { loginCommand } from './login.js';
|
|
|
58
67
|
*
|
|
59
68
|
* @param options - Command options
|
|
60
69
|
*/ export async function initCommand(options) {
|
|
70
|
+
// Check for outdated version (non-blocking)
|
|
71
|
+
const currentVersion = await getOwnVersion();
|
|
72
|
+
await checkForUpdates(currentVersion);
|
|
61
73
|
// Check authentication
|
|
62
|
-
const tokenStore =
|
|
74
|
+
const tokenStore = getTokenStore();
|
|
63
75
|
const s = p.spinner();
|
|
64
|
-
let accessToken;
|
|
65
76
|
if (options.skipAuth) {
|
|
66
77
|
// Skip authentication for testing/development
|
|
67
78
|
p.log.warn(pc.yellow('Skipping authentication (--skip-auth mode)'));
|
|
68
|
-
accessToken = 'mock-access-token';
|
|
69
79
|
} else {
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
initialValue: true,
|
|
85
|
-
message: 'Would you like to authenticate now?'
|
|
86
|
-
});
|
|
87
|
-
if (p.isCancel(shouldAuth) || !shouldAuth) {
|
|
88
|
-
p.cancel('Operation cancelled');
|
|
89
|
-
process.exit(0);
|
|
90
|
-
}
|
|
91
|
-
// Run login command
|
|
92
|
-
await loginCommand();
|
|
93
|
-
// Get token after auth
|
|
94
|
-
const newToken = await getValidAccessToken(tokenStore);
|
|
95
|
-
if (!newToken) {
|
|
96
|
-
p.log.error('Authentication failed');
|
|
97
|
-
process.exit(1);
|
|
98
|
-
}
|
|
99
|
-
accessToken = newToken;
|
|
100
|
-
p.log.success(pc.green('✓ Authenticated'));
|
|
101
|
-
} else {
|
|
102
|
-
accessToken = token;
|
|
103
|
-
s.stop(pc.green('✓ Authenticated'));
|
|
80
|
+
// Check for valid cached tokens first (no API call needed)
|
|
81
|
+
if (!tokenStore.hasValidTokens()) {
|
|
82
|
+
// Need to refresh or authenticate - show spinner for API call
|
|
83
|
+
s.start('Checking authentication...');
|
|
84
|
+
const credential = await tryGetCredential(tokenStore);
|
|
85
|
+
if (!credential) {
|
|
86
|
+
s.stop('Authentication required to continue');
|
|
87
|
+
await loginCommand({
|
|
88
|
+
showNextSteps: false
|
|
89
|
+
});
|
|
90
|
+
const newCredential = await tryGetCredential(tokenStore);
|
|
91
|
+
if (!newCredential) {
|
|
92
|
+
p.log.error('Authentication failed');
|
|
93
|
+
process.exit(1);
|
|
104
94
|
}
|
|
95
|
+
} else {
|
|
96
|
+
s.stop(pc.green('✓ Authenticated'));
|
|
105
97
|
}
|
|
106
|
-
} catch (error) {
|
|
107
|
-
s.stop(pc.red('✗ Authentication failed'));
|
|
108
|
-
log.error(error instanceof Error ? error.message : 'Unknown error');
|
|
109
|
-
p.note('Run `figma auth` to authenticate', 'Tip');
|
|
110
|
-
process.exit(1);
|
|
111
98
|
}
|
|
112
99
|
}
|
|
113
100
|
// Note: We no longer check for figma.config.json here
|
|
114
101
|
// Instead, the AST detection will check if figma object already exists in payload.config.ts
|
|
115
102
|
// and skip modification if it does (unless --force is used)
|
|
116
|
-
// Step 3: Get CMS ID
|
|
103
|
+
// Step 3: Get CMS Resource ID (required argument)
|
|
117
104
|
log.debug('Configuring Project...');
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
105
|
+
if (!options.id) {
|
|
106
|
+
p.log.error('CMS Resource ID is required. Use --id <cms-resource-id>');
|
|
107
|
+
process.exit(1);
|
|
108
|
+
}
|
|
109
|
+
const cmsResourceId = options.id;
|
|
110
|
+
// Fetch bootstrap info (oauth creds + environments)
|
|
111
|
+
let bootstrapInfo = null;
|
|
112
|
+
let resolvedEnv = null;
|
|
113
|
+
let oauthClientId = null;
|
|
114
|
+
let oauthClientSecret = null;
|
|
115
|
+
if (!options.skipAuth) {
|
|
116
|
+
const credential = await tryGetCredential(tokenStore);
|
|
117
|
+
if (credential) {
|
|
118
|
+
try {
|
|
119
|
+
bootstrapInfo = await getBootstrapInfo(credential, cmsResourceId);
|
|
120
|
+
} catch (error) {
|
|
121
|
+
log.debug(`Control Plane Error: ${error.statusCode} - ${error.message}`);
|
|
122
|
+
if (error instanceof ControlPlaneError && (error.statusCode === 404 || error.statusCode === 410)) {
|
|
123
|
+
p.log.error(pc.red(getProjectNotFoundMessage({
|
|
124
|
+
environment: getInfraEnvironment(),
|
|
125
|
+
projectId: cmsResourceId
|
|
126
|
+
})));
|
|
127
|
+
process.exit(1);
|
|
131
128
|
}
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
p.
|
|
135
|
-
process.exit(
|
|
136
|
-
}
|
|
137
|
-
tenantId = input;
|
|
138
|
-
}
|
|
139
|
-
// Try to fetch tenant details
|
|
140
|
-
try {
|
|
141
|
-
log.debug('Using mock Control Plane API (no real network calls)');
|
|
142
|
-
selectedTenant = await getTenantDetails(accessToken, tenantId);
|
|
143
|
-
log.debug(`Using: ${selectedTenant.domain}`);
|
|
144
|
-
} catch (error) {
|
|
145
|
-
p.log.error(pc.red('✗ Failed to fetch CMS details'));
|
|
146
|
-
// Check if permission error (403)
|
|
147
|
-
if (error instanceof ControlPlaneError && error.statusCode === 403) {
|
|
148
|
-
p.log.error('You do not have permission to access the provided CMS ID. Please try again.');
|
|
149
|
-
} else if (error instanceof ControlPlaneError && error.statusCode === 404) {
|
|
150
|
-
p.log.error('Tenant ID not found. Verify the ID is correct.');
|
|
151
|
-
} else {
|
|
152
|
-
p.log.error(error instanceof Error ? error.message : 'Unknown error');
|
|
129
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
130
|
+
p.log.error(pc.red(`✗ Unable to fetch project info for "${cmsResourceId}"`));
|
|
131
|
+
p.log.error(pc.dim(`Details: ${message}`));
|
|
132
|
+
process.exit(1);
|
|
153
133
|
}
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
134
|
+
try {
|
|
135
|
+
const envName = options.env ?? process.env.FIGMA_ENVIRONMENT_NAME ?? undefined;
|
|
136
|
+
resolvedEnv = resolveEnvironment({
|
|
137
|
+
environmentName: envName,
|
|
138
|
+
environments: bootstrapInfo.environments
|
|
139
|
+
});
|
|
140
|
+
oauthClientId = bootstrapInfo.oauthCredentials.oauthClientId;
|
|
141
|
+
oauthClientSecret = bootstrapInfo.oauthCredentials.oauthClientSecret;
|
|
142
|
+
} catch (error) {
|
|
143
|
+
p.log.error(pc.red(error instanceof Error ? error.message : 'Unknown error'));
|
|
163
144
|
process.exit(1);
|
|
164
145
|
}
|
|
165
146
|
}
|
|
@@ -171,6 +152,7 @@ import { loginCommand } from './login.js';
|
|
|
171
152
|
log.debug('Project directory detected');
|
|
172
153
|
// Detect Payload
|
|
173
154
|
const projectInfo = await detectPayloadProject();
|
|
155
|
+
const packageManager = await resolvePackageManager(process.cwd());
|
|
174
156
|
if (projectInfo.hasPayload) {
|
|
175
157
|
// Validate existing Payload version
|
|
176
158
|
if (projectInfo.payloadVersion && !validatePayloadVersion(projectInfo.payloadVersion)) {
|
|
@@ -190,19 +172,17 @@ import { loginCommand } from './login.js';
|
|
|
190
172
|
});
|
|
191
173
|
if (!p.isCancel(shouldInstall) && shouldInstall) {
|
|
192
174
|
s.start('Installing dependencies...');
|
|
193
|
-
await installDependencies(process.cwd(),
|
|
175
|
+
await installDependencies(process.cwd(), packageManager);
|
|
194
176
|
s.stop(pc.green('✓ Dependencies installed'));
|
|
195
177
|
}
|
|
196
178
|
}
|
|
197
179
|
s.start('Checking Payload configuration...');
|
|
198
|
-
const modResult = await ensurePayloadFigmaConfig(process.cwd(),
|
|
199
|
-
|
|
200
|
-
tenantId: selectedTenant.id,
|
|
201
|
-
useContentSystem: !options.noContentSystem
|
|
180
|
+
const modResult = await ensurePayloadFigmaConfig(process.cwd(), packageManager, {
|
|
181
|
+
contentSystemId: resolvedEnv?.contentSystemId ?? cmsResourceId
|
|
202
182
|
});
|
|
203
183
|
if (!modResult.success) {
|
|
204
184
|
s.stop(pc.red('✗ Configuration check failed'));
|
|
205
|
-
displayManualInstructions(modResult.error || 'Unknown error');
|
|
185
|
+
displayManualInstructions(modResult.error || 'Unknown error', packageManager);
|
|
206
186
|
process.exit(1);
|
|
207
187
|
}
|
|
208
188
|
if (modResult.modified) {
|
|
@@ -219,62 +199,79 @@ import { loginCommand } from './login.js';
|
|
|
219
199
|
p.log.warn(pc.yellow(`⚠ ${warning}`));
|
|
220
200
|
});
|
|
221
201
|
}
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
202
|
+
// Write environment variables to .env file
|
|
203
|
+
try {
|
|
204
|
+
await addOrUpdateEnvVar(process.cwd(), 'FIGMA_PROJECT_ID', cmsResourceId);
|
|
205
|
+
await addOrUpdateEnvVar(process.cwd(), 'FIGMA_ENVIRONMENT_NAME', resolvedEnv?.name ?? 'production');
|
|
206
|
+
log.debug('Added FIGMA_PROJECT_ID and FIGMA_ENVIRONMENT_NAME to .env file');
|
|
207
|
+
const infraEnv = getInfraEnvironment();
|
|
208
|
+
if (infraEnv !== 'production') {
|
|
209
|
+
await addOrUpdateEnvVar(process.cwd(), 'FIGMA_INFRA_ENV', infraEnv);
|
|
210
|
+
log.debug(`Added FIGMA_INFRA_ENV=${infraEnv} to .env file`);
|
|
211
|
+
}
|
|
212
|
+
// Cache all environments in local encrypted store
|
|
213
|
+
if (bootstrapInfo && oauthClientId && oauthClientSecret) {
|
|
214
|
+
cacheAllEnvironments(tokenStore, cmsResourceId, bootstrapInfo);
|
|
215
|
+
}
|
|
216
|
+
} catch (error) {
|
|
217
|
+
p.log.warn(pc.yellow(`⚠ Failed to update .env file: ${error instanceof Error ? error.message : 'Unknown error'}`));
|
|
236
218
|
}
|
|
237
|
-
|
|
238
|
-
p.log.
|
|
239
|
-
p.note('
|
|
219
|
+
} else {
|
|
220
|
+
p.log.warn(pc.yellow('⚠ Payload was not detected in this project'));
|
|
221
|
+
p.note('Run this command in a directory without an existing project or in an existing Payload project.', 'Action Required');
|
|
240
222
|
process.exit(1);
|
|
241
223
|
}
|
|
224
|
+
// Generate import map to prevent errors on first dev run
|
|
225
|
+
const importMapResult = await runScript(process.cwd(), 'generate:importmap', packageManager);
|
|
226
|
+
if (!importMapResult) {
|
|
227
|
+
p.log.warn(pc.yellow('⚠ Import map generation failed — it will be generated on first dev run'));
|
|
228
|
+
}
|
|
229
|
+
// Apply Lambda modifications (run.sh, standalone output, lambda:buildzip script)
|
|
230
|
+
await applyLambdaModifications(process.cwd(), packageManager);
|
|
231
|
+
// Ensure .gitignore has required entries
|
|
232
|
+
await ensureGitignore(process.cwd(), [
|
|
233
|
+
'.env',
|
|
234
|
+
'.env.local',
|
|
235
|
+
'lambda.zip'
|
|
236
|
+
]);
|
|
242
237
|
// Generate project token (unless skipping auth)
|
|
243
|
-
if (!options.skipAuth) {
|
|
244
|
-
await generateProjectTokenWithFeedback(tokenStore,
|
|
238
|
+
if (!options.skipAuth && resolvedEnv) {
|
|
239
|
+
await generateProjectTokenWithFeedback(tokenStore, resolvedEnv.contentSystemId, s);
|
|
245
240
|
}
|
|
246
241
|
// Success message for existing project
|
|
247
242
|
p.outro(pc.green('✓ Project initialized successfully!'));
|
|
248
243
|
const nextSteps = [
|
|
249
|
-
|
|
250
|
-
'Start development server: `pnpm dev`',
|
|
251
|
-
`Access your CMS at: ${pc.cyan(`https://${selectedTenant.domain}`)}`
|
|
244
|
+
`Start development server: \`${getRunCommand(packageManager)} dev\``
|
|
252
245
|
].filter(Boolean);
|
|
253
246
|
p.note(nextSteps.join('\n'), 'Next Steps');
|
|
254
247
|
} else {
|
|
255
248
|
// ===== NEW PROJECT FLOW =====
|
|
256
249
|
// p.log.info('No project detected - Creating New Project')
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
250
|
+
let projectPath;
|
|
251
|
+
if (options.name) {
|
|
252
|
+
projectPath = options.name;
|
|
253
|
+
} else {
|
|
254
|
+
const projectPathInput = await p.text({
|
|
255
|
+
initialValue: './',
|
|
256
|
+
message: 'Enter path to create project:',
|
|
257
|
+
placeholder: './my-cms-project',
|
|
258
|
+
validate: (value)=>{
|
|
259
|
+
if (!value) {
|
|
260
|
+
return 'Path is required';
|
|
261
|
+
}
|
|
262
|
+
// Allow relative or absolute paths
|
|
263
|
+
return undefined;
|
|
265
264
|
}
|
|
266
|
-
|
|
267
|
-
|
|
265
|
+
});
|
|
266
|
+
if (p.isCancel(projectPathInput)) {
|
|
267
|
+
p.cancel('Operation cancelled');
|
|
268
|
+
process.exit(0);
|
|
268
269
|
}
|
|
269
|
-
|
|
270
|
-
if (p.isCancel(projectPathInput)) {
|
|
271
|
-
p.cancel('Operation cancelled');
|
|
272
|
-
process.exit(0);
|
|
270
|
+
projectPath = projectPathInput;
|
|
273
271
|
}
|
|
274
|
-
const projectPath = projectPathInput;
|
|
275
272
|
const fullPath = path.resolve(process.cwd(), projectPath);
|
|
276
|
-
|
|
277
|
-
const
|
|
273
|
+
const projectName = path.basename(fullPath);
|
|
274
|
+
const packageManager = detectPackageManagerFromEnvironment();
|
|
278
275
|
// Create directory
|
|
279
276
|
try {
|
|
280
277
|
await fs.mkdir(fullPath, {
|
|
@@ -287,10 +284,10 @@ import { loginCommand } from './login.js';
|
|
|
287
284
|
// Scaffold project
|
|
288
285
|
s.start('Downloading template from GitHub...');
|
|
289
286
|
try {
|
|
290
|
-
await scaffoldProject(fullPath, projectName);
|
|
287
|
+
await scaffoldProject(fullPath, projectName, packageManager);
|
|
291
288
|
s.stop(pc.green('✓ Template downloaded'));
|
|
292
289
|
s.start('Installing dependencies...');
|
|
293
|
-
await installDependencies(fullPath,
|
|
290
|
+
await installDependencies(fullPath, packageManager);
|
|
294
291
|
s.stop(pc.green('✓ Dependencies installed'));
|
|
295
292
|
} catch (error) {
|
|
296
293
|
s.stop(pc.red('✗ Failed'));
|
|
@@ -299,14 +296,12 @@ import { loginCommand } from './login.js';
|
|
|
299
296
|
}
|
|
300
297
|
// Modify Payload configuration
|
|
301
298
|
s.start('Checking Payload configuration...');
|
|
302
|
-
const modResult = await ensurePayloadFigmaConfig(fullPath,
|
|
303
|
-
|
|
304
|
-
tenantId: selectedTenant.id,
|
|
305
|
-
useContentSystem: !options.noContentSystem
|
|
299
|
+
const modResult = await ensurePayloadFigmaConfig(fullPath, packageManager, {
|
|
300
|
+
contentSystemId: resolvedEnv?.contentSystemId ?? cmsResourceId
|
|
306
301
|
});
|
|
307
302
|
if (!modResult.success) {
|
|
308
303
|
s.stop(pc.red('✗ Configuration check failed'));
|
|
309
|
-
displayManualInstructions(modResult.error || 'Unknown error');
|
|
304
|
+
displayManualInstructions(modResult.error || 'Unknown error', packageManager);
|
|
310
305
|
process.exit(1);
|
|
311
306
|
}
|
|
312
307
|
if (modResult.modified) {
|
|
@@ -323,9 +318,31 @@ import { loginCommand } from './login.js';
|
|
|
323
318
|
p.log.warn(pc.yellow(`⚠ ${warning}`));
|
|
324
319
|
});
|
|
325
320
|
}
|
|
321
|
+
// Write environment variables to .env file
|
|
322
|
+
try {
|
|
323
|
+
await addOrUpdateEnvVar(fullPath, 'FIGMA_PROJECT_ID', cmsResourceId);
|
|
324
|
+
await addOrUpdateEnvVar(fullPath, 'FIGMA_ENVIRONMENT_NAME', resolvedEnv?.name ?? 'production');
|
|
325
|
+
log.debug('Added FIGMA_PROJECT_ID and FIGMA_ENVIRONMENT_NAME to .env file');
|
|
326
|
+
const infraEnv = getInfraEnvironment();
|
|
327
|
+
if (infraEnv !== 'production') {
|
|
328
|
+
await addOrUpdateEnvVar(fullPath, 'FIGMA_INFRA_ENV', infraEnv);
|
|
329
|
+
log.debug(`Added FIGMA_INFRA_ENV=${infraEnv} to .env file`);
|
|
330
|
+
}
|
|
331
|
+
// Cache all environments in local encrypted store
|
|
332
|
+
if (bootstrapInfo && oauthClientId && oauthClientSecret) {
|
|
333
|
+
cacheAllEnvironments(tokenStore, cmsResourceId, bootstrapInfo);
|
|
334
|
+
}
|
|
335
|
+
} catch (error) {
|
|
336
|
+
p.log.warn(pc.yellow(`⚠ Failed to update .env file: ${error instanceof Error ? error.message : 'Unknown error'}`));
|
|
337
|
+
}
|
|
338
|
+
// Generate import map to prevent errors on first dev run
|
|
339
|
+
const importMapResult = await runScript(fullPath, 'generate:importmap', packageManager);
|
|
340
|
+
if (!importMapResult) {
|
|
341
|
+
p.log.warn(pc.yellow('⚠ Import map generation failed — it will be generated on first dev run'));
|
|
342
|
+
}
|
|
326
343
|
// Generate project token (unless skipping auth)
|
|
327
|
-
if (!options.skipAuth) {
|
|
328
|
-
await generateProjectTokenWithFeedback(tokenStore,
|
|
344
|
+
if (!options.skipAuth && resolvedEnv) {
|
|
345
|
+
await generateProjectTokenWithFeedback(tokenStore, resolvedEnv.contentSystemId, s);
|
|
329
346
|
}
|
|
330
347
|
// Initialize git repository (after all files including lock file are ready)
|
|
331
348
|
initializeGitRepo(fullPath);
|
|
@@ -337,7 +354,7 @@ import { loginCommand } from './login.js';
|
|
|
337
354
|
if (relativePath && relativePath !== '.') {
|
|
338
355
|
nextSteps.push(`cd ${relativePath}`);
|
|
339
356
|
}
|
|
340
|
-
nextSteps.push(
|
|
357
|
+
nextSteps.push(`${getRunCommand(packageManager)} dev or follow directions in README.md`, '', 'Documentation:', '- Getting Started: https://payloadcms.com/docs/getting-started/what-is-payload', '- Configuration: https://payloadcms.com/docs/configuration/overview');
|
|
341
358
|
p.note(nextSteps.join('\n'), 'Next Steps');
|
|
342
359
|
p.outro(pc.green('✓ Done'));
|
|
343
360
|
}
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
* Options for list-tokens command
|
|
3
3
|
*/
|
|
4
4
|
export interface ListTokensCommandOptions {
|
|
5
|
+
/** Show all environments */
|
|
6
|
+
all?: boolean;
|
|
5
7
|
/** Enable debug mode */
|
|
6
8
|
debug?: boolean;
|
|
7
9
|
}
|
|
@@ -9,8 +11,6 @@ export interface ListTokensCommandOptions {
|
|
|
9
11
|
* Handle the `@payloadcms/figma list-tokens` command
|
|
10
12
|
*
|
|
11
13
|
* Displays stored token information including OAuth and project tokens.
|
|
12
|
-
*
|
|
13
|
-
* @param _options - Command options (unused)
|
|
14
14
|
*/
|
|
15
|
-
export declare function listTokensCommand(
|
|
15
|
+
export declare function listTokensCommand(options?: ListTokensCommandOptions): void;
|
|
16
16
|
//# sourceMappingURL=list-tokens.d.ts.map
|
|
@@ -1,25 +1,40 @@
|
|
|
1
1
|
import * as p from '@clack/prompts';
|
|
2
2
|
import pc from 'picocolors';
|
|
3
|
-
import {
|
|
3
|
+
import { getTokenStore } from '../auth/token-store.js';
|
|
4
|
+
import { getInfraEnvironment } from '../constants.js';
|
|
5
|
+
import { formatEnvSuffix } from '../utils/format-env-suffix.js';
|
|
4
6
|
import { isDebug } from '../utils/is-debug.js';
|
|
5
7
|
import { formatTimestamp, maskToken, showProjectTokens } from '../utils/token-display.js';
|
|
8
|
+
const ALL_ENVIRONMENTS = [
|
|
9
|
+
'production',
|
|
10
|
+
'staging'
|
|
11
|
+
];
|
|
6
12
|
/**
|
|
7
13
|
* Handle the `@payloadcms/figma list-tokens` command
|
|
8
14
|
*
|
|
9
15
|
* Displays stored token information including OAuth and project tokens.
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
16
|
+
*/ export function listTokensCommand(options = {}) {
|
|
17
|
+
if (options.all) {
|
|
18
|
+
// Show detailed info for all environments
|
|
19
|
+
for (const env of ALL_ENVIRONMENTS){
|
|
20
|
+
showTokenDetails(env);
|
|
21
|
+
}
|
|
22
|
+
} else {
|
|
23
|
+
// Show detailed info for current environment only
|
|
24
|
+
showTokenDetails(getInfraEnvironment());
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
function showTokenDetails(env) {
|
|
28
|
+
const tokenStore = getTokenStore(env);
|
|
14
29
|
const tokens = tokenStore.getTokens();
|
|
15
30
|
if (!tokens) {
|
|
16
|
-
p.log.warn(pc.yellow(
|
|
31
|
+
p.log.warn(pc.yellow(`No tokens found${formatEnvSuffix(env, ' for ')}. Not authenticated.`));
|
|
17
32
|
p.note(`Run ${pc.cyan('@payloadcms/figma login')} to authenticate`, 'Tip');
|
|
18
33
|
return;
|
|
19
34
|
}
|
|
20
35
|
const isValid = tokenStore.hasValidTokens();
|
|
21
36
|
const status = isValid ? pc.green('✓ Valid') : pc.red('✗ Expired');
|
|
22
|
-
p.log.step(pc.bold('
|
|
37
|
+
p.log.step(pc.bold(`Token Status${formatEnvSuffix(env, ' (', ')')}`));
|
|
23
38
|
// Build OAuth token info display
|
|
24
39
|
const lines = [
|
|
25
40
|
`Status: ${status}`,
|
package/dist/commands/login.d.ts
CHANGED
|
@@ -1,8 +1,15 @@
|
|
|
1
|
+
type LoginArgs = {
|
|
2
|
+
/** Set this to show next steps after login
|
|
3
|
+
* @default true
|
|
4
|
+
*/
|
|
5
|
+
showNextSteps: boolean;
|
|
6
|
+
};
|
|
1
7
|
/**
|
|
2
8
|
* Handle the `@payloadcms/figma login` command
|
|
3
9
|
*
|
|
4
10
|
* Authenticates the user with Figma OAuth2 and stores tokens locally.
|
|
5
11
|
* If valid tokens already exist, shows an error message.
|
|
6
12
|
*/
|
|
7
|
-
export declare function loginCommand(): Promise<void>;
|
|
13
|
+
export declare function loginCommand(args?: LoginArgs): Promise<void>;
|
|
14
|
+
export {};
|
|
8
15
|
//# sourceMappingURL=login.d.ts.map
|
package/dist/commands/login.js
CHANGED
|
@@ -1,22 +1,29 @@
|
|
|
1
1
|
import * as p from '@clack/prompts';
|
|
2
2
|
import pc from 'picocolors';
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
3
|
+
import { CallbackError } from '../auth/callback-server.js';
|
|
4
|
+
import { executeOAuthFlow, getValidCredential, OAuthFlowError } from '../auth/oauth-flow.js';
|
|
5
|
+
import { getTokenStore } from '../auth/token-store.js';
|
|
6
|
+
import { getOAuthConfig } from '../config/oauth.js';
|
|
7
|
+
import { getInfraEnvironment } from '../constants.js';
|
|
8
|
+
import { formatEnvSuffix } from '../utils/format-env-suffix.js';
|
|
6
9
|
import * as log from '../utils/log.js';
|
|
7
10
|
/**
|
|
8
11
|
* Handle the `@payloadcms/figma login` command
|
|
9
12
|
*
|
|
10
13
|
* Authenticates the user with Figma OAuth2 and stores tokens locally.
|
|
11
14
|
* If valid tokens already exist, shows an error message.
|
|
12
|
-
*/ export async function loginCommand() {
|
|
13
|
-
const
|
|
15
|
+
*/ export async function loginCommand(args) {
|
|
16
|
+
const { showNextSteps } = args || {
|
|
17
|
+
showNextSteps: false
|
|
18
|
+
};
|
|
19
|
+
const env = getInfraEnvironment();
|
|
20
|
+
const tokenStore = getTokenStore(env);
|
|
14
21
|
// Check for existing valid tokens
|
|
15
22
|
try {
|
|
16
|
-
const
|
|
17
|
-
if (
|
|
23
|
+
const existingCredential = await getValidCredential(tokenStore);
|
|
24
|
+
if (existingCredential) {
|
|
18
25
|
const tokens = tokenStore.getTokens();
|
|
19
|
-
p.log.warn(pc.yellow(
|
|
26
|
+
p.log.warn(pc.yellow(`Already logged in${formatEnvSuffix(env)}`));
|
|
20
27
|
if (tokens?.userId) {
|
|
21
28
|
log.info(`User ID: ${tokens.userId}`);
|
|
22
29
|
}
|
|
@@ -30,28 +37,39 @@ import * as log from '../utils/log.js';
|
|
|
30
37
|
}
|
|
31
38
|
// Start OAuth flow
|
|
32
39
|
await handleAuthentication({
|
|
40
|
+
showNextSteps,
|
|
33
41
|
tokenStore
|
|
34
42
|
});
|
|
35
43
|
}
|
|
36
44
|
/**
|
|
37
45
|
* Handle authentication flow
|
|
38
|
-
*/ async function handleAuthentication({ tokenStore }) {
|
|
46
|
+
*/ async function handleAuthentication({ showNextSteps, tokenStore }) {
|
|
39
47
|
try {
|
|
40
48
|
// Execute OAuth flow
|
|
49
|
+
const oauthConfig = getOAuthConfig();
|
|
41
50
|
const result = await executeOAuthFlow(tokenStore, {
|
|
42
|
-
clientId:
|
|
43
|
-
redirectUri:
|
|
44
|
-
scopes:
|
|
51
|
+
clientId: oauthConfig.clientId,
|
|
52
|
+
redirectUri: oauthConfig.redirectUri,
|
|
53
|
+
scopes: oauthConfig.scopes
|
|
45
54
|
});
|
|
46
|
-
|
|
55
|
+
const env = getInfraEnvironment();
|
|
56
|
+
p.log.success(pc.green(`✓ Logged in${formatEnvSuffix(env)}`));
|
|
47
57
|
if (result.userId) {
|
|
48
58
|
log.debug(`User ID: ${result.userId}`);
|
|
49
59
|
}
|
|
50
60
|
log.debug(`Token storage: ${pc.dim(tokenStore.getStoragePath())}`);
|
|
51
|
-
// Show next steps
|
|
52
|
-
|
|
61
|
+
// Show next steps unless disabled
|
|
62
|
+
if (showNextSteps !== false) {
|
|
63
|
+
p.note(` ${pc.cyan('@payloadcms/figma init')} Create a new CMS instance`, 'Next Steps');
|
|
64
|
+
}
|
|
53
65
|
} catch (error) {
|
|
54
66
|
if (error instanceof OAuthFlowError) {
|
|
67
|
+
const isTimeout = error.cause instanceof CallbackError && error.cause.code === 'timeout';
|
|
68
|
+
if (isTimeout) {
|
|
69
|
+
p.log.error(pc.red('✗ Authentication timed out.'));
|
|
70
|
+
p.note(`Run ${pc.cyan('@payloadcms/figma login')} to try again.`, 'Tip');
|
|
71
|
+
process.exit(1);
|
|
72
|
+
}
|
|
55
73
|
log.error(error.message);
|
|
56
74
|
if (error.cause) {
|
|
57
75
|
log.debug(`Cause: ${error.cause.message}`);
|
|
@@ -2,15 +2,16 @@
|
|
|
2
2
|
* Options for logout command
|
|
3
3
|
*/
|
|
4
4
|
export interface LogoutCommandOptions {
|
|
5
|
+
/** Logout from all environments */
|
|
6
|
+
all?: boolean;
|
|
5
7
|
/** Enable debug mode */
|
|
6
8
|
debug?: boolean;
|
|
7
9
|
}
|
|
8
10
|
/**
|
|
9
11
|
* Handle the `@payloadcms/figma logout` command
|
|
10
12
|
*
|
|
11
|
-
* Clears
|
|
12
|
-
*
|
|
13
|
-
* @param _options - Command options (unused)
|
|
13
|
+
* Clears stored tokens (OAuth and project tokens) after confirmation.
|
|
14
|
+
* By default clears only current environment. Use --all for all environments.
|
|
14
15
|
*/
|
|
15
|
-
export declare function logoutCommand(
|
|
16
|
+
export declare function logoutCommand(options?: LogoutCommandOptions): Promise<void>;
|
|
16
17
|
//# sourceMappingURL=logout.d.ts.map
|