@payloadcms/figma 0.0.1-alpha.2 → 0.0.1-alpha.21

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.
Files changed (98) hide show
  1. package/dist/api/control-plane.d.ts +1 -1
  2. package/dist/api/control-plane.d.ts.map +1 -1
  3. package/dist/api/control-plane.js +9 -5
  4. package/dist/api/control-plane.js.map +1 -1
  5. package/dist/api/figma-api.d.ts.map +1 -1
  6. package/dist/api/figma-api.js +33 -10
  7. package/dist/api/figma-api.js.map +1 -1
  8. package/dist/auth/crypto-utils.d.ts.map +1 -1
  9. package/dist/auth/crypto-utils.js +5 -5
  10. package/dist/auth/crypto-utils.js.map +1 -1
  11. package/dist/auth/oauth-flow.js +3 -3
  12. package/dist/auth/oauth-flow.js.map +1 -1
  13. package/dist/auth/project-token.d.ts.map +1 -1
  14. package/dist/auth/project-token.js +9 -4
  15. package/dist/auth/project-token.js.map +1 -1
  16. package/dist/auth/token-store.d.ts +10 -0
  17. package/dist/auth/token-store.d.ts.map +1 -1
  18. package/dist/auth/token-store.js +20 -0
  19. package/dist/auth/token-store.js.map +1 -1
  20. package/dist/cli.js +1 -0
  21. package/dist/cli.js.map +1 -1
  22. package/dist/commands/deploy.d.ts +2 -0
  23. package/dist/commands/deploy.d.ts.map +1 -1
  24. package/dist/commands/deploy.js +16 -34
  25. package/dist/commands/deploy.js.map +1 -1
  26. package/dist/commands/init.d.ts +1 -5
  27. package/dist/commands/init.d.ts.map +1 -1
  28. package/dist/commands/init.js +35 -86
  29. package/dist/commands/init.js.map +1 -1
  30. package/dist/commands/list-tokens.js +2 -2
  31. package/dist/commands/list-tokens.js.map +1 -1
  32. package/dist/commands/login.d.ts +8 -1
  33. package/dist/commands/login.d.ts.map +1 -1
  34. package/dist/commands/login.js +12 -6
  35. package/dist/commands/login.js.map +1 -1
  36. package/dist/commands/logout.js +2 -2
  37. package/dist/commands/logout.js.map +1 -1
  38. package/dist/config/oauth.d.ts.map +1 -1
  39. package/dist/config/oauth.js +3 -3
  40. package/dist/config/oauth.js.map +1 -1
  41. package/dist/db-adapter.d.ts +17 -0
  42. package/dist/db-adapter.d.ts.map +1 -0
  43. package/dist/db-adapter.js +760 -0
  44. package/dist/db-adapter.js.map +1 -0
  45. package/dist/endpoints/health.d.ts +3 -0
  46. package/dist/endpoints/health.d.ts.map +1 -0
  47. package/dist/endpoints/health.js +11 -0
  48. package/dist/endpoints/health.js.map +1 -0
  49. package/dist/exports/client.d.ts +3 -0
  50. package/dist/exports/client.d.ts.map +1 -0
  51. package/dist/exports/client.js +4 -0
  52. package/dist/exports/client.js.map +1 -0
  53. package/dist/oauth/components/LoginButton/index.d.ts.map +1 -1
  54. package/dist/oauth/components/LoginButton/index.js +50 -6
  55. package/dist/oauth/components/LoginButton/index.js.map +1 -1
  56. package/dist/oauth/components/LoginButton/index.scss +50 -3
  57. package/dist/oauth/components/LogoutButton/index.d.ts.map +1 -1
  58. package/dist/oauth/components/LogoutButton/index.js +0 -1
  59. package/dist/oauth/components/LogoutButton/index.js.map +1 -1
  60. package/dist/oauth/endpoints/getLoginEndpoint.d.ts.map +1 -1
  61. package/dist/oauth/endpoints/getLoginEndpoint.js +1 -1
  62. package/dist/oauth/endpoints/getLoginEndpoint.js.map +1 -1
  63. package/dist/oauth/index.d.ts.map +1 -1
  64. package/dist/oauth/index.js +30 -6
  65. package/dist/oauth/index.js.map +1 -1
  66. package/dist/oauth/strategy/index.d.ts.map +1 -1
  67. package/dist/oauth/strategy/index.js.map +1 -1
  68. package/dist/oauth/types.d.ts +1 -1
  69. package/dist/oauth/types.d.ts.map +1 -1
  70. package/dist/oauth/types.js.map +1 -1
  71. package/dist/oauth/utilities/createCookieOptions.d.ts.map +1 -1
  72. package/dist/oauth/utilities/createCookieOptions.js.map +1 -1
  73. package/dist/oauth/utilities/refreshTokens.d.ts.map +1 -1
  74. package/dist/oauth/utilities/refreshTokens.js +1 -1
  75. package/dist/oauth/utilities/refreshTokens.js.map +1 -1
  76. package/dist/plugin/build-config.d.ts +20 -6
  77. package/dist/plugin/build-config.d.ts.map +1 -1
  78. package/dist/plugin/build-config.js +33 -14
  79. package/dist/plugin/build-config.js.map +1 -1
  80. package/dist/utils/env-management.d.ts +4 -11
  81. package/dist/utils/env-management.d.ts.map +1 -1
  82. package/dist/utils/env-management.js +46 -79
  83. package/dist/utils/env-management.js.map +1 -1
  84. package/dist/utils/messages.d.ts.map +1 -1
  85. package/dist/utils/messages.js +5 -7
  86. package/dist/utils/messages.js.map +1 -1
  87. package/dist/utils/payload-config-ast.d.ts +2 -3
  88. package/dist/utils/payload-config-ast.d.ts.map +1 -1
  89. package/dist/utils/payload-config-ast.js +34 -18
  90. package/dist/utils/payload-config-ast.js.map +1 -1
  91. package/dist/utils/project.d.ts.map +1 -1
  92. package/dist/utils/project.js +1 -3
  93. package/dist/utils/project.js.map +1 -1
  94. package/dist/utils/s3-upload.d.ts +0 -1
  95. package/dist/utils/s3-upload.d.ts.map +1 -1
  96. package/dist/utils/s3-upload.js +10 -3
  97. package/dist/utils/s3-upload.js.map +1 -1
  98. package/package.json +10 -5
@@ -1 +1 @@
1
- {"version":3,"file":"s3-upload.d.ts","sourceRoot":"","sources":["../../src/utils/s3-upload.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,oDAAoD;IACpD,YAAY,EAAE,MAAM,CAAA;IACpB,oDAAoD;IACpD,cAAc,EAAE,MAAM,CAAA;IACtB,uCAAuC;IACvC,cAAc,EAAE,OAAO,CAAA;IACvB,2BAA2B;IAC3B,kBAAkB,EAAE,MAAM,CAAA;CAC3B;AAsBD;;;;;;;;;GASG;AACH,wBAAsB,UAAU,CAC9B,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC,CA6Cf;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEvF;AAED;;;;;;;;;GASG;AACH,wBAAsB,kBAAkB,CACtC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACjC,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,GACrD,OAAO,CAAC,aAAa,CAAC,CAgDxB"}
1
+ {"version":3,"file":"s3-upload.d.ts","sourceRoot":"","sources":["../../src/utils/s3-upload.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,oDAAoD;IACpD,YAAY,EAAE,MAAM,CAAA;IACpB,oDAAoD;IACpD,cAAc,EAAE,MAAM,CAAA;IACtB,uCAAuC;IACvC,cAAc,EAAE,OAAO,CAAA;IACvB,2BAA2B;IAC3B,kBAAkB,EAAE,MAAM,CAAA;CAC3B;AAsBD;;;;;;;;GAQG;AACH,wBAAsB,UAAU,CAC9B,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC,CAuDf;AAED;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAEvF;AAED;;;;;;;;;GASG;AACH,wBAAsB,kBAAkB,CACtC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACjC,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,GACrD,OAAO,CAAC,aAAa,CAAC,CAgDxB"}
@@ -23,7 +23,6 @@ const INITIAL_RETRY_DELAY = 1000 // 1 second
23
23
  *
24
24
  * @param filePath - Absolute path to file to upload
25
25
  * @param signedUrl - Signed S3 upload URL
26
- * @param contentType - MIME type (optional)
27
26
  * @throws Error if upload fails after retries
28
27
  */ export async function uploadFile(filePath, signedUrl, contentType) {
29
28
  // Skip actual upload for mock URLs
@@ -45,10 +44,18 @@ const INITIAL_RETRY_DELAY = 1000 // 1 second
45
44
  let lastError = null;
46
45
  for(let attempt = 0; attempt < MAX_RETRIES; attempt++){
47
46
  try {
47
+ // Content-type only needed if css or js, else let S3 infer
48
+ const ext = path.extname(filePath).toLowerCase();
49
+ let determinedContentType = contentType;
50
+ if (ext === '.js') {
51
+ determinedContentType = 'application/javascript';
52
+ } else if (ext === '.css') {
53
+ determinedContentType = 'text/css';
54
+ }
48
55
  const response = await fetch(signedUrl, {
49
56
  body: fileBuffer,
50
- headers: contentType ? {
51
- 'Content-Type': contentType
57
+ headers: determinedContentType ? {
58
+ 'Content-Type': determinedContentType
52
59
  } : {},
53
60
  method: 'PUT'
54
61
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/utils/s3-upload.ts"],"sourcesContent":["import fs from 'fs/promises'\nimport path from 'path'\n\nimport * as log from './log.js'\n\n/**\n * Results from uploading assets\n */\nexport interface UploadResults {\n /** Number of static assets that failed to upload */\n assetsFailed: number\n /** Number of static assets successfully uploaded */\n assetsUploaded: number\n /** Whether Lambda code was uploaded */\n lambdaUploaded: boolean\n /** Total bytes uploaded */\n totalBytesUploaded: number\n}\n\n/**\n * Retry configuration\n */\nconst MAX_RETRIES = 3\nconst INITIAL_RETRY_DELAY = 1000 // 1 second\n\n/**\n * Sleep for specified milliseconds\n */\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms))\n}\n\n/**\n * Check if a signed URL is a mock URL\n */\nfunction isMockUrl(signedUrl: string): boolean {\n return signedUrl.includes('X-Amz-Signature=mock')\n}\n\n/**\n * Upload a file to S3 using a signed URL\n *\n * Retries up to 3 times with exponential backoff\n *\n * @param filePath - Absolute path to file to upload\n * @param signedUrl - Signed S3 upload URL\n * @param contentType - MIME type (optional)\n * @throws Error if upload fails after retries\n */\nexport async function uploadFile(\n filePath: string,\n signedUrl: string,\n contentType?: string,\n): Promise<void> {\n // Skip actual upload for mock URLs\n if (isMockUrl(signedUrl)) {\n log.debug(`Mock upload detected for ${path.basename(filePath)}`)\n // Verify file exists\n const stats = await fs.stat(filePath)\n\n // Simulate upload latency based on file size\n // lambda.zip: ~1-2 seconds, small files: 50-150ms\n const isLargeFile = stats.size > 1024 * 1024 // > 1MB\n const latency = isLargeFile\n ? 1000 + Math.random() * 1000 // 1-2 seconds for large files\n : 50 + Math.random() * 100 // 50-150ms for small files\n await sleep(latency)\n return\n }\n\n const fileBuffer = await fs.readFile(filePath)\n\n let lastError: Error | null = null\n\n for (let attempt = 0; attempt < MAX_RETRIES; attempt++) {\n try {\n const response = await fetch(signedUrl, {\n body: fileBuffer,\n headers: contentType ? { 'Content-Type': contentType } : {},\n method: 'PUT',\n })\n\n if (response.ok) {\n return // Success\n }\n\n lastError = new Error(`Upload failed: ${response.status} ${response.statusText}`)\n } catch (error) {\n lastError = error instanceof Error ? error : new Error('Unknown error')\n }\n\n // Wait before retry (exponential backoff)\n if (attempt < MAX_RETRIES - 1) {\n await sleep(INITIAL_RETRY_DELAY * Math.pow(2, attempt))\n }\n }\n\n throw lastError || new Error('Upload failed after retries')\n}\n\n/**\n * Upload Lambda code zip to S3\n *\n * @param zipPath - Path to lambda.zip\n * @param signedUrl - Signed S3 upload URL\n */\nexport async function uploadLambdaZip(zipPath: string, signedUrl: string): Promise<void> {\n await uploadFile(zipPath, signedUrl, 'application/zip')\n}\n\n/**\n * Upload static assets to S3 in parallel\n *\n * Uploads up to 5 files concurrently\n *\n * @param projectPath - Path to project root\n * @param assetUrls - Map of asset paths to signed URLs\n * @param onProgress - Optional callback for progress updates (uploaded, total)\n * @returns Upload results with counts\n */\nexport async function uploadStaticAssets(\n projectPath: string,\n assetUrls: Record<string, string>,\n onProgress?: (uploaded: number, total: number) => void,\n): Promise<UploadResults> {\n const results: UploadResults = {\n assetsFailed: 0,\n assetsUploaded: 0,\n lambdaUploaded: false,\n totalBytesUploaded: 0,\n }\n\n const assetPaths = Object.keys(assetUrls)\n\n if (assetPaths.length === 0) {\n return results\n }\n\n // Upload assets with limited concurrency\n const CONCURRENCY = 5\n for (let i = 0; i < assetPaths.length; i += CONCURRENCY) {\n const batch = assetPaths.slice(i, i + CONCURRENCY)\n\n await Promise.all(\n batch.map(async (assetPath) => {\n try {\n // Convert _next back to .next for file system\n const fsPath = assetPath.replace(/^_next\\//, '.next/')\n const fullPath = path.join(projectPath, fsPath)\n const signedUrl = assetUrls[assetPath]\n\n await uploadFile(fullPath, signedUrl)\n\n results.assetsUploaded++\n\n // Track bytes uploaded\n const stats = await fs.stat(fullPath)\n results.totalBytesUploaded += stats.size\n\n // Report progress\n onProgress?.(results.assetsUploaded, assetPaths.length)\n } catch (error) {\n results.assetsFailed++\n log.debug(\n `Failed to upload ${assetPath}: ${error instanceof Error ? error.message : 'Unknown error'}`,\n )\n }\n }),\n )\n }\n\n return results\n}\n"],"names":["fs","path","log","MAX_RETRIES","INITIAL_RETRY_DELAY","sleep","ms","Promise","resolve","setTimeout","isMockUrl","signedUrl","includes","uploadFile","filePath","contentType","debug","basename","stats","stat","isLargeFile","size","latency","Math","random","fileBuffer","readFile","lastError","attempt","response","fetch","body","headers","method","ok","Error","status","statusText","error","pow","uploadLambdaZip","zipPath","uploadStaticAssets","projectPath","assetUrls","onProgress","results","assetsFailed","assetsUploaded","lambdaUploaded","totalBytesUploaded","assetPaths","Object","keys","length","CONCURRENCY","i","batch","slice","all","map","assetPath","fsPath","replace","fullPath","join","message"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/utils/s3-upload.ts"],"sourcesContent":["import fs from 'fs/promises'\nimport path from 'path'\n\nimport * as log from './log.js'\n\n/**\n * Results from uploading assets\n */\nexport interface UploadResults {\n /** Number of static assets that failed to upload */\n assetsFailed: number\n /** Number of static assets successfully uploaded */\n assetsUploaded: number\n /** Whether Lambda code was uploaded */\n lambdaUploaded: boolean\n /** Total bytes uploaded */\n totalBytesUploaded: number\n}\n\n/**\n * Retry configuration\n */\nconst MAX_RETRIES = 3\nconst INITIAL_RETRY_DELAY = 1000 // 1 second\n\n/**\n * Sleep for specified milliseconds\n */\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms))\n}\n\n/**\n * Check if a signed URL is a mock URL\n */\nfunction isMockUrl(signedUrl: string): boolean {\n return signedUrl.includes('X-Amz-Signature=mock')\n}\n\n/**\n * Upload a file to S3 using a signed URL\n *\n * Retries up to 3 times with exponential backoff\n *\n * @param filePath - Absolute path to file to upload\n * @param signedUrl - Signed S3 upload URL\n * @throws Error if upload fails after retries\n */\nexport async function uploadFile(\n filePath: string,\n signedUrl: string,\n contentType?: string,\n): Promise<void> {\n // Skip actual upload for mock URLs\n if (isMockUrl(signedUrl)) {\n log.debug(`Mock upload detected for ${path.basename(filePath)}`)\n // Verify file exists\n const stats = await fs.stat(filePath)\n\n // Simulate upload latency based on file size\n // lambda.zip: ~1-2 seconds, small files: 50-150ms\n const isLargeFile = stats.size > 1024 * 1024 // > 1MB\n const latency = isLargeFile\n ? 1000 + Math.random() * 1000 // 1-2 seconds for large files\n : 50 + Math.random() * 100 // 50-150ms for small files\n await sleep(latency)\n return\n }\n\n const fileBuffer = await fs.readFile(filePath)\n\n let lastError: Error | null = null\n\n for (let attempt = 0; attempt < MAX_RETRIES; attempt++) {\n try {\n // Content-type only needed if css or js, else let S3 infer\n const ext = path.extname(filePath).toLowerCase()\n\n let determinedContentType: string | undefined = contentType\n if (ext === '.js') {\n determinedContentType = 'application/javascript'\n } else if (ext === '.css') {\n determinedContentType = 'text/css'\n }\n\n const response = await fetch(signedUrl, {\n body: fileBuffer,\n headers: determinedContentType ? { 'Content-Type': determinedContentType } : {},\n method: 'PUT',\n })\n\n if (response.ok) {\n return // Success\n }\n\n lastError = new Error(`Upload failed: ${response.status} ${response.statusText}`)\n } catch (error) {\n lastError = error instanceof Error ? error : new Error('Unknown error')\n }\n\n // Wait before retry (exponential backoff)\n if (attempt < MAX_RETRIES - 1) {\n await sleep(INITIAL_RETRY_DELAY * Math.pow(2, attempt))\n }\n }\n\n throw lastError || new Error('Upload failed after retries')\n}\n\n/**\n * Upload Lambda code zip to S3\n *\n * @param zipPath - Path to lambda.zip\n * @param signedUrl - Signed S3 upload URL\n */\nexport async function uploadLambdaZip(zipPath: string, signedUrl: string): Promise<void> {\n await uploadFile(zipPath, signedUrl, 'application/zip')\n}\n\n/**\n * Upload static assets to S3 in parallel\n *\n * Uploads up to 5 files concurrently\n *\n * @param projectPath - Path to project root\n * @param assetUrls - Map of asset paths to signed URLs\n * @param onProgress - Optional callback for progress updates (uploaded, total)\n * @returns Upload results with counts\n */\nexport async function uploadStaticAssets(\n projectPath: string,\n assetUrls: Record<string, string>,\n onProgress?: (uploaded: number, total: number) => void,\n): Promise<UploadResults> {\n const results: UploadResults = {\n assetsFailed: 0,\n assetsUploaded: 0,\n lambdaUploaded: false,\n totalBytesUploaded: 0,\n }\n\n const assetPaths = Object.keys(assetUrls)\n\n if (assetPaths.length === 0) {\n return results\n }\n\n // Upload assets with limited concurrency\n const CONCURRENCY = 5\n for (let i = 0; i < assetPaths.length; i += CONCURRENCY) {\n const batch = assetPaths.slice(i, i + CONCURRENCY)\n\n await Promise.all(\n batch.map(async (assetPath) => {\n try {\n // Convert _next back to .next for file system\n const fsPath = assetPath.replace(/^_next\\//, '.next/')\n const fullPath = path.join(projectPath, fsPath)\n const signedUrl = assetUrls[assetPath]\n\n await uploadFile(fullPath, signedUrl)\n\n results.assetsUploaded++\n\n // Track bytes uploaded\n const stats = await fs.stat(fullPath)\n results.totalBytesUploaded += stats.size\n\n // Report progress\n onProgress?.(results.assetsUploaded, assetPaths.length)\n } catch (error) {\n results.assetsFailed++\n log.debug(\n `Failed to upload ${assetPath}: ${error instanceof Error ? error.message : 'Unknown error'}`,\n )\n }\n }),\n )\n }\n\n return results\n}\n"],"names":["fs","path","log","MAX_RETRIES","INITIAL_RETRY_DELAY","sleep","ms","Promise","resolve","setTimeout","isMockUrl","signedUrl","includes","uploadFile","filePath","contentType","debug","basename","stats","stat","isLargeFile","size","latency","Math","random","fileBuffer","readFile","lastError","attempt","ext","extname","toLowerCase","determinedContentType","response","fetch","body","headers","method","ok","Error","status","statusText","error","pow","uploadLambdaZip","zipPath","uploadStaticAssets","projectPath","assetUrls","onProgress","results","assetsFailed","assetsUploaded","lambdaUploaded","totalBytesUploaded","assetPaths","Object","keys","length","CONCURRENCY","i","batch","slice","all","map","assetPath","fsPath","replace","fullPath","join","message"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@payloadcms/figma",
3
- "version": "0.0.1-alpha.2",
3
+ "version": "0.0.1-alpha.21",
4
4
  "license": "SEE LICENSE IN LICENSE.md",
5
5
  "type": "module",
6
6
  "exports": {
@@ -8,6 +8,11 @@
8
8
  "import": "./dist/index.js",
9
9
  "types": "./dist/index.d.ts",
10
10
  "default": "./dist/index.js"
11
+ },
12
+ "./client": {
13
+ "import": "./dist/exports/client.js",
14
+ "types": "./dist/exports/client.d.ts",
15
+ "default": "./dist/exports/client.js"
11
16
  }
12
17
  },
13
18
  "main": "./dist/index.js",
@@ -23,13 +28,16 @@
23
28
  "dependencies": {
24
29
  "@clack/prompts": "^0.11.0",
25
30
  "@figma/rest-api-spec": "^0.34.0",
31
+ "@payloadcms/richtext-lexical": "^3.54.0",
26
32
  "@sindresorhus/slugify": "^3.0.0",
27
33
  "arg": "^5.0.2",
28
34
  "conf": "^13.0.1",
29
35
  "esprima-next": "^6.0.2",
30
36
  "figures": "^6.1.0",
31
37
  "jose": "6.0.12",
38
+ "jsonwebtoken": "9.0.2",
32
39
  "open": "^10.1.0",
40
+ "payload": "^3.54.0",
33
41
  "picocolors": "1.1.1",
34
42
  "tar": "^7.4.3",
35
43
  "terminal-link": "^5.0.0",
@@ -41,10 +49,6 @@
41
49
  "typescript": "5.9.3",
42
50
  "vitest": "3.2.4"
43
51
  },
44
- "peerDependencies": {
45
- "@payloadcms/richtext-lexical": "^3.54.0",
46
- "payload": "^3.54.0"
47
- },
48
52
  "publishConfig": {
49
53
  "registry": "https://registry.npmjs.org/"
50
54
  },
@@ -56,6 +60,7 @@
56
60
  "copyfiles": "copyfiles -u 1 \"src/**/*.{html,css,scss,ttf,woff,woff2,eot,svg,jpg,png}\" dist/",
57
61
  "debug:clear-tokens": "tsx scripts/clear-tokens.ts",
58
62
  "debug:expire-token": "tsx scripts/expire-token.ts",
63
+ "debug:get-project-token": "tsx scripts/get-project-token.ts",
59
64
  "debug:jwks": "tsx scripts/test-jwks-validation.ts",
60
65
  "debug:refresh-token": "tsx scripts/refresh-token.ts",
61
66
  "debug:tokens": "tsx scripts/debug-tokens.ts",