@mayson-org/inject-script 1.0.25 → 1.0.27

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.
@@ -21,6 +21,7 @@ export type PluginGenerateContext = {
21
21
  };
22
22
  metadata?: {
23
23
  apiRoutePath?: string;
24
+ appBaseUrl?: string;
24
25
  };
25
26
  };
26
27
  export interface ComponentGeneratorOptions {
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GACrB,WAAW,GACX,OAAO,GACP,UAAU,GACV,KAAK,GACL,KAAK,CAAC;AAEV,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,iEAAiE;AACjE,MAAM,MAAM,qBAAqB,GAAG;IAClC,SAAS,CAAC,EAAE;QACV,aAAa,EAAE,OAAO,CAAC;QACvB,WAAW,EAAE,OAAO,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,GAAG,CAAC,EAAE;QACJ,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;QACnB,eAAe,EAAE,MAAM,CAAC;QACxB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,QAAQ,CAAC,EAAE;QACT,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;CACH,CAAC;AAEF,MAAM,WAAW,yBAAyB;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,8DAA8D;IAC9D,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,0DAA0D;IAC1D,OAAO,CAAC,EAAE,qBAAqB,CAAC;CACjC;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,sBAAsB,EAAE,CAAC;IACrC,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,OAAO,CAAC,EAAE,qBAAqB,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,iBAAiB,EAAE,MAAM,EAAE,CAAC;CAC7B,CAAC;AAEF,mDAAmD;AACnD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,OAAO,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;IACpC,gEAAgE;IAChE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,mEAAmE;IACnE,cAAc,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,qBAAqB,KAAK,MAAM,CAAC;IAC7D,+DAA+D;IAC/D,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,oBAAoB,KAAK,mBAAmB,CAAC;CACpE"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GACrB,WAAW,GACX,OAAO,GACP,UAAU,GACV,KAAK,GACL,KAAK,CAAC;AAEV,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,iEAAiE;AACjE,MAAM,MAAM,qBAAqB,GAAG;IAClC,SAAS,CAAC,EAAE;QACV,aAAa,EAAE,OAAO,CAAC;QACvB,WAAW,EAAE,OAAO,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,GAAG,CAAC,EAAE;QACJ,OAAO,EAAE,MAAM,CAAC;QAChB,UAAU,EAAE,MAAM,CAAC;QACnB,eAAe,EAAE,MAAM,CAAC;QACxB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,QAAQ,CAAC,EAAE;QACT,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;CACH,CAAC;AAEF,MAAM,WAAW,yBAAyB;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,8DAA8D;IAC9D,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,0DAA0D;IAC1D,OAAO,CAAC,EAAE,qBAAqB,CAAC;CACjC;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,sBAAsB,EAAE,CAAC;IACrC,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,OAAO,CAAC,EAAE,qBAAqB,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,iBAAiB,EAAE,MAAM,EAAE,CAAC;CAC7B,CAAC;AAEF,mDAAmD;AACnD,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,OAAO,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;IACpC,gEAAgE;IAChE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,mEAAmE;IACnE,cAAc,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,qBAAqB,KAAK,MAAM,CAAC;IAC7D,+DAA+D;IAC/D,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,oBAAoB,KAAK,mBAAmB,CAAC;CACpE"}
package/dist/index.d.ts CHANGED
@@ -10,8 +10,8 @@ export type { MaysonEnvConfig } from './shared/config.js';
10
10
  export { fetchGeneratedAppMetadata, resolveMaysonConfig, shouldFetchGeneratedAppMetadata, } from './shared/generated-app-metadata.js';
11
11
  export { watermarkPlugin, buildMaysonWatermarkSource, } from './plugins/watermark/index.js';
12
12
  export { asciiPlugin, buildMaysonAsciiSource, } from './plugins/ascii/index.js';
13
- export { metadataPlugin, handleMetadataApiRoute, generateMetadataApiRouteSource, injectMetadataApiRoute, generateRandomApiSubpath, resolveMetadataApiSubpath, METADATA_COOKIE_NAME, DEFAULT_COOKIE_MAX_AGE, } from './plugins/metadata/index.js';
14
- export type { MetadataApiResponse, MaysonRealtimeStats } from './plugins/metadata/index.js';
13
+ export { metadataPlugin, handleMetadataApiRoute, generateMetadataApiRouteSource, injectMetadataApiRoute, generateRandomApiSubpath, resolveMetadataApiSubpath, patchVercelConfig, METADATA_COOKIE_NAME, DEFAULT_COOKIE_MAX_AGE, } from './plugins/metadata/index.js';
14
+ export type { MetadataApiResponse, MaysonRealtimeStats, VercelConfig, VercelRewrite } from './plugins/metadata/index.js';
15
15
  export { pwaPlugin, injectPwaProject, buildMaysonServiceWorkerRegisterSource, buildMaysonInstallPromptSource, buildManifestSource, buildSwJsSource, patchLayoutPwaMetadata, } from './plugins/pwa/index.js';
16
16
  export { BUILD_WITH_LOVE_ASCII, MAYSON_LETTER_ASCII, } from './shared/ascii-art.js';
17
17
  export type { ComponentType, GeneratedComponentInfo, ComponentGeneratorOptions, InjectorOptions, InjectorResult, MaysonPlugin, PluginGenerateContext, ProjectInjectContext, ProjectInjectResult, } from './core/types.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EACV,aAAa,EACb,cAAc,EAEf,MAAM,iBAAiB,CAAC;AAKzB,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EACL,4BAA4B,EAC5B,yBAAyB,GAC1B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAChF,YAAY,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,YAAY,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EACL,yBAAyB,EACzB,mBAAmB,EACnB,+BAA+B,GAChC,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACL,eAAe,EACf,0BAA0B,GAC3B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,WAAW,EACX,sBAAsB,GACvB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,cAAc,EACd,sBAAsB,EACtB,8BAA8B,EAC9B,sBAAsB,EACtB,wBAAwB,EACxB,yBAAyB,EACzB,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,6BAA6B,CAAC;AACrC,YAAY,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAC5F,OAAO,EACL,SAAS,EACT,gBAAgB,EAChB,sCAAsC,EACtC,8BAA8B,EAC9B,mBAAmB,EACnB,eAAe,EACf,sBAAsB,GACvB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EACV,aAAa,EACb,sBAAsB,EACtB,yBAAyB,EACzB,eAAe,EACf,cAAc,EACd,YAAY,EACZ,qBAAqB,EACrB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,iBAAiB,CAAC;AAKzB,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,CAAC,EAAE,aAAa,EAAE,CAAC;IACxB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,mFAAmF;IACnF,GAAG,CAAC,EAAE,OAAO,CAAC;CACf,CAAC;AA4EF;;;GAGG;AACH,wBAAsB,aAAa,CACjC,WAAW,GAAE,MAAsB,EACnC,cAAc,GAAE,aAAa,EAAE,GAAG,oBAAoC,EACtE,SAAS,GAAE,OAAe,GACzB,OAAO,CAAC,cAAc,CAAC,CAmHzB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EACV,aAAa,EACb,cAAc,EAEf,MAAM,iBAAiB,CAAC;AAKzB,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EACL,4BAA4B,EAC5B,yBAAyB,GAC1B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAChF,YAAY,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,YAAY,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EACL,yBAAyB,EACzB,mBAAmB,EACnB,+BAA+B,GAChC,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EACL,eAAe,EACf,0BAA0B,GAC3B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,WAAW,EACX,sBAAsB,GACvB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,cAAc,EACd,sBAAsB,EACtB,8BAA8B,EAC9B,sBAAsB,EACtB,wBAAwB,EACxB,yBAAyB,EACzB,iBAAiB,EACjB,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,6BAA6B,CAAC;AACrC,YAAY,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACzH,OAAO,EACL,SAAS,EACT,gBAAgB,EAChB,sCAAsC,EACtC,8BAA8B,EAC9B,mBAAmB,EACnB,eAAe,EACf,sBAAsB,GACvB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EACV,aAAa,EACb,sBAAsB,EACtB,yBAAyB,EACzB,eAAe,EACf,cAAc,EACd,YAAY,EACZ,qBAAqB,EACrB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,iBAAiB,CAAC;AAKzB,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,CAAC,EAAE,aAAa,EAAE,CAAC;IACxB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,mFAAmF;IACnF,GAAG,CAAC,EAAE,OAAO,CAAC;CACf,CAAC;AA4EF;;;GAGG;AACH,wBAAsB,aAAa,CACjC,WAAW,GAAE,MAAsB,EACnC,cAAc,GAAE,aAAa,EAAE,GAAG,oBAAoC,EACtE,SAAS,GAAE,OAAe,GACzB,OAAO,CAAC,cAAc,CAAC,CAoHzB"}
package/dist/index.js CHANGED
@@ -15,7 +15,7 @@ export { loadMaysonEnvConfig } from './shared/config.js';
15
15
  export { fetchGeneratedAppMetadata, resolveMaysonConfig, shouldFetchGeneratedAppMetadata, } from './shared/generated-app-metadata.js';
16
16
  export { watermarkPlugin, buildMaysonWatermarkSource, } from './plugins/watermark/index.js';
17
17
  export { asciiPlugin, buildMaysonAsciiSource, } from './plugins/ascii/index.js';
18
- export { metadataPlugin, handleMetadataApiRoute, generateMetadataApiRouteSource, injectMetadataApiRoute, generateRandomApiSubpath, resolveMetadataApiSubpath, METADATA_COOKIE_NAME, DEFAULT_COOKIE_MAX_AGE, } from './plugins/metadata/index.js';
18
+ export { metadataPlugin, handleMetadataApiRoute, generateMetadataApiRouteSource, injectMetadataApiRoute, generateRandomApiSubpath, resolveMetadataApiSubpath, patchVercelConfig, METADATA_COOKIE_NAME, DEFAULT_COOKIE_MAX_AGE, } from './plugins/metadata/index.js';
19
19
  export { pwaPlugin, injectPwaProject, buildMaysonServiceWorkerRegisterSource, buildMaysonInstallPromptSource, buildManifestSource, buildSwJsSource, patchLayoutPwaMetadata, } from './plugins/pwa/index.js';
20
20
  export { BUILD_WITH_LOVE_ASCII, MAYSON_LETTER_ASCII, } from './shared/ascii-art.js';
21
21
  const DEFAULT_TYPES = ['watermark', 'ascii', 'metadata', 'pwa'];
@@ -111,6 +111,7 @@ export async function runAutoInject(projectRoot = process.cwd(), typesOrOptions
111
111
  },
112
112
  metadata: {
113
113
  apiRoutePath: `/api/${apiSubpath}`,
114
+ appBaseUrl: config.appBaseUrl,
114
115
  },
115
116
  };
116
117
  const isTypeScript = layoutPath.endsWith('.tsx') || layoutPath.endsWith('.ts');
@@ -2,6 +2,7 @@ import { describe, it } from 'node:test';
2
2
  import assert from 'node:assert/strict';
3
3
  import { handleMetadataApiRoute, METADATA_COOKIE_NAME, generateMetadataApiRouteSource, } from '../api-handler.js';
4
4
  import { generateRandomApiSubpath } from '../inject-api-route.js';
5
+ import { patchVercelConfig } from '../patch-vercel-config.js';
5
6
  describe('Metadata API Route & Cookie Caching', () => {
6
7
  it('returns cache MISS on initial request without cookie', async () => {
7
8
  const req = new Request('http://localhost:3000/api/randomeapipath', {
@@ -53,4 +54,12 @@ describe('Metadata API Route & Cookie Caching', () => {
53
54
  assert.ok(!subpath1.startsWith('mayson-'));
54
55
  assert.notEqual(subpath1, subpath2);
55
56
  });
57
+ it('patches vercel.json rewrites for /~muxt-app.js and /~api/analytics', () => {
58
+ const res = patchVercelConfig({
59
+ projectRoot: process.cwd(),
60
+ appBaseUrl: 'https://mayson.dev',
61
+ dryRun: true,
62
+ });
63
+ assert.ok(res.messages.length > 0);
64
+ });
56
65
  });
@@ -1,6 +1,6 @@
1
1
  import type { MaysonEnvConfig } from '../../shared/config.js';
2
2
  export declare const METADATA_COOKIE_NAME = "mayson_metadata_cache";
3
- export declare const DEFAULT_COOKIE_MAX_AGE = 300;
3
+ export declare const DEFAULT_COOKIE_MAX_AGE = 120;
4
4
  export type MetadataApiResponse = {
5
5
  success: boolean;
6
6
  cached: boolean;
@@ -1,6 +1,6 @@
1
1
  import { resolveMaysonConfig } from '../../shared/generated-app-metadata.js';
2
2
  export const METADATA_COOKIE_NAME = 'mayson_metadata_cache';
3
- export const DEFAULT_COOKIE_MAX_AGE = 300; // 5 minutes
3
+ export const DEFAULT_COOKIE_MAX_AGE = 120; // 2 minutes
4
4
  /**
5
5
  * Parses cookies from HTTP Cookie header string.
6
6
  */
@@ -76,7 +76,7 @@ export async function handleMetadataApiRoute(req) {
76
76
  */
77
77
  export function generateMetadataApiRouteSource() {
78
78
  return `const METADATA_COOKIE_NAME = 'mayson_metadata_cache';
79
- const DEFAULT_COOKIE_MAX_AGE = 300; // 5 minutes
79
+ const DEFAULT_COOKIE_MAX_AGE = 120; // 2 minutes
80
80
 
81
81
  function readEnv(key: string): string {
82
82
  return process.env[key]?.trim() ?? '';
@@ -2,11 +2,13 @@ import type { MaysonPlugin, PluginGenerateContext } from '../../core/types.js';
2
2
  export { handleMetadataApiRoute, generateMetadataApiRouteSource, METADATA_COOKIE_NAME, DEFAULT_COOKIE_MAX_AGE, } from './api-handler.js';
3
3
  export type { MetadataApiResponse } from './api-handler.js';
4
4
  export { injectMetadataApiRoute, generateRandomApiSubpath, resolveMetadataApiSubpath, } from './inject-api-route.js';
5
+ export { patchVercelConfig } from './patch-vercel-config.js';
6
+ export type { VercelConfig, VercelRewrite } from './patch-vercel-config.js';
5
7
  export type MaysonRealtimeStats = {
6
8
  showRemixPill: boolean;
7
9
  enableRemix: boolean;
8
10
  websiteTitle: string;
9
11
  };
10
- export declare function buildMaysonMetadataSource(context?: PluginGenerateContext): string;
12
+ export declare function buildMaysonMetadataSource(_context?: PluginGenerateContext): string;
11
13
  export declare const metadataPlugin: MaysonPlugin;
12
14
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/plugins/metadata/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAG/E,OAAO,EACL,sBAAsB,EACtB,8BAA8B,EAC9B,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,yBAAyB,GAC1B,MAAM,uBAAuB,CAAC;AAE/B,MAAM,MAAM,mBAAmB,GAAG;IAChC,aAAa,EAAE,OAAO,CAAC;IACvB,WAAW,EAAE,OAAO,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,wBAAgB,yBAAyB,CAAC,OAAO,CAAC,EAAE,qBAAqB,GAAG,MAAM,CAsDjF;AAED,eAAO,MAAM,cAAc,EAAE,YAK5B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/plugins/metadata/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAG/E,OAAO,EACL,sBAAsB,EACtB,8BAA8B,EAC9B,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,yBAAyB,GAC1B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAE5E,MAAM,MAAM,mBAAmB,GAAG;IAChC,aAAa,EAAE,OAAO,CAAC;IACvB,WAAW,EAAE,OAAO,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,wBAAgB,yBAAyB,CAAC,QAAQ,CAAC,EAAE,qBAAqB,GAAG,MAAM,CAclF;AAED,eAAO,MAAM,cAAc,EAAE,YAK5B,CAAC"}
@@ -1,56 +1,17 @@
1
1
  import { injectMetadataApiRoute } from './inject-api-route.js';
2
2
  export { handleMetadataApiRoute, generateMetadataApiRouteSource, METADATA_COOKIE_NAME, DEFAULT_COOKIE_MAX_AGE, } from './api-handler.js';
3
3
  export { injectMetadataApiRoute, generateRandomApiSubpath, resolveMetadataApiSubpath, } from './inject-api-route.js';
4
- export function buildMaysonMetadataSource(context) {
5
- const apiRoute = context?.metadata?.apiRoutePath ?? '/api/mayson-metadata';
4
+ export { patchVercelConfig } from './patch-vercel-config.js';
5
+ export function buildMaysonMetadataSource(_context) {
6
6
  return `'use client';
7
7
 
8
- import React, { useEffect, useState } from 'react';
9
-
10
- export type MaysonRealtimeStats = {
11
- showRemixPill: boolean;
12
- enableRemix: boolean;
13
- websiteTitle: string;
14
- };
15
-
16
- export function MaysonMetadata({ apiRoute = ${JSON.stringify(apiRoute)} }: { apiRoute?: string }) {
17
- const [stats, setStats] = useState<MaysonRealtimeStats | null>(null);
18
-
19
- useEffect(() => {
20
- let isMounted = true;
21
- async function checkRealtimeStats() {
22
- try {
23
- const res = await fetch(apiRoute, {
24
- method: 'GET',
25
- headers: { Accept: 'application/json' },
26
- });
27
- if (!res.ok) return;
28
- const json = await res.json();
29
- if (json && json.success && json.data && isMounted) {
30
- setStats(json.data);
31
- }
32
- } catch {
33
- // Silent catch for network issue
34
- }
35
- }
36
- checkRealtimeStats();
37
- return () => {
38
- isMounted = false;
39
- };
40
- }, [apiRoute]);
8
+ import React from 'react';
41
9
 
10
+ export function MaysonMetadata() {
42
11
  return (
43
12
  <>
44
13
  <meta name="mayson-generator" content="Mayson App Platform" />
45
- {stats && (
46
- <meta
47
- name="mayson-realtime-stats"
48
- content={JSON.stringify({
49
- showRemixPill: stats.showRemixPill,
50
- enableRemix: stats.enableRemix,
51
- })}
52
- />
53
- )}
14
+ <script src="/~muxt-app.js" async />
54
15
  </>
55
16
  );
56
17
  }
@@ -9,7 +9,7 @@ export declare function findAppDir(projectRoot: string, layoutPath?: string): st
9
9
  */
10
10
  export declare function resolveMetadataApiSubpath(_projectRoot?: string, _layoutPath?: string, overrideSubpath?: string): string;
11
11
  /**
12
- * Inject the metadata API route handler (/api/<random-subpath>) into the project workspace.
12
+ * Inject the metadata API route handler (/api/<random-subpath>) and vercel.json rewrites into project workspace.
13
13
  */
14
14
  export declare function injectMetadataApiRoute(context: ProjectInjectContext & {
15
15
  routeSubpath?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"inject-api-route.d.ts","sourceRoot":"","sources":["../../../src/plugins/metadata/inject-api-route.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAGrF;;GAEG;AACH,wBAAgB,wBAAwB,IAAI,MAAM,CAOjD;AAED,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAQ3E;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,YAAY,CAAC,EAAE,MAAM,EACrB,WAAW,CAAC,EAAE,MAAM,EACpB,eAAe,CAAC,EAAE,MAAM,GACvB,MAAM,CAKR;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,oBAAoB,GAAG;IAAE,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,GACxD,mBAAmB,CAiDrB"}
1
+ {"version":3,"file":"inject-api-route.d.ts","sourceRoot":"","sources":["../../../src/plugins/metadata/inject-api-route.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAIrF;;GAEG;AACH,wBAAgB,wBAAwB,IAAI,MAAM,CAOjD;AAED,wBAAgB,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAQ3E;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,YAAY,CAAC,EAAE,MAAM,EACrB,WAAW,CAAC,EAAE,MAAM,EACpB,eAAe,CAAC,EAAE,MAAM,GACvB,MAAM,CAKR;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,oBAAoB,GAAG;IAAE,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,GACxD,mBAAmB,CAyDrB"}
@@ -1,6 +1,7 @@
1
1
  import fs from 'node:fs';
2
2
  import path from 'node:path';
3
3
  import { generateMetadataApiRouteSource } from './api-handler.js';
4
+ import { patchVercelConfig } from './patch-vercel-config.js';
4
5
  /**
5
6
  * Generate a purely random 10-character subpath string with no predictable prefix.
6
7
  */
@@ -31,13 +32,20 @@ export function resolveMetadataApiSubpath(_projectRoot, _layoutPath, overrideSub
31
32
  return generateRandomApiSubpath();
32
33
  }
33
34
  /**
34
- * Inject the metadata API route handler (/api/<random-subpath>) into the project workspace.
35
+ * Inject the metadata API route handler (/api/<random-subpath>) and vercel.json rewrites into project workspace.
35
36
  */
36
37
  export function injectMetadataApiRoute(context) {
37
38
  const { projectRoot, layoutPath, dryRun = false } = context;
38
39
  const messages = [];
39
40
  const injectedComponents = [];
40
41
  const skippedComponents = [];
42
+ // Patch vercel.json rewrites for /~muxt-app.js and /~api/analytics
43
+ const vercelResult = patchVercelConfig({
44
+ projectRoot,
45
+ appBaseUrl: context.context?.metadata?.appBaseUrl || context.context?.watermark?.appBaseUrl,
46
+ dryRun,
47
+ });
48
+ messages.push(...vercelResult.messages);
41
49
  const subpath = context.routeSubpath ??
42
50
  (context.context?.metadata?.apiRoutePath
43
51
  ? context.context.metadata.apiRoutePath.replace(/^\/api\//, '')
@@ -0,0 +1,17 @@
1
+ export type VercelRewrite = {
2
+ source: string;
3
+ destination: string;
4
+ };
5
+ export type VercelConfig = {
6
+ rewrites?: VercelRewrite[];
7
+ [key: string]: unknown;
8
+ };
9
+ export declare function patchVercelConfig(options: {
10
+ projectRoot: string;
11
+ appBaseUrl?: string;
12
+ dryRun?: boolean;
13
+ }): {
14
+ changed: boolean;
15
+ messages: string[];
16
+ };
17
+ //# sourceMappingURL=patch-vercel-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"patch-vercel-config.d.ts","sourceRoot":"","sources":["../../../src/plugins/metadata/patch-vercel-config.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,CAAC,EAAE,aAAa,EAAE,CAAC;IAC3B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,OAAO,EAAE;IACzC,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAwE3C"}
@@ -0,0 +1,65 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ export function patchVercelConfig(options) {
4
+ const { projectRoot, dryRun = false } = options;
5
+ const rawBase = (options.appBaseUrl || 'https://mayson.dev').replace(/\/$/, '');
6
+ const vercelJsonPath = path.join(projectRoot, 'vercel.json');
7
+ const messages = [];
8
+ const requiredRewrites = [
9
+ {
10
+ source: '/~muxt-app.js',
11
+ destination: `${rawBase}/sdks/v2/muxt-app.js`,
12
+ },
13
+ {
14
+ source: '/~api/analytics',
15
+ destination: `${rawBase}/api/analytics`,
16
+ },
17
+ {
18
+ source: '/~/analytics',
19
+ destination: `${rawBase}/api/analytics`,
20
+ },
21
+ ];
22
+ let config = {};
23
+ let fileExists = false;
24
+ if (fs.existsSync(vercelJsonPath)) {
25
+ fileExists = true;
26
+ try {
27
+ const content = fs.readFileSync(vercelJsonPath, 'utf-8');
28
+ config = JSON.parse(content);
29
+ }
30
+ catch {
31
+ config = {};
32
+ }
33
+ }
34
+ if (!Array.isArray(config.rewrites)) {
35
+ config.rewrites = [];
36
+ }
37
+ let changed = false;
38
+ for (const target of requiredRewrites) {
39
+ const existingIndex = config.rewrites.findIndex((r) => r.source === target.source);
40
+ if (existingIndex !== -1) {
41
+ if (config.rewrites[existingIndex].destination !== target.destination) {
42
+ config.rewrites[existingIndex].destination = target.destination;
43
+ changed = true;
44
+ messages.push(`updated vercel.json rewrite: ${target.source} -> ${target.destination}`);
45
+ }
46
+ }
47
+ else {
48
+ config.rewrites.push(target);
49
+ changed = true;
50
+ messages.push(`added vercel.json rewrite: ${target.source} -> ${target.destination}`);
51
+ }
52
+ }
53
+ if (changed && !dryRun) {
54
+ fs.writeFileSync(vercelJsonPath, JSON.stringify(config, null, 2) + '\n', 'utf-8');
55
+ }
56
+ if (!changed) {
57
+ messages.push('vercel.json rewrites already up to date');
58
+ }
59
+ else if (dryRun) {
60
+ messages.push(fileExists
61
+ ? 'would update vercel.json rewrites'
62
+ : 'would create vercel.json with rewrites');
63
+ }
64
+ return { changed, messages };
65
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mayson-org/inject-script",
3
- "version": "1.0.25",
3
+ "version": "1.0.27",
4
4
  "description": "CLI and library to inject Mayson watermark, ascii, and PWA into Next.js App Router layouts.",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",