@riverbankcms/sdk 0.4.1 → 0.4.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.
Files changed (101) hide show
  1. package/README.md +73 -0
  2. package/dist/cli/index.js +46 -5
  3. package/dist/cli/index.js.map +1 -1
  4. package/dist/client/client.d.mts +3 -3
  5. package/dist/client/client.d.ts +3 -3
  6. package/dist/client/client.js +80 -170
  7. package/dist/client/client.js.map +1 -1
  8. package/dist/client/client.mjs +80 -170
  9. package/dist/client/client.mjs.map +1 -1
  10. package/dist/client/hooks.d.mts +3 -3
  11. package/dist/client/hooks.d.ts +3 -3
  12. package/dist/client/rendering/client.d.mts +1 -1
  13. package/dist/client/rendering/client.d.ts +1 -1
  14. package/dist/client/rendering/client.js +80 -142
  15. package/dist/client/rendering/client.js.map +1 -1
  16. package/dist/client/rendering/client.mjs +80 -142
  17. package/dist/client/rendering/client.mjs.map +1 -1
  18. package/dist/client/resolver-CYyfzTQ9.d.mts +61 -0
  19. package/dist/client/resolver-CYyfzTQ9.d.ts +61 -0
  20. package/dist/client/usePage-BC8Q2E3t.d.mts +6431 -0
  21. package/dist/client/usePage-CHEybPMD.d.ts +6429 -0
  22. package/dist/client/usePage-D4fxZbRR.d.mts +6429 -0
  23. package/dist/client/usePage-DpRNZUtP.d.ts +6431 -0
  24. package/dist/server/{Layout-B_zUr9ci.d.mts → Layout-ByUnm35V.d.mts} +1 -1
  25. package/dist/server/{Layout-CHG77dhK.d.ts → Layout-kRv5sU81.d.ts} +1 -1
  26. package/dist/server/{chunk-ZIM53VP6.js → chunk-6JBKKV3G.js} +27 -4
  27. package/dist/server/chunk-6JBKKV3G.js.map +1 -0
  28. package/dist/server/{chunk-SFQ7VF3G.mjs → chunk-7BOIO2S7.mjs} +7 -5
  29. package/dist/server/{chunk-SFQ7VF3G.mjs.map → chunk-7BOIO2S7.mjs.map} +1 -1
  30. package/dist/server/{chunk-P6CDRJN3.js → chunk-BLKVTULP.js} +13 -11
  31. package/dist/server/chunk-BLKVTULP.js.map +1 -0
  32. package/dist/server/{chunk-BOHTTHY5.mjs → chunk-I6K5REFT.mjs} +27 -4
  33. package/dist/server/chunk-I6K5REFT.mjs.map +1 -0
  34. package/dist/server/{chunk-BUCJWG6G.js → chunk-NW5KHH4A.js} +5 -5
  35. package/dist/server/{chunk-BUCJWG6G.js.map → chunk-NW5KHH4A.js.map} +1 -1
  36. package/dist/server/{chunk-XK2YIISA.mjs → chunk-SPXMMX3C.mjs} +2 -2
  37. package/dist/server/{chunk-IT5ICP43.js → chunk-TKMA6D6U.js} +139 -229
  38. package/dist/server/chunk-TKMA6D6U.js.map +1 -0
  39. package/dist/server/{chunk-NKXS4TBK.mjs → chunk-TNRADRPH.mjs} +79 -169
  40. package/dist/server/chunk-TNRADRPH.mjs.map +1 -0
  41. package/dist/server/{components-Bo3LPpVb.d.mts → components-CY8jDQjv.d.mts} +20 -12
  42. package/dist/server/{components-ClFs4PUa.d.ts → components-D1Z2mSDr.d.ts} +20 -12
  43. package/dist/server/components.d.mts +5 -5
  44. package/dist/server/components.d.ts +5 -5
  45. package/dist/server/components.js +3 -3
  46. package/dist/server/components.mjs +2 -2
  47. package/dist/server/config-validation.d.mts +2 -2
  48. package/dist/server/config-validation.d.ts +2 -2
  49. package/dist/server/config-validation.js +3 -3
  50. package/dist/server/config-validation.mjs +2 -2
  51. package/dist/server/config.d.mts +3 -3
  52. package/dist/server/config.d.ts +3 -3
  53. package/dist/server/config.js +3 -3
  54. package/dist/server/config.mjs +2 -2
  55. package/dist/server/data.d.mts +2 -2
  56. package/dist/server/data.d.ts +2 -2
  57. package/dist/server/{index-DbSfrRA0.d.ts → index-DCIz9Ptv.d.ts} +1 -1
  58. package/dist/server/{index-Dj7VKH34.d.mts → index-DFQwtj3J.d.mts} +1 -1
  59. package/dist/server/index.d.mts +4 -4
  60. package/dist/server/index.d.ts +4 -4
  61. package/dist/server/{loadContent-C_FipaAC.d.mts → loadContent-CWuE8FCx.d.mts} +3 -3
  62. package/dist/server/{loadContent-C2SwqmXy.d.ts → loadContent-DynBuR5f.d.ts} +3 -3
  63. package/dist/server/{loadPage-mavT3Jae.d.mts → loadPage-B8RmlYgV.d.mts} +60 -27
  64. package/dist/server/{loadPage-naVvoua8.d.ts → loadPage-BTkKpizX.d.ts} +60 -27
  65. package/dist/server/metadata.d.mts +3 -3
  66. package/dist/server/metadata.d.ts +3 -3
  67. package/dist/server/navigation.d.mts +2 -2
  68. package/dist/server/navigation.d.ts +2 -2
  69. package/dist/server/rendering/server.d.mts +4 -4
  70. package/dist/server/rendering/server.d.ts +4 -4
  71. package/dist/server/rendering/server.js +4 -4
  72. package/dist/server/rendering/server.mjs +3 -3
  73. package/dist/server/rendering.d.mts +7 -7
  74. package/dist/server/rendering.d.ts +7 -7
  75. package/dist/server/rendering.js +4 -4
  76. package/dist/server/rendering.mjs +3 -3
  77. package/dist/server/routing.d.mts +78 -5
  78. package/dist/server/routing.d.ts +78 -5
  79. package/dist/server/routing.js +56 -2
  80. package/dist/server/routing.js.map +1 -1
  81. package/dist/server/routing.mjs +54 -0
  82. package/dist/server/routing.mjs.map +1 -1
  83. package/dist/server/server.d.mts +5 -5
  84. package/dist/server/server.d.ts +5 -5
  85. package/dist/server/theme-bridge.js +7 -7
  86. package/dist/server/theme-bridge.mjs +1 -1
  87. package/dist/server/{types-5XdVD2J1.d.ts → types-BiRZnxDx.d.ts} +17 -6
  88. package/dist/server/{types-CMqVHYLG.d.ts → types-CL916r6x.d.ts} +23 -1
  89. package/dist/server/{types-BA-J9K8r.d.mts → types-CdrJqlKx.d.mts} +17 -6
  90. package/dist/server/{types-BC9eB2KH.d.mts → types-DkKEctWn.d.mts} +1 -1
  91. package/dist/server/{types-CAnC529E.d.ts → types-oCM-fw4O.d.ts} +1 -1
  92. package/dist/server/{types-CYfHxUhe.d.mts → types-txWsSxN7.d.mts} +23 -1
  93. package/dist/server/{validation-C7W2Fe0i.d.ts → validation-CoU8uAiu.d.ts} +1 -1
  94. package/dist/server/{validation-hg1sqhrt.d.mts → validation-DzvDwwRo.d.mts} +1 -1
  95. package/package.json +1 -1
  96. package/dist/server/chunk-BOHTTHY5.mjs.map +0 -1
  97. package/dist/server/chunk-IT5ICP43.js.map +0 -1
  98. package/dist/server/chunk-NKXS4TBK.mjs.map +0 -1
  99. package/dist/server/chunk-P6CDRJN3.js.map +0 -1
  100. package/dist/server/chunk-ZIM53VP6.js.map +0 -1
  101. /package/dist/server/{chunk-XK2YIISA.mjs.map → chunk-SPXMMX3C.mjs.map} +0 -0
@@ -7125,121 +7125,46 @@ var LinkNode = ({
7125
7125
  return /* @__PURE__ */ jsx8("a", { href, ...rest, children });
7126
7126
  };
7127
7127
 
7128
- // ../media-core/dist/chunk-JAKU4BKA.mjs
7129
- var DEFAULT_BASE_PATH = "/api/img";
7130
- var formatNumber = (value) => Number.isInteger(value) ? value.toString() : value.toFixed(6).replace(/0+$/, "").replace(/\.$/, "");
7131
- var addParam = (search, key, value) => {
7132
- if (value === void 0) return;
7133
- switch (key) {
7134
- case "fpX":
7135
- search.set("fp-x", formatNumber(value));
7136
- break;
7137
- case "fpY":
7138
- search.set("fp-y", formatNumber(value));
7139
- break;
7140
- case "rect": {
7141
- const rect = value;
7142
- if (!rect) break;
7143
- search.set("rect", rect.map(formatNumber).join(","));
7144
- break;
7145
- }
7146
- case "autoFormat":
7147
- if (value) {
7148
- search.append("auto", "format");
7149
- }
7150
- break;
7151
- case "invert":
7152
- search.set("invert", value ? "true" : "false");
7153
- break;
7154
- default:
7155
- search.set(
7156
- key,
7157
- typeof value === "number" ? formatNumber(value) : String(value)
7158
- );
7159
- }
7160
- };
7161
- var ORDER = [
7162
- "w",
7163
- "h",
7164
- "dpr",
7165
- "fit",
7166
- "crop",
7167
- "fpX",
7168
- "fpY",
7169
- "rect",
7170
- "q",
7171
- "fm",
7172
- "autoFormat",
7173
- "bg",
7174
- "flip",
7175
- "or",
7176
- "pad",
7177
- "blur",
7178
- "sharp",
7179
- "invert",
7180
- "sat",
7181
- "cs"
7182
- ];
7183
- var getImageUrl = (asset, params = {}, basePath = DEFAULT_BASE_PATH) => {
7184
- const trimmedBase = basePath.endsWith("/") ? basePath.slice(0, Math.max(basePath.length - 1, 0)) : basePath;
7185
- const path = `${trimmedBase}/${encodeURIComponent(asset.id)}`;
7186
- const searchParams = new URLSearchParams();
7187
- ORDER.forEach((key) => {
7188
- addParam(searchParams, key, params[key]);
7189
- });
7190
- const query = searchParams.toString();
7191
- return query ? `${path}?${query}` : path;
7192
- };
7193
-
7194
- // ../blocks/src/system/runtime/utils/api-url.ts
7195
- function resolveMultiEnvDashboardUrl() {
7196
- const env = process.env.RIVERBANK_ENV;
7197
- if (!env) return null;
7198
- const envKey = `RIVERBANK_${env.toUpperCase()}_DASHBOARD_URL`;
7199
- const dashboardUrl = process.env[envKey];
7200
- if (dashboardUrl) {
7201
- return dashboardUrl.replace(/\/$/, "");
7202
- }
7203
- return null;
7204
- }
7205
- function getCmsApiUrl() {
7206
- const multiEnvDashboard = resolveMultiEnvDashboardUrl();
7207
- if (multiEnvDashboard) {
7208
- return `${multiEnvDashboard}/api`;
7209
- }
7210
- const builderApiUrl = process.env.NEXT_PUBLIC_BUILDER_API_URL;
7211
- if (builderApiUrl) {
7212
- return builderApiUrl.replace(/\/$/, "");
7213
- }
7214
- const dashboardUrl = process.env.NEXT_PUBLIC_DASHBOARD_URL;
7215
- if (dashboardUrl) {
7216
- const base = dashboardUrl.replace(/\/$/, "");
7217
- return `${base}/api`;
7218
- }
7219
- const legacyApiUrl = process.env.NEXT_PUBLIC_CMS_API_URL;
7220
- if (legacyApiUrl) {
7221
- return legacyApiUrl.replace(/\/$/, "");
7222
- }
7223
- throw new Error(
7224
- "Dashboard URL not configured. Either:\n 1. Set RIVERBANK_ENV with RIVERBANK_LOCAL_DASHBOARD_URL / RIVERBANK_REMOTE_DASHBOARD_URL\n 2. Set NEXT_PUBLIC_BUILDER_API_URL (SDK sites)\n 3. Set NEXT_PUBLIC_DASHBOARD_URL (frontend app)"
7225
- );
7128
+ // ../media-core/dist/chunk-ZBK775TB.mjs
7129
+ function getDirectImageUrl(supabaseUrl, storagePath, storageBucket = "media", options) {
7130
+ const baseUrl = supabaseUrl.replace(/\/$/, "");
7131
+ const encodedPath = storagePath.split("/").map((segment) => encodeURIComponent(segment)).join("/");
7132
+ const isSvg = storagePath.toLowerCase().endsWith(".svg");
7133
+ if (options && !isSvg && (options.width || options.height)) {
7134
+ const params = new URLSearchParams();
7135
+ if (options.width) params.set("width", String(options.width));
7136
+ if (options.height) params.set("height", String(options.height));
7137
+ if (options.quality) params.set("quality", String(options.quality));
7138
+ if (options.resize) params.set("resize", options.resize);
7139
+ return `${baseUrl}/storage/v1/render/image/public/${storageBucket}/${encodedPath}?${params.toString()}`;
7140
+ }
7141
+ return `${baseUrl}/storage/v1/object/public/${storageBucket}/${encodedPath}`;
7226
7142
  }
7227
7143
 
7228
7144
  // ../blocks/src/system/runtime/nodes/media.tsx
7229
7145
  import { jsx as jsx9 } from "react/jsx-runtime";
7146
+ function getSupabaseUrl() {
7147
+ const url = process.env.NEXT_PUBLIC_SUPABASE_URL;
7148
+ if (!url) {
7149
+ throw new Error(
7150
+ "NEXT_PUBLIC_SUPABASE_URL is not configured. Set it to your Supabase project URL (e.g., https://xxx.supabase.co)"
7151
+ );
7152
+ }
7153
+ return url.replace(/\/$/, "");
7154
+ }
7230
7155
  var debugMediaNodeLog = (...args) => {
7231
7156
  if (typeof window !== "undefined" && window.__DEBUG_MEDIA_NODE__) {
7232
7157
  console.log("[MediaNode]", ...args);
7233
7158
  }
7234
7159
  };
7235
- var MediaNode = ({ value, className, style, previewKey }) => {
7160
+ var MediaNode = ({ value, className, style }) => {
7236
7161
  if (!value) return null;
7237
7162
  if (value.type === "video") {
7238
7163
  const src = value.src;
7239
7164
  if (!src) return null;
7240
7165
  return /* @__PURE__ */ jsx9("video", { className, style, src, autoPlay: true, muted: true, loop: true, playsInline: true, "aria-label": value.alt ?? "" });
7241
7166
  }
7242
- const imageUrl = resolveImageUrl(value, { previewKey });
7167
+ const imageUrl = resolveImageUrl(value);
7243
7168
  if (!imageUrl) {
7244
7169
  return /* @__PURE__ */ jsx9(
7245
7170
  "div",
@@ -7250,56 +7175,36 @@ var MediaNode = ({ value, className, style, previewKey }) => {
7250
7175
  }
7251
7176
  );
7252
7177
  }
7253
- const isCrossOrigin = typeof window !== "undefined" && imageUrl.startsWith("http") && !imageUrl.startsWith(window.location.origin);
7254
- const isApiRoute = imageUrl.includes("/api/img") || imageUrl.includes("/api/public/img");
7255
- const crossOriginMode = isCrossOrigin && isApiRoute ? "use-credentials" : isCrossOrigin ? "anonymous" : void 0;
7178
+ const hotspotStyle = value.transform?.hotspot ? { objectPosition: `${value.transform.hotspot.x * 100}% ${value.transform.hotspot.y * 100}%` } : void 0;
7256
7179
  return /* @__PURE__ */ jsx9(
7257
7180
  "img",
7258
7181
  {
7259
7182
  src: imageUrl,
7260
7183
  alt: value.alt ?? "",
7261
7184
  className,
7262
- style,
7263
- loading: "lazy",
7264
- crossOrigin: crossOriginMode
7185
+ style: mergeStyles(style, hotspotStyle),
7186
+ loading: "lazy"
7265
7187
  }
7266
7188
  );
7267
7189
  };
7268
- function resolveImageUrl(value, options = {}) {
7190
+ function resolveImageUrl(value) {
7269
7191
  if (value.type !== "image") return void 0;
7270
- const params = {};
7271
- const rect = value.transform?.rect;
7272
- const hotspot = value.transform?.hotspot;
7273
- if (rect && Array.isArray(rect) && rect.length === 4) {
7274
- params.rect = rect.join(",");
7275
- }
7276
- if (hotspot && typeof hotspot.x === "number" && typeof hotspot.y === "number") {
7277
- const x = clamp(hotspot.x);
7278
- const y = clamp(hotspot.y);
7279
- params.hotspot = `${x.toFixed(4)},${y.toFixed(4)}`;
7280
- }
7281
7192
  debugMediaNodeLog("resolveImageUrl input", {
7282
7193
  assetId: value.assetId,
7194
+ storagePath: value.storagePath,
7283
7195
  src: value.src,
7284
- type: value.type,
7285
- hasPreviewKey: !!options.previewKey
7196
+ type: value.type
7286
7197
  });
7287
- if (value.assetId) {
7288
- const cmsApiBase = getCmsApiUrl();
7289
- const basePath = `${cmsApiBase}/public/img`;
7290
- let resolved = getImageUrl({ id: value.assetId }, params, basePath);
7291
- if (options.previewKey) {
7292
- const separator = resolved.includes("?") ? "&" : "?";
7293
- resolved = `${resolved}${separator}preview_key=${encodeURIComponent(options.previewKey)}`;
7294
- }
7295
- debugMediaNodeLog("resolve:asset-id", {
7296
- assetId: value.assetId,
7297
- cmsApiBase,
7298
- basePath,
7299
- resolvedUrl: resolved,
7300
- hasPreviewKey: !!options.previewKey
7198
+ if (value.storagePath && value.storagePath.length > 0) {
7199
+ const supabaseUrl = getSupabaseUrl();
7200
+ const bucket = value.storageBucket ?? "media";
7201
+ const directUrl = getDirectImageUrl(supabaseUrl, value.storagePath, bucket);
7202
+ debugMediaNodeLog("resolve:direct-supabase", {
7203
+ storagePath: value.storagePath,
7204
+ bucket,
7205
+ directUrl
7301
7206
  });
7302
- return resolved;
7207
+ return directUrl;
7303
7208
  }
7304
7209
  if (typeof value.src === "string" && value.src.length > 0) {
7305
7210
  debugMediaNodeLog("resolve:explicit-src", { src: value.src });
@@ -7308,9 +7213,6 @@ function resolveImageUrl(value, options = {}) {
7308
7213
  debugMediaNodeLog("resolve:fallback-url", { fallbackUrl: value.url ?? null });
7309
7214
  return value.url ?? void 0;
7310
7215
  }
7311
- function clamp(v, min6 = 0, max6 = 1) {
7312
- return Math.min(Math.max(v, min6), max6);
7313
- }
7314
7216
 
7315
7217
  // ../blocks/src/system/runtime/nodes/form.server.tsx
7316
7218
  import { jsx as jsx10, jsxs } from "react/jsx-runtime";
@@ -14853,8 +14755,6 @@ var MemoBlockSection = React5.memo(function MemoBlockSection2({
14853
14755
  return wrapBlock && block.id ? /* @__PURE__ */ jsx21(Fragment2, { children: wrapBlock(block.id, rendered) }) : /* @__PURE__ */ jsx21(Fragment2, { children: rendered });
14854
14756
  }
14855
14757
  try {
14856
- const BlockComponent = OverrideComponent ?? getCachedBlockComponent(definition.manifest);
14857
- const pathBase = typeof block.id === "string" && block.id.length > 0 ? `blocks.${block.id}.` : void 0;
14858
14758
  const routes = routeMap ?? dataContext?.routes;
14859
14759
  const hydratedContent = routes ? hydrateManifestLinks(definition.manifest, data, routes) : data;
14860
14760
  const resolved = resolveBlockData({
@@ -14862,35 +14762,45 @@ var MemoBlockSection = React5.memo(function MemoBlockSection2({
14862
14762
  definition,
14863
14763
  dataContext
14864
14764
  });
14865
- const rootContext = {
14866
- $root: {
14867
- siteId: dataContext?.siteId ?? null,
14868
- pageId: dataContext?.pageId ?? null,
14869
- previewStage: dataContext?.previewStage ?? "published",
14870
- ...routes ? { routes } : {},
14871
- // Occurrence and content entry context for template pages
14872
- occurrenceContext: dataContext?.occurrenceContext ?? null,
14873
- contentEntry: dataContext?.contentEntry ?? null
14874
- }
14765
+ const baseProps = {
14766
+ content: hydratedContent,
14767
+ theme: themeTokens,
14768
+ themeConfig,
14769
+ data: resolved,
14770
+ blockId: block.id ?? null,
14771
+ blockKind: block.kind
14875
14772
  };
14876
- const blockBindings = block.bindings ?? void 0;
14877
- const fragmentRegistry2 = getFragmentRegistry();
14878
- const rendered = /* @__PURE__ */ jsx21(
14879
- BlockComponent,
14880
- {
14881
- content: hydratedContent,
14882
- theme: themeTokens,
14883
- themeConfig,
14884
- registry,
14885
- pathBase,
14886
- data: resolved,
14887
- blockId: block.id ?? null,
14888
- blockKind: block.kind,
14889
- blockBindings,
14890
- viewModelOverrides: rootContext,
14891
- fragmentRegistry: fragmentRegistry2
14892
- }
14893
- );
14773
+ let rendered;
14774
+ if (OverrideComponent) {
14775
+ rendered = /* @__PURE__ */ jsx21(OverrideComponent, { ...baseProps });
14776
+ } else {
14777
+ const BlockComponent = getCachedBlockComponent(definition.manifest);
14778
+ const pathBase = typeof block.id === "string" && block.id.length > 0 ? `blocks.${block.id}.` : void 0;
14779
+ const rootContext = {
14780
+ $root: {
14781
+ siteId: dataContext?.siteId ?? null,
14782
+ pageId: dataContext?.pageId ?? null,
14783
+ previewStage: dataContext?.previewStage ?? "published",
14784
+ ...routes ? { routes } : {},
14785
+ // Occurrence and content entry context for template pages
14786
+ occurrenceContext: dataContext?.occurrenceContext ?? null,
14787
+ contentEntry: dataContext?.contentEntry ?? null
14788
+ }
14789
+ };
14790
+ const blockBindings = block.bindings ?? void 0;
14791
+ const fragmentRegistry2 = getFragmentRegistry();
14792
+ rendered = /* @__PURE__ */ jsx21(
14793
+ BlockComponent,
14794
+ {
14795
+ ...baseProps,
14796
+ registry,
14797
+ pathBase,
14798
+ blockBindings,
14799
+ viewModelOverrides: rootContext,
14800
+ fragmentRegistry: fragmentRegistry2
14801
+ }
14802
+ );
14803
+ }
14894
14804
  if (wrapBlock && block.id) {
14895
14805
  return /* @__PURE__ */ jsx21(Fragment2, { children: wrapBlock(block.id, rendered) });
14896
14806
  }
@@ -16590,7 +16500,7 @@ var ENDPOINT_DEFINITIONS = {
16590
16500
  var API_ENDPOINTS = ENDPOINT_DEFINITIONS;
16591
16501
 
16592
16502
  // ../api/src/url.ts
16593
- function getCmsApiUrl2() {
16503
+ function getCmsApiUrl() {
16594
16504
  if (typeof window !== "undefined") {
16595
16505
  return "/api";
16596
16506
  }
@@ -16612,7 +16522,7 @@ function getCmsApiUrl2() {
16612
16522
  );
16613
16523
  }
16614
16524
  function resolveApiBaseUrl() {
16615
- return getCmsApiUrl2();
16525
+ return getCmsApiUrl();
16616
16526
  }
16617
16527
 
16618
16528
  // ../api/src/request.ts