@actuate-media/cli 0.11.1 → 0.11.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
1
 
2
- > @actuate-media/cli@0.11.1 build /home/runner/work/actuatecms/actuatecms/packages/cli
2
+ > @actuate-media/cli@0.11.2 build /home/runner/work/actuatecms/actuatecms/packages/cli
3
3
  > tsc
4
4
 
@@ -1,28 +1,28 @@
1
1
 
2
- > @actuate-media/cli@0.11.1 test /home/runner/work/actuatecms/actuatecms/packages/cli
2
+ > @actuate-media/cli@0.11.2 test /home/runner/work/actuatecms/actuatecms/packages/cli
3
3
  > vitest run
4
4
 
5
5
 
6
6
   RUN  v4.1.8 /home/runner/work/actuatecms/actuatecms/packages/cli
7
7
 
8
- ✓ dist/__tests__/db-sync.test.js (10 tests) 301ms
9
- ✓ dist/__tests__/seed.test.js (10 tests) 92ms
10
- ✓ src/__tests__/db-sync.test.ts (10 tests) 320ms
11
- ✓ src/__tests__/seed.test.ts (10 tests) 107ms
12
- ✓ dist/__tests__/deployment-diagnostics.test.js (8 tests) 43ms
13
- ✓ src/__tests__/deployment-diagnostics.test.ts (8 tests) 55ms
8
+ ✓ dist/__tests__/db-sync.test.js (10 tests) 353ms
9
+ ✓ dist/__tests__/seed.test.js (10 tests) 117ms
10
+ ✓ src/__tests__/db-sync.test.ts (10 tests) 495ms
11
+ ✓ dist/__tests__/deployment-diagnostics.test.js (9 tests) 99ms
12
+ ✓ src/__tests__/seed.test.ts (10 tests) 146ms
13
+ ✓ src/__tests__/deployment-diagnostics.test.ts (9 tests) 60ms
14
14
  - Reading canonical Actuate schema...
15
+ stdout | dist/__tests__/db-init.test.js > db:init (WS-D D5 — canonical schema, no stale fragment) > command > injects canonical models with @@map and no duplicate datasource/generator
15
16
  ✔ Actuate CMS models added to schema.
16
17
  - Running prisma generate...
17
- stdout | dist/__tests__/db-init.test.js > db:init (WS-D D5 — canonical schema, no stale fragment) > command > injects canonical models with @@map and no duplicate datasource/generator
18
18
  ✔ Prisma client generated.
19
19
  ℹ Run `npx prisma migrate dev --name actuate-cms` to create the migration.
20
20
 
21
- - Reading canonical Actuate schema...
22
- ✖ Could not locate @actuate-media/cms-core.
23
21
  stdout | dist/__tests__/db-init.test.js > db:init (WS-D D5 — canonical schema, no stale fragment) > command > fails clearly when cms-core cannot be located
24
22
  ℹ Install it first: `npm install @actuate-media/cms-core`.
23
+ - Reading canonical Actuate schema...
25
24
 
25
+ ✖ Could not locate @actuate-media/cms-core.
26
26
  - Reading canonical Actuate schema...
27
27
  ✔ Actuate CMS models added to schema.
28
28
  - Running prisma generate...
@@ -32,19 +32,19 @@
32
32
 
33
33
  - Reading canonical Actuate schema...
34
34
  ℹ Actuate CMS models already present in schema. Use --force to overwrite.
35
- ✓ dist/__tests__/db-init.test.js (4 tests) 228ms
35
+ ✓ dist/__tests__/db-init.test.js (4 tests) 265ms
36
36
  - Reading canonical Actuate schema...
37
+ ✔ Actuate CMS models added to schema.
38
+ - Running prisma generate...
37
39
  stdout | src/__tests__/db-init.test.ts > db:init (WS-D D5 — canonical schema, no stale fragment) > command > injects canonical models with @@map and no duplicate datasource/generator
38
40
  ✔ Prisma client generated.
39
41
  ℹ Run `npx prisma migrate dev --name actuate-cms` to create the migration.
40
42
 
41
- ✔ Actuate CMS models added to schema.
42
- - Running prisma generate...
43
- - Reading canonical Actuate schema...
44
- ✖ Could not locate @actuate-media/cms-core.
45
43
  stdout | src/__tests__/db-init.test.ts > db:init (WS-D D5 — canonical schema, no stale fragment) > command > fails clearly when cms-core cannot be located
46
44
  ℹ Install it first: `npm install @actuate-media/cms-core`.
45
+ - Reading canonical Actuate schema...
47
46
 
47
+ ✖ Could not locate @actuate-media/cms-core.
48
48
  - Reading canonical Actuate schema...
49
49
  stdout | src/__tests__/db-init.test.ts > db:init (WS-D D5 — canonical schema, no stale fragment) > command > is idempotent without --force
50
50
  ✔ Prisma client generated.
@@ -54,7 +54,7 @@
54
54
  - Running prisma generate...
55
55
  - Reading canonical Actuate schema...
56
56
  ℹ Actuate CMS models already present in schema. Use --force to overwrite.
57
- ✓ src/__tests__/db-init.test.ts (4 tests) 226ms
57
+ ✓ src/__tests__/db-init.test.ts (4 tests) 203ms
58
58
  stdout | dist/__tests__/mcp-init.test.js > mcp:init > creates both editor configs with placeholder key and git-ignores them
59
59
  ✔ Created .cursor/mcp.json
60
60
 
@@ -183,7 +183,7 @@ Next steps
183
183
  3. Restart Cursor / VS Code so the MCP server is picked up
184
184
  Tip: pass --url https://your-site.com to target a deployed CMS instead.
185
185
 
186
- ✓ dist/__tests__/mcp-init.test.js (6 tests) 420ms
186
+ ✓ dist/__tests__/mcp-init.test.js (6 tests) 330ms
187
187
  stdout | src/__tests__/mcp-init.test.ts > mcp:init > creates both editor configs with placeholder key and git-ignores them
188
188
  ✔ Created .cursor/mcp.json
189
189
 
@@ -312,13 +312,13 @@ Next steps
312
312
  3. Restart Cursor / VS Code so the MCP server is picked up
313
313
  Tip: pass --url https://your-site.com to target a deployed CMS instead.
314
314
 
315
- ✓ src/__tests__/mcp-init.test.ts (6 tests) 407ms
316
- ✓ dist/__tests__/form-seed.test.js (10 tests) 59ms
317
- ✓ src/__tests__/form-seed.test.ts (10 tests) 75ms
318
- ✓ dist/__tests__/vercel-env-matrix.test.js (5 tests) 66ms
319
- ✓ src/__tests__/vercel-env-matrix.test.ts (5 tests) 56ms
320
- ✓ dist/__tests__/load-dotenv.test.js (3 tests) 65ms
321
- ✓ src/__tests__/load-dotenv.test.ts (3 tests) 54ms
315
+ ✓ src/__tests__/mcp-init.test.ts (6 tests) 523ms
316
+ ✓ dist/__tests__/form-seed.test.js (10 tests) 66ms
317
+ ✓ src/__tests__/form-seed.test.ts (10 tests) 31ms
318
+ ✓ dist/__tests__/vercel-env-matrix.test.js (6 tests) 50ms
319
+ ✓ src/__tests__/vercel-env-matrix.test.ts (6 tests) 61ms
320
+ ✓ dist/__tests__/load-dotenv.test.js (3 tests) 75ms
321
+ ✓ src/__tests__/load-dotenv.test.ts (3 tests) 100ms
322
322
  - Reading canonical Actuate schema...
323
323
  ✔ Actuate CMS models added to schema.
324
324
  - Running prisma generate...
@@ -326,7 +326,7 @@ Next steps
326
326
  ✔ Prisma client generated.
327
327
  ℹ Run `npx prisma migrate dev --name actuate-cms` to create the migration.
328
328
 
329
- ✓ dist/__tests__/schema-fragment.test.js (1 test) 146ms
329
+ ✓ dist/__tests__/schema-fragment.test.js (1 test) 119ms
330
330
  - Reading canonical Actuate schema...
331
331
  ✔ Actuate CMS models added to schema.
332
332
  - Running prisma generate...
@@ -334,12 +334,12 @@ Next steps
334
334
  ✔ Prisma client generated.
335
335
  ℹ Run `npx prisma migrate dev --name actuate-cms` to create the migration.
336
336
 
337
- ✓ src/__tests__/schema-fragment.test.ts (1 test) 130ms
338
- ✓ dist/__tests__/init.test.js (2 tests) 16ms
339
- ✓ src/__tests__/init.test.ts (2 tests) 31ms
337
+ ✓ src/__tests__/schema-fragment.test.ts (1 test) 114ms
338
+ ✓ dist/__tests__/init.test.js (2 tests) 33ms
339
+ ✓ src/__tests__/init.test.ts (2 tests) 30ms
340
340
 
341
341
   Test Files  20 passed (20)
342
-  Tests  118 passed (118)
343
-  Start at  01:58:55
344
-  Duration  27.03s (transform 2.41s, setup 0ms, import 6.84s, tests 2.90s, environment 16ms)
342
+  Tests  122 passed (122)
343
+  Start at  18:10:11
344
+  Duration  28.76s (transform 2.79s, setup 0ms, import 7.35s, tests 3.27s, environment 13ms)
345
345
 
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @actuate-media/cli
2
2
 
3
+ ## 0.11.2
4
+
5
+ ### Patch Changes
6
+
7
+ - 7a6a140: Support Vercel Marketplace Blob auth via OIDC (`BLOB_STORE_ID` + `VERCEL_OIDC_TOKEN`) instead of requiring `BLOB_READ_WRITE_TOKEN`. Fix `@vercel/blob` client options to use `oidcToken` + `storeId` (never pass OIDC as `token`). Update env diagnostics, upload errors, and `actuate vercel:blob-link` accordingly.
8
+
3
9
  ## 0.11.1
4
10
 
5
11
  ### Patch Changes
@@ -105,7 +105,7 @@ describe('deployment diagnostics', () => {
105
105
  }),
106
106
  ]));
107
107
  });
108
- it('fails (not warns) when a Blob store is linked but the read-write token is missing', () => {
108
+ it('passes when Marketplace Blob is linked via BLOB_STORE_ID without read-write token', () => {
109
109
  const report = createDiagnosticReport({
110
110
  schemaModels: new Set(REQUIRED_CMS_MODELS),
111
111
  schemaContent: '',
@@ -116,11 +116,33 @@ describe('deployment diagnostics', () => {
116
116
  NEXT_PUBLIC_SITE_URL: 'https://example.com',
117
117
  BLOB_STORE_ID: 'store_abc123',
118
118
  BLOB_WEBHOOK_PUBLIC_KEY: 'pk_abc',
119
- // BLOB_READ_WRITE_TOKEN deliberately absent — the partial-link failure.
120
119
  },
121
120
  packageManager: 'pnpm',
122
121
  schemaPath: 'prisma/schema.prisma',
123
122
  });
123
+ expect(report.checks).toEqual(expect.arrayContaining([
124
+ expect.objectContaining({
125
+ id: 'blob-storage',
126
+ status: 'pass',
127
+ message: expect.stringMatching(/Marketplace|OIDC|BLOB_STORE_ID/i),
128
+ }),
129
+ ]));
130
+ });
131
+ it('fails when blob is referenced but BLOB_STORE_ID is missing', () => {
132
+ const report = createDiagnosticReport({
133
+ schemaModels: new Set(REQUIRED_CMS_MODELS),
134
+ schemaContent: '',
135
+ env: {
136
+ DATABASE_URL: 'postgresql://example',
137
+ CMS_SECRET: 'secret',
138
+ CMS_ENCRYPTION_KEY: 'a'.repeat(64),
139
+ NEXT_PUBLIC_SITE_URL: 'https://example.com',
140
+ BLOB_WEBHOOK_PUBLIC_KEY: 'pk_abc',
141
+ },
142
+ configContent: "provider: 'vercel-blob'",
143
+ packageManager: 'pnpm',
144
+ schemaPath: 'prisma/schema.prisma',
145
+ });
124
146
  expect(report.status).toBe('fail');
125
147
  expect(report.checks).toEqual(expect.arrayContaining([expect.objectContaining({ id: 'blob-storage', status: 'fail' })]));
126
148
  });
@@ -142,7 +164,8 @@ describe('deployment diagnostics', () => {
142
164
  it('classifies blob link state from env and config signals', () => {
143
165
  expect(detectBlobLinkState({ BLOB_READ_WRITE_TOKEN: 'vercel_blob_rw_x' })).toBe('ok');
144
166
  expect(detectBlobLinkState({ BLOB_READ_WRITE_TOKEN: 'not-a-real-token' })).toBe('token-format');
145
- expect(detectBlobLinkState({ BLOB_STORE_ID: 'store_x' })).toBe('partial');
167
+ expect(detectBlobLinkState({ BLOB_STORE_ID: 'store_x' })).toBe('ok');
168
+ expect(detectBlobLinkState({ BLOB_WEBHOOK_PUBLIC_KEY: 'pk_x' })).toBe('partial');
146
169
  expect(detectBlobLinkState({}, "storage: { provider: 'vercel-blob' }")).toBe('partial');
147
170
  expect(detectBlobLinkState({})).toBe('none');
148
171
  });
@@ -1 +1 @@
1
- {"version":3,"file":"deployment-diagnostics.test.js","sourceRoot":"","sources":["../../src/__tests__/deployment-diagnostics.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"deployment-diagnostics.test.js","sourceRoot":"","sources":["../../src/__tests__/deployment-diagnostics.test.ts"],"names":[],"mappings":"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"}
@@ -28,11 +28,19 @@ describe('evaluateBlobLink', () => {
28
28
  it('reports none when no blob vars exist', () => {
29
29
  expect(evaluateBlobLink([env('DATABASE_URL', ['production'])]).status).toBe('none');
30
30
  });
31
- it('reports partial when linked but token missing on production/preview', () => {
31
+ it('reports ok when Marketplace store id is on production/preview (OIDC at runtime)', () => {
32
32
  const report = evaluateBlobLink([
33
33
  env('BLOB_STORE_ID', ['production', 'preview', 'development']),
34
34
  ]);
35
35
  expect(report.linked).toBe(true);
36
+ expect(report.status).toBe('ok');
37
+ expect(report.missingTargets).toEqual([]);
38
+ });
39
+ it('reports partial when linked but store id missing on production/preview', () => {
40
+ const report = evaluateBlobLink([
41
+ env('BLOB_WEBHOOK_PUBLIC_KEY', ['production', 'preview', 'development']),
42
+ ]);
43
+ expect(report.linked).toBe(true);
36
44
  expect(report.status).toBe('partial');
37
45
  expect(report.missingTargets).toContain('production');
38
46
  });
@@ -1 +1 @@
1
- {"version":3,"file":"vercel-env-matrix.test.js","sourceRoot":"","sources":["../../src/__tests__/vercel-env-matrix.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"vercel-env-matrix.test.js","sourceRoot":"","sources":["../../src/__tests__/vercel-env-matrix.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"vercel-blob-link.d.ts","sourceRoot":"","sources":["../../src/commands/vercel-blob-link.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAwBnC,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA0FpE"}
1
+ {"version":3,"file":"vercel-blob-link.d.ts","sourceRoot":"","sources":["../../src/commands/vercel-blob-link.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AAwBnC,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA2FpE"}
@@ -55,27 +55,28 @@ export function registerVercelBlobLinkCommand(program) {
55
55
  console.log('No Vercel Blob store is connected to this project.');
56
56
  }
57
57
  else {
58
- console.log('BLOB_READ_WRITE_TOKEN by environment:');
58
+ console.log('Upload auth by environment (token or BLOB_STORE_ID for OIDC):');
59
59
  for (const target of VERCEL_TARGETS) {
60
- console.log(` ${mark(report.tokenByTarget[target])} ${target}`);
60
+ const ok = report.tokenByTarget[target] || report.storeByTarget[target];
61
+ console.log(` ${mark(ok)} ${target}`);
61
62
  }
62
63
  }
63
64
  console.log(chalk.dim('─────────────────────────────────'));
64
65
  }
65
66
  if (report.status === 'partial') {
66
67
  if (!opts.json) {
67
- logger.error('A Blob store is connected but BLOB_READ_WRITE_TOKEN is missing for Production/Preview. Uploads will fail.');
68
- logger.info('Reconnect the Blob store and provision the token to all environments (include Development for local `vercel env pull`), then re-run this command.');
68
+ logger.error('A Blob store is connected but Production/Preview lack BLOB_STORE_ID and BLOB_READ_WRITE_TOKEN. Uploads will fail.');
69
+ logger.info('Connect the Blob store to all environments from the Vercel Storage tab, then `vercel env pull` and re-run this command.');
69
70
  }
70
71
  process.exitCode = 1;
71
72
  return;
72
73
  }
73
74
  const devOnlyMissing = report.linked && report.missingTargets.includes('development');
74
75
  if (devOnlyMissing && !opts.json) {
75
- logger.warn('BLOB_READ_WRITE_TOKEN is not set for Development — `vercel env pull` will not provide a local token. Include Development when connecting the store.');
76
+ logger.warn('Development lacks BLOB_STORE_ID / BLOB_READ_WRITE_TOKEN — local uploads need `vercel env pull` or `vercel dev` (OIDC).');
76
77
  }
77
78
  else if (report.status === 'ok' && !opts.json) {
78
- logger.success('Blob store is connected and BLOB_READ_WRITE_TOKEN is provisioned for Production and Preview.');
79
+ logger.success('Blob store is connected with upload auth on Production and Preview (legacy token or Marketplace OIDC via BLOB_STORE_ID).');
79
80
  }
80
81
  });
81
82
  }
@@ -1 +1 @@
1
- {"version":3,"file":"vercel-blob-link.js","sourceRoot":"","sources":["../../src/commands/vercel-blob-link.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"vercel-blob-link.js","sourceRoot":"","sources":["../../src/commands/vercel-blob-link.ts"],"names":[],"mappings":"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"}
@@ -30,11 +30,11 @@ export declare function missingModels(schemaModels: Set<string>): string[];
30
30
  export declare function missingEnvVars(env: Record<string, string | undefined>): string[];
31
31
  export type BlobLinkState = 'ok' | 'partial' | 'token-format' | 'none';
32
32
  /**
33
- * Classify the local Vercel Blob wiring. A "partial" link is the failure mode
34
- * Opal hit: a Blob store is connected (so `BLOB_STORE_ID` / the webhook key are
35
- * present, or the config selects vercel-blob storage) but `BLOB_READ_WRITE_TOKEN`
36
- * was never provisioned — uploads then fail at runtime even though the store is
37
- * "connected" in the dashboard. We treat that as a hard failure, not a warning.
33
+ * Classify the local Vercel Blob wiring.
34
+ *
35
+ * Marketplace Blob provisioning injects `BLOB_STORE_ID` (+ webhook key). On Vercel,
36
+ * `VERCEL_OIDC_TOKEN` is injected at runtime — no `BLOB_READ_WRITE_TOKEN` in project
37
+ * env. Legacy stores still use the read-write token.
38
38
  */
39
39
  export declare function detectBlobLinkState(env: Record<string, string | undefined>, configContent?: string): BlobLinkState;
40
40
  export declare function detectPackageManager(lockfiles: Set<string>): string;
@@ -1 +1 @@
1
- {"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../src/deployment/diagnostics.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAA;AAEvD,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,gBAAgB,CAAA;IACxB,OAAO,EAAE,MAAM,CAAA;IACf,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,gBAAgB,CAAA;IACxB,MAAM,EAAE,eAAe,EAAE,CAAA;CAC1B;AAED,eAAO,MAAM,mBAAmB,mMAetB,CAAA;AAEV,eAAO,MAAM,iBAAiB,uFAKpB,CAAA;AAEV,wEAAwE;AACxE,eAAO,MAAM,sBAAsB,6HAOzB,CAAA;AAEV,iFAAiF;AACjF,eAAO,MAAM,sBAAsB,4GAKzB,CAAA;AAEV,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IACzB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAA;IACvC,cAAc,EAAE,MAAM,CAAA;IACtB,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAA;CAC3B;AAED,wBAAgB,aAAa,CAAC,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,EAAE,CAEjE;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG,MAAM,EAAE,CAEhF;AAED,MAAM,MAAM,aAAa,GAAG,IAAI,GAAG,SAAS,GAAG,cAAc,GAAG,MAAM,CAAA;AAEtE;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,EACvC,aAAa,CAAC,EAAE,MAAM,GACrB,aAAa,CAYf;AAED,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,CAKnE;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,eAAe,GAAG,gBAAgB,CAgH/E;AAED,wBAAgB,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuCtC;AAED,wBAAgB,qBAAqB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,EAAE,CAsBrE;AAED,wBAAgB,6BAA6B,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAiC5E"}
1
+ {"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../src/deployment/diagnostics.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAA;AAEvD,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,gBAAgB,CAAA;IACxB,OAAO,EAAE,MAAM,CAAA;IACf,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,gBAAgB,CAAA;IACxB,MAAM,EAAE,eAAe,EAAE,CAAA;CAC1B;AAED,eAAO,MAAM,mBAAmB,mMAetB,CAAA;AAEV,eAAO,MAAM,iBAAiB,uFAKpB,CAAA;AAEV,wEAAwE;AACxE,eAAO,MAAM,sBAAsB,6HAOzB,CAAA;AAEV,iFAAiF;AACjF,eAAO,MAAM,sBAAsB,4GAKzB,CAAA;AAEV,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IACzB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAA;IACvC,cAAc,EAAE,MAAM,CAAA;IACtB,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,CAAA;CAC3B;AAED,wBAAgB,aAAa,CAAC,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,EAAE,CAEjE;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG,MAAM,EAAE,CAEhF;AAED,MAAM,MAAM,aAAa,GAAG,IAAI,GAAG,SAAS,GAAG,cAAc,GAAG,MAAM,CAAA;AAEtE;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,EACvC,aAAa,CAAC,EAAE,MAAM,GACrB,aAAa,CAef;AAED,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,CAKnE;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,eAAe,GAAG,gBAAgB,CAkH/E;AAED,wBAAgB,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAuCtC;AAED,wBAAgB,qBAAqB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,EAAE,CAsBrE;AAED,wBAAgB,6BAA6B,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAiC5E"}
@@ -43,19 +43,21 @@ export function missingEnvVars(env) {
43
43
  return REQUIRED_ENV_VARS.filter((name) => !env[name]);
44
44
  }
45
45
  /**
46
- * Classify the local Vercel Blob wiring. A "partial" link is the failure mode
47
- * Opal hit: a Blob store is connected (so `BLOB_STORE_ID` / the webhook key are
48
- * present, or the config selects vercel-blob storage) but `BLOB_READ_WRITE_TOKEN`
49
- * was never provisioned — uploads then fail at runtime even though the store is
50
- * "connected" in the dashboard. We treat that as a hard failure, not a warning.
46
+ * Classify the local Vercel Blob wiring.
47
+ *
48
+ * Marketplace Blob provisioning injects `BLOB_STORE_ID` (+ webhook key). On Vercel,
49
+ * `VERCEL_OIDC_TOKEN` is injected at runtime — no `BLOB_READ_WRITE_TOKEN` in project
50
+ * env. Legacy stores still use the read-write token.
51
51
  */
52
52
  export function detectBlobLinkState(env, configContent) {
53
53
  const token = env.BLOB_READ_WRITE_TOKEN;
54
54
  if (token) {
55
55
  return token.startsWith('vercel_blob_') ? 'ok' : 'token-format';
56
56
  }
57
- const hasPartialSignals = Boolean(env.BLOB_STORE_ID) ||
58
- Boolean(env.BLOB_WEBHOOK_PUBLIC_KEY) ||
57
+ if (env.BLOB_STORE_ID?.trim()) {
58
+ return 'ok';
59
+ }
60
+ const hasPartialSignals = Boolean(env.BLOB_WEBHOOK_PUBLIC_KEY) ||
59
61
  (configContent ? /vercel-blob|platform-vercel|vercelBlob/i.test(configContent) : false);
60
62
  return hasPartialSignals ? 'partial' : 'none';
61
63
  }
@@ -123,14 +125,16 @@ export function createDiagnosticReport(input) {
123
125
  label: 'Vercel Blob storage',
124
126
  status: blobState === 'partial' ? 'fail' : blobState === 'token-format' ? 'warn' : 'pass',
125
127
  message: blobState === 'partial'
126
- ? 'A Vercel Blob store is linked (BLOB_STORE_ID / webhook key or vercel-blob storage configured) but BLOB_READ_WRITE_TOKEN is missing. Media uploads will fail.'
128
+ ? 'Vercel Blob appears configured (vercel-blob / webhook key) but BLOB_STORE_ID is missing. Media uploads will fail until the store is connected to this project.'
127
129
  : blobState === 'token-format'
128
130
  ? 'BLOB_READ_WRITE_TOKEN does not start with `vercel_blob_` — verify it is a real Vercel Blob read-write token.'
129
131
  : blobState === 'ok'
130
- ? 'BLOB_READ_WRITE_TOKEN is configured.'
132
+ ? input.env.BLOB_READ_WRITE_TOKEN
133
+ ? 'BLOB_READ_WRITE_TOKEN is configured.'
134
+ : 'Vercel Marketplace Blob is linked (BLOB_STORE_ID). Uploads use OIDC on Vercel; no read-write token required.'
131
135
  : 'No Vercel Blob storage configured (skipped).',
132
136
  fix: blobState === 'partial'
133
- ? 'Finish the Blob connection so BLOB_READ_WRITE_TOKEN is provisioned to every environment (including Development for local `vercel env pull`), then `vercel env pull`. Validate with `actuate vercel:blob-link`.'
137
+ ? 'Connect a Vercel Blob store to the project from the Storage tab, then `vercel env pull`. Validate with `actuate vercel:blob-link`.'
134
138
  : blobState === 'token-format'
135
139
  ? 'Re-copy the read-write token from the Vercel Blob store (Storage tab) and re-pull your environment.'
136
140
  : undefined,
@@ -1 +1 @@
1
- {"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../src/deployment/diagnostics.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../src/deployment/diagnostics.ts"],"names":[],"mappings":"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"}
@@ -25,9 +25,10 @@ export interface BlobLinkReport {
25
25
  /** True when any BLOB_* var indicates a store is connected to the project. */
26
26
  linked: boolean;
27
27
  tokenByTarget: TargetPresence;
28
- /** Targets (any) where BLOB_READ_WRITE_TOKEN is absent while linked. */
28
+ storeByTarget: TargetPresence;
29
+ /** Targets missing both legacy token and BLOB_STORE_ID while a blob store is linked. */
29
30
  missingTargets: VercelTarget[];
30
- /** 'partial' when production/preview lack the token (deploy-blocking). */
31
+ /** 'partial' when production/preview lack upload auth signals (deploy-blocking). */
31
32
  status: BlobLinkStatus;
32
33
  }
33
34
  export declare function evaluateBlobLink(envVars: VercelEnvVar[]): BlobLinkReport;
@@ -1 +1 @@
1
- {"version":3,"file":"env-matrix.d.ts","sourceRoot":"","sources":["../../src/vercel/env-matrix.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAA;AAElF;;;GAGG;AAEH,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,YAAY,EAAE,OAAO,CAAC,CAAA;AAM1D,wDAAwD;AACxD,wBAAgB,cAAc,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,cAAc,CAWnF;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAA;IACX,QAAQ,EAAE,OAAO,CAAA;IACjB,QAAQ,EAAE,cAAc,CAAA;CACzB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,YAAY,EAAE,CAAA;IACpB,wEAAwE;IACxE,eAAe,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,YAAY,EAAE,CAAA;KAAE,EAAE,CAAA;CAC5D;AAKD,wBAAgB,cAAc,CAC5B,OAAO,EAAE,YAAY,EAAE,EACvB,YAAY,EAAE,SAAS,MAAM,EAAE,EAC/B,YAAY,GAAE,SAAS,MAAM,EAAO,GACnC,SAAS,CAoBX;AAED,MAAM,MAAM,cAAc,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAAA;AAEtD,MAAM,WAAW,cAAc;IAC7B,8EAA8E;IAC9E,MAAM,EAAE,OAAO,CAAA;IACf,aAAa,EAAE,cAAc,CAAA;IAC7B,wEAAwE;IACxE,cAAc,EAAE,YAAY,EAAE,CAAA;IAC9B,0EAA0E;IAC1E,MAAM,EAAE,cAAc,CAAA;CACvB;AAID,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,cAAc,CAkBxE"}
1
+ {"version":3,"file":"env-matrix.d.ts","sourceRoot":"","sources":["../../src/vercel/env-matrix.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,YAAY,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAA;AAElF;;;GAGG;AAEH,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,YAAY,EAAE,OAAO,CAAC,CAAA;AAM1D,wDAAwD;AACxD,wBAAgB,cAAc,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,cAAc,CAWnF;AAED,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAA;IACX,QAAQ,EAAE,OAAO,CAAA;IACjB,QAAQ,EAAE,cAAc,CAAA;CACzB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,YAAY,EAAE,CAAA;IACpB,wEAAwE;IACxE,eAAe,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,YAAY,EAAE,CAAA;KAAE,EAAE,CAAA;CAC5D;AAKD,wBAAgB,cAAc,CAC5B,OAAO,EAAE,YAAY,EAAE,EACvB,YAAY,EAAE,SAAS,MAAM,EAAE,EAC/B,YAAY,GAAE,SAAS,MAAM,EAAO,GACnC,SAAS,CAoBX;AAED,MAAM,MAAM,cAAc,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAAA;AAEtD,MAAM,WAAW,cAAc;IAC7B,8EAA8E;IAC9E,MAAM,EAAE,OAAO,CAAA;IACf,aAAa,EAAE,cAAc,CAAA;IAC7B,aAAa,EAAE,cAAc,CAAA;IAC7B,wFAAwF;IACxF,cAAc,EAAE,YAAY,EAAE,CAAA;IAC9B,oFAAoF;IACpF,MAAM,EAAE,cAAc,CAAA;CACvB;AAID,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,cAAc,CA4BxE"}
@@ -42,14 +42,23 @@ const BLOB_LINK_SIGNALS = ['BLOB_STORE_ID', 'BLOB_WEBHOOK_PUBLIC_KEY', 'BLOB_REA
42
42
  export function evaluateBlobLink(envVars) {
43
43
  const linked = envVars.some((env) => BLOB_LINK_SIGNALS.includes(env.key) || env.key.startsWith('BLOB_'));
44
44
  const tokenByTarget = presenceForKey(envVars, 'BLOB_READ_WRITE_TOKEN');
45
+ const storeByTarget = presenceForKey(envVars, 'BLOB_STORE_ID');
45
46
  if (!linked) {
46
- return { linked: false, tokenByTarget, missingTargets: [], status: 'none' };
47
+ return {
48
+ linked: false,
49
+ tokenByTarget,
50
+ storeByTarget,
51
+ missingTargets: [],
52
+ status: 'none',
53
+ };
47
54
  }
48
- const missingTargets = VERCEL_TARGETS.filter((t) => !tokenByTarget[t]);
49
- const criticalMissing = DEPLOY_TARGETS.some((t) => !tokenByTarget[t]);
55
+ const hasDeployAuth = (target) => tokenByTarget[target] || storeByTarget[target];
56
+ const missingTargets = VERCEL_TARGETS.filter((t) => !hasDeployAuth(t));
57
+ const criticalMissing = DEPLOY_TARGETS.some((t) => !hasDeployAuth(t));
50
58
  return {
51
59
  linked: true,
52
60
  tokenByTarget,
61
+ storeByTarget,
53
62
  missingTargets,
54
63
  status: criticalMissing ? 'partial' : 'ok',
55
64
  };
@@ -1 +1 @@
1
- {"version":3,"file":"env-matrix.js","sourceRoot":"","sources":["../../src/vercel/env-matrix.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"env-matrix.js","sourceRoot":"","sources":["../../src/vercel/env-matrix.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@actuate-media/cli",
3
- "version": "0.11.1",
3
+ "version": "0.11.2",
4
4
  "description": "CLI for Actuate CMS — migrations, codegen, imports, exports, and upgrades",
5
5
  "repository": {
6
6
  "type": "git",
@@ -28,7 +28,7 @@
28
28
  "devDependencies": {
29
29
  "typescript": "^5.7.0",
30
30
  "vitest": "^4.1.0",
31
- "@actuate-media/cms-core": "0.76.1"
31
+ "@actuate-media/cms-core": "0.76.3"
32
32
  },
33
33
  "scripts": {
34
34
  "build": "tsc",
@@ -128,7 +128,7 @@ describe('deployment diagnostics', () => {
128
128
  )
129
129
  })
130
130
 
131
- it('fails (not warns) when a Blob store is linked but the read-write token is missing', () => {
131
+ it('passes when Marketplace Blob is linked via BLOB_STORE_ID without read-write token', () => {
132
132
  const report = createDiagnosticReport({
133
133
  schemaModels: new Set(REQUIRED_CMS_MODELS),
134
134
  schemaContent: '',
@@ -139,12 +139,38 @@ describe('deployment diagnostics', () => {
139
139
  NEXT_PUBLIC_SITE_URL: 'https://example.com',
140
140
  BLOB_STORE_ID: 'store_abc123',
141
141
  BLOB_WEBHOOK_PUBLIC_KEY: 'pk_abc',
142
- // BLOB_READ_WRITE_TOKEN deliberately absent — the partial-link failure.
143
142
  },
144
143
  packageManager: 'pnpm',
145
144
  schemaPath: 'prisma/schema.prisma',
146
145
  })
147
146
 
147
+ expect(report.checks).toEqual(
148
+ expect.arrayContaining([
149
+ expect.objectContaining({
150
+ id: 'blob-storage',
151
+ status: 'pass',
152
+ message: expect.stringMatching(/Marketplace|OIDC|BLOB_STORE_ID/i),
153
+ }),
154
+ ]),
155
+ )
156
+ })
157
+
158
+ it('fails when blob is referenced but BLOB_STORE_ID is missing', () => {
159
+ const report = createDiagnosticReport({
160
+ schemaModels: new Set(REQUIRED_CMS_MODELS),
161
+ schemaContent: '',
162
+ env: {
163
+ DATABASE_URL: 'postgresql://example',
164
+ CMS_SECRET: 'secret',
165
+ CMS_ENCRYPTION_KEY: 'a'.repeat(64),
166
+ NEXT_PUBLIC_SITE_URL: 'https://example.com',
167
+ BLOB_WEBHOOK_PUBLIC_KEY: 'pk_abc',
168
+ },
169
+ configContent: "provider: 'vercel-blob'",
170
+ packageManager: 'pnpm',
171
+ schemaPath: 'prisma/schema.prisma',
172
+ })
173
+
148
174
  expect(report.status).toBe('fail')
149
175
  expect(report.checks).toEqual(
150
176
  expect.arrayContaining([expect.objectContaining({ id: 'blob-storage', status: 'fail' })]),
@@ -173,7 +199,8 @@ describe('deployment diagnostics', () => {
173
199
  it('classifies blob link state from env and config signals', () => {
174
200
  expect(detectBlobLinkState({ BLOB_READ_WRITE_TOKEN: 'vercel_blob_rw_x' })).toBe('ok')
175
201
  expect(detectBlobLinkState({ BLOB_READ_WRITE_TOKEN: 'not-a-real-token' })).toBe('token-format')
176
- expect(detectBlobLinkState({ BLOB_STORE_ID: 'store_x' })).toBe('partial')
202
+ expect(detectBlobLinkState({ BLOB_STORE_ID: 'store_x' })).toBe('ok')
203
+ expect(detectBlobLinkState({ BLOB_WEBHOOK_PUBLIC_KEY: 'pk_x' })).toBe('partial')
177
204
  expect(detectBlobLinkState({}, "storage: { provider: 'vercel-blob' }")).toBe('partial')
178
205
  expect(detectBlobLinkState({})).toBe('none')
179
206
  })
@@ -36,11 +36,20 @@ describe('evaluateBlobLink', () => {
36
36
  expect(evaluateBlobLink([env('DATABASE_URL', ['production'])]).status).toBe('none')
37
37
  })
38
38
 
39
- it('reports partial when linked but token missing on production/preview', () => {
39
+ it('reports ok when Marketplace store id is on production/preview (OIDC at runtime)', () => {
40
40
  const report = evaluateBlobLink([
41
41
  env('BLOB_STORE_ID', ['production', 'preview', 'development']),
42
42
  ])
43
43
  expect(report.linked).toBe(true)
44
+ expect(report.status).toBe('ok')
45
+ expect(report.missingTargets).toEqual([])
46
+ })
47
+
48
+ it('reports partial when linked but store id missing on production/preview', () => {
49
+ const report = evaluateBlobLink([
50
+ env('BLOB_WEBHOOK_PUBLIC_KEY', ['production', 'preview', 'development']),
51
+ ])
52
+ expect(report.linked).toBe(true)
44
53
  expect(report.status).toBe('partial')
45
54
  expect(report.missingTargets).toContain('production')
46
55
  })
@@ -79,9 +79,10 @@ export function registerVercelBlobLinkCommand(program: Command): void {
79
79
  if (!report.linked) {
80
80
  console.log('No Vercel Blob store is connected to this project.')
81
81
  } else {
82
- console.log('BLOB_READ_WRITE_TOKEN by environment:')
82
+ console.log('Upload auth by environment (token or BLOB_STORE_ID for OIDC):')
83
83
  for (const target of VERCEL_TARGETS) {
84
- console.log(` ${mark(report.tokenByTarget[target])} ${target}`)
84
+ const ok = report.tokenByTarget[target] || report.storeByTarget[target]
85
+ console.log(` ${mark(ok)} ${target}`)
85
86
  }
86
87
  }
87
88
  console.log(chalk.dim('─────────────────────────────────'))
@@ -90,10 +91,10 @@ export function registerVercelBlobLinkCommand(program: Command): void {
90
91
  if (report.status === 'partial') {
91
92
  if (!opts.json) {
92
93
  logger.error(
93
- 'A Blob store is connected but BLOB_READ_WRITE_TOKEN is missing for Production/Preview. Uploads will fail.',
94
+ 'A Blob store is connected but Production/Preview lack BLOB_STORE_ID and BLOB_READ_WRITE_TOKEN. Uploads will fail.',
94
95
  )
95
96
  logger.info(
96
- 'Reconnect the Blob store and provision the token to all environments (include Development for local `vercel env pull`), then re-run this command.',
97
+ 'Connect the Blob store to all environments from the Vercel Storage tab, then `vercel env pull` and re-run this command.',
97
98
  )
98
99
  }
99
100
  process.exitCode = 1
@@ -104,11 +105,11 @@ export function registerVercelBlobLinkCommand(program: Command): void {
104
105
  report.linked && report.missingTargets.includes('development' as VercelTarget)
105
106
  if (devOnlyMissing && !opts.json) {
106
107
  logger.warn(
107
- 'BLOB_READ_WRITE_TOKEN is not set for Development — `vercel env pull` will not provide a local token. Include Development when connecting the store.',
108
+ 'Development lacks BLOB_STORE_ID / BLOB_READ_WRITE_TOKEN — local uploads need `vercel env pull` or `vercel dev` (OIDC).',
108
109
  )
109
110
  } else if (report.status === 'ok' && !opts.json) {
110
111
  logger.success(
111
- 'Blob store is connected and BLOB_READ_WRITE_TOKEN is provisioned for Production and Preview.',
112
+ 'Blob store is connected with upload auth on Production and Preview (legacy token or Marketplace OIDC via BLOB_STORE_ID).',
112
113
  )
113
114
  }
114
115
  })
@@ -77,11 +77,11 @@ export function missingEnvVars(env: Record<string, string | undefined>): string[
77
77
  export type BlobLinkState = 'ok' | 'partial' | 'token-format' | 'none'
78
78
 
79
79
  /**
80
- * Classify the local Vercel Blob wiring. A "partial" link is the failure mode
81
- * Opal hit: a Blob store is connected (so `BLOB_STORE_ID` / the webhook key are
82
- * present, or the config selects vercel-blob storage) but `BLOB_READ_WRITE_TOKEN`
83
- * was never provisioned — uploads then fail at runtime even though the store is
84
- * "connected" in the dashboard. We treat that as a hard failure, not a warning.
80
+ * Classify the local Vercel Blob wiring.
81
+ *
82
+ * Marketplace Blob provisioning injects `BLOB_STORE_ID` (+ webhook key). On Vercel,
83
+ * `VERCEL_OIDC_TOKEN` is injected at runtime — no `BLOB_READ_WRITE_TOKEN` in project
84
+ * env. Legacy stores still use the read-write token.
85
85
  */
86
86
  export function detectBlobLinkState(
87
87
  env: Record<string, string | undefined>,
@@ -92,8 +92,11 @@ export function detectBlobLinkState(
92
92
  return token.startsWith('vercel_blob_') ? 'ok' : 'token-format'
93
93
  }
94
94
 
95
+ if (env.BLOB_STORE_ID?.trim()) {
96
+ return 'ok'
97
+ }
98
+
95
99
  const hasPartialSignals =
96
- Boolean(env.BLOB_STORE_ID) ||
97
100
  Boolean(env.BLOB_WEBHOOK_PUBLIC_KEY) ||
98
101
  (configContent ? /vercel-blob|platform-vercel|vercelBlob/i.test(configContent) : false)
99
102
 
@@ -174,15 +177,17 @@ export function createDiagnosticReport(input: DiagnosticInput): DiagnosticReport
174
177
  status: blobState === 'partial' ? 'fail' : blobState === 'token-format' ? 'warn' : 'pass',
175
178
  message:
176
179
  blobState === 'partial'
177
- ? 'A Vercel Blob store is linked (BLOB_STORE_ID / webhook key or vercel-blob storage configured) but BLOB_READ_WRITE_TOKEN is missing. Media uploads will fail.'
180
+ ? 'Vercel Blob appears configured (vercel-blob / webhook key) but BLOB_STORE_ID is missing. Media uploads will fail until the store is connected to this project.'
178
181
  : blobState === 'token-format'
179
182
  ? 'BLOB_READ_WRITE_TOKEN does not start with `vercel_blob_` — verify it is a real Vercel Blob read-write token.'
180
183
  : blobState === 'ok'
181
- ? 'BLOB_READ_WRITE_TOKEN is configured.'
184
+ ? input.env.BLOB_READ_WRITE_TOKEN
185
+ ? 'BLOB_READ_WRITE_TOKEN is configured.'
186
+ : 'Vercel Marketplace Blob is linked (BLOB_STORE_ID). Uploads use OIDC on Vercel; no read-write token required.'
182
187
  : 'No Vercel Blob storage configured (skipped).',
183
188
  fix:
184
189
  blobState === 'partial'
185
- ? 'Finish the Blob connection so BLOB_READ_WRITE_TOKEN is provisioned to every environment (including Development for local `vercel env pull`), then `vercel env pull`. Validate with `actuate vercel:blob-link`.'
190
+ ? 'Connect a Vercel Blob store to the project from the Storage tab, then `vercel env pull`. Validate with `actuate vercel:blob-link`.'
186
191
  : blobState === 'token-format'
187
192
  ? 'Re-copy the read-write token from the Vercel Blob store (Storage tab) and re-pull your environment.'
188
193
  : undefined,
@@ -72,9 +72,10 @@ export interface BlobLinkReport {
72
72
  /** True when any BLOB_* var indicates a store is connected to the project. */
73
73
  linked: boolean
74
74
  tokenByTarget: TargetPresence
75
- /** Targets (any) where BLOB_READ_WRITE_TOKEN is absent while linked. */
75
+ storeByTarget: TargetPresence
76
+ /** Targets missing both legacy token and BLOB_STORE_ID while a blob store is linked. */
76
77
  missingTargets: VercelTarget[]
77
- /** 'partial' when production/preview lack the token (deploy-blocking). */
78
+ /** 'partial' when production/preview lack upload auth signals (deploy-blocking). */
78
79
  status: BlobLinkStatus
79
80
  }
80
81
 
@@ -85,16 +86,26 @@ export function evaluateBlobLink(envVars: VercelEnvVar[]): BlobLinkReport {
85
86
  (env) => BLOB_LINK_SIGNALS.includes(env.key) || env.key.startsWith('BLOB_'),
86
87
  )
87
88
  const tokenByTarget = presenceForKey(envVars, 'BLOB_READ_WRITE_TOKEN')
89
+ const storeByTarget = presenceForKey(envVars, 'BLOB_STORE_ID')
88
90
 
89
91
  if (!linked) {
90
- return { linked: false, tokenByTarget, missingTargets: [], status: 'none' }
92
+ return {
93
+ linked: false,
94
+ tokenByTarget,
95
+ storeByTarget,
96
+ missingTargets: [],
97
+ status: 'none',
98
+ }
91
99
  }
92
100
 
93
- const missingTargets = VERCEL_TARGETS.filter((t) => !tokenByTarget[t])
94
- const criticalMissing = DEPLOY_TARGETS.some((t) => !tokenByTarget[t])
101
+ const hasDeployAuth = (target: VercelTarget) => tokenByTarget[target] || storeByTarget[target]
102
+
103
+ const missingTargets = VERCEL_TARGETS.filter((t) => !hasDeployAuth(t))
104
+ const criticalMissing = DEPLOY_TARGETS.some((t) => !hasDeployAuth(t))
95
105
  return {
96
106
  linked: true,
97
107
  tokenByTarget,
108
+ storeByTarget,
98
109
  missingTargets,
99
110
  status: criticalMissing ? 'partial' : 'ok',
100
111
  }