@datawheel/bespoke 0.9.11 → 0.9.12-rc.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.
package/dist/explore.js CHANGED
@@ -1 +1 @@
1
- export{x as BespokeExplore,y as BespokeExploreModal,w as BespokeExploreProvider,z as BespokeSearch,v as useBespokeExplore}from'./chunk-PGBDZWWY.js';import'./chunk-2D75X364.js';import'./chunk-JU4YILPF.js';import'./chunk-EYRXKCMJ.js';import'./chunk-P6ORTCRN.js';import'./chunk-QZ5NBDGE.js';
1
+ export{x as BespokeExplore,y as BespokeExploreModal,w as BespokeExploreProvider,z as BespokeSearch,v as useBespokeExplore}from'./chunk-NKCSPYUO.js';import'./chunk-4XIZPGIL.js';import'./chunk-KUPNLLLT.js';import'./chunk-AA4WMKFB.js';import'./chunk-P6ORTCRN.js';import'./chunk-QZ5NBDGE.js';
@@ -1 +1 @@
1
- export{ta as actions,bb as storeWrapper,ua as useBespokeDispatch,va as useBespokeSelector}from'./chunk-EYRXKCMJ.js';import'./chunk-P6ORTCRN.js';import'./chunk-QZ5NBDGE.js';
1
+ export{ta as actions,bb as storeWrapper,ua as useBespokeDispatch,va as useBespokeSelector}from'./chunk-AA4WMKFB.js';import'./chunk-P6ORTCRN.js';import'./chunk-QZ5NBDGE.js';
package/dist/report.js CHANGED
@@ -1 +1 @@
1
- import {q,s,r,u,w,L}from'./chunk-PGBDZWWY.js';import'./chunk-2D75X364.js';import'./chunk-JU4YILPF.js';import {eb}from'./chunk-EYRXKCMJ.js';import'./chunk-P6ORTCRN.js';export{d as BespokeEventType}from'./chunk-QZ5NBDGE.js';import {MantineProvider,LoadingOverlay}from'@mantine/core';import {jsx,Fragment,jsxs}from'react/jsx-runtime';function T({pathSegmentsKey:m="bespoke",translations:l,bespokeStyles:P,buildTime:f,siteProps:v,profilePrefix:c="/defaultPath",loader:r$1=jsx(LoadingOverlay,{visible:true}),sectionLoader:R=jsx(LoadingOverlay,{visible:true}),mantineProviderProps:k={},mode:x}){return q(m)?jsx(Fragment,{children:r$1}):jsx(MantineProvider,{...k,theme:{other:{bespokeStyles:P}},inherit:true,children:jsxs(eb,{pathSegment:"bespoke",profilePrefix:c,siteProps:v,children:[jsx(s,{translations:l,children:jsx(r,{children:jsx(u,{children:jsx(w,{pageSize:12,children:jsx(L,{sectionLoader:R||r$1,mode:x})})})})}),jsx("small",{className:"bespoke-timestamp",children:f})]})})}export{T as BespokeRenderer};
1
+ import {q,s,r,u,w,L}from'./chunk-NKCSPYUO.js';import'./chunk-4XIZPGIL.js';import'./chunk-KUPNLLLT.js';import {eb}from'./chunk-AA4WMKFB.js';import'./chunk-P6ORTCRN.js';export{d as BespokeEventType}from'./chunk-QZ5NBDGE.js';import {MantineProvider,LoadingOverlay}from'@mantine/core';import {jsx,Fragment,jsxs}from'react/jsx-runtime';function T({pathSegmentsKey:m="bespoke",translations:l,bespokeStyles:P,buildTime:f,siteProps:v,profilePrefix:c="/defaultPath",loader:r$1=jsx(LoadingOverlay,{visible:true}),sectionLoader:R=jsx(LoadingOverlay,{visible:true}),mantineProviderProps:k={},mode:x}){return q(m)?jsx(Fragment,{children:r$1}):jsx(MantineProvider,{...k,theme:{other:{bespokeStyles:P}},inherit:true,children:jsxs(eb,{pathSegment:"bespoke",profilePrefix:c,siteProps:v,children:[jsx(s,{translations:l,children:jsx(r,{children:jsx(u,{children:jsx(w,{pageSize:12,children:jsx(L,{sectionLoader:R||r$1,mode:x})})})})}),jsx("small",{className:"bespoke-timestamp",children:f})]})})}export{T as BespokeRenderer};
package/dist/server.js CHANGED
@@ -1,4 +1,4 @@
1
- import {d,g as g$2,a as a$2,c as c$1,b as b$2,f as f$1}from'./chunk-A4E2IRNO.js';import {a as a$1,b as b$1}from'./chunk-5NVVEPZQ.js';import {e,f,c,b,g as g$1,i,h}from'./chunk-JU4YILPF.js';import {a,R,ia as ia$1,ha as ha$1,bb,la as la$1,fa as fa$1,ea as ea$1,ma as ma$1,pa as pa$1,ta,k,C,z,qa,ra,X as X$1,da as da$1,aa,ga as ga$1,sa as sa$1,F,D,g,Y,I,j,w,S,ja,ka as ka$1,Q as Q$1}from'./chunk-EYRXKCMJ.js';import'./chunk-P6ORTCRN.js';import'./chunk-QZ5NBDGE.js';import na,{getServerSession}from'next-auth';import ta$1 from'next-auth/providers/auth0';import be from'auth0';import*as Ka from'pg';import {Sequelize,Error as Error$1,DataTypes,Op,literal,where,cast,json,fn,col,Model}from'sequelize';import ha from'yn';import tr from'axios';import en from'slugify';import rn from'flexsearch';import En from'base58';import kn from'flickr-sdk';import An from'sharp';import {createApi}from'unsplash-js';import Tn from'fs';import {createElement}from'react';import {renderToString}from'react-dom/server';import*as or from'@tabler/icons-react';import ys from'nextjs-cors';import bs from'image-type';import as from'formidable';import is from'jsonwebtoken';import ds from'dom-parser';import Is from'path';var oa={domain:new URL(process.env.AUTH0_ISSUER_BASE_URL||"https://localhost:3000").host,clientId:process.env.AUTH0_CLIENT_ID||"",clientSecret:process.env.AUTH0_CLIENT_SECRET||""};function ye(e){let r=e;if(r&&!r.source)if(!r.providers||r.providers.length===0){let t=ta$1({clientId:process.env.AUTH0_CLIENT_ID||"",clientSecret:process.env.AUTH0_CLIENT_SECRET||"",issuer:process.env.AUTH0_ISSUER_BASE_URL||""});r.providers=[t],r.callbacks={async jwt({token:o,profile:a,trigger:i,session:s}){if(a&&(o.bespoke_app_metadata=a.bespoke_app_metadata||{},o.bespoke_user_metadata=a.bespoke_user_metadata||{},o.bespoke_roles=a.bespoke_roles||[],o.name=a.name),i==="update")try{let n=new be.ManagementClient(oa),l=await n.users.get({id:o.sub});o.bespoke_user_metadata=l.user_metadata||{},o.bespoke_app_metadata=l.app_metadata||{};let c=await n.users.getRoles({id:o.sub});o.bespoke_roles=c.map(d=>d.name),s?.user_metadata&&(o.bespoke_user_metadata={...o.bespoke_user_metadata,...s.user_metadata}),s?.app_metadata&&(o.bespoke_app_metadata={...o.bespoke_app_metadata,...s.app_metadata});}catch(n){console.error("Error refreshing user data from Auth0:",n),o.bespoke_user_metadata={...o.bespoke_user_metadata,...s?.user_metadata||{}},o.bespoke_app_metadata={...o.bespoke_app_metadata,...s?.app_metadata||{}};}return o},async session({session:o,token:a}){return o&&a&&(o.user.id=a.sub,o.user.bespoke_app_metadata=a.bespoke_app_metadata,o.user.bespoke_user_metadata=a.bespoke_user_metadata,o.user.bespoke_roles=a.bespoke_roles),o}},r.source="auth0";}else r.source="custom";return r.secret||(r.secret=process.env.AUTH0_SECRET||process.env.NEXTAUTH_SECRET),r}async function Q(e,r,t={providers:[]}){let o=ye(t),a=await getServerSession(e,r,o);return a&&(a.source=o.source||""),a}var sa=(e={providers:[]})=>{let r=ye(e);return na(r)},ia=sa;var Re={domain:new URL(process.env.AUTH0_ISSUER_BASE_URL||"https://localhost:3000").host,clientId:process.env.AUTH0_CLIENT_ID,clientSecret:process.env.AUTH0_CLIENT_SECRET};function Rr(){return async()=>{try{let r=await new be.ManagementClient(Re).roles.getAll({include_totals:!0,per_page:100});return {roles:b$1(r.roles)}}catch(e){throw console.error("AuthZeroError",e),new ha$1(e.response?.status||500,e.message)}}}function wr(){return async e=>{try{let r;if(e){let t={include_totals:!0,per_page:10,page:e.page||0},o=new be.ManagementClient(Re);if(e.role_id&&e.role_id!==""){let a={...t,id:e.role_id};r=await o.roles.getUsers(a);}else {let a={...t,q:e.query};r=await o.users.getAll(a);}}return r}catch(r){throw console.error("AuthZeroError",r),new ha$1(r.response?.status||500,r.message)}}}function Sr(){return async e=>{try{if(e){let r=new be.ManagementClient(Re),t=await Promise.all([r.users.get({id:e}),r.users.getRoles({id:e})]);return {...t[0],roles:t[1]}}else throw new ha$1(404,"User ID required")}catch(r){throw console.error("AuthZeroError",r),new ha$1(r.response?.status||500,r.message)}}}function _r(){return async e=>{try{if(e.user_id){if(e.app_metadata&&await Vt(e.user_id,e.app_metadata),e.user_metadata&&await Kt(e.user_id,e.user_metadata),e.roles){let r=new be.ManagementClient(Re),o=(await r.users.getRoles({id:e.user_id})).map(n=>n.id),a=e.roles.map(n=>n.id),i=a.filter(n=>!o.includes(n)),s=o.filter(n=>!a.includes(n));i.length>0&&await r.users.assignRoles({id:e.user_id},{roles:i}),s.length>0&&await r.users.removeRoles({id:e.user_id},{roles:s});}return {status:"success",message:"User updated!"}}else throw new ha$1(404,"user_id is required")}catch(r){throw console.error("AuthZeroError",r),new ha$1(r.response?.status||500,r.message)}}}function Ar(){return async e=>{try{return "NOT USED SERVICE"}catch(r){throw console.error("AuthZeroError",r),new ha$1(r.response?.status||500,r.message)}}}async function Vt(e,r){return await new be.ManagementClient(Re).users.updateAppMetadata({id:e},r)}async function Kt(e,r){return await new be.ManagementClient(Re).users.updateUserMetadata({id:e},r)}async function Pr(e,r){try{let t=new be.ManagementClient(Re),o=await t.getUsers({search_engine:"v3",q:`user_metadata.${e}:"${r}"`});for(let a=0;a<o.length;a++){let i=o[a];i.bespoke_user_metadata=i.user_metadata||{},delete i.user_metadata,i.bespoke_roles=(await t.users.getRoles({id:i.user_id})).map(s=>s.name);}return o}catch(t){console.error(t);}}var ca=(e,r,t,o)=>new Promise((a,i)=>{(async()=>{try{let n=await Q(e,r,t);if(!n||!n.user)throw new Error("not_authenticated");{let{user:l,source:c}=n,m={...n.user.bespoke_app_metadata||{},...o};c==="custom"&&t.actions?.updateUser?await t.actions.updateUser()({user_id:l.id,app_metadata:m}):await Vt(l.id,m),a({error:"",description:`App metadata updated for user ${n.user.email}`});}}catch(n){i({error:n.message,description:"The user does not have an active session or is not authenticated"});}})();}),la=ca;var da=(e,r,t,o)=>new Promise((a,i)=>{(async()=>{try{let n=await Q(e,r,t);if(!n||!n.user)throw new Error("not_authenticated");{let{user:l,source:c}=n,m={...l.bespoke_user_metadata||{},...o};c==="custom"&&t.actions?.updateUser?await t.actions.updateUser()({user_id:l.id,user_metadata:m}):await Kt(l.id,m),a({error:"",description:`App metadata updated for user ${l.email}`});}}catch(n){i({error:n.message,description:"The user does not have an active session or is not authenticated"});}})();}),ma=da;var pa=(e,r,t)=>async function(o,a){let i=await Q(o,a,t);if(!i||!i.user){a.status(401).json({error:"not_authenticated",description:"The user does not have an active session or is not authenticated"});return}let s=i.user.bespoke_roles||[];if(r.length>0&&!R(s,r)){a.status(402).json({error:"unauthorize",description:"The user requires some specific roles"});return}await e(o,a);},ua=pa;var fa=(e,r,t)=>new Promise((o,a)=>{(async()=>{try{if(r&&t&&r!==""&&t!==""){let s;e.actions?.searchUser?s=await e.actions.searchUser()({[r]:t}):s=await Pr(r,t),o(s);}else a({error:"empty_params",description:"key or value params are empty"});}catch(s){a({error:s.message,description:"Error "});}})();}),ga=fa;var le=(e=process.env)=>ha(e.REPORTS_LOGGING);var Se=class extends Model{getContent(r){let t=this.contentByLocale.find(o=>o.locale===r);if(!t)throw new Error(`Missing SearchContent for locale '${r}' on Search ID '${this.id}'`);return t}toJSON(){let r=this.get({plain:true}),{inputs:t=[],consumers:o=[],contentByLocale:a=[]}=this;return {...r,inputs:t.map(i=>i.toJSON()),consumers:o.map(i=>i.toJSON()),contentByLocale:Object.fromEntries(a.map(i=>[i.locale,i.toJSON()]))}}};function ba(e){return Se.init({id:{type:DataTypes.INTEGER,primaryKey:true,autoIncrement:true},settings:{type:DataTypes.JSON,defaultValue:{}},type:{type:DataTypes.STRING,defaultValue:"paragraph"},shared:{type:DataTypes.BOOLEAN,defaultValue:false},blockrow:DataTypes.STRING,blockcol:DataTypes.STRING,section_id:{type:DataTypes.INTEGER,onDelete:"cascade",references:{model:"bespoke_reports_section",key:"id"}}},{sequelize:e,modelName:"block",tableName:"bespoke_reports_block",freezeTableName:true,timestamps:false}),r=>(Se.hasMany(r.block_content,{foreignKey:"id",sourceKey:"id",as:"contentByLocale"}),Se.belongsToMany(r.block,{through:"block_input",foreignKey:"block_id",otherKey:"input_id",as:"inputs"}),Se.belongsToMany(r.block,{through:"block_input",foreignKey:"input_id",otherKey:"block_id",as:"consumers"}),Se)}var vr=ba;var It=class extends Model{};function wa(e){return It.init({id:{type:DataTypes.INTEGER,primaryKey:true,onDelete:"cascade",references:{model:"bespoke_reports_block",key:"id"}},locale:{type:DataTypes.STRING,primaryKey:true},content:{type:DataTypes.JSON,defaultValue:{}}},{sequelize:e,modelName:"block_content",tableName:"bespoke_reports_block_content",freezeTableName:true,timestamps:false}),()=>It}var Er=wa;var vt=class extends Model{};function _a(e){return vt.init({id:{type:DataTypes.INTEGER,primaryKey:true,autoIncrement:true},block_id:{type:DataTypes.INTEGER,onDelete:"cascade",references:{model:"bespoke_reports_block",key:"id"}},input_id:{type:DataTypes.INTEGER,onDelete:"cascade",references:{model:"bespoke_reports_block",key:"id"}}},{sequelize:e,modelName:"block_input",tableName:"bespoke_reports_block_input",freezeTableName:true,timestamps:false}),()=>vt}var kr=_a;var Ge=class extends Model{};function Pa(e){return Ge.init({id:{type:DataTypes.INTEGER,primaryKey:true,autoIncrement:true},name:{type:DataTypes.STRING,defaultValue:""},content:{type:DataTypes.JSONB,defaultValue:{description:"",testValue:"Foo",type:D.FORMATTER,inputType:F.STRING,logic:"return n;"}}},{sequelize:e,modelName:"formatter",tableName:"bespoke_reports_formatter",freezeTableName:true,timestamps:false,hooks:{async afterSync(r){let t=await Ge.findAll();if(r.force||t.length===0){let o=Object.entries(g).map(([a,i])=>({name:a,content:i}));await Ge.bulkCreate(o);}}}}),()=>Ge}var Br=Pa;var et=class extends Model{getContent(r){let{contentByLocale:t}=this;if(!t)throw new Error("This ImageModel entity didn't include its ImageContentModel association.");let o=t.find(a=>a.locale===r);if(!o)throw new Error(`Missing SearchContent for locale '${r}' on Search ID '${this.id}'`);return o}};function va(e){return et.init({id:{autoIncrement:true,primaryKey:true,type:DataTypes.INTEGER},url:{type:DataTypes.TEXT,unique:true},author:DataTypes.TEXT,license:DataTypes.TEXT,splash:DataTypes.BLOB,thumb:DataTypes.BLOB},{sequelize:e,modelName:"image",tableName:"bespoke_reports_image",freezeTableName:true}),r=>(et.hasMany(r.image_content,{foreignKey:"id",sourceKey:"id",as:"contentByLocale"}),et)}var xr=va;var Et=class extends Model{};function ka(e){return Et.init({id:{type:DataTypes.INTEGER,primaryKey:true,onDelete:"cascade",references:{model:"bespoke_reports_image",key:"id"}},locale:{type:DataTypes.STRING,primaryKey:true},meta:DataTypes.TEXT},{sequelize:e,modelName:"image_content",tableName:"bespoke_reports_image_content",freezeTableName:true,timestamps:false}),()=>Et}var Cr=ka;var Ke=class extends Model{toJSON(){let r=this.get({plain:true}),{dimensions:t=[],sections:o=[]}=this;return {...r,settings:r.settings,date:new Date(this.date||Date.now()).toISOString(),dimensions:t.map(a=>a.toJSON()),sections:o.map(a=>a.toJSON())}}};function xa(e){return Ke.init({id:{type:DataTypes.INTEGER,primaryKey:true,autoIncrement:true},name:{type:DataTypes.STRING,allowNull:false,defaultValue:""},visible:{type:DataTypes.BOOLEAN,defaultValue:true},date:{type:DataTypes.DATE,defaultValue:DataTypes.NOW},type:{type:DataTypes.STRING,defaultValue:"report",validate:{isIn:[["report","story"]]}},settings:{type:DataTypes.JSON,defaultValue:{}}},{sequelize:e,modelName:"report",tableName:"bespoke_reports_report",freezeTableName:true,timestamps:false}),r=>(Ke.hasMany(r.dimension,{foreignKey:"report_id",sourceKey:"id",as:"dimensions"}),Ke.hasMany(r.section,{foreignKey:"report_id",sourceKey:"id",as:"sections"}),Ke)}var Dr=xa;var $e=class extends Model{toJSON(){let r=this.get({plain:true}),{variants:t=[]}=this;return {...r,variants:t.map(o=>o.toJSON())}}};function Da(e){return $e.init({id:{type:DataTypes.INTEGER,primaryKey:true,autoIncrement:true},report_id:{type:DataTypes.INTEGER,onDelete:"cascade",references:{model:"bespoke_reports_report",key:"id"}},name:{type:DataTypes.STRING,defaultValue:""},settings:{type:DataTypes.JSONB,defaultValue:{}},ordering:{type:DataTypes.INTEGER,defaultValue:0},visible:{type:DataTypes.BOOLEAN,defaultValue:true}},{sequelize:e,modelName:"dimension",tableName:"bespoke_reports_report_dimension",freezeTableName:true,timestamps:false}),r=>($e.hasMany(r.variant,{foreignKey:"dimension_id",sourceKey:"id",as:"variants",constraints:false}),$e.belongsTo(r.report,{foreignKey:"report_id",targetKey:"id",as:"report",constraints:false}),$e)}var Mr=Da;var je=class extends Model{get report(){return this.dimension?.report}toJSON(){return this.get({plain:true})}};function Ta(e){return je.init({id:{type:DataTypes.INTEGER,primaryKey:true,autoIncrement:true},dimension_id:{type:DataTypes.INTEGER,onDelete:"cascade",references:{model:"bespoke_reports_report_dimension",key:"id"}},slug:{type:DataTypes.STRING,defaultValue:""},name:{type:DataTypes.STRING,defaultValue:""},settings:{type:DataTypes.JSONB,defaultValue:{}},config:{type:DataTypes.JSONB,defaultValue:{}},visible:{type:DataTypes.BOOLEAN,defaultValue:true}},{sequelize:e,modelName:"variant",tableName:"bespoke_reports_report_dimension_variant",freezeTableName:true,timestamps:false}),r=>(je.hasMany(r.search,{foreignKey:"variant_id",sourceKey:"id",as:"members",constraints:false}),je.belongsTo(r.dimension,{foreignKey:"dimension_id",targetKey:"id",as:"dimension",constraints:false}),je)}var Tr=Ta;var ae=class extends Model{getContent(r){let{contentByLocale:t}=this;if(!t)throw new Error("This SearchModel entity didn't include its SearchContentModel association.");let o=t.find(a=>a.locale===r);if(!o)throw new Error(`Missing SearchContent for locale '${r}' on Search ID '${this.id}'`);return o}};function Oa(e){return ae.init({id:{primaryKey:true,type:DataTypes.TEXT},zvalue:DataTypes.DOUBLE,slug:DataTypes.TEXT,image_id:{type:DataTypes.INTEGER,references:{model:"bespoke_reports_image",key:"id"}},content_id:{autoIncrement:true,type:DataTypes.INTEGER,unique:true},variant_id:{primaryKey:true,type:DataTypes.INTEGER,onDelete:"cascade",references:{model:"bespoke_reports_report_dimension_variant",key:"id"}},dimension_id:{primaryKey:true,type:DataTypes.INTEGER,onDelete:"cascade",references:{model:"bespoke_reports_report_dimension",key:"id"}},report_id:{primaryKey:true,type:DataTypes.INTEGER,onDelete:"cascade",references:{model:"bespoke_reports_report",key:"id"}},visible:{type:DataTypes.BOOLEAN,defaultValue:true}},{sequelize:e,modelName:"search",tableName:"bespoke_reports_search",freezeTableName:true,timestamps:false}),r=>(ae.belongsTo(r.variant,{foreignKey:"variant_id",targetKey:"id",as:"variant",constraints:false}),ae.belongsTo(r.dimension,{foreignKey:"dimension_id",targetKey:"id",as:"dimension",constraints:false}),ae.belongsTo(r.report,{foreignKey:"report_id",targetKey:"id",as:"report",constraints:false}),ae.belongsTo(r.image,{foreignKey:"image_id",targetKey:"id",as:"image",constraints:false}),ae.hasMany(r.search_content,{foreignKey:"id",sourceKey:"content_id",as:"contentByLocale"}),ae)}var Nr=Oa;var kt=class extends Model{};function Ua(e){return kt.init({id:{type:DataTypes.INTEGER,primaryKey:true,onDelete:"cascade",references:{model:"bespoke_reports_search",key:"content_id"}},locale:{type:DataTypes.STRING,primaryKey:true},name:DataTypes.TEXT,annotations:{type:DataTypes.JSONB,defaultValue:{}},attributes:{type:DataTypes.JSONB,defaultValue:{}},keywords:DataTypes.ARRAY(DataTypes.TEXT)},{sequelize:e,modelName:"search_content",tableName:"bespoke_reports_search_content",freezeTableName:true,timestamps:false}),()=>kt}var Or=Ua;var rt=class extends Model{toJSON(){let r=this.get({plain:true}),{blocks:t=[]}=this;return {...r,blocks:t.map(o=>o.toJSON())}}};function za(e){return rt.init({id:{type:DataTypes.INTEGER,primaryKey:true,autoIncrement:true},settings:{type:DataTypes.JSON,defaultValue:{}},heading:{type:DataTypes.INTEGER,defaultValue:1},ordering:DataTypes.STRING,report_id:{type:DataTypes.INTEGER,onDelete:"cascade",references:{model:"bespoke_reports_report",key:"id"}}},{sequelize:e,modelName:"section",tableName:"bespoke_reports_section",freezeTableName:true,timestamps:false}),r=>(rt.hasMany(r.block,{foreignKey:"section_id",sourceKey:"id",as:"blocks"}),rt)}var Lr=za;var xt=class extends Model{};function Va(e){return xt.init({id:{type:DataTypes.INTEGER,primaryKey:true,autoIncrement:true},name:{type:DataTypes.STRING,defaultValue:""},description:{type:DataTypes.STRING,defaultValue:""},content:{type:DataTypes.JSONB,defaultValue:{pattern:"",logic:`return {
1
+ import {d,g as g$2,a as a$2,c as c$1,b as b$2,f as f$1}from'./chunk-OIIAFAWL.js';import {a as a$1,b as b$1}from'./chunk-5NVVEPZQ.js';import {e,f,c,b,j,g as g$1,i,h}from'./chunk-KUPNLLLT.js';import {a,R,ia as ia$1,ha as ha$1,bb,la as la$1,fa as fa$1,ea as ea$1,ma as ma$1,pa as pa$1,ta as ta$1,k,C,z,qa,ra as ra$1,X as X$1,da as da$1,aa,ga as ga$1,sa,F,D,g,Y,I,j as j$1,w,S,ja,ka,Q}from'./chunk-AA4WMKFB.js';import'./chunk-P6ORTCRN.js';import'./chunk-QZ5NBDGE.js';import ia,{getServerSession}from'next-auth';import oa from'next-auth/providers/auth0';import Se from'auth0';import*as $a from'pg';import {Sequelize,Error as Error$1,DataTypes,Op,literal,where,cast,json,fn as fn$1,col,Model}from'sequelize';import ba from'yn';import tr from'axios';import rn from'slugify';import an from'flexsearch';import Bn from'base58';import Cn from'flickr-sdk';import kn from'sharp';import {createApi}from'unsplash-js';import Nn from'fs';import {createElement}from'react';import {renderToString}from'react-dom/server';import*as or from'@tabler/icons-react';import ws from'nextjs-cors';import _s from'image-type';import is from'formidable';import ds from'jsonwebtoken';import fs from'dom-parser';import Bs from'path';var na={domain:new URL(process.env.AUTH0_ISSUER_BASE_URL||"https://localhost:3000").host,clientId:process.env.AUTH0_CLIENT_ID||"",clientSecret:process.env.AUTH0_CLIENT_SECRET||""};function Re(e){let r=e;if(r&&!r.source)if(!r.providers||r.providers.length===0){let t=oa({clientId:process.env.AUTH0_CLIENT_ID||"",clientSecret:process.env.AUTH0_CLIENT_SECRET||"",issuer:process.env.AUTH0_ISSUER_BASE_URL||""});r.providers=[t],r.callbacks={async jwt({token:o,profile:a,trigger:i,session:s}){if(a&&(o.bespoke_app_metadata=a.bespoke_app_metadata||{},o.bespoke_user_metadata=a.bespoke_user_metadata||{},o.bespoke_roles=a.bespoke_roles||[],o.name=a.name),i==="update")try{let n=new Se.ManagementClient(na),l=await n.users.get({id:o.sub});o.bespoke_user_metadata=l.user_metadata||{},o.bespoke_app_metadata=l.app_metadata||{};let c=await n.users.getRoles({id:o.sub});o.bespoke_roles=c.map(d=>d.name),s?.user_metadata&&(o.bespoke_user_metadata={...o.bespoke_user_metadata,...s.user_metadata}),s?.app_metadata&&(o.bespoke_app_metadata={...o.bespoke_app_metadata,...s.app_metadata});}catch(n){console.error("Error refreshing user data from Auth0:",n),o.bespoke_user_metadata={...o.bespoke_user_metadata,...s?.user_metadata||{}},o.bespoke_app_metadata={...o.bespoke_app_metadata,...s?.app_metadata||{}};}return o},async session({session:o,token:a}){return o&&a&&(o.user.id=a.sub,o.user.bespoke_app_metadata=a.bespoke_app_metadata,o.user.bespoke_user_metadata=a.bespoke_user_metadata,o.user.bespoke_roles=a.bespoke_roles),o}},r.source="auth0";}else r.source="custom";return r.secret||(r.secret=process.env.AUTH0_SECRET||process.env.NEXTAUTH_SECRET),r}async function Z(e,r,t={providers:[]}){let o=Re(t),a=await getServerSession(e,r,o);return a&&(a.source=o.source||""),a}var ca=(e={providers:[]})=>{let r=Re(e);return ia(r)},la=ca;var we={domain:new URL(process.env.AUTH0_ISSUER_BASE_URL||"https://localhost:3000").host,clientId:process.env.AUTH0_CLIENT_ID,clientSecret:process.env.AUTH0_CLIENT_SECRET};function Rr(){return async()=>{try{let r=await new Se.ManagementClient(we).roles.getAll({include_totals:!0,per_page:100});return {roles:b$1(r.roles)}}catch(e){throw console.error("AuthZeroError",e),new ha$1(e.response?.status||500,e.message)}}}function Sr(){return async e=>{try{let r;if(e){let t={include_totals:!0,per_page:10,page:e.page||0},o=new Se.ManagementClient(we);if(e.role_id&&e.role_id!==""){let a={...t,id:e.role_id};r=await o.roles.getUsers(a);}else {let a={...t,q:e.query};r=await o.users.getAll(a);}}return r}catch(r){throw console.error("AuthZeroError",r),new ha$1(r.response?.status||500,r.message)}}}function wr(){return async e=>{try{if(e){let r=new Se.ManagementClient(we),t=await Promise.all([r.users.get({id:e}),r.users.getRoles({id:e})]);return {...t[0],roles:t[1]}}else throw new ha$1(404,"User ID required")}catch(r){throw console.error("AuthZeroError",r),new ha$1(r.response?.status||500,r.message)}}}function _r(){return async e=>{try{if(e.user_id){if(e.app_metadata&&await Vt(e.user_id,e.app_metadata),e.user_metadata&&await qt(e.user_id,e.user_metadata),e.roles){let r=new Se.ManagementClient(we),o=(await r.users.getRoles({id:e.user_id})).map(n=>n.id),a=e.roles.map(n=>n.id),i=a.filter(n=>!o.includes(n)),s=o.filter(n=>!a.includes(n));i.length>0&&await r.users.assignRoles({id:e.user_id},{roles:i}),s.length>0&&await r.users.removeRoles({id:e.user_id},{roles:s});}return {status:"success",message:"User updated!"}}else throw new ha$1(404,"user_id is required")}catch(r){throw console.error("AuthZeroError",r),new ha$1(r.response?.status||500,r.message)}}}function Ar(){return async e=>{try{return "NOT USED SERVICE"}catch(r){throw console.error("AuthZeroError",r),new ha$1(r.response?.status||500,r.message)}}}async function Vt(e,r){return await new Se.ManagementClient(we).users.updateAppMetadata({id:e},r)}async function qt(e,r){return await new Se.ManagementClient(we).users.updateUserMetadata({id:e},r)}async function Pr(e,r){try{let t=new Se.ManagementClient(we),o=await t.getUsers({search_engine:"v3",q:`user_metadata.${e}:"${r}"`});for(let a=0;a<o.length;a++){let i=o[a];i.bespoke_user_metadata=i.user_metadata||{},delete i.user_metadata,i.bespoke_roles=(await t.users.getRoles({id:i.user_id})).map(s=>s.name);}return o}catch(t){console.error(t);}}var da=(e,r,t,o)=>new Promise((a,i)=>{(async()=>{try{let n=await Z(e,r,t);if(!n||!n.user)throw new Error("not_authenticated");{let{user:l,source:c}=n,m={...n.user.bespoke_app_metadata||{},...o};c==="custom"&&t.actions?.updateUser?await t.actions.updateUser()({user_id:l.id,app_metadata:m}):await Vt(l.id,m),a({error:"",description:`App metadata updated for user ${n.user.email}`});}}catch(n){i({error:n.message,description:"The user does not have an active session or is not authenticated"});}})();}),ma=da;var pa=(e,r,t,o)=>new Promise((a,i)=>{(async()=>{try{let n=await Z(e,r,t);if(!n||!n.user)throw new Error("not_authenticated");{let{user:l,source:c}=n,m={...l.bespoke_user_metadata||{},...o};c==="custom"&&t.actions?.updateUser?await t.actions.updateUser()({user_id:l.id,user_metadata:m}):await qt(l.id,m),a({error:"",description:`App metadata updated for user ${l.email}`});}}catch(n){i({error:n.message,description:"The user does not have an active session or is not authenticated"});}})();}),ua=pa;var fa=(e,r,t)=>async function(o,a){let i=await Z(o,a,t);if(!i||!i.user){a.status(401).json({error:"not_authenticated",description:"The user does not have an active session or is not authenticated"});return}let s=i.user.bespoke_roles||[];if(r.length>0&&!R(s,r)){a.status(402).json({error:"unauthorize",description:"The user requires some specific roles"});return}await e(o,a);},ga=fa;var ha=(e,r,t)=>new Promise((o,a)=>{(async()=>{try{if(r&&t&&r!==""&&t!==""){let s;e.actions?.searchUser?s=await e.actions.searchUser()({[r]:t}):s=await Pr(r,t),o(s);}else a({error:"empty_params",description:"key or value params are empty"});}catch(s){a({error:s.message,description:"Error "});}})();}),ya=ha;var pe=(e=process.env)=>ba(e.REPORTS_LOGGING);var Ae=class extends Model{getContent(r){let t=this.contentByLocale.find(o=>o.locale===r);if(!t)throw new Error(`Missing SearchContent for locale '${r}' on Search ID '${this.id}'`);return t}toJSON(){let r=this.get({plain:true}),{inputs:t=[],consumers:o=[],contentByLocale:a=[]}=this;return {...r,inputs:t.map(i=>i.toJSON()),consumers:o.map(i=>i.toJSON()),contentByLocale:Object.fromEntries(a.map(i=>[i.locale,i.toJSON()]))}}};function Sa(e){return Ae.init({id:{type:DataTypes.INTEGER,primaryKey:true,autoIncrement:true},settings:{type:DataTypes.JSON,defaultValue:{}},type:{type:DataTypes.STRING,defaultValue:"paragraph"},shared:{type:DataTypes.BOOLEAN,defaultValue:false},blockrow:DataTypes.STRING,blockcol:DataTypes.STRING,section_id:{type:DataTypes.INTEGER,onDelete:"cascade",references:{model:"bespoke_reports_section",key:"id"}}},{sequelize:e,modelName:"block",tableName:"bespoke_reports_block",freezeTableName:true,timestamps:false}),r=>(Ae.hasMany(r.block_content,{foreignKey:"id",sourceKey:"id",as:"contentByLocale"}),Ae.belongsToMany(r.block,{through:"block_input",foreignKey:"block_id",otherKey:"input_id",as:"inputs"}),Ae.belongsToMany(r.block,{through:"block_input",foreignKey:"input_id",otherKey:"block_id",as:"consumers"}),Ae)}var Er=Sa;var kt=class extends Model{};function _a(e){return kt.init({id:{type:DataTypes.INTEGER,primaryKey:true,onDelete:"cascade",references:{model:"bespoke_reports_block",key:"id"}},locale:{type:DataTypes.STRING,primaryKey:true},content:{type:DataTypes.JSON,defaultValue:{}}},{sequelize:e,modelName:"block_content",tableName:"bespoke_reports_block_content",freezeTableName:true,timestamps:false}),()=>kt}var Ir=_a;var Et=class extends Model{};function Pa(e){return Et.init({id:{type:DataTypes.INTEGER,primaryKey:true,autoIncrement:true},block_id:{type:DataTypes.INTEGER,onDelete:"cascade",references:{model:"bespoke_reports_block",key:"id"}},input_id:{type:DataTypes.INTEGER,onDelete:"cascade",references:{model:"bespoke_reports_block",key:"id"}}},{sequelize:e,modelName:"block_input",tableName:"bespoke_reports_block_input",freezeTableName:true,timestamps:false}),()=>Et}var vr=Pa;var Ge=class extends Model{};function Ea(e){return Ge.init({id:{type:DataTypes.INTEGER,primaryKey:true,autoIncrement:true},name:{type:DataTypes.STRING,defaultValue:""},content:{type:DataTypes.JSONB,defaultValue:{description:"",testValue:"Foo",type:D.FORMATTER,inputType:F.STRING,logic:"return n;"}}},{sequelize:e,modelName:"formatter",tableName:"bespoke_reports_formatter",freezeTableName:true,timestamps:false,hooks:{async afterSync(r){let t=await Ge.findAll();if(r.force||t.length===0){let o=Object.entries(g).map(([a,i])=>({name:a,content:i}));await Ge.bulkCreate(o);}}}}),()=>Ge}var Br=Ea;var et=class extends Model{getContent(r){let{contentByLocale:t}=this;if(!t)throw new Error("This ImageModel entity didn't include its ImageContentModel association.");let o=t.find(a=>a.locale===r);if(!o)throw new Error(`Missing SearchContent for locale '${r}' on Search ID '${this.id}'`);return o}};function va(e){return et.init({id:{autoIncrement:true,primaryKey:true,type:DataTypes.INTEGER},url:{type:DataTypes.TEXT,unique:true},author:DataTypes.TEXT,license:DataTypes.TEXT,splash:DataTypes.BLOB,thumb:DataTypes.BLOB},{sequelize:e,modelName:"image",tableName:"bespoke_reports_image",freezeTableName:true}),r=>(et.hasMany(r.image_content,{foreignKey:"id",sourceKey:"id",as:"contentByLocale"}),et)}var Cr=va;var It=class extends Model{};function Ca(e){return It.init({id:{type:DataTypes.INTEGER,primaryKey:true,onDelete:"cascade",references:{model:"bespoke_reports_image",key:"id"}},locale:{type:DataTypes.STRING,primaryKey:true},meta:DataTypes.TEXT},{sequelize:e,modelName:"image_content",tableName:"bespoke_reports_image_content",freezeTableName:true,timestamps:false}),()=>It}var xr=Ca;var qe=class extends Model{toJSON(){let r=this.get({plain:true}),{dimensions:t=[],sections:o=[]}=this;return {...r,settings:r.settings,date:new Date(this.date||Date.now()).toISOString(),dimensions:t.map(a=>a.toJSON()),sections:o.map(a=>a.toJSON())}}};function Ta(e){return qe.init({id:{type:DataTypes.INTEGER,primaryKey:true,autoIncrement:true},name:{type:DataTypes.STRING,allowNull:false,defaultValue:""},visible:{type:DataTypes.BOOLEAN,defaultValue:true},date:{type:DataTypes.DATE,defaultValue:DataTypes.NOW},type:{type:DataTypes.STRING,defaultValue:"report",validate:{isIn:[["report","story"]]}},settings:{type:DataTypes.JSON,defaultValue:{}}},{sequelize:e,modelName:"report",tableName:"bespoke_reports_report",freezeTableName:true,timestamps:false}),r=>(qe.hasMany(r.dimension,{foreignKey:"report_id",sourceKey:"id",as:"dimensions"}),qe.hasMany(r.section,{foreignKey:"report_id",sourceKey:"id",as:"sections"}),qe)}var Tr=Ta;var $e=class extends Model{toJSON(){let r=this.get({plain:true}),{variants:t=[]}=this;return {...r,variants:t.map(o=>o.toJSON())}}};function Ma(e){return $e.init({id:{type:DataTypes.INTEGER,primaryKey:true,autoIncrement:true},report_id:{type:DataTypes.INTEGER,onDelete:"cascade",references:{model:"bespoke_reports_report",key:"id"}},name:{type:DataTypes.STRING,defaultValue:""},settings:{type:DataTypes.JSONB,defaultValue:{}},ordering:{type:DataTypes.INTEGER,defaultValue:0},visible:{type:DataTypes.BOOLEAN,defaultValue:true}},{sequelize:e,modelName:"dimension",tableName:"bespoke_reports_report_dimension",freezeTableName:true,timestamps:false}),r=>($e.hasMany(r.variant,{foreignKey:"dimension_id",sourceKey:"id",as:"variants",constraints:false}),$e.belongsTo(r.report,{foreignKey:"report_id",targetKey:"id",as:"report",constraints:false}),$e)}var Dr=Ma;var je=class extends Model{get report(){return this.dimension?.report}toJSON(){return this.get({plain:true})}};function Na(e){return je.init({id:{type:DataTypes.INTEGER,primaryKey:true,autoIncrement:true},dimension_id:{type:DataTypes.INTEGER,onDelete:"cascade",references:{model:"bespoke_reports_report_dimension",key:"id"}},slug:{type:DataTypes.STRING,defaultValue:""},name:{type:DataTypes.STRING,defaultValue:""},settings:{type:DataTypes.JSONB,defaultValue:{}},config:{type:DataTypes.JSONB,defaultValue:{}},visible:{type:DataTypes.BOOLEAN,defaultValue:true}},{sequelize:e,modelName:"variant",tableName:"bespoke_reports_report_dimension_variant",freezeTableName:true,timestamps:false}),r=>(je.hasMany(r.search,{foreignKey:"variant_id",sourceKey:"id",as:"members",constraints:false}),je.belongsTo(r.dimension,{foreignKey:"dimension_id",targetKey:"id",as:"dimension",constraints:false}),je)}var Mr=Na;var ie=class extends Model{getContent(r){let{contentByLocale:t}=this;if(!t)throw new Error("This SearchModel entity didn't include its SearchContentModel association.");let o=t.find(a=>a.locale===r);if(!o)throw new Error(`Missing SearchContent for locale '${r}' on Search ID '${this.id}'`);return o}};function Ua(e){return ie.init({id:{primaryKey:true,type:DataTypes.TEXT},zvalue:DataTypes.DOUBLE,slug:DataTypes.TEXT,image_id:{type:DataTypes.INTEGER,references:{model:"bespoke_reports_image",key:"id"}},content_id:{autoIncrement:true,type:DataTypes.INTEGER,unique:true},variant_id:{primaryKey:true,type:DataTypes.INTEGER,onDelete:"cascade",references:{model:"bespoke_reports_report_dimension_variant",key:"id"}},dimension_id:{primaryKey:true,type:DataTypes.INTEGER,onDelete:"cascade",references:{model:"bespoke_reports_report_dimension",key:"id"}},report_id:{primaryKey:true,type:DataTypes.INTEGER,onDelete:"cascade",references:{model:"bespoke_reports_report",key:"id"}},visible:{type:DataTypes.BOOLEAN,defaultValue:true}},{sequelize:e,modelName:"search",tableName:"bespoke_reports_search",freezeTableName:true,timestamps:false}),r=>(ie.belongsTo(r.variant,{foreignKey:"variant_id",targetKey:"id",as:"variant",constraints:false}),ie.belongsTo(r.dimension,{foreignKey:"dimension_id",targetKey:"id",as:"dimension",constraints:false}),ie.belongsTo(r.report,{foreignKey:"report_id",targetKey:"id",as:"report",constraints:false}),ie.belongsTo(r.image,{foreignKey:"image_id",targetKey:"id",as:"image",constraints:false}),ie.hasMany(r.search_content,{foreignKey:"id",sourceKey:"content_id",as:"contentByLocale"}),ie)}var Or=Ua;var vt=class extends Model{};function za(e){return vt.init({id:{type:DataTypes.INTEGER,primaryKey:true,onDelete:"cascade",references:{model:"bespoke_reports_search",key:"content_id"}},locale:{type:DataTypes.STRING,primaryKey:true},name:DataTypes.TEXT,annotations:{type:DataTypes.JSONB,defaultValue:{}},attributes:{type:DataTypes.JSONB,defaultValue:{}},keywords:DataTypes.ARRAY(DataTypes.TEXT)},{sequelize:e,modelName:"search_content",tableName:"bespoke_reports_search_content",freezeTableName:true,timestamps:false}),()=>vt}var Nr=za;var rt=class extends Model{toJSON(){let r=this.get({plain:true}),{blocks:t=[]}=this;return {...r,blocks:t.map(o=>o.toJSON())}}};function Va(e){return rt.init({id:{type:DataTypes.INTEGER,primaryKey:true,autoIncrement:true},settings:{type:DataTypes.JSON,defaultValue:{}},heading:{type:DataTypes.INTEGER,defaultValue:1},ordering:DataTypes.STRING,report_id:{type:DataTypes.INTEGER,onDelete:"cascade",references:{model:"bespoke_reports_report",key:"id"}}},{sequelize:e,modelName:"section",tableName:"bespoke_reports_section",freezeTableName:true,timestamps:false}),r=>(rt.hasMany(r.block,{foreignKey:"section_id",sourceKey:"id",as:"blocks"}),rt)}var Lr=Va;var Ct=class extends Model{};function Ka(e){return Ct.init({id:{type:DataTypes.INTEGER,primaryKey:true,autoIncrement:true},name:{type:DataTypes.STRING,defaultValue:""},description:{type:DataTypes.STRING,defaultValue:""},content:{type:DataTypes.JSONB,defaultValue:{pattern:"",logic:`return {
2
2
  axiosConfig: {
3
3
  method: 'get',
4
4
  url: url,
@@ -8,23 +8,23 @@ import {d,g as g$2,a as a$2,c as c$1,b as b$2,f as f$1}from'./chunk-A4E2IRNO.js'
8
8
  method: 'get',
9
9
  url: url,
10
10
  }
11
- };`,testUrl:""}}},{sequelize:e,modelName:"datasource",tableName:"bespoke_reports_data_source",freezeTableName:true,timestamps:false}),()=>xt}var Ur=Va;var Fr={block:vr,block_content:Er,block_input:kr,formatter:Br,image:xr,image_content:Cr,report:Dr,dimension:Mr,variant:Tr,search:Nr,search_content:Or,section:Lr,datasource:Ur};var Ht=le(),zr=process.env.REPORTS_DB_CONNECTION||"";if(!zr)throw new Error(`
11
+ };`,testUrl:""}}},{sequelize:e,modelName:"datasource",tableName:"bespoke_reports_data_source",freezeTableName:true,timestamps:false}),()=>Ct}var Ur=Ka;var Fr={block:Er,block_content:Ir,block_input:vr,formatter:Br,image:Cr,image_content:xr,report:Tr,dimension:Dr,variant:Mr,search:Or,search_content:Nr,section:Lr,datasource:Ur};var Ht=pe(),zr=process.env.REPORTS_DB_CONNECTION||"";if(!zr)throw new Error(`
12
12
  Env var 'REPORTS_DB_CONNECTION' is not present.
13
13
  This is required to connect to a database to save the Reports CMS changes.
14
- `);var Ie=async()=>{if(global.sequelize){Ht&&console.info("\u267B\uFE0F RE-UTILIZING DB CONNECTION");let e=global.sequelize.sequelize;if(e)try{return await e.authenticate(),global.sequelize}catch(r){Ht&&console.warn(`\u26A0\uFE0F CONNECTION INACTIVE, REINITIALIZING: ${r.message}`),delete global.sequelize;}}if(!global.sequelize){Ht&&console.info("\u{1F511} INITIALIZING DB CONNECTION");let e;try{e=new Sequelize(zr,{logging:!1,dialectModule:Ka,pool:{max:10,min:1,acquire:5*1e3,idle:10*1e3,evict:1*1e3}});}catch(r){throw new Error(`
14
+ `);var Ie=async()=>{if(global.sequelize){Ht&&console.info("\u267B\uFE0F RE-UTILIZING DB CONNECTION");let e=global.sequelize.sequelize;if(e)try{return await e.authenticate(),global.sequelize}catch(r){Ht&&console.warn(`\u26A0\uFE0F CONNECTION INACTIVE, REINITIALIZING: ${r.message}`),delete global.sequelize;}}if(!global.sequelize){Ht&&console.info("\u{1F511} INITIALIZING DB CONNECTION");let e;try{e=new Sequelize(zr,{logging:!1,dialectModule:$a,pool:{max:10,min:1,acquire:5*1e3,idle:10*1e3,evict:1*1e3}});}catch(r){throw new Error(`
15
15
  Could not connect to the database using the given connection string.
16
16
  Please check that the connection string 'REPORTS_DB_CONNECTION' is correct.
17
17
  Details:
18
18
  ${r.message}
19
19
  `)}Object.values(Fr).map(r=>r(e)).map(r=>r({...e.models,sequelize:e})),global.sequelize=e.sync().catch(r=>{r instanceof Error$1&&console.error("=".repeat(40),`
20
20
  Error initializing sequelize connection:
21
- `,r.stack||r.message),global.sequelize=void 0;}).then(()=>({...e.models,sequelize:e}));}return global.sequelize};function Ha(e,r){return e.some(t=>r.includes(`role.${t}`))}function Ct(e){return async r=>{let{url:t,method:o,timeout:a,wrapper:i=true,session:s}=r,n=a||process.env.NEXT_PUBLIC_REPORTS_API_FETCH_TIMEOUT||0,l={url:t,method:o||"GET",timeout:n},c=X$1(),d=Y(),m=null;s&&s.user&&(m={user:s.user,status:"authenticated",isLoading:false,update:async()=>s});let u={envs:{...c,...d},...m?{session:m}:{}};try{let p=(await e.datasource.findAll({order:[literal("(content->>'order')::integer ASC NULLS LAST")]})).map(b=>{let w={...c};return {...b.toJSON(),patternSwapped:I(b.content.pattern,{},{variables:w})}}).find(b=>{if(!b.content?.pattern)return !1;try{return new RegExp(b.patternSwapped,"gm").test(l.url)}catch{return !1}});if(p){let b=r.user_roles&&Array.isArray(r.user_roles)?r.user_roles:[],w=p.content.access&&Array.isArray(p.content.access)?p.content.access:[],x=p.content.logic_ssr||p.content.logic;if(x&&(w.length===0||w.includes("public")||w.includes("guest")&&b.length===0||w.includes("private")&&b.length>0||Ha(b,w))){let M=await j({vars:["url","libs","session"],logic:x},u)(l.url);if(M.axiosConfig)l=M.axiosConfig;else throw new ha$1(500,`AxiosConfig is missing in Data Source ${p.name} (ID: ${p.id}).`)}else throw new ha$1(401,`Query not allowed because user roles. Data Source ${p.name} (ID: ${p.id}).`)}let f=await tr.request(l);return {ok:!0,wrapper:i,status:f.status,data:f.data}}catch(g){throw new ha$1(g.response?.status||500,g.message)}}}var{localeDefault:Wt}=a();function Vr(e){let{search:r,search_content:t}=e,o=Ct(e);return a;async function a(s){let{id:n,config:l={},settings:c={}}=s,d=l[Wt]?Wt:Object.keys(l)[0],{overrideNames:m,overrideAttributes:u}=g$2(c),{accessor:g,path:p,idKey:f,labelKey:b}=l[Wt];if(!p||!f||!b)return;let w=await o({url:p}).catch(N=>({data:[],error:N}));if("error"in w)throw new ha$1(500,`Failed to fetch members: ${w.error}`);let x=Q$1(w.data,g),v=[];try{console.info(`Ingesting default items for variant ${s.name} for ${d}`),v=await i$1(s,d,x);}catch(N){let L=`[ERROR] Ingesting default member items for ${d}`;throw console.error(L,N),new ha$1(500,L)}let M=await r.findAll({where:{variant_id:n}}).then(N=>Object.fromEntries(N.map(L=>[L.id,{content_id:L.content_id,needsUpdate:v.includes(L.content_id)}]))),P=Object.entries(l).map(async([N,L])=>{let{path:$,accessor:E,idKey:U,labelKey:O,attributes:k=[]}=L;if(!$||!U||!O)return;let V=await o({url:$}).catch(T=>({data:[],error:T}));if("error"in V)throw new ha$1(500,`Failed to fetch members for locale ${N}: ${V.error}`);let z=Q$1(V.data,E),_=await t.findAll({where:{id:v,locale:N}}).then(T=>Object.fromEntries(T.map(I=>[I.id,I.toJSON()]))),q=z.filter(T=>typeof T[U]<"u"&&T[U]!==""&&typeof T[O]<"u"&&T[O]!=="").map(T=>{let I=M[T[U]],B,F=Object.fromEntries(k.map(Y=>[Y.name,Y.type==="constant"?Y.value:T[Y.value]||""]));return I.needsUpdate&&_[I.content_id]?(B={..._[I.content_id]},m&&(B.name=T[O]),u&&(B.attributes=F)):B={id:I.content_id,locale:N,name:T[O],attributes:F},B});try{return t.bulkCreate(q,{updateOnDuplicate:["name","attributes"]})}catch(T){let I=`[ERROR] Ingesting search content items for ${N}`;throw console.error(I,T),new ha$1(500,I)}});await Promise.all(P);}async function i$1(s,n,l){let{id:c,dimension_id:d,slug:m}=s,{report_id:u}=s.dimension,{idKey:g,labelKey:p,zValueKey:f}=s.config[n],{overrideNames:b,regenerateSlugs:w,keepOldMembers:x,overrideRelevance:v,overrideAttributes:M}=g$2(s.settings),P=r.findAll({attributes:["slug",[fn("COUNT",col("variant.id")),"slugCount"]],include:{association:"variant",attributes:[],required:false,right:true,where:{dimension_id:d,slug:m,id:{[Op.not]:c}}},group:"search.slug"}).then(I=>Object.fromEntries(I.map(B=>{let F=B.getDataValue("slugCount");return [B.slug,Number.parseInt(`${F}`,10)]}))),N=r.findAll({where:{variant_id:c}}).then(I=>Object.fromEntries(I.map(B=>[B.id,B.toJSON()]))),[L,$]=await Promise.all([P,N]),E=Object.values($).map(I=>I.slug),U=[],O=null,k=null;if(f&&f!==""){for(let I of l)if(typeof I[f]=="number"&&!isNaN(I[f])){let B=I[f];(O===null||B<O)&&(O=B),(k===null||B>k)&&(k=B);}}let V=[],z=[],_=[],q=false;l.filter(I=>I[g]&&I[g]!==""&&I[p]&&I[p]!=="").forEach(I=>{let B=I[g],F=i(I[p]);q=false;let Y=parseFloat(Math.random().toPrecision(5));if(f&&f!==""&&O&&k&&I[f]){let J;try{J=parseInt(I[f],10);}catch{J=0;}let fe=k!==null&&O!==null&&k!==O?(J-O)/(k-O):0;Y=k===O?1:parseFloat(fe.toPrecision(5));}if($[B]){if(b||w||v||M){let J=$[B];if((b||M)&&_.push(J.content_id),b&&w){let fe=Object.values($).filter(W=>W.id!==B).map(W=>W.slug),K=L[F]||fe.includes[F]||U.includes(F);K&&console.warn("Duplicate slug!",F,"replaced by",`${F}-${B}`);let H=K?`${F}-${B}`:F;J.slug!==H&&(J.slug=H,U.push(F),q=true,console.info("UPDATE SLUG",B,F));}f&&f!==""&&v&&J.zvalue!==Y&&(J.zvalue=Y,q=true,console.warn("UPDATE ZVALUE",B,Y)),q&&z.push(J);}}else {console.info("INSERT ID",B);let J=L[F]||E.includes[F]||U.includes(F);J&&console.warn("Duplicate slug!",F,"replaced by",`${F}-${B}`);let fe=J?`${F}-${B}`:F;U.push(F),V.push({id:B,slug:fe,variant_id:c,dimension_id:d,report_id:u,zvalue:Y});}});let T=[];if(!x){let I=l.map(B=>B[g]);T=Object.keys($).filter(B=>!I.includes(B));}try{return (V.length>0||z.length>0)&&(await r.bulkCreate([...V,...z],{updateOnDuplicate:["slug","zvalue"]}),console.info("New members ingested:",V.length),console.info("New members updated:",z.length)),T.length>0&&(await r.destroy({where:{id:{[Op.in]:T},variant_id:c}}),console.warn("Old members deleted:",T.length)),_}catch(I){throw console.error(`[ERROR] Ingesting search members for ${n}`,I),new Error(I)}}}var Xa=ha(process.env.NEXT_PUBLIC_REPORTS_DEBUG);function Kr(e){let{search:r}=e;return t;async function t(o){let{all:a,locale:i,mode:s,variant:n,output:l,allowNulls:c}=o,d={content_id:[],...n&&n.length?{variant_id:n}:{}};if(s==="content_ids")d.content_id=o.content_ids;else if(s==="ids"){if(a)throw new ha$1(400,"Search by ids doesn't support locale all. Pick one locale.");let p={id:o.ids,...n&&n.length?{variant_id:n}:{}},f=await r.findAll({attributes:["content_id"],where:p,include:[{association:"contentByLocale",where:{locale:i}}]});d.content_id=f.map(b=>b.content_id);}else if(s==="slugs"){let p=o.slugs.map(b=>r.findAll({attributes:["content_id"],where:{slug:b.memberSlug},include:{association:"variant",attributes:["id","name","slug"],required:true,where:{slug:b.variantSlug}}})),f=await Promise.all(p).then(b=>b.reduce((w,x)=>w.concat(x),[]));d.content_id=f.map(b=>b.content_id);}else if(s==="related"){let p=()=>{if(o.variant_ids?.length)return {variant_id:o.variant_ids.map(w=>w)};if(o.dimension_ids?.length)return {dimension_id:o.dimension_ids.map(w=>w)};if(o.report_ids?.length)return {report_id:o.report_ids.map(w=>w)}},f=()=>o.include_ids?.length?{[Op.in]:o.include_ids.map(w=>w)}:false,b=await r.findAll({attributes:["content_id"],where:{...p(),content_id:f()||{[Op.notIn]:o.current_ids},visible:true},order:[Sequelize.fn("RANDOM")],limit:o.related||4});d.content_id=b.map(w=>w.content_id);}else if(s==="whole"){let p={...n&&n.length?{variant_id:n}:{}},f=await r.findAll({attributes:["content_id"],where:p});d.content_id=f.map(b=>b.content_id);}let m={locale:a?{[Op.ne]:null}:i},u=await r.findAll({where:d,include:[{association:"report",attributes:["id","name"]},{association:"dimension",attributes:["id","name","ordering"]},{association:"variant",attributes:["id","name","slug"]},{association:"image",attributes:["id","author","url","license"],include:[{association:"contentByLocale",where:m}]},{association:"contentByLocale",where:m}]});if(!c&&!["related","whole"].includes(s)&&o[s]&&u.length!==o[s].length)throw Xa&&console.error("Error in read members. The number of members requested doesn't match the number of members found.",JSON.stringify(o)),new ha$1(404,"One or more members were not found. "+JSON.stringify(o));u.sort((p,f)=>d.content_id.indexOf(p.content_id)-d.content_id.indexOf(f.content_id));let g=u.map(p=>{let f,b={id:p.id,slug:p.slug,visible:p.visible,zvalue:p.zvalue,content_id:p.content_id,report_id:p.report_id,report_name:p.report.name,dimension_id:p.dimension_id,dimension_name:p.dimension.name,dimension_ordering:p.dimension.ordering,variant_id:p.variant_id,variant_name:p.variant.name,variant_slug:p.variant.slug};if(a){let w=p.contentByLocale;b.contentByLocale=w,b.image=p.image,b.image_id=p.image_id,f=b;}else {let w=p.getContent(i),x=p.image?.getContent(i),v=x&&{id:p.image.id,author:p.image.author,url:p.image.url,license:p.image.license,meta:x.meta};f={...b,locale:w.locale,name:w.name,attributes:w.attributes,keywords:w.keywords,image:v||null,image_id:p.image_id};}return l==="lite"&&(delete f.image,delete f.image_id),f});return {meta:o,results:g}}}function qr(e){let{search:r}=e;return t;async function t(o){let a=await r.findOne({where:{content_id:o.member},include:[{association:"image",attributes:[o.size],include:[{association:"contentByLocale"}]}]});return a&&a.image&&a.image[o.size]?a.image[o.size]:Buffer.from("iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkkAQAAB8AG7jymN8AAAAASUVORK5CYII=","base64")}}function tn(e,r=true){if(!e)return "";let t=h(g$1(e.toLowerCase()));return (r?en(t,{replacement:" ",remove:/[*+~.()'"!:@-]/g,lower:true,strict:false,trim:true}):t).replace(/\s\s+/g," ")}var ve=tn;var ot=[{charset:"latin",locales:["en","es","fr","de","it","pt","ro","nl","sv","da","fi","no","pl","cs","hu","sk","sl"]},{charset:"cjk",locales:["zh","ja","ko"]},{charset:"arabic",locales:["ar","fa","ur","he"]},{charset:"cyrilic",locales:["bg","ru","uk","sr","mk"]}],Dt=ot.reduce((e,r)=>e.concat(r.locales),[]);var Je=le(),{locales:on}=a(),an=on.filter(e=>Dt.includes(e)),Qt=false,nn=async(e,r=false)=>{if(r&&(Je&&console.info("0\uFE0F\u20E3 CLEARING SEARCH INDEX"),global.flexsearch=void 0,Qt=false),global.flexsearch)return Je&&console.info("\u{1F501} RE-UTILIZING SEARCH INDEX"),global.flexsearch;try{Qt||(Je&&console.info("1\uFE0F\u20E3 INITIALIZING SEARCH INDEX"),Qt=!0,global.flexsearch=await sn(e));}catch(t){throw new Error(`
21
+ `,r.stack||r.message),global.sequelize=void 0;}).then(()=>({...e.models,sequelize:e}));}return global.sequelize};function Ya(e,r){return e.some(t=>r.includes(`role.${t}`))}function xt(e){return async r=>{let{url:t,method:o,timeout:a,wrapper:i=true,session:s}=r,n=a||process.env.NEXT_PUBLIC_REPORTS_API_FETCH_TIMEOUT||0,l={url:t,method:o||"GET",timeout:n},c=X$1(),d=Y(),m=null;s&&s.user&&(m={user:s.user,status:"authenticated",isLoading:false,update:async()=>s});let u={envs:{...c,...d},...m?{session:m}:{}};try{let p=(await e.datasource.findAll({order:[literal("(content->>'order')::integer ASC NULLS LAST")]})).map(h=>{let _={...c};return {...h.toJSON(),patternSwapped:I(h.content.pattern,{},{variables:_})}}).find(h=>{if(!h.content?.pattern)return !1;try{return new RegExp(h.patternSwapped,"gm").test(l.url)}catch{return !1}});if(p){let h=r.user_roles&&Array.isArray(r.user_roles)?r.user_roles:[],_=p.content.access&&Array.isArray(p.content.access)?p.content.access:[],O=p.content.logic_ssr||p.content.logic;if(O&&(_.length===0||_.includes("public")||_.includes("guest")&&h.length===0||_.includes("private")&&h.length>0||Ya(h,_))){let T=await j$1({vars:["url","libs","session"],logic:O},u)(l.url);if(T.axiosConfig)l=T.axiosConfig;else throw new ha$1(500,`AxiosConfig is missing in Data Source ${p.name} (ID: ${p.id}).`)}else throw new ha$1(401,`Query not allowed because user roles. Data Source ${p.name} (ID: ${p.id}).`)}let g=await tr.request(l);return {ok:!0,wrapper:i,status:g.status,data:g.data}}catch(f){throw new ha$1(f.response?.status||500,f.message)}}}var{localeDefault:Wt}=a();function Vr(e){let{search:r,search_content:t}=e,o=xt(e);return a;async function a(s){let{id:n,config:l={},settings:c={}}=s,d=l[Wt]?Wt:Object.keys(l)[0],{overrideNames:m,overrideAttributes:u}=g$2(c),{accessor:f,path:p,idKey:g,labelKey:h}=l[Wt];if(!p||!g||!h)return;let _=await o({url:p}).catch(U=>({data:[],error:U}));if("error"in _)throw new ha$1(500,`Failed to fetch members: ${_.error}`);let O=Q(_.data,f),B=[];try{console.info(`Ingesting default items for variant ${s.name} for ${d}`),B=await i$1(s,d,O);}catch(U){let F=`[ERROR] Ingesting default member items for ${d}`;throw console.error(F,U),new ha$1(500,F)}let T=await r.findAll({where:{variant_id:n}}).then(U=>Object.fromEntries(U.map(F=>[F.id,{content_id:F.content_id,needsUpdate:B.includes(F.content_id)}]))),P=Object.entries(l).map(async([U,F])=>{let{path:z,accessor:q,idKey:K,labelKey:w,attributes:E=[]}=F;if(!z||!K||!w)return;let C=await o({url:z}).catch(R=>({data:[],error:R}));if("error"in C)throw new ha$1(500,`Failed to fetch members for locale ${U}: ${C.error}`);let D=Q(C.data,q),$=await t.findAll({where:{id:B,locale:U}}).then(R=>Object.fromEntries(R.map(k=>[k.id,k.toJSON()]))),Y=D.filter(R=>typeof R[K]<"u"&&R[K]!==""&&typeof R[w]<"u"&&R[w]!=="").map(R=>{let k=T[R[K]],v,M=Object.fromEntries(E.map(V=>[V.name,V.type==="constant"?V.value:R[V.value]||""]));return k.needsUpdate&&$[k.content_id]?(v={...$[k.content_id]},m&&(v.name=R[w]),u&&(v.attributes=M)):v={id:k.content_id,locale:U,name:R[w],attributes:M},v});try{return t.bulkCreate(Y,{updateOnDuplicate:["name","attributes"]})}catch(R){let k=`[ERROR] Ingesting search content items for ${U}`;throw console.error(k,R),new ha$1(500,k)}});await Promise.all(P);}async function i$1(s,n,l){let{id:c,dimension_id:d,slug:m}=s,{report_id:u}=s.dimension,{idKey:f,labelKey:p,zValueKey:g}=s.config[n],{overrideNames:h,regenerateSlugs:_,keepOldMembers:O,overrideRelevance:B,overrideAttributes:T}=g$2(s.settings),P=r.findAll({attributes:["slug",[fn$1("COUNT",col("variant.id")),"slugCount"]],include:{association:"variant",attributes:[],required:false,right:true,where:{dimension_id:d,slug:m,id:{[Op.not]:c}}},group:"search.slug"}).then(k=>Object.fromEntries(k.map(v=>{let M=v.getDataValue("slugCount");return [v.slug,Number.parseInt(`${M}`,10)]}))),U=r.findAll({where:{variant_id:c}}).then(k=>Object.fromEntries(k.map(v=>[v.id,v.toJSON()]))),[F,z]=await Promise.all([P,U]),q=Object.values(z).map(k=>k.slug),K=[],w=null,E=null;if(g&&g!==""){for(let k of l)if(typeof k[g]=="number"&&!isNaN(k[g])){let v=k[g];(w===null||v<w)&&(w=v),(E===null||v>E)&&(E=v);}}let C=[],D=[],$=[],Y=false;l.filter(k=>k[f]&&k[f]!==""&&k[p]&&k[p]!=="").forEach(k=>{let v=k[f],M=i(k[p]);Y=false;let V=parseFloat(Math.random().toPrecision(5));if(g&&g!==""&&w&&E&&k[g]){let J;try{J=parseInt(k[g],10);}catch{J=0;}let ye=E!==null&&w!==null&&E!==w?(J-w)/(E-w):0;V=E===w?1:parseFloat(ye.toPrecision(5));}if(z[v]){if(h||_||B||T){let J=z[v];if((h||T)&&$.push(J.content_id),h&&_){let ye=Object.values(z).filter(Q=>Q.id!==v).map(Q=>Q.slug),G=F[M]||ye.includes[M]||K.includes(M);G&&console.warn("Duplicate slug!",M,"replaced by",`${M}-${v}`);let H=G?`${M}-${v}`:M;J.slug!==H&&(J.slug=H,K.push(M),Y=true,console.info("UPDATE SLUG",v,M));}g&&g!==""&&B&&J.zvalue!==V&&(J.zvalue=V,Y=true,console.warn("UPDATE ZVALUE",v,V)),Y&&D.push(J);}}else {console.info("INSERT ID",v);let J=F[M]||q.includes[M]||K.includes(M);J&&console.warn("Duplicate slug!",M,"replaced by",`${M}-${v}`);let ye=J?`${M}-${v}`:M;K.push(M),C.push({id:v,slug:ye,variant_id:c,dimension_id:d,report_id:u,zvalue:V});}});let R=[];if(!O){let k=l.map(v=>v[f]);R=Object.keys(z).filter(v=>!k.includes(v));}try{return (C.length>0||D.length>0)&&(await r.bulkCreate([...C,...D],{updateOnDuplicate:["slug","zvalue"]}),console.info("New members ingested:",C.length),console.info("New members updated:",D.length)),R.length>0&&(await r.destroy({where:{id:{[Op.in]:R},variant_id:c}}),console.warn("Old members deleted:",R.length)),$}catch(k){throw console.error(`[ERROR] Ingesting search members for ${n}`,k),new Error(k)}}}var tn=ba(process.env.NEXT_PUBLIC_REPORTS_DEBUG);function qr(e){let{search:r}=e;return t;async function t(o){let{all:a,locale:i,mode:s,variant:n,output:l,allowNulls:c}=o,d={content_id:[],...n&&n.length?{variant_id:n}:{}};if(s==="content_ids")d.content_id=o.content_ids;else if(s==="ids"){if(a)throw new ha$1(400,"Search by ids doesn't support locale all. Pick one locale.");let p={id:o.ids,...n&&n.length?{variant_id:n}:{}},g=await r.findAll({attributes:["content_id"],where:p,include:[{association:"contentByLocale",where:{locale:i}}]});d.content_id=g.map(h=>h.content_id);}else if(s==="slugs"){let p=o.slugs.map(h=>r.findAll({attributes:["content_id"],where:{slug:h.memberSlug},include:{association:"variant",attributes:["id","name","slug"],required:true,where:{slug:h.variantSlug}}})),g=await Promise.all(p).then(h=>h.reduce((_,O)=>_.concat(O),[]));d.content_id=g.map(h=>h.content_id);}else if(s==="related"){let p=()=>{if(o.variant_ids?.length)return {variant_id:o.variant_ids.map(_=>_)};if(o.dimension_ids?.length)return {dimension_id:o.dimension_ids.map(_=>_)};if(o.report_ids?.length)return {report_id:o.report_ids.map(_=>_)}},g=()=>o.include_ids?.length?{[Op.in]:o.include_ids.map(_=>_)}:false,h=await r.findAll({attributes:["content_id"],where:{...p(),content_id:g()||{[Op.notIn]:o.current_ids},visible:true},order:[Sequelize.fn("RANDOM")],limit:o.related||4});d.content_id=h.map(_=>_.content_id);}else if(s==="whole"){let p={...n&&n.length?{variant_id:n}:{}},g=await r.findAll({attributes:["content_id"],where:p});d.content_id=g.map(h=>h.content_id);}let m={locale:a?{[Op.ne]:null}:i},u=await r.findAll({where:d,include:[{association:"report",attributes:["id","name"]},{association:"dimension",attributes:["id","name","ordering"]},{association:"variant",attributes:["id","name","slug"]},{association:"image",attributes:["id","author","url","license"],include:[{association:"contentByLocale",where:m}]},{association:"contentByLocale",where:m}]});if(!c&&!["related","whole"].includes(s)&&o[s]&&u.length!==o[s].length)throw tn&&console.error("Error in read members. The number of members requested doesn't match the number of members found.",JSON.stringify(o)),new ha$1(404,"One or more members were not found. "+JSON.stringify(o));u.sort((p,g)=>d.content_id.indexOf(p.content_id)-d.content_id.indexOf(g.content_id));let f=u.map(p=>{let g,h={id:p.id,slug:p.slug,visible:p.visible,zvalue:p.zvalue,content_id:p.content_id,report_id:p.report_id,report_name:p.report.name,dimension_id:p.dimension_id,dimension_name:p.dimension.name,dimension_ordering:p.dimension.ordering,variant_id:p.variant_id,variant_name:p.variant.name,variant_slug:p.variant.slug};if(a){let _=p.contentByLocale;h.contentByLocale=_,h.image=p.image,h.image_id=p.image_id,g=h;}else {let _=p.getContent(i),O=p.image?.getContent(i),B=O&&{id:p.image.id,author:p.image.author,url:p.image.url,license:p.image.license,meta:O.meta};g={...h,locale:_.locale,name:_.name,attributes:_.attributes,keywords:_.keywords,image:B||null,image_id:p.image_id};}return l==="lite"&&(delete g.image,delete g.image_id),g});return {meta:o,results:f}}}function Kr(e){let{search:r}=e;return t;async function t(o){let a=await r.findOne({where:{content_id:o.member},include:[{association:"image",attributes:[o.size],include:[{association:"contentByLocale"}]}]});return a&&a.image&&a.image[o.size]?a.image[o.size]:Buffer.from("iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkkAQAAB8AG7jymN8AAAAASUVORK5CYII=","base64")}}function on(e,r=true){if(!e)return "";let t=h(g$1(e.toLowerCase()));return (r?rn(t,{replacement:" ",remove:/[*+~.()'"!:@-]/g,lower:true,strict:false,trim:true}):t).replace(/\s\s+/g," ")}var ve=on;var ot=[{charset:"latin",locales:["en","es","fr","de","it","pt","ro","nl","sv","da","fi","no","pl","cs","hu","sk","sl"]},{charset:"cjk",locales:["zh","ja","ko"]},{charset:"arabic",locales:["ar","fa","ur","he"]},{charset:"cyrilic",locales:["bg","ru","uk","sr","mk"]}],Tt=ot.reduce((e,r)=>e.concat(r.locales),[]);var Je=pe(),{locales:nn}=a(),sn=nn.filter(e=>Tt.includes(e)),Qt=false,cn=async(e,r=false)=>{if(r&&(Je&&console.info("0\uFE0F\u20E3 CLEARING SEARCH INDEX"),global.flexsearch=void 0,Qt=false),global.flexsearch)return Je&&console.info("\u{1F501} RE-UTILIZING SEARCH INDEX"),global.flexsearch;try{Qt||(Je&&console.info("1\uFE0F\u20E3 INITIALIZING SEARCH INDEX"),Qt=!0,global.flexsearch=await ln(e));}catch(t){throw new Error(`
22
22
  Could not initialize FlexSearch engine.
23
23
  Details:
24
24
  ${t.message}
25
- `)}return global.flexsearch};async function sn(e){let r=await e.search.findAll({include:[{association:"contentByLocale"}]});Je&&console.info("\u{1F3F3}\uFE0F INITIALIZING FLEXSEARCH");let t=an.map(async o=>{Je&&console.info(`\u{1F3F3}\uFE0F INITIALIZING FLEXSEARCH ${o} LOCALE`);let a=ot.find(d=>d.locales.includes(o)),i=a?.charset||"latin",s=i==="latin"?"advanced":"default";a?console.info(` Charset for ${o}: ${i}`):Je&&console.error(` Missing charset for ${o}, adding latin as default.`);let n=(await import(`flexsearch/dist/module/lang/${i}/${s}`)).default,l=new rn.Document({language:o,encode:n.encode,tokenize:"reverse",stemmer:{},matcher:{},filter:[],preset:"default",cache:100,resolution:9,context:false,optimize:true,worker:false,document:{id:"content_id",store:false,index:["id","name","clean","keywords","attributes"]}}),c=0;return r.forEach(d=>{let m=d.contentByLocale.find(u=>u.locale===o);if(m){let u=ve(m.name,i!=="arabic"),g=Array.isArray(m.keywords)?m.keywords.map(f=>ve(f,i!=="arabic")):null,p={id:d.id,content_id:d.content_id,name:m.name,keywords:g,attributes:m.attributes,clean:u};l.add(p),c++;}}),console.info(`\u{1F3F3}\uFE0F Indexed for ${o}: ${c} elements`),[o,l]});return Object.fromEntries(await Promise.all(t))}var Ee=nn;var He=process.env.REPORTS_EXTERNAL_SEARCH,de=le(),{locales:cn}=a(),ln=cn.filter(e=>Dt.includes(e)),Zt=false,dn=async(e=false)=>{if(e&&(de&&console.info("0\uFE0F\u20E3 CLEARING SEARCH INDEX"),global.typesense=void 0,Zt=false),global.typesense)return de&&console.info("\u{1F501} RE-UTILIZING SEARCH INDEX"),global.typesense;try{Zt||(de&&console.info("1\uFE0F\u20E3 INITIALIZING SEARCH INDEX"),Zt=!0,global.typesense=await pn());}catch(r){throw new Error(`
25
+ `)}return global.flexsearch};async function ln(e){let r=await e.search.findAll({include:[{association:"contentByLocale"}]});Je&&console.info("\u{1F3F3}\uFE0F INITIALIZING FLEXSEARCH");let t=sn.map(async o=>{Je&&console.info(`\u{1F3F3}\uFE0F INITIALIZING FLEXSEARCH ${o} LOCALE`);let a=ot.find(d=>d.locales.includes(o)),i=a?.charset||"latin",s=i==="latin"?"advanced":"default";a?console.info(` Charset for ${o}: ${i}`):Je&&console.error(` Missing charset for ${o}, adding latin as default.`);let n=(await import(`flexsearch/dist/module/lang/${i}/${s}`)).default,l=new an.Document({language:o,encode:n.encode,tokenize:"reverse",stemmer:{},matcher:{},filter:[],preset:"default",cache:100,resolution:9,context:false,optimize:true,worker:false,document:{id:"content_id",store:false,index:["id","name","clean","keywords","attributes"]}}),c=0;return r.forEach(d=>{let m=d.contentByLocale.find(u=>u.locale===o);if(m){let u=ve(m.name,i!=="arabic"),f=Array.isArray(m.keywords)?m.keywords.map(g=>ve(g,i!=="arabic")):null,p={id:d.id,content_id:d.content_id,name:m.name,keywords:f,attributes:m.attributes,clean:u};l.add(p),c++;}}),console.info(`\u{1F3F3}\uFE0F Indexed for ${o}: ${c} elements`),[o,l]});return Object.fromEntries(await Promise.all(t))}var Be=cn;var He=process.env.REPORTS_EXTERNAL_SEARCH,ue=pe(),{locales:dn}=a(),mn=dn.filter(e=>Tt.includes(e)),Zt=false,pn=async(e=false)=>{if(e&&(ue&&console.info("0\uFE0F\u20E3 CLEARING SEARCH INDEX"),global.typesense=void 0,Zt=false),global.typesense)return ue&&console.info("\u{1F501} RE-UTILIZING SEARCH INDEX"),global.typesense;try{Zt||(ue&&console.info("1\uFE0F\u20E3 INITIALIZING SEARCH INDEX"),Zt=!0,global.typesense=await fn());}catch(r){throw new Error(`
26
26
  Could not initialize Typesense engine.
27
27
  Details:
28
28
  ${r.message}
29
- `)}return global.typesense};async function mn(){try{if(He){let e=await tr.get(new URL(He).origin);if(e?.data["typesense-health"]===!0)return de&&console.info(`${He} health check is OK. Version: ${e.data.Version}`),!0}else console.error("No envar set TYPESENSE_URL");return !1}catch(e){return console.error("Health check failed:",e.message),false}}async function pn(){if(de&&console.info(`\u{1F3F3}\uFE0F INITIALIZING TYPESENSE SEARCH AGAINST ${He}`),!await mn())throw new Error("TYPESENSE_URL service is not healthy.");let r=ln.map(t=>(de&&console.info(`\u{1F3F3}\uFE0F INITIALIZING SEARCH ${t} LOCALE`),[t,{search:async(a={query:"*",limit:12,offset:0})=>{let i={locale:t,query:a.query,limit:a.limit,offset:a.offset};return a.report&&Array.isArray(a.report)&&a.report.length>0&&(i["report[]"]=a.report.join(",")),a.variant&&Array.isArray(a.variant)&&a.variant.length>0&&(i["variant[]"]=a.variant.join(",")),de&&console.info("Typesense URL:",He,i),tr.get(He,{params:i}).then(n=>(de&&(console.info("Typesense URL:",n.request.res.responseUrl),console.info("Typesense Results",n.data.data.results.length)),n.data.data)).catch(n=>(console.error("Typesense Call Error:",n),[]))}}]));return Object.fromEntries(await Promise.all(r))}var jr=dn;var{localeDefault:er}=a();function We(e){let{search:r,report:t}=e;return o;async function o(a){let i=a.origin||"flexsearch",s=process.env.REPORTS_EXTERNAL_SEARCH&&i==="typesense",{query:n,locale:l,preferredLocale:c,limit:d,format:m,visible:u,variant:g,dimension:p,report:f,all:b,noImage:w,includes:x,sort:v,direction:M="ASC",offset:P=0}=a,L=ot.find(k=>k.locales.includes(l))?.charset||"latin",$=d&&!isNaN(d)?d:20,E=ve(n,L!=="arabic");function U(k){return k.toJSON()}function O(k){let V=k.getContent(l);return {...k.toJSON(),locale:V.locale,name:V.name,attributes:V.attributes,keywords:V.keywords}}if(s){let k=await jr(),V=k[l]||k[er],z={query:E===""?"*":E,limit:$,variant:g,report:f,offset:P};return await V.search(z)}else {let k=[],V=await Ee(e);if(n&&n!==""&&V[l]){let K=ve(n,L!=="arabic"),H={query:K,limit:$},W=await V[l].search(H);if(s?k=W.data.results.map(re=>parseInt(re.content_id,10)):k=W.reduce((re,ee)=>re.concat(ee.result),[]),k=S(k),c&&V[c]){let ee=V[c].search(K).reduce((Me,Te)=>Me.concat(Te.result),[]);ee=S(ee),k=S([...k,...ee]);}}let z={...u?{visible:u}:{},...w?{image_id:{[Op.eq]:null}}:{},...g.length?{variant_id:g}:{},...p.length?{dimension_id:p}:{},...f.length?{report_id:f}:{}},_={locale:b?{[Op.ne]:null}:l},q=[];n&&n!==""&&k.length&&v!=="report"?q.push([literal(`array_position(array[${k.join(",")}], "content_id")`),"ASC"]):(v==="report"&&q.push([literal(`COALESCE(NULLIF("report"."settings"->>'order', '')::INTEGER, 999999)`),"ASC"],[literal(`COALESCE(NULLIF("variant"."settings"->>'order', '')::INTEGER, 999999)`),"ASC"]),q.push(["zvalue","DESC NULLS LAST"])),v&&v!=="name"&&v!=="report"&&q.unshift([v,M.toUpperCase()]),n&&n!==""&&(z.content_id=k);let T=[{association:"contentByLocale",where:_,separate:true}];(x||v==="report")&&T.push({association:"report",attributes:["id","name","settings"]},{association:"dimension",attributes:["id","name","settings"]},{association:"variant",attributes:["id","slug","name","settings"]});let I={...z.visible?{visible:z.visible}:{},...z.noImage?{image_id:z.noImage}:{},...z.content_id?{content_id:z.content_id}:{}};if(!z.report_id&&!z.dimension_id&&!z.variant_id&&u){let H=(await t.findAll({attributes:["id"],where:{[Op.or]:[where(cast(json("settings.hide"),"boolean"),true)]}})).map(W=>W.id);H.length>0&&(z.report_id={[Op.notIn]:H},I.report_id=z.report_id);}let B=[],[F,Y]=await Promise.all([r.findAll({limit:$,offset:P,where:z,include:T,order:q,subQuery:false}),r.findAll({attributes:["variant_id",[fn("COUNT",col("variant_id")),"members_count"]],where:I,group:["variant_id"]})]),J=Y.map(K=>K.toJSON());if(v==="name"){let K=M.toUpperCase()==="ASC"?1:-1;F.sort((H,W)=>{let re=H.getContent(er),ee=W.getContent(er);return re&&ee?re.name>ee.name?1*K:-1*K:0});}let fe=m==="nested"?U:O;return B=F.map(fe),m!=="nested"&&B.forEach(K=>{let{name:H,keywords:W,score:re=.1,zvalue:ee}=K;if(H){let Me=ve(H),Te=re,ir=n.length/Me.length,cr=Me.split("").reduce((Ft,lr,dr)=>(n.slice(0,dr),n.charAt(dr)===lr&&(Ft+=lr),Ft),"").length;Me===n||W&&W.includes(n)?Te=1e6:Me.startsWith(n)?Te*=20*ir:cr&&(Te*=cr*ir),K.zvalue=Te*2+ee;}}),{meta:{origin:"flexsearch",...Object.fromEntries(Object.entries(a).map(K=>[K[0],g$1(K[1])])),variantCount:J.reduce((K,H)=>(K[H.variant_id]=parseInt(H.members_count,10),K),{})},results:B}}}}function Jr(e){let{image:r,image_content:t,search:o,search_content:a}=e;return i;async function i(s){let{content_id:n,contentByLocale:l,image:c,image_id:d}=s,m={where:{content_id:n}},u=await o.findOne(m);if(await o.update(s,{where:{content_id:n}}),l){for(let p=0;p<l.length;p++){let f=l[p];await a.update({name:f.name,keywords:f.keywords},{where:{id:f.id,locale:f.locale}});}m={...m,...{include:[{association:"contentByLocale",separate:true}]}};}if(c){if(c.id&&(await r.update({...c},{where:{id:c.id}}),c.contentByLocale))for(let g=0;g<c.contentByLocale.length;g++){let p=c.contentByLocale[g];await t.update({meta:p.meta},{where:{id:p.id,locale:p.locale}});}}else !d&&u.image_id&&(await e.search.findAll({where:{image_id:u.image_id}})).length===0&&await r.destroy({where:{id:u.image_id}});return o.findOne(m)}}function Hr(e){return {ingestMembers:Vr(e),readMember:Kr(e),searchMember:We(e),updateMember:Jr(e),readMemberImage:qr(e)}}var ke={include:[{association:"contentByLocale",separate:true},{association:"inputs",include:[{association:"contentByLocale",separate:true}]},{association:"consumers",include:[{association:"contentByLocale",separate:true}]}]},at=e=>({include:[{association:"variants",separate:true,attributes:{include:[[fn("COUNT",col("members.id")),"members_count"]]},include:[{model:e,as:"members",attributes:[]}],group:["variant.id"]}],order:[["ordering","ASC"]]}),nt={include:[{association:"blocks",separate:true,...ke}]},Tt=e=>({include:[{association:"dimensions",separate:true,...at(e)},{association:"sections",separate:true,...nt}]});var Z=[{association:"image",attributes:{exclude:["splash"]},include:[{association:"contentByLocale"}]},{association:"contentByLocale"}];function Wr(e){let{block:r,block_content:t,block_input:o}=e;return {createBlock:a,readBlock:s,updateBlock:n,deleteBlock:c,createBulkBlock:i,updateBulkBlock:l};async function a(d){let{locales:m,...u}=d;return (await r.create({...u,consumers:[],inputs:[],contentByLocale:m.map(p=>({locale:p}))},{include:ke.include})).toJSON()}async function i(d){let m=d.map(g=>{let{locales:p,...f}=g;return {...f,consumers:[],inputs:[],contentByLocale:p.map(w=>({locale:w}))}});return (await r.bulkCreate(m,{include:ke.include})).map(g=>g.toJSON())}async function s({id:d,include:m}={}){let u=d==null?[]:[].concat(d),g=await r.findAll({where:u.length>0?{id:u}:void 0,include:m?ke.include:void 0});if(u.length===0||g.length===u.length)return g.map(b=>b.toJSON());let p=g.map(b=>b.id),f=u.filter(b=>!p.includes(b));throw new ha$1(404,`Block(id=[${f}]) does not exist.`)}async function n(d){let{id:m,contentByLocale:u,consumers:g,inputs:p,inputAction:f,...b}=d,w=await r.findByPk(m,{include:ke.include,rejectOnEmpty:true});if(w.set(b),u){let x=Object.values(u);await t.bulkCreate(x,{updateOnDuplicate:["content"]});}return f&&(f.operation==="create"?await o.create(f.input):await o.destroy({where:f.input})),await w.save(),await w.reload(),w.toJSON()}async function l(d){let m=d.map(p=>{let{id:f,contentByLocale:b,consumers:w,inputs:x,inputAction:v,...M}=p;return {id:f,contentByLocale:b,inputAction:v,...M}}),u=await r.findAll({where:{id:{[Op.or]:m.map(p=>p.id)}},include:ke.include}),g=[];for(let p of u){let f=m.filter(b=>b.id===p.id);for(let b=0;b<f.length;b++){let w=f[b],{id:x,contentByLocale:v,inputAction:M,...P}=w;if(M&&(M.operation==="create"?await o.create(M.input):await o.destroy({where:M.input})),v){let N=Object.values(v);await t.bulkCreate(N,{updateOnDuplicate:["content"]});}p.set(P),await p.save(),await p.reload(),g.push(p.toJSON());}}return g}async function c(d){let m=await r.findByPk(d,{rejectOnEmpty:true});return await m.destroy(),{id:d,parentType:"section",parentId:m.section_id}}}function Yr(e){let{dimension:r,search:t}=e;return {createDimension:o,readDimension:a,updateDimension:i,deleteDimension:s};async function o(n){return (await r.create({name:n.name,report_id:n.report_id,ordering:n.ordering||0,variants:[]},{include:at(t).include})).toJSON()}async function a({id:n,include:l}={}){let c=n==null?[]:[].concat(n),d=await r.findAll({where:c.length>0?{id:c}:void 0,include:l?at(t).include:void 0});if(c.length===0||d.length===c.length)return d.map(g=>g.toJSON());let m=d.map(g=>g.id),u=c.filter(g=>!m.includes(g));throw new ha$1(404,`Dimension(id=[${u}]) does not exist.`)}async function i(n){let{id:l,variants:c,...d}=n,m=await r.findByPk(l,{include:at(t).include,rejectOnEmpty:false});if(!m)throw new ha$1(404,`Dimension(id=${l}) does not exist.`);return m.set(d),await m.save(),m.toJSON()}async function s(n){let l=await r.findByPk(n,{rejectOnEmpty:false});return await l.destroy(),{id:n,parentType:"report",parentId:l.report_id}}}function Qr(e){let{formatter:r}=e;return {createFormatter:t,readFormatter:o,updateFormatter:a,deleteFormatter:i};async function t(s){return (await r.create(s)).toJSON()}async function o({id:s}={}){let n=s==null?[]:[].concat(s),l=await r.findAll({where:n.length>0?{id:n}:void 0});if(n.length===0||l.length===n.length)return l.map(m=>m.toJSON());let c=l.map(m=>m.id),d=n.filter(m=>!c.includes(m));throw new ha$1(404,`Formatter(id=[${d}]) does not exist.`)}async function a(s){let{id:n,...l}=s,c=await r.findByPk(n,{rejectOnEmpty:true});return await c.update(l),c.toJSON()}async function i(s){return await(await r.findByPk(s,{rejectOnEmpty:true})).destroy(),{id:s}}}function Xr(e){let{datasource:r}=e;return {createDatasource:t,readDatasource:o,updateDatasource:a,deleteDatasource:i};async function t(s){return (await r.create(s)).toJSON()}async function o({id:s,include:n}={}){try{let l=s==null?[]:[].concat(s),c=n===!0,d=await r.findAll({attributes:c?["id","name","description","content"]:["id","name","description",[literal("content - 'logic' - 'logic_ssr' - 'testUrl' - 'access'"),"content"]],where:l.length>0?{id:l}:void 0,order:[literal("(content->>'order')::integer ASC NULLS LAST")]});if(l.length===0||d.length===l.length)return d.map(g=>g.toJSON());let m=d.map(g=>g.id),u=l.filter(g=>!m.includes(g));throw new ha$1(404,`Datasource(id=[${u}]) does not exist.`)}catch(l){throw new ha$1(500,l)}}async function a(s){let{id:n,...l}=s,c=await r.findByPk(n,{rejectOnEmpty:true});return await c.update(l),c.toJSON()}async function i(s){return await(await r.findByPk(s,{rejectOnEmpty:true})).destroy(),{id:s}}}var{locales:Sn}=a();function eo(e){let{report:r,search:t}=e;return {createReport:o,readReport:a,updateReport:i,deleteReport:s};async function o(n){return (await r.create({name:n.name,sections:[],dimensions:[]},{include:Tt(t).include})).toJSON()}async function a({id:n,include:l,locales:c=Sn}={}){let m=(n==null?[]:[].concat(n)).reduce((f,b)=>(f.includes(b)||f.push(b),f),[]),u=await r.findAll({where:m.length>0?{id:m}:void 0,include:l?Tt(t).include?.filter(f=>typeof l=="string"?f.association===l:l):void 0});if(m.length===0||u.length===m.length)return u.map(f=>{let b=f.toJSON();return {...b,sections:b.sections.map(w=>({...w,blocks:w.blocks.map(x=>({...x,contentByLocale:Object.keys(x.contentByLocale).reduce((v,M)=>({...v,...[...c,"logic"].includes(M)?{[M]:x.contentByLocale[M]}:{}}),{})}))}))}});let g=u.map(f=>f.id),p=m.filter(f=>!g.includes(f));throw new ha$1(404,`Report(id=${p}) does not exist.`)}async function i(n){let{id:l,dimensions:c,sections:d,...m}=n,u=await r.findByPk(l,{include:Tt(t).include,rejectOnEmpty:false});if(!u)throw new ha$1(404,`Report(id=${l}) does not exist.`);return u.set(m),await u.save(),await u.reload(),u.toJSON()}async function s(n){return await(await r.findByPk(n,{rejectOnEmpty:false})).destroy(),{id:n}}}function to(e){let{section:r}=e;return {createSection:t,readSection:o,updateSection:a,deleteSection:i};async function t(s){return (await r.create({ordering:s.ordering,report_id:s.report_id,blocks:[]},{include:nt.include})).toJSON()}async function o({id:s,include:n}={}){let l=s==null?[]:[].concat(s),c=await r.findAll({where:l.length>0?{id:l}:void 0,include:n?nt.include:void 0});if(l.length===0||c.length===l.length)return c.map(u=>u.toJSON());let d=c.map(u=>u.id),m=l.filter(u=>!d.includes(u));throw new ha$1(404,`Section(id=${m}) does not exist.`)}async function a(s){let{id:n,blocks:l,...c}=s,d=await r.findByPk(n,{include:nt.include,rejectOnEmpty:false});return d.set(c),await d.save(),await d.reload(),d.toJSON()}async function i(s){let n=await r.findByPk(s,{rejectOnEmpty:true});return await n.destroy(),{id:s,parentType:"report",parentId:n.report_id}}}function ao(e,r){let{variant:t,search:o}=e;return {createVariant:a,readVariant:i,updateVariant:s,deleteVariant:n,validateVariantSlug:l};async function a(c){let{dimension_id:d,name:m,slug:u}=c,g=await l({dimension:d,slug:u});return (await t.create({dimension_id:d,name:m,slug:g.valid?g.candidate:g.suggestion})).toJSON()}async function i({id:c}={}){let d=c==null?[]:[].concat(c),m=await t.findAll({where:d.length>0?{id:d}:void 0,attributes:{include:[[fn("COUNT",col("members.id")),"members_count"]]},include:[{model:o,attributes:[],as:"members"}],group:["variant.id"]});if(d.length===0||m.length===d.length)return m.map(p=>p.toJSON());let u=m.map(p=>p.id),g=d.filter(p=>!u.includes(p));throw new ha$1(404,`Variant(id=${g}) does not exist.`)}async function s(c){let{id:d,...m}=c,u=await t.findByPk(d,{include:[{association:"dimension"}],rejectOnEmpty:true});m.settings=g$2(m.settings);let g=m.settings.doIngest;return m.settings.doIngest=false,await u.update(m),g&&(await r.ingestMembers(u),await Ee(e,true)),await u.reload(),u.toJSON()}async function n(c){let d=await t.findByPk(c,{rejectOnEmpty:true});return await d.destroy(),Ee(e,true),{id:c,parentType:"dimension",parentId:d.dimension_id}}async function l({dimension:c,slug:d}){let m=await t.findAll({attributes:["slug",[fn("COUNT",col("id")),"slugCount"]],where:{dimension_id:{[Op.ne]:c}},group:"slug"}).then(f=>Object.fromEntries(f.map(b=>{let w=b.getDataValue("slugCount");return [b.slug,Number.parseInt(`${w}`,10)]}))),u=d,g=1,p=true;for(;m[u];)p=false,u=`${d}-${g}`,g++;return {candidate:d,dimension_id:c,suggestion:u,valid:p}}}function no(e){let r={...Wr(e),...Yr(e),...Qr(e),...Xr(e),...Hr(e),...eo(e),...to(e)},t={...r,...ao(e,r)};return {createFormatter:ia$1(t.createFormatter),deleteFormatter:ia$1(t.deleteFormatter),readFormatter:ia$1(t.readFormatter),updateFormatter:ia$1(t.updateFormatter),createReport:ia$1(t.createReport),deleteReport:ia$1(t.deleteReport),readReport:ia$1(t.readReport),updateReport:ia$1(t.updateReport),createDimension:ia$1(t.createDimension),deleteDimension:ia$1(t.deleteDimension),readDimension:ia$1(t.readDimension),updateDimension:ia$1(t.updateDimension),createVariant:ia$1(t.createVariant),readVariant:ia$1(t.readVariant),updateVariant:ia$1(t.updateVariant),deleteVariant:ia$1(t.deleteVariant),validateVariantSlug:ia$1(t.validateVariantSlug),createSection:ia$1(t.createSection),readSection:ia$1(t.readSection),updateSection:ia$1(t.updateSection),deleteSection:ia$1(t.deleteSection),createBlock:ia$1(t.createBlock),deleteBlock:ia$1(t.deleteBlock),readBlock:ia$1(t.readBlock),updateBlock:ia$1(t.updateBlock),createBulkBlock:ia$1(t.createBulkBlock),updateBulkBlock:ia$1(t.updateBulkBlock),readMember:ia$1(t.readMember),searchMember:ia$1(t.searchMember),updateMember:ia$1(t.updateMember),readMemberImage:ia$1(t.readMemberImage),createDatasource:ia$1(t.createDatasource),deleteDatasource:ia$1(t.deleteDatasource),readDatasource:ia$1(t.readDatasource),updateDatasource:ia$1(t.updateDatasource)}}var so=e=>{throw console.error("/methods/helpers/uploadImage.ts:",e),new Error(e.message)},Pn=Number(process.env.NEXT_PUBLIC_IMAGE_SPLASH_WIDTH)||1400,In=Number(process.env.NEXT_PUBLIC_IMAGE_THUMB_WIDTH)||400,vn=async(e,r,t)=>{let o=[{type:"splash",res:Pn},{type:"thumb",res:In}];for(let a of o){let i=await An(t).resize(a.res).toFormat("webp").webp({lossless:true}).toBuffer().catch(so);await e.image.update({[a.type]:i},{where:{id:r}}).catch(so);}},te=vn;var io=["4","5","7","8","9","10"],Bn=io.join(),{locales:xn}=a(),me;if(process.env.FLICKR_API_KEY)try{me=new kn(process.env.FLICKR_API_KEY);}catch(e){throw console.error("Flickr ERROR:",e),new Error(e.message)}async function co(e,r){try{let t={prompt:r.prompt||"",page:r.page||1};if(!me)throw console.warn("Flickr is not initialized. Check the credentials"),new Error("Flickr is not initialized. Check the credentials");let o=t.prompt,i=(await me.photos.search({text:o,license:Bn,sort:"relevance",per_page:24,page:t.page,content_types:"0",orientation:"landscape"}).then(c=>c.body)).photos.photo,s=i.reduce((c,d)=>c.concat(me.photos.getSizes({photo_id:d.id})),[]),l=(await Promise.all(s).then(c=>c)).reduce((c,d,m)=>{let u=d.body.sizes.size.find(g=>g.label==="Small 320");return u&&c.push({id:i[m].id,source:u.source}),c},[]);return {meta:{prompt:g$1(t.prompt),page:g$1(`${t.page}`)},results:l}}catch(t){throw console.error(t),new Error("Error in search flickr provider")}}async function lo(e,r){try{let{content_id:t,image_id:o}=r,a={content_id:g$1(`${t}`)||"",id:g$1(`${o}`)||""},s=`https://flic.kr/p/${En.int_to_base58(o)}`;if(!me)throw new Error("Flickr API Key not configured");let n=await me.photos.getInfo({photo_id:o}).then(c=>c.body),l;if(n)if(io.includes(n.photo.license)){let c=await e.search.findOne({where:{content_id:t}}),d=await e.image.findOne({where:{url:s}});if(c){if(d)await e.search.update({image_id:d.id},{where:{content_id:t}});else {let u=await me.photos.getSizes({photo_id:o}).then(P=>P.body),g=u.sizes.size.find(P=>parseInt(P.width,10)>=1600);if(g||(g=u.sizes.size.find(P=>parseInt(P.width,10)>=1e3)),g||(g=u.sizes.size.find(P=>parseInt(P.width,10)>=500)),!g||!g.source)throw new Error("Flickr Source Error, try another image.");let p=await fetch(g.source);if(!p.ok)throw new Error("Flickr Error retrieving image, try another image.");let f=await p.arrayBuffer(),w=(await me.photos.licenses.getInfo().then(P=>P.body.licenses.license)).find(P=>P.id===parseInt(n.photo.license,10)),x={url:s,author:n.photo.owner.realname||n.photo.owner.username,license:w?`${w.name}: ${w.url}`:""},v=await e.image.create(x);await e.image_content.destroy({where:{id:v.id}});let M=xn.map(P=>({id:v.id,locale:P,meta:n.photo.title._content}));await e.image_content.bulkCreate(M),await e.search.update({image_id:v.id},{where:{content_id:t}}),await te(e,v.id,f);}let m=await e.search.findOne({where:{content_id:t},include:Z});m&&m.image&&(m.image.thumb=!!m.image.thumb);}else throw new Error("Error updating Search")}else throw new Error("Bad License");else throw new Error("Malformed URL");return {meta:{...a},results:l}}catch(t){throw console.error(t),new Error("Error in save flickr provider")}}async function mo(e,r){let t=We(e),o=f$1({query:r.prompt,limit:"50",visible:"false"}),i=(await t(o)).results.filter(s=>s.image_id).map(s=>({id:s.image_id,source:`/api/cms/member/image?member=${s.content_id}&size=thumb`}));return {meta:{prompt:g$1(o.query)},results:i}}async function po(e,r){let{search:t}=e,{content_id:o,image_id:a}=r;await t.update({image_id:a},{where:{content_id:o}});let i=await t.findOne({where:{content_id:o},include:Z}).then(s=>s?{...s.toJSON(),image:{...s.image.toJSON(),thumb:!!s.image.thumb}}:null);return {meta:{id:a,content_id:o},results:i}}var{locales:Mn}=a(),st;if(process.env.UNSPLASH_API_KEY)try{st=createApi({accessKey:process.env.UNSPLASH_API_KEY});}catch(e){throw console.error("Unsplash error:",e),new Error(e.message)}async function uo(e,r){try{let t={prompt:r.prompt||"",page:r.page||1};if(!st)throw new Error("Unsplash API Key not configured");let o=t.prompt,i=(await st.search.getPhotos({query:o,perPage:24,page:t.page,orientation:"landscape"}).then(s=>s.response.results)).map(s=>({id:s.id,source:s.urls.thumb}));return {meta:{prompt:g$1(t.prompt),page:g$1(`${t.page}`)},results:i}}catch(t){throw console.error(t),new Error("Error in search unsplash provider")}}async function fo(e,r){try{let{content_id:t,image_id:o}=r,a={content_id:g$1(`${t}`)||"",id:g$1(`${o}`)||""};if(!st)throw console.warn("Unsplash is not initialized. Check the credentials"),new Error("Unsplash is not initialized. Check the credentials");let i=await st.photos.get({photoId:o}).then(n=>n.response),s;if(i){let n=await e.search.findOne({where:{content_id:t}}),l=i.links.html,c=await e.image.findOne({where:{url:l}});if(n){if(c)await e.search.update({image_id:c.id},{where:{content_id:t}});else {let m=await tr.get(i.urls.full,{responseType:"arraybuffer"}).then(f=>f.data),u={url:l,author:i.user.name||i.user.username,license:"Free Unsplash license: https://unsplash.com/license"},g=await e.image.create(u);await e.image_content.destroy({where:{id:g.id}});let p=Mn.map(f=>({id:g.id,locale:f,meta:i.description||i.alt_description}));await e.image_content.bulkCreate(p),await e.search.update({image_id:g.id},{where:{content_id:t}}),await te(e,g.id,m);}let d=await e.search.findOne({where:{content_id:t},include:Z});d&&d.image&&(d.image.thumb=!!d.image.thumb);}else throw new Error("Error updating Search")}else throw new Error("Malformed URL");return {meta:{...a},results:s}}catch(t){throw console.error(t),new Error("Error in save unsplash provider")}}var{locales:Nn}=a();async function go(e,r){try{let{content_id:t,image_source:o,files:a}=r,i={content_id:g$1(`${t}`)||""};if(await e.search.findOne({where:{content_id:t}})&&a){let l=await Tn.readFileSync(a.file.filepath),c={url:o,author:"",license:""},d=await e.image.create(c);await e.image_content.destroy({where:{id:d.id}});let m=Nn.map(u=>({id:d.id,locale:u,meta:""}));await e.image_content.bulkCreate(m),await e.search.update({image_id:d.id},{where:{content_id:t}}),await te(e,d.id,l);}let n=await e.search.findOne({where:{content_id:t},include:Z});return n&&n.image&&(n.image.thumb=!!n.image.thumb),{meta:{...i},results:n}}catch(t){throw console.error(t),new Error("Error in save upload provider")}}var{locales:On}=a();var ho=async e=>{let r={"x-api-key":process.env.ADOBE_STOCK_API_KEY||"EMPTY_ADOBE_KEY","X-Product":"BespokeApp/0.1"};return r};var it;if(process.env.ADOBE_STOCK_API_KEY)try{it={search:async(e,r)=>await tr.get("https://stock.adobe.io/Rest/Media/1/Search/Files",{headers:await ho(!1),params:{locale:"en_US","search_parameters[limit]":24,"search_parameters[offset]":r*24,"search_parameters[words]":e,"search_parameters[filters][content_type:photo]":"1","search_parameters[filters][content_type:image]":"1","search_parameters[filters][orientation]":"horizontal",result_columns:["id","stock_id","thumbnail_url","is_licensed"]}}).then(t=>t.data.files),get:async e=>await tr.get("https://stock.adobe.io/Rest/Media/1/Files",{headers:await ho(!1),params:{locale:"en_US",ids:e,result_columns:["id","thumbnail_url","creator_name","title","thumbnail_1000_url","details_url","category"]}}).then(r=>r.data.files[0])};}catch{}async function yo(e,r){try{let t={prompt:r.prompt||"",page:r.page||1};if(!it)throw new Error("Adobe API Key not configured");let a=(await it.search(t.prompt,t.page)).map(i=>({id:i.id,source:i.thumbnail_url}));return {meta:{prompt:g$1(t.prompt),page:g$1(`${t.page}`)},results:a}}catch(t){throw console.error(t),new Error("Error in search Adobe provider")}}async function bo(e,r){try{let{content_id:t,image_id:o}=r,a={content_id:g$1(`${t}`)||"",id:g$1(`${o}`)||""};if(!it)throw console.warn("Adobe is not initialized. Check the credentials"),new Error("Adobe is not initialized. Check the credentials");let i=await it.get(o),s;if(i){let n=await e.search.findOne({where:{content_id:t}}),l=i.details_url,c=await e.image.findOne({where:{url:l}});if(n){if(c)await e.search.update({image_id:c.id},{where:{content_id:t}});else {let m=await tr.get(i.thumbnail_1000_url,{responseType:"arraybuffer"}).then(f=>f.data),u={url:l,author:i.creator_name,license:"ADOBE, TO-DO"},g=await e.image.create(u);await e.image_content.destroy({where:{id:g.id}});let p=On.map(f=>({id:g.id,locale:f,meta:i.title||i.description}));await e.image_content.bulkCreate(p),await e.search.update({image_id:g.id},{where:{content_id:t}}),await te(e,g.id,m);}let d=await e.search.findOne({where:{content_id:t},include:Z});d&&d.image&&(d.image.thumb=!!d.image.thumb);}else throw new Error("Error updating Search")}else throw new Error("Malformed URL");return {meta:{...a},results:s}}catch(t){throw console.error(t),new Error("Error in save adobe provider")}}var{locales:Ln}=a(),Nt=process.env.PIXABAY_API_KEY,Ro="https://pixabay.com/api/";async function wo(e,r){try{let t={prompt:r.prompt||"",page:r.page||1};if(!Nt)throw new Error("Pixabay API Key not configured");let o=encodeURIComponent(t.prompt),a=`${Ro}?key=${Nt}&q=${o}&per_page=${24}&page=${t.page}&image_type=photo&orientation=horizontal&safesearch=true`,n=(await tr.get(a)).data.hits?.map(l=>({id:l.id,source:l.previewURL||l.webformatURL}))||[];return {meta:{prompt:g$1(t.prompt),page:g$1(`${t.page}`)},results:n}}catch(t){throw console.error(t),new Error("Error in search pixabay provider")}}async function So(e,r){try{let{content_id:t,image_id:o}=r,a={content_id:g$1(`${t}`)||"",id:g$1(`${o}`)||""};if(!Nt)throw console.warn("Pixabay is not initialized. Check the credentials"),new Error("Pixabay is not initialized. Check the credentials");let i=`${Ro}?key=${Nt}&id=${o}`,n=(await tr.get(i)).data,l;if(n.hits&&n.hits.length>0){let c=n.hits[0],d=await e.search.findOne({where:{content_id:t}}),m=c.pageURL,u=await e.image.findOne({where:{url:m}});if(d){if(u)await e.search.update({image_id:u.id},{where:{content_id:t}});else {let p=c.largeImageURL||c.webformatURL||c.imageURL;if(!p)throw new Error("Pixabay image URL not available");let f=await tr.get(p,{responseType:"arraybuffer"}).then(v=>v.data),b={url:m,author:c.user||`Pixabay User ${c.user_id}`,license:"Free Pixabay License: https://pixabay.com/service/license/"},w=await e.image.create(b);await e.image_content.destroy({where:{id:w.id}});let x=Ln.map(v=>({id:w.id,locale:v,meta:c.tags||c.description||""}));await e.image_content.bulkCreate(x),await e.search.update({image_id:w.id},{where:{content_id:t}}),await te(e,w.id,f);}let g=await e.search.findOne({where:{content_id:t},include:Z});g&&g.image&&(g.image.thumb=!!g.image.thumb);}else throw new Error("Error updating Search")}else throw new Error("Image not found in Pixabay");return {meta:{...a},results:l}}catch(t){throw console.error(t),new Error("Error in save pixabay provider")}}var Un={local:po,flickr:lo,unsplash:fo,upload:go,adobe:bo,pixabay:So};function Be(e,r){let t=Un[r];if(!t)throw new ha$1(500,`Wrong provider dbImageSaveFactory.ts: ${r}`);return ia$1(o=>t(e,o))}var Fn={local:mo,flickr:co,unsplash:uo,adobe:yo,pixabay:wo};function Ye(e,r){let t=Fn[r];if(!t)throw new ha$1(500,`Wrong provider dbImageSearchFactory.ts: ${r}`);return ia$1(o=>t(e,o))}var jn=e=>(e.dimensions&&e.dimensions.forEach(r=>{r.variants&&r.variants.forEach(t=>{t.members_count&&(t.members_count=parseInt(t.members_count,10));});}),e);function Lt(e){let{report:r,search:t}=e;return o;async function o(a){let i=a?.report_id?Number(a.report_id):void 0,s=!(typeof a?.count<"u"&&(a.count==="false"||a.count===false)),n={attributes:["id","name",[literal("COALESCE(NULLIF(settings ->> 'order', '')::INTEGER, 0)"),"ordering"],[literal("COALESCE(NULLIF(settings ->> 'hide', '')::BOOL, false)"),"hide"]],where:{[Op.or]:[where(cast(json("settings.hide"),"boolean"),false),literal("NOT (settings::jsonb ? 'hide')")]},order:[["ordering","ASC"]],include:[{attributes:["id","name","ordering"],association:"dimensions",separate:true,order:[["ordering","ASC"]],include:[{attributes:["id","name","slug",[literal("COALESCE(NULLIF(settings ->> 'order', '')::INTEGER, 0)"),"ordering"]],association:"variants",separate:true,group:["variant.id"],order:[["ordering","ASC"]]}]}]};return i&&(n.where={...n.where,id:i}),s&&n.include&&n.include[0]&&(n.include[0].include[0].attributes.push([fn("COUNT",col("members.id")),"members_count"]),n.include[0].include[0].include=[{model:t,attributes:[],as:"members",where:{visible:true}}]),{data:(await r.findAll(n)).map(c=>({...jn(c.toJSON()),mode:c.dimensions.length===1?w.UNILATERAL:w.MULTILATERAL}))}}}function _o(e){return async()=>(await Ee(e,true),{error:false})}var{locales:Jn,localeDefault:Hn}=a(),Wn=(e,r)=>{if(!e)return [];let t=[];return r.forEach(o=>{let a=e.filter(i=>i.metadata.report.id===o.id);if(a.length>0)if(o.mode===w.UNILATERAL){let i=o.dimensions[0];i.variants.forEach(s=>{let n=a.filter(l=>l.metadata.dimension.id===i.id&&l.metadata.variant.id===s.id);n.length>0&&(t=t.concat(n.map(l=>({path:`/${s.slug}/${l.slug}`,name:l.name,confidence:l.confidence,report:{id:o.id,name:o.name,mode:o.mode},members:[l],id:`r-${o.id}-${[l].map(c=>`${c.id}`).join("-")}`}))));});}else o.mode,w.MULTILATERAL;}),t},Yn=(e,r)=>{if(!e)return [];let t,o,a;return e.map(i=>(t={...r.find(s=>s.id===i.report_id)},o={...t.dimensions.find(s=>s.id===i.dimension_id)},a={...o.variants.find(s=>s.id===i.variant_id)},delete t.dimensions,delete o.variants,{name:i.name,confidence:i.zvalue,metadata:{id:i.id,slug:i.slug,report:t,dimension:o,variant:a},id:i.content_id,slug:i.slug}))};function Ao(e){let r=We(e),t=Lt(e);return o;async function o(a){let i=a.format||"results",s=Jn.includes(a.locale)?a.locale:Hn,n=a.origin||"flexsearch",l=process.env.REPORTS_EXTERNAL_SEARCH&&n==="typesense",c=await r({...a,format:"plain",locale:g$1(s),visible:true});if(l)return c;{let d=c.results?c.results:[],u=(await t()).data,g=Yn(d,u);return {meta:{...c.meta,origin:"flexsearch",format:i},results:Wn(g,u)}}}}function Po(e){return async r=>{try{let{variantPaths:t}=r,o=[];if(t)for(let a=0;a<t.length;a++){let i=t[a];(await e.search.findAll({attributes:["slug"],where:{variant_id:i.variantId}})).forEach(n=>{o.push(`/${i.prefix}/${i.variantSlug}/${n.slug}`);});}return {...r,paths:o,revalidated:0,samples:[]}}catch(t){throw new ha$1(t.response?.status||500,t.message)}}}function Io(){return async e=>{try{let{target:r}=e;return {target:r}}catch(r){throw new ha$1(r.response?.status||500,r.message)}}}function X(e,r){let t=[],o=i=>Object.values(r).reduce((n,l)=>("inputs"in l&&l.inputs.includes(i)&&(n.push(l.id),n=n.concat(o(l.id))),n),[]);e.forEach(i=>{t=t.concat(o(i));});let a=[];return t.forEach(i=>{a.includes(i)||a.push(i);}),a}function Zn(e,r){return e.some(t=>r.includes(`role.${t}`))}function vo(e){let{report:r}=e;return t;async function t(o){let a=await r.findByPk(o.report_id,{include:{association:"sections",separate:true,where:{id:o.section_id},include:[{association:"blocks",separate:true,include:[{association:"contentByLocale",separate:true,where:{locale:{[Op.or]:[o.locale,"logic"]}}},{association:"inputs"},{association:"consumers"}]}]}}).then(s=>s&&s.sections&&Array.isArray(s.sections)?s.sections.reduce((n,l)=>{let c=l.blocks.map(d=>{let m=d.toJSON();return m.inputs=m.inputs.map(u=>u.id),m.consumers=m.consumers.map(u=>u.id),m});return n.concat(c)},[]):[]),i=a.filter(s=>s.settings&&s.settings.access&&Array.isArray(s.settings.access)&&Array.isArray(o.roles)&&(s.settings.access.includes("private")||Zn(o.roles,s.settings.access))).map(s=>s.id);return i=i.concat(X(i,a)),{params:{...o},data:a.filter(s=>i.includes(s.id))}}}var ts=Object.keys(or).filter(e=>e.indexOf("Icon")===0);async function Eo(){return {meta:{provider:"tabler"},results:ts}}async function ko(e){let r=or[e.name]?or[e.name]:()=>"";return renderToString(createElement(r))}var rs={tabler:Eo};function Bo(e){let r=rs[e];if(!r)throw new ha$1(500,`Wrong provider dbListIconsFactory.ts: ${e}`);return ia$1(()=>r())}var os={tabler:ko};function xo(e){return ia$1(r=>{let t=os[e];if(!t)throw new ha$1(500,`Wrong provider dbReadIconFactory.ts: ${r.provider}`);return t({name:r.name,provider:e})})}function Co(){return e;async function e(){return {secrets:Y()}}}function xe(e,r,t){return Ie().then(o=>{Object.assign(t,Qe(o));})}function Qe(e,r){let t={},o=ye(r||{providers:[]});return r&&o.actions&&o.source==="custom"?(t.searchRole=ia$1(o.actions.searchRole()),t.searchUser=ia$1(o.actions.searchUser()),t.readUser=ia$1(o.actions.readUser()),t.updateUser=ia$1(o.actions.updateUser())):o.source==="auth0"&&(t.searchRole=ia$1(Rr()),t.searchUser=ia$1(wr()),t.readUser=ia$1(Sr()),t.updateUser=ia$1(_r())),{...no(e),searchReport:ia$1(Ao(e)),readMetadata:ia$1(Lt(e)),regenerateSearch:ia$1(_o(e)),imageFlickrSearch:Ye(e,"flickr"),imageLocalSearch:Ye(e,"local"),imageUnsplashSearch:Ye(e,"unsplash"),imageAdobeSearch:Ye(e,"adobe"),imagePixabaySearch:Ye(e,"pixabay"),imageFlickrSave:Be(e,"flickr"),imageLocalSave:Be(e,"local"),imageUnsplashSave:Be(e,"unsplash"),imageUploadSave:Be(e,"upload"),imageAdobeSave:Be(e,"adobe"),imagePixabaySave:Be(e,"pixabay"),urlProxy:Ct(e),searchRole:t.searchRole,searchUser:t.searchUser,readUser:t.readUser,updateUser:t.updateUser,updateMyData:ia$1(Ar()),revalidateReport:ia$1(Po(e)),revalidateUrl:ia$1(Io()),readPrivateBlocks:ia$1(vo(e)),listTablerIcons:Bo("tabler"),readTablerIcon:xo("tabler"),readEnvSecrets:ia$1(Co())}}async function ar(e){try{let r=new as.IncomingForm,t=await new Promise((o,a)=>{r.parse(e,(i,s,n)=>{if(i){console.error("Error in formidable parse function inside internal parseBody.ts",i),a(i);return}o({fields:s,files:n});});});return {...t.fields,files:t.files}}catch(r){return {error:r}}}function ue(e,r){let t=ja(e,"create",r),o=ja(e,"read",r),a=ja(e,"update",r),i=ja(e,"delete",r),s=ja(e,"updateBulk",r),n=ja(e,"createBulk",r);return [a$2("POST",`create/bulk/${r}`,l=>{let{body:c}=l,{files:d,...m}=c,u=Object.keys(m).map(g=>m[g]);return n(u)},[a$1.EDITOR]),a$2("POST",`create/${r}`,l=>{let{body:c}=l;return t(c)},[a$1.EDITOR]),a$2("GET",`read/${r}`,l=>{let c=l.query,d=c$1(c.id).map(b$2);return o({id:d,include:ha(c.include)})}),a$2("POST",`update/${r}`,l=>{let{body:c}=l;return a(c)},[a$1.EDITOR]),a$2("POST",`update/bulk/${r}`,l=>{let{body:c}=l,{files:d,...m}=c,u=Object.keys(m).map(g=>m[g]);return s(u)},[a$1.EDITOR]),a$2("DELETE",`delete/${r}`,l=>{let c=b$2(l.query.id);return i(c)},[a$1.EDITOR])]}function Do(e){let{validateVariantSlug:r}=e;return [...ue(e,"variant"),a$2("GET","validate/variant",t=>{let o=t.query,a=b$2(o.dimension);return r({dimension:a,slug:i(o.slug)})},[a$1.EDITOR])]}function Mo(e){return ue(e,"datasource").map(t=>({...t,roleRequired:[a$1.EDITOR]}))}function Ce(e,r){let t=`image${ka$1(r)}Save`,o=e[t];return a$2("POST",`images/save/${r}`,a=>{let i=a.body;if(!i.content_id)throw new ha$1(400,"Missing 'content_id' parameter.");if(!i.image_id)throw new ha$1(400,"Missing 'image_id' parameter.");return o(i)},[a$1.EDITOR])}function Ze(e,r){let t=`image${ka$1(r)}Search`,o=e[t];return a$2("GET",`images/search/${r}`,async a=>{let i=c$1(a.query.prompt)[0];if(!i)throw new ha$1(400,"Empty 'prompt' param.");return o({prompt:i,page:b$2(a.query.page)})},[a$1.EDITOR])}function To(e){let{readMetadata:r}=e;return a$2("GET","read/metadata",t=>r(t.query))}function No(e){let{regenerateSearch:r}=e;return a$2("POST","search/regenerate",()=>r(void 0),[a$1.EDITOR])}function Oo(e){let{searchReport:r}=e;return a$2("GET","search/reports",t=>{let o=ss(t.query);return r(o)})}function ss(e){return {...f$1(e),format:c$1(e.format)[0]}}function Lo(e){let{urlProxy:r}=e;return a$2("GET","url/proxy",(t,o,a)=>{let{url:i,method:s="GET",wrapper:n="true"}=t.query;if(!i)throw new ha$1(400,"Missing URL parameter");let l=[];return a&&a.user&&a.user.bespoke_roles&&(l=a.user.bespoke_roles),r({url:Array.isArray(i)?i.join(","):i,method:c$1(s)[0]==="POST"?"POST":"GET",user_roles:l,wrapper:n!=="false",session:a})})}function Uo(e){let{readMetadata:r,revalidateReport:t}=e;return a$2("GET","revalidate/report",async(o,a)=>{let{reportId:i,profilePrefix:s}=o.query;if(!i||!s)throw new ha$1(400,"Missing URL parameter in revalidate factory: reportId or profilePrefix");try{let n=parseInt(`${i}`,10),l=`${s}`.split("/").filter(p=>p!=="").join("/"),c=[],d=await r({}).then(p=>p.ok?p.data.data.find(f=>f.id===n):[]);d&&d.mode===w.UNILATERAL&&d.dimensions.forEach(p=>{p.variants.forEach(f=>{c.push({prefix:l,variantId:f.id,variantSlug:f.slug});});});let m=await t({profilePrefix:l,reportId:n,variantPaths:c}),u=[],g=0;return m.ok&&(g=m.data.paths.length,u=m.data.paths.slice(0,5),Promise.all(m.data.paths.map(p=>{let f;try{f=a.revalidate(p,{unstable_onlyGenerated:!0});}catch(b){console.error("error",p,b);}return f}))),{ok:!0,status:200,data:{reportId:i,revalidated:g,samples:u}}}catch(n){throw console.error(n),new ha$1(500,"Error revalidating")}},[a$1.EDITOR])}function Fo(){return a$2("GET","revalidate/url",async(e,r)=>{let{target:t}=e.query;if(t)try{return r.revalidate(t,{unstable_onlyGenerated:!0}),{ok:!0,status:200,data:{target:t}}}catch(o){throw console.error(o),new ha$1(500,"Error revalidating")}else throw new ha$1(400,"Missing target parameter in revalidate factory")},[a$1.ADMIN,a$1.EDITOR,a$1.WRITER])}function De(e=process.env){let r=e.BESPOKE_JWT_SECRET;return r||(console.warn("WARNING: Using default BESPOKE_JWT_SECRET. This is insecure and not recommended for production environments."),"BESPOKE_JWT_SECRET")}var{localeDefault:cs}=a(),zo=De();function Go(e){let{readPrivateBlocks:r}=e;return a$2("POST","read/blocks/private",(t,o,a)=>{let{userToken:i}=t.body,s=null;if(i&&zo)try{let c=is.verify(i,zo);s=typeof c=="object"&&c!==null&&"roles"in c?c.roles:[];}catch(c){console.error("Failed to verify user token:",c);}if(!s&&(!a||!a.user))throw new ha$1(401,"Unauthorized. Must be logged in or provide a valid token.");let n=i&&s?s:a&&a.user?a.user.bespoke_roles:[],l={report_id:parseInt(t.body.report_id,10),locale:t.body.locale||cs,roles:n,section_id:t.body.section_id||[]};return r(l)})}function Vo(e){let{readEnvSecrets:r}=e;return a$2("GET","read/secrets",()=>r({}),[a$1.EDITOR])}function Ko(e){let{searchRole:r}=e;return a$2("GET","auth/search/roles",(t,o)=>r(""),[a$1.EDITOR,a$1.ADMIN])}function qo(e){let{searchUser:r}=e;return a$2("GET","auth/search/users",t=>r({query:t.query.query,role_id:t.query.role_id,page:t.query.page||0}),[a$1.ADMIN])}function $o(e){let{readUser:r}=e;return a$2("GET","auth/read/user",t=>r(t.query.user_id),[a$1.ADMIN])}function jo(e){let{updateUser:r}=e;return a$2("POST","auth/update/user",async t=>{let o=t.body;return await r(o)},[a$1.ADMIN])}function Jo(e){let{updateUser:r,readUser:t}=e;return a$2("POST","auth/update/me",async(o,a,i)=>{let{report_id:s,user_metadata:n}=o.body,l={user_id:i.user.id,user_metadata:{}};try{let{user:c}=i;return i&&c&&s&&(c.bespoke_app_metadata&&c.bespoke_app_metadata.reports&&Array.isArray(c.bespoke_app_metadata.reports)?l.app_metadata={...c.bespoke_app_metadata}:l.app_metadata={reports:[]},l.app_metadata.reports.push({reportId:s})),n&&(l.user_metadata={...c.bespoke_app_metadata,...n}),await r(l),{ok:!0,status:200,wrapper:!0,data:{ok:!0,message:"User & session updated"}}}catch(c){return {ok:false,status:500,error:c.message}}},[])}async function ls(e){try{return "JVBERi0xLjcKJYGBgYEKCjYgMCBvYmoKPDwKL0ZpbHRlciAvRmxhdGVEZWNvZGUKL0xlbmd0aCAxMTYKPj4Kc3RyZWFtCnicHYqxCsJAEAX79xVbC+Lmbm/3DoKFeEcKG2F/QCSKYgol+P0mMkwxMG8cHEwrnzt2w/j6jvPjetkalyyZLReKTH5DEPITuv/aUWKKiz6hTywiGliTZWNtFkyWitr0qEWrWmBbq2ndkz/hG1THGT/eextGCmVuZHN0cmVhbQplbmRvYmoKCjcgMCBvYmoKPDwKL0ZpbHRlciAvRmxhdGVEZWNvZGUKL1R5cGUgL09ialN0bQovTiA1Ci9GaXJzdCAyNgovTGVuZ3RoIDM2Mgo+PgpzdHJlYW0KeJzVUt9LwzAQfs9fcY/6IEnTH2llDLa1VZChbIKi+JC1YVRGIm0m87/3ru0cexCfpXwkd/cl+a73BSBAQhRBCCqFCOJQQgwqCGAyYfzx68MAf9Bb0zF+19QdvCJHwAreGF+4vfUQsOmUnbgL7fXObdlwCAIiHxkPrav3lWlhUhZlKYQSQiQRIhFC5rguEBlCYow1meIeoaIRmFOhEOEMa+WARA1nqN5z4/F8gStyE+LkAzdKh/jnXXqrGO6Qf+nJpowvXZ1rb+Aiv5ZCRiKTsQyjTKYvl/g7WqO9+7/N9fobZ3/t8GzONF4acmvIA/2U+cp0bt9WOHbilQ4rtLk1u0/jm0pfKZGlqFOlGXpsNAZ/vt+8m6qnUlgc/M3ak4YhQbmlqRs9dwd0n8APOwDshDw4s9Z5cmXvR+tRDUXJ6NEzySSI8fV+4/uQkgHjc92ZXupJJ4qwlasbuwX+1NiZ7Zpjgm78BkHDxfcKZW5kc3RyZWFtCmVuZG9iagoKOCAwIG9iago8PAovU2l6ZSA5Ci9Sb290IDIgMCBSCi9JbmZvIDMgMCBSCi9GaWx0ZXIgL0ZsYXRlRGVjb2RlCi9UeXBlIC9YUmVmCi9MZW5ndGggNDEKL1cgWyAxIDIgMiBdCi9JbmRleCBbIDAgOSBdCj4+CnN0cmVhbQp4nBXEwQ0AIAwDsUuKxJf9JUZippb4YaDbbEhKTpWWOCDezxcGYeEDtQplbmRzdHJlYW0KZW5kb2JqCgpzdGFydHhyZWYKNjY5CiUlRU9G"}catch(r){throw console.error("Error generating PDF:",r),r}}function Ho(){return a$2("POST","pdf",async(e,r)=>{let{slugs:t,path:o}=e.body;if(!t||!o)throw new ha$1(400,"Missing path parameter in request.");{new URL(o,e.headers.origin);return {ok:true,status:200,data:await ls()}}})}function Wo(e,r){let t=`list${ka$1(r)}Icons`,o=e[t];return a$2("GET",`list/icons/${r}`,async()=>o({}),[a$1.EDITOR])}function Yo(e,r){let t=`read${ka$1(r)}Icon`,o=e[t];return a$2("GET",`read/icons/${r}/icon.svg`,async a=>o({provider:r,name:a.query.name}))}function Qo(){return a$2("GET","report",async(e,r)=>{let{report:t,prefix:o,locale:a}=e.query;if(!t)throw new ha$1(400,"Missing report parameter.");if(!o)throw new ha$1(400,"Missing report parameter.");if(!a)throw new ha$1(400,"Missing report parameter.");try{let s=await(await fetch(`${process.env.NEXT_PUBLIC_REPORTS_BASE_URL}/${a}${o}${t}`)).text(),c=new ds().parseFromString(s,"text/html").getElementById("__NEXT_DATA__")?.textContent,d=JSON.parse(c).props;return {ok:!0,status:200,data:{variables:d.pageProps.initialState.variables,status:d.pageProps.initialState.status}}}catch(i){throw console.error(i),new ha$1(500,"Couldn't find page cache")}})}var ps=De();function us(e){let r={email:e.user.email,name:e.user.name,roles:e.user.bespoke_roles||[]};return is.sign(r,ps,{expiresIn:"1min"})}function Zo(){return a$2("POST","users/generate-token",async(e,r,t)=>{if(!t||!t.user)throw new ha$1(401,"Unauthorized. Must be logged in to generate a token.");try{return {ok:!0,status:200,wrapper:!1,data:{token:us(t)}}}catch(o){throw console.error("Error generating token:",o),new ha$1(500,"Internal Server Error")}})}var gs=De(),hs=e=>!!is.verify(e,gs);function Xo(){return a$2("POST","users/validate-token",async(e,r)=>{let{token:t}=e.body;try{return hs(t)?{ok:!0,status:200,wrapper:!1,data:{success:!0}}:{ok:!1,status:401,error:"Invalid token"}}catch{return {ok:false,status:401,error:"Invalid token"}}})}var Rs=le();function nr(e,r){return `${e.toUpperCase()} ${r.toLowerCase()}`}function ws(e,r){let t=Qe(e,r);return Object.fromEntries([...ue(t,"block"),...ue(t,"dimension"),...ue(t,"formatter"),...ue(t,"report"),...ue(t,"section"),...Mo(t),...Do(t),...d(t),Oo(t),To(t),No(t),Ce(t,"flickr"),Ce(t,"local"),Ce(t,"unsplash"),Ce(t,"upload"),Ce(t,"adobe"),Ce(t,"pixabay"),Ze(t,"flickr"),Ze(t,"local"),Ze(t,"unsplash"),Ze(t,"adobe"),Ze(t,"pixabay"),Lo(t),Ko(t),qo(t),$o(t),jo(t),Jo(t),Uo(t),Fo(),Go(t),Ho(),Wo(t,"tabler"),Yo(t,"tabler"),Qo(),Vo(t),Zo(),Xo()].map(({handler:o,method:a,path:i,roleRequired:s})=>[nr(a,i),{handler:o,roleRequired:s}]))}function Ss(e){let r=Ie().then(t=>ws(t,e));return async function(o,a){await ys(o,a,{methods:["GET","HEAD","PUT","PATCH","POST","DELETE"],origin:"*"});let{query:i,method:s}=o,{path:n,...l}=i;if(n&&s){let c=await r.then(d=>{let m=[].concat(n).join("/"),u=nr(s,m);return d[u]});if(c){let d=await Q(o,a,e);if(c.roleRequired){if(!d)return a.status(401).json({error:"Unauthorized. Must be logged in."});let m=d&&d.user&&d.user.bespoke_roles&&Array.isArray(d.user.bespoke_roles)?d.user.bespoke_roles:[];if(Array.isArray(c.roleRequired)&&c.roleRequired.length>0&&!R(m,c.roleRequired))return a.status(402).json({error:"Forbidden. Not enough roles."})}if(c.handler)return ["POST","DELETE"].includes(s)&&(o.body=await ar(o)),Promise.resolve(o).then(m=>c.handler(m,a,d||void 0)).then(async m=>{if(m&&"error"in m)throw new ha$1(m.status,m.error);if(m.ok)if(m.data instanceof Buffer){let u=await bs(m.data),g=Buffer.byteLength(m.data);a.writeHead(m.status,{"Content-Type":u?u.mime:"image/jpeg","Content-Length":g.toString()}).send(m.data);}else o.url&&o.url.indexOf("/icon.svg?name=")>0?(a.setHeader("Content-Type","image/svg+xml"),a.status(m.status).send(m.data)):a.status(m.status).json(m.wrapper?{data:m.data}:m.data);}).catch(m=>{Rs&&console.error("Backend Error",m),a.status(m.code).json({error:m.message});})}}else n||await r.then(console.info);return a.status(404).json({error:"No matching route",path:n,query:l})}}var _s=e=>{let r=e;return async function(t,o){let a=await r({test:"pala"});return o.json(a)}},As=_s;function vs(e){let r=process.cwd(),t=Is.resolve(r.endsWith("/example")?r.replace("/example",""):r,"package-lock.json"),o;try{let a=JSON.parse(Tn.readFileSync(t,"utf-8"));o=a.dependencies&&a.dependencies[e]&&a.dependencies[e].version!=="file:packages/reports"?a.dependencies[e].version:"0.dev";}catch{o="0.vercel";}return o||"Version not found"}function Es(e){let r=()=>Promise.resolve({}),{pathSegmentsKey:t="bespoke",preResolve:o=r,postResolve:a=r,authOptions:i={providers:[]}}=e||{};return bb.getServerSideProps(s=>{let{dispatch:n}=s;return async l=>{let c=await Q(l.req,l.res,i);if(!c)return {redirect:{destination:"/api/auth/signin?callbackUrl=/cms",permanent:false}};let d=new Set([a$1.ADMIN,a$1.EDITOR,a$1.WRITER]);if(!(c?.user?.bespoke_roles||[]).some(w=>d.has(w)))return {redirect:{destination:"/",permanent:false}};let u=l.query[t],[g]=Array.isArray(u)?u:[u];await n(xe);let p=await vs("@datawheel/bespoke"),f=await o(s,l);if("redirect"in f)return {props:f};g==="reports"&&(ea(l.query[t])?await Promise.all([n(la$1("formatter",{})),n(la$1("datasource",{include:true})),n(la$1("report",{id:ea(l.query[t]),include:true})),fa$1.setStatus({isCMS:true})]):await Promise.all([n(la$1("report",{include:"dimensions"})),fa$1.setStatus({isCMS:true})])),g==="metadata"&&await n(la$1("report",{include:"dimensions"})),g==="formatters"&&await n(la$1("formatter",{})),g==="datasources"&&await n(la$1("datasource",{include:true}));let b=await a(s,l);return {props:{...f,...b,bespokeVersion:p,session:c}}}})}function ea(e){if(e==null||e==="")return;let[,r]=Array.isArray(e)?e:[e];return Number.parseInt(r)||void 0}var ks=async(e,r,t,o,a)=>{if(e.length===0)throw new Error("No slugs provided");let i=await r(t({mode:"slugs",locale:a,slugs:e,output:"full"})),s=i.results[0].report_id;if(i.results.length>1){if(i.results.every(p=>p.report_id===s)===false)throw new Error("Members belong to different reports");let c=i.results.map(p=>p.dimension_id),d=new Set(c);if(c.length!==d.size)throw new Error("Members belong to same dimensions");let m=i.results.sort((p,f)=>p.dimension_ordering>f.dimension_ordering?1:-1).reduce((p,f,b)=>(p[f.variant_slug]=b,p),{}),u=e.reduce((p,f,b)=>(p[f.variantSlug]=b,p),{});if(!(Object.keys(m).length===Object.keys(u).length&&Object.keys(m).every(p=>Object.prototype.hasOwnProperty.call(u,p)&&m[p]===u[p])))throw new Error("Variant slugs do not match the expected dimension order")}let l=(await r(o({report_id:s,count:false}))).data.find(c=>c.id===s);if(!l||i.results.length!==l.dimensions.length)throw new Error(`Missing members for report ID ${s}`);return i},Ut=ks;function Bs(e){let{fallback:r=true,limit:t=50}=e||{};return async o=>{let{defaultLocale:a=ea$1,locales:i=[]}=o,s=[];if(t>0){let n=i.find(d=>d===a),{searchMember:l}=await Ie().then(Qe),c=await l({query:"",limit:t,format:"plain",locale:n||ea$1,noImage:false,visible:true,report:[],dimension:[],variant:[],includes:true});c.ok===true&&(s=c.data.results.map(d=>({locale:i.find(m=>m===d.locale),params:{bespoke:[d.variant.slug,d.slug]}})));}return {fallback:r,paths:s}}}function xs(e$1){let{pathSegmentsKey:r="bespoke"}=e$1||{};try{return bb.getStaticProps(t=>{let{dispatch:o}=t;return async a=>{await o(xe);let i=new Date().toISOString(),{locale:s=ea$1,params:n={}}=a,l=Array.from(sr(n[r])),c$1;try{c$1=await Ut(l,o,ma$1,pa$1,s);}catch(E){return console.error("[Bespoke slug validation Failed]: Return 404:",E.message,`[${s}] -> /${l.map(U=>`${U.variantSlug}/${U.memberSlug}`).join("/")}`),{notFound:!0}}o(ta.setPreviews(c$1.results)),await Promise.all([o(la$1("formatter",{})),o(la$1("datasource",{include:!0})),o(la$1("report",{id:c$1.results.map(E=>E.report_id),include:!0,locales:[s]}))]);let d=t.getState(),m=e(d),u=f(d),g=k(m,s),p=c(d),f$1=b(d),b$1={...f$1},w={},x=Object.values(f$1).reduce((E,U)=>("access"in U.settings&&!["public","guest"].some(O=>!U.settings.access||U.settings.access.includes(O))&&E.push(U.id),E),[]),v=x.filter(E=>b$1[E].settings[C.FALLBACK]),M=Array.from(new Set([...v,...X(v,Object.values(b$1))])),P=x.filter(E=>[z.SELECTOR,z.MULTIHIERARCHY_SELECTOR].includes(b$1[E].type)),N=Array.from(new Set([...P,...X(P,Object.values(b$1))]));x=Array.from(new Set([...x,...M,...N,...X(x,Object.values(b$1))])),x.forEach(E=>{v.includes(E)?(w[E]={...b$1[E],type:z.FALLBACK,original_type:b$1[E].type},delete b$1[E]):P.includes(E)&&(w[E]={...b$1[E],settings:{...b$1[E].settings,[C.DISABLED]:!0}},delete b$1[E]),N.includes(E)||delete b$1[E];}),await o(qa(x.filter(E=>!N.includes(E)))),await o(ra(w));let L={...da$1(c$1.results),locale:s,...X$1()},$=async E=>await o(ma$1(E));return await aa({...b$1,...w},p,void 0,g,{locale:s,query:n,variables:L},void 0,$,"report",u,void 0).then(async E=>{let U=Object.keys({...b$1,...w}).reduce((O,k)=>(E.variables[k]&&E.status[k]||O.push(k),O),[]);await o(qa(U)),await o(ga$1.setVariableChange({...E,attributes:L})),await o(sa$1());}),{props:{buildTime:i}}}})}catch(t){console.error("ERROR SSR",t);}}function sr(e=[]){let r=[].concat(e),t=0;return {next(){return {value:{variantSlug:r[t++],memberSlug:r[t++]},done:t>r.length}},[Symbol.iterator](){return this}}}function Cs(e$1){let{pathSegmentsKey:r="bespoke"}=e$1||{};try{return bb.getServerSideProps(t=>{let{dispatch:o}=t;return async a=>{let{section:i,block:s}=a.query,n=Object.fromEntries(Object.entries(a.query).filter(([_])=>_.match(/selector\d+id/)));if(!i&&!s)return {notFound:!0};let l=Number(i);await o(xe);let c$1=new Date().toISOString(),{locale:d=ea$1,params:m={},req:u}=a,g=Array.from(sr(m[r])),p;try{p=await Ut(g,o,ma$1,pa$1,d);}catch(_){return console.error("[Bespoke slug validation Failed]: Return 404:",_.message,`/${d}/${u.url}`),{notFound:!0}}o(ta.setPreviews(p.results)),await Promise.all([o(la$1("formatter",{})),o(la$1("datasource",{include:!0})),o(la$1("report",{id:p.results.map(_=>_.report_id),include:!0,locales:[d]}))]);let f$1=t.getState(),b$1=e(f$1),w=f(f$1),x=k(b$1,d),v=c(f$1).filter(_=>_.id===l),M=b(f$1),P={...M},N={},L=Object.values(M).reduce((_,q)=>("access"in q.settings&&!["public","guest"].some(T=>!q.settings.access||q.settings.access.includes(T))&&_.push(q.id),_),[]),$=L.filter(_=>P[_].settings[C.FALLBACK]),E=Array.from(new Set([...$,...X($,Object.values(P))])),U=L.filter(_=>[z.SELECTOR,z.MULTIHIERARCHY_SELECTOR].includes(P[_].type)),O=Array.from(new Set([...U,...X(U,Object.values(P))]));L=Array.from(new Set([...L,...E,...O,...X(L,Object.values(P))])),L.forEach(_=>{$.includes(_)?(N[_]={...P[_],type:z.FALLBACK,original_type:P[_].type},delete P[_]):U.includes(_)&&(N[_]={...P[_],settings:{...P[_].settings,[C.DISABLED]:!0}},delete P[_]),O.includes(_)||delete P[_];}),await o(qa(L.filter(_=>!O.includes(_)))),await o(ra(N));let k$1={...da$1(p.results),locale:d,...X$1()},V=async _=>await o(ma$1(_));await aa({...P,...N},v,void 0,x,{locale:d,query:{...m,...n},variables:k$1},void 0,V,"section",w,void 0).then(async _=>{let q=Object.keys({...P,...N}).reduce((T,I)=>(_.variables[I]&&_.status[I]||T.push(I),T),[]);await Promise.all([o(qa(q)),o(ga$1.setVariableChange({..._,attributes:k$1})),o(sa$1())]);});let z$1=Object.keys({...P,...N}).filter(_=>i&&s?_!==s:P[_]&&P[_].section_id!==l);return await o(qa(z$1)),{props:{buildTime:c$1}}}})}catch(t){return console.error("ERROR SSR",t),async()=>({notFound:true})}}
30
- export{Cs as BespokeEmbedServerSideProps,Ss as BespokeEndpointNextJsHandlerFactory,Q as BespokeGetSession,ia as BespokeHandleAuth,Es as BespokeManagerServerSideProps,Bs as BespokeRendererStaticPaths,xs as BespokeRendererStaticProps,ga as BespokeSearchUsersByMetadata,la as BespokeUpdateCurrentUserAppMetadata,ma as BespokeUpdateCurrentUserMetadata,ua as BespokeWithApiRoleAuthRequired,As as ReportCrosswalkHandler,Qe as dbApiFactory,nr as endpointKey,Ie as getDB,xe as useDatabaseApi};
29
+ `)}return global.typesense};async function un(){try{if(He){let e=await tr.get(new URL(He).origin);if(e?.data["typesense-health"]===!0)return ue&&console.info(`${He} health check is OK. Version: ${e.data.Version}`),!0}else console.error("No envar set TYPESENSE_URL");return !1}catch(e){return console.error("Health check failed:",e.message),false}}async function fn(){if(ue&&console.info(`\u{1F3F3}\uFE0F INITIALIZING TYPESENSE SEARCH AGAINST ${He}`),!await un())throw new Error("TYPESENSE_URL service is not healthy.");let r=mn.map(t=>(ue&&console.info(`\u{1F3F3}\uFE0F INITIALIZING SEARCH ${t} LOCALE`),[t,{search:async(a={query:"*",limit:12,offset:0})=>{let i={locale:t,query:a.query,limit:a.limit,offset:a.offset};return a.report&&Array.isArray(a.report)&&a.report.length>0&&(i["report[]"]=a.report.join(",")),a.variant&&Array.isArray(a.variant)&&a.variant.length>0&&(i["variant[]"]=a.variant.join(",")),ue&&console.info("Typesense URL:",He,i),tr.get(He,{params:i}).then(n=>(ue&&(console.info("Typesense URL:",n.request.res.responseUrl),console.info("Typesense Results",n.data.data.results.length)),n.data.data)).catch(n=>(console.error("Typesense Call Error:",n),[]))}}]));return Object.fromEntries(await Promise.all(r))}var jr=pn;var{localeDefault:er}=a();function We(e){let{search:r,report:t}=e;return o;async function o(a){let i=a.origin||"flexsearch",s=process.env.REPORTS_EXTERNAL_SEARCH&&i==="typesense",{query:n,locale:l,preferredLocale:c,limit:d,format:m,visible:u,variant:f,dimension:p,report:g,all:h,noImage:_,includes:O,sort:B,direction:T="ASC",offset:P=0}=a,F=ot.find(E=>E.locales.includes(l))?.charset||"latin",z=d&&!isNaN(d)?d:20,q=ve(n,F!=="arabic");function K(E){return E.toJSON()}function w(E){let C=E.getContent(l);return {...E.toJSON(),locale:C.locale,name:C.name,attributes:C.attributes,keywords:C.keywords}}if(s){let E=await jr(),C=E[l]||E[er],D={query:q===""?"*":q,limit:z,variant:f,report:g,offset:P};return await C.search(D)}else {let E=[],C=await Be(e);if(n&&n!==""&&C[l]){let G=ve(n,F!=="arabic"),H={query:G,limit:z},Q=await C[l].search(H);if(s?E=Q.data.results.map(oe=>parseInt(oe.content_id,10)):E=Q.reduce((oe,ee)=>oe.concat(ee.result),[]),E=S(E),c&&C[c]){let ee=C[c].search(G).reduce((Oe,Ne)=>Oe.concat(Ne.result),[]);ee=S(ee),E=S([...E,...ee]);}}let D={...u?{visible:u}:{},..._?{image_id:{[Op.eq]:null}}:{},...f.length?{variant_id:f}:{},...p.length?{dimension_id:p}:{},...g.length?{report_id:g}:{}},$={locale:h?{[Op.ne]:null}:l},Y=[];n&&n!==""&&E.length&&B!=="report"?Y.push([literal(`array_position(array[${E.join(",")}], "content_id")`),"ASC"]):(B==="report"&&Y.push([literal(`COALESCE(NULLIF("report"."settings"->>'order', '')::INTEGER, 999999)`),"ASC"],[literal(`COALESCE(NULLIF("variant"."settings"->>'order', '')::INTEGER, 999999)`),"ASC"]),Y.push(["zvalue","DESC NULLS LAST"])),B&&B!=="name"&&B!=="report"&&Y.unshift([B,T.toUpperCase()]),n&&n!==""&&(D.content_id=E);let R=[{association:"contentByLocale",where:$,separate:true}];(O||B==="report")&&R.push({association:"report",attributes:["id","name","settings"]},{association:"dimension",attributes:["id","name","settings"]},{association:"variant",attributes:["id","slug","name","settings"]});let k={...D.visible?{visible:D.visible}:{},...D.noImage?{image_id:D.noImage}:{},...D.content_id?{content_id:D.content_id}:{}};if(!D.report_id&&!D.dimension_id&&!D.variant_id&&u){let H=(await t.findAll({attributes:["id"],where:{[Op.or]:[where(cast(json("settings.hide"),"boolean"),true)]}})).map(Q=>Q.id);H.length>0&&(D.report_id={[Op.notIn]:H},k.report_id=D.report_id);}let v=[],[M,V]=await Promise.all([r.findAll({limit:z,offset:P,where:D,include:R,order:Y,subQuery:false}),r.findAll({attributes:["variant_id",[fn$1("COUNT",col("variant_id")),"members_count"]],where:k,group:["variant_id"]})]),J=V.map(G=>G.toJSON());if(B==="name"){let G=T.toUpperCase()==="ASC"?1:-1;M.sort((H,Q)=>{let oe=H.getContent(er),ee=Q.getContent(er);return oe&&ee?oe.name>ee.name?1*G:-1*G:0});}let ye=m==="nested"?K:w;return v=M.map(ye),m!=="nested"&&v.forEach(G=>{let{name:H,keywords:Q,score:oe=.1,zvalue:ee}=G;if(H){let Oe=ve(H),Ne=oe,ir=n.length/Oe.length,cr=Oe.split("").reduce((Ft,lr,dr)=>(n.slice(0,dr),n.charAt(dr)===lr&&(Ft+=lr),Ft),"").length;Oe===n||Q&&Q.includes(n)?Ne=1e6:Oe.startsWith(n)?Ne*=20*ir:cr&&(Ne*=cr*ir),G.zvalue=Ne*2+ee;}}),{meta:{origin:"flexsearch",...Object.fromEntries(Object.entries(a).map(G=>[G[0],g$1(G[1])])),variantCount:J.reduce((G,H)=>(G[H.variant_id]=parseInt(H.members_count,10),G),{})},results:v}}}}function Jr(e){let{image:r,image_content:t,search:o,search_content:a}=e;return i;async function i(s){let{content_id:n,contentByLocale:l,image:c,image_id:d}=s,m={where:{content_id:n}},u=await o.findOne(m);if(await o.update(s,{where:{content_id:n}}),l){for(let p=0;p<l.length;p++){let g=l[p];await a.update({name:g.name,keywords:g.keywords},{where:{id:g.id,locale:g.locale}});}m={...m,...{include:[{association:"contentByLocale",separate:true}]}};}if(c){if(c.id&&(await r.update({...c},{where:{id:c.id}}),c.contentByLocale))for(let f=0;f<c.contentByLocale.length;f++){let p=c.contentByLocale[f];await t.update({meta:p.meta},{where:{id:p.id,locale:p.locale}});}}else !d&&u.image_id&&(await e.search.findAll({where:{image_id:u.image_id}})).length===0&&await r.destroy({where:{id:u.image_id}});return o.findOne(m)}}function Hr(e){return {ingestMembers:Vr(e),readMember:qr(e),searchMember:We(e),updateMember:Jr(e),readMemberImage:Kr(e)}}var Ce={include:[{association:"contentByLocale",separate:true},{association:"inputs",include:[{association:"contentByLocale",separate:true}]},{association:"consumers",include:[{association:"contentByLocale",separate:true}]}]},at=e=>({include:[{association:"variants",separate:true,attributes:{include:[[fn$1("COUNT",col("members.id")),"members_count"]]},include:[{model:e,as:"members",attributes:[]}],group:["variant.id"]}],order:[["ordering","ASC"]]}),nt={include:[{association:"blocks",separate:true,...Ce}]},Mt=e=>({include:[{association:"dimensions",separate:true,...at(e)},{association:"sections",separate:true,...nt}]});var X=[{association:"image",attributes:{exclude:["splash"]},include:[{association:"contentByLocale"}]},{association:"contentByLocale"}];function Wr(e){let{block:r,block_content:t,block_input:o}=e;return {createBlock:a,readBlock:s,updateBlock:n,deleteBlock:c,createBulkBlock:i,updateBulkBlock:l};async function a(d){let{locales:m,...u}=d;return (await r.create({...u,consumers:[],inputs:[],contentByLocale:m.map(p=>({locale:p}))},{include:Ce.include})).toJSON()}async function i(d){let m=d.map(f=>{let{locales:p,...g}=f;return {...g,consumers:[],inputs:[],contentByLocale:p.map(_=>({locale:_}))}});return (await r.bulkCreate(m,{include:Ce.include})).map(f=>f.toJSON())}async function s({id:d,include:m}={}){let u=d==null?[]:[].concat(d),f=await r.findAll({where:u.length>0?{id:u}:void 0,include:m?Ce.include:void 0});if(u.length===0||f.length===u.length)return f.map(h=>h.toJSON());let p=f.map(h=>h.id),g=u.filter(h=>!p.includes(h));throw new ha$1(404,`Block(id=[${g}]) does not exist.`)}async function n(d){let{id:m,contentByLocale:u,consumers:f,inputs:p,inputAction:g,...h}=d,_=await r.findByPk(m,{include:Ce.include,rejectOnEmpty:true});if(_.set(h),u){let O=Object.values(u);await t.bulkCreate(O,{updateOnDuplicate:["content"]});}return g&&(g.operation==="create"?await o.create(g.input):await o.destroy({where:g.input})),await _.save(),await _.reload(),_.toJSON()}async function l(d){let m=d.map(p=>{let{id:g,contentByLocale:h,consumers:_,inputs:O,inputAction:B,...T}=p;return {id:g,contentByLocale:h,inputAction:B,...T}}),u=await r.findAll({where:{id:{[Op.or]:m.map(p=>p.id)}},include:Ce.include}),f=[];for(let p of u){let g=m.filter(h=>h.id===p.id);for(let h=0;h<g.length;h++){let _=g[h],{id:O,contentByLocale:B,inputAction:T,...P}=_;if(T&&(T.operation==="create"?await o.create(T.input):await o.destroy({where:T.input})),B){let U=Object.values(B);await t.bulkCreate(U,{updateOnDuplicate:["content"]});}p.set(P),await p.save(),await p.reload(),f.push(p.toJSON());}}return f}async function c(d){let m=await r.findByPk(d,{rejectOnEmpty:true});return await m.destroy(),{id:d,parentType:"section",parentId:m.section_id}}}function Yr(e){let{dimension:r,search:t}=e;return {createDimension:o,readDimension:a,updateDimension:i,deleteDimension:s};async function o(n){return (await r.create({name:n.name,report_id:n.report_id,ordering:n.ordering||0,variants:[]},{include:at(t).include})).toJSON()}async function a({id:n,include:l}={}){let c=n==null?[]:[].concat(n),d=await r.findAll({where:c.length>0?{id:c}:void 0,include:l?at(t).include:void 0});if(c.length===0||d.length===c.length)return d.map(f=>f.toJSON());let m=d.map(f=>f.id),u=c.filter(f=>!m.includes(f));throw new ha$1(404,`Dimension(id=[${u}]) does not exist.`)}async function i(n){let{id:l,variants:c,...d}=n,m=await r.findByPk(l,{include:at(t).include,rejectOnEmpty:false});if(!m)throw new ha$1(404,`Dimension(id=${l}) does not exist.`);return m.set(d),await m.save(),m.toJSON()}async function s(n){let l=await r.findByPk(n,{rejectOnEmpty:false});return await l.destroy(),{id:n,parentType:"report",parentId:l.report_id}}}function Qr(e){let{formatter:r}=e;return {createFormatter:t,readFormatter:o,updateFormatter:a,deleteFormatter:i};async function t(s){return (await r.create(s)).toJSON()}async function o({id:s}={}){let n=s==null?[]:[].concat(s),l=await r.findAll({where:n.length>0?{id:n}:void 0});if(n.length===0||l.length===n.length)return l.map(m=>m.toJSON());let c=l.map(m=>m.id),d=n.filter(m=>!c.includes(m));throw new ha$1(404,`Formatter(id=[${d}]) does not exist.`)}async function a(s){let{id:n,...l}=s,c=await r.findByPk(n,{rejectOnEmpty:true});return await c.update(l),c.toJSON()}async function i(s){return await(await r.findByPk(s,{rejectOnEmpty:true})).destroy(),{id:s}}}function Xr(e){let{datasource:r}=e;return {createDatasource:t,readDatasource:o,updateDatasource:a,deleteDatasource:i};async function t(s){return (await r.create(s)).toJSON()}async function o({id:s,include:n}={}){try{let l=s==null?[]:[].concat(s),c=n===!0,d=await r.findAll({attributes:c?["id","name","description","content"]:["id","name","description",[literal("content - 'logic' - 'logic_ssr' - 'testUrl' - 'access'"),"content"]],where:l.length>0?{id:l}:void 0,order:[literal("(content->>'order')::integer ASC NULLS LAST")]});if(l.length===0||d.length===l.length)return d.map(f=>f.toJSON());let m=d.map(f=>f.id),u=l.filter(f=>!m.includes(f));throw new ha$1(404,`Datasource(id=[${u}]) does not exist.`)}catch(l){throw new ha$1(500,l)}}async function a(s){let{id:n,...l}=s,c=await r.findByPk(n,{rejectOnEmpty:true});return await c.update(l),c.toJSON()}async function i(s){return await(await r.findByPk(s,{rejectOnEmpty:true})).destroy(),{id:s}}}var{locales:An}=a();function eo(e){let{report:r,search:t}=e;return {createReport:o,readReport:a,updateReport:i,deleteReport:s};async function o(n){return (await r.create({name:n.name,sections:[],dimensions:[]},{include:Mt(t).include})).toJSON()}async function a({id:n,include:l,locales:c=An}={}){let m=(n==null?[]:[].concat(n)).reduce((g,h)=>(g.includes(h)||g.push(h),g),[]),u=await r.findAll({where:m.length>0?{id:m}:void 0,include:l?Mt(t).include?.filter(g=>typeof l=="string"?g.association===l:l):void 0});if(m.length===0||u.length===m.length)return u.map(g=>{let h=g.toJSON();return {...h,sections:h.sections.map(_=>({..._,blocks:_.blocks.map(O=>({...O,contentByLocale:Object.keys(O.contentByLocale).reduce((B,T)=>({...B,...[...c,"logic"].includes(T)?{[T]:O.contentByLocale[T]}:{}}),{})}))}))}});let f=u.map(g=>g.id),p=m.filter(g=>!f.includes(g));throw new ha$1(404,`Report(id=${p}) does not exist.`)}async function i(n){let{id:l,dimensions:c,sections:d,...m}=n,u=await r.findByPk(l,{include:Mt(t).include,rejectOnEmpty:false});if(!u)throw new ha$1(404,`Report(id=${l}) does not exist.`);return u.set(m),await u.save(),await u.reload(),u.toJSON()}async function s(n){return await(await r.findByPk(n,{rejectOnEmpty:false})).destroy(),{id:n}}}function to(e){let{section:r}=e;return {createSection:t,readSection:o,updateSection:a,deleteSection:i};async function t(s){return (await r.create({ordering:s.ordering,report_id:s.report_id,blocks:[]},{include:nt.include})).toJSON()}async function o({id:s,include:n}={}){let l=s==null?[]:[].concat(s),c=await r.findAll({where:l.length>0?{id:l}:void 0,include:n?nt.include:void 0});if(l.length===0||c.length===l.length)return c.map(u=>u.toJSON());let d=c.map(u=>u.id),m=l.filter(u=>!d.includes(u));throw new ha$1(404,`Section(id=${m}) does not exist.`)}async function a(s){let{id:n,blocks:l,...c}=s,d=await r.findByPk(n,{include:nt.include,rejectOnEmpty:false});return d.set(c),await d.save(),await d.reload(),d.toJSON()}async function i(s){let n=await r.findByPk(s,{rejectOnEmpty:true});return await n.destroy(),{id:s,parentType:"report",parentId:n.report_id}}}function ao(e,r){let{variant:t,search:o}=e;return {createVariant:a,readVariant:i,updateVariant:s,deleteVariant:n,validateVariantSlug:l};async function a(c){let{dimension_id:d,name:m,slug:u}=c,f=await l({dimension:d,slug:u});return (await t.create({dimension_id:d,name:m,slug:f.valid?f.candidate:f.suggestion})).toJSON()}async function i({id:c}={}){let d=c==null?[]:[].concat(c),m=await t.findAll({where:d.length>0?{id:d}:void 0,attributes:{include:[[fn$1("COUNT",col("members.id")),"members_count"]]},include:[{model:o,attributes:[],as:"members"}],group:["variant.id"]});if(d.length===0||m.length===d.length)return m.map(p=>p.toJSON());let u=m.map(p=>p.id),f=d.filter(p=>!u.includes(p));throw new ha$1(404,`Variant(id=${f}) does not exist.`)}async function s(c){let{id:d,...m}=c,u=await t.findByPk(d,{include:[{association:"dimension"}],rejectOnEmpty:true});m.settings=g$2(m.settings);let f=m.settings.doIngest;return m.settings.doIngest=false,await u.update(m),f&&(await r.ingestMembers(u),await Be(e,true)),await u.reload(),u.toJSON()}async function n(c){let d=await t.findByPk(c,{rejectOnEmpty:true});return await d.destroy(),Be(e,true),{id:c,parentType:"dimension",parentId:d.dimension_id}}async function l({dimension:c,slug:d}){let m=await t.findAll({attributes:["slug",[fn$1("COUNT",col("id")),"slugCount"]],where:{dimension_id:{[Op.ne]:c}},group:"slug"}).then(g=>Object.fromEntries(g.map(h=>{let _=h.getDataValue("slugCount");return [h.slug,Number.parseInt(`${_}`,10)]}))),u=d,f=1,p=true;for(;m[u];)p=false,u=`${d}-${f}`,f++;return {candidate:d,dimension_id:c,suggestion:u,valid:p}}}function no(e){let r={...Wr(e),...Yr(e),...Qr(e),...Xr(e),...Hr(e),...eo(e),...to(e)},t={...r,...ao(e,r)};return {createFormatter:ia$1(t.createFormatter),deleteFormatter:ia$1(t.deleteFormatter),readFormatter:ia$1(t.readFormatter),updateFormatter:ia$1(t.updateFormatter),createReport:ia$1(t.createReport),deleteReport:ia$1(t.deleteReport),readReport:ia$1(t.readReport),updateReport:ia$1(t.updateReport),createDimension:ia$1(t.createDimension),deleteDimension:ia$1(t.deleteDimension),readDimension:ia$1(t.readDimension),updateDimension:ia$1(t.updateDimension),createVariant:ia$1(t.createVariant),readVariant:ia$1(t.readVariant),updateVariant:ia$1(t.updateVariant),deleteVariant:ia$1(t.deleteVariant),validateVariantSlug:ia$1(t.validateVariantSlug),createSection:ia$1(t.createSection),readSection:ia$1(t.readSection),updateSection:ia$1(t.updateSection),deleteSection:ia$1(t.deleteSection),createBlock:ia$1(t.createBlock),deleteBlock:ia$1(t.deleteBlock),readBlock:ia$1(t.readBlock),updateBlock:ia$1(t.updateBlock),createBulkBlock:ia$1(t.createBulkBlock),updateBulkBlock:ia$1(t.updateBulkBlock),readMember:ia$1(t.readMember),searchMember:ia$1(t.searchMember),updateMember:ia$1(t.updateMember),readMemberImage:ia$1(t.readMemberImage),createDatasource:ia$1(t.createDatasource),deleteDatasource:ia$1(t.deleteDatasource),readDatasource:ia$1(t.readDatasource),updateDatasource:ia$1(t.updateDatasource)}}var so=e=>{throw console.error("/methods/helpers/uploadImage.ts:",e),new Error(e.message)},En=Number(process.env.NEXT_PUBLIC_IMAGE_SPLASH_WIDTH)||1400,In=Number(process.env.NEXT_PUBLIC_IMAGE_THUMB_WIDTH)||400,vn=async(e,r,t)=>{let o=[{type:"splash",res:En},{type:"thumb",res:In}];for(let a of o){let i=await kn(t).resize(a.res).toFormat("webp").webp({lossless:true}).toBuffer().catch(so);await e.image.update({[a.type]:i},{where:{id:r}}).catch(so);}},re=vn;var io=["4","5","7","8","9","10"],xn=io.join(),{locales:Tn}=a(),fe;if(process.env.FLICKR_API_KEY)try{fe=new Cn(process.env.FLICKR_API_KEY);}catch(e){throw console.error("Flickr ERROR:",e),new Error(e.message)}async function co(e,r){try{let t={prompt:r.prompt||"",page:r.page||1};if(!fe)throw console.warn("Flickr is not initialized. Check the credentials"),new Error("Flickr is not initialized. Check the credentials");let o=t.prompt,i=(await fe.photos.search({text:o,license:xn,sort:"relevance",per_page:24,page:t.page,content_types:"0",orientation:"landscape"}).then(c=>c.body)).photos.photo,s=i.reduce((c,d)=>c.concat(fe.photos.getSizes({photo_id:d.id})),[]),l=(await Promise.all(s).then(c=>c)).reduce((c,d,m)=>{let u=d.body.sizes.size.find(f=>f.label==="Small 320");return u&&c.push({id:i[m].id,source:u.source}),c},[]);return {meta:{prompt:g$1(t.prompt),page:g$1(`${t.page}`)},results:l}}catch(t){throw console.error(t),new Error("Error in search flickr provider")}}async function lo(e,r){try{let{content_id:t,image_id:o}=r,a={content_id:g$1(`${t}`)||"",id:g$1(`${o}`)||""},s=`https://flic.kr/p/${Bn.int_to_base58(o)}`;if(!fe)throw new Error("Flickr API Key not configured");let n=await fe.photos.getInfo({photo_id:o}).then(c=>c.body),l;if(n)if(io.includes(n.photo.license)){let c=await e.search.findOne({where:{content_id:t}}),d=await e.image.findOne({where:{url:s}});if(c){if(d)await e.search.update({image_id:d.id},{where:{content_id:t}});else {let u=await fe.photos.getSizes({photo_id:o}).then(P=>P.body),f=u.sizes.size.find(P=>parseInt(P.width,10)>=1600);if(f||(f=u.sizes.size.find(P=>parseInt(P.width,10)>=1e3)),f||(f=u.sizes.size.find(P=>parseInt(P.width,10)>=500)),!f||!f.source)throw new Error("Flickr Source Error, try another image.");let p=await fetch(f.source);if(!p.ok)throw new Error("Flickr Error retrieving image, try another image.");let g=await p.arrayBuffer(),_=(await fe.photos.licenses.getInfo().then(P=>P.body.licenses.license)).find(P=>P.id===parseInt(n.photo.license,10)),O={url:s,author:n.photo.owner.realname||n.photo.owner.username,license:_?`${_.name}: ${_.url}`:""},B=await e.image.create(O);await e.image_content.destroy({where:{id:B.id}});let T=Tn.map(P=>({id:B.id,locale:P,meta:n.photo.title._content}));await e.image_content.bulkCreate(T),await e.search.update({image_id:B.id},{where:{content_id:t}}),await re(e,B.id,g);}let m=await e.search.findOne({where:{content_id:t},include:X});m&&m.image&&(m.image.thumb=!!m.image.thumb);}else throw new Error("Error updating Search")}else throw new Error("Bad License");else throw new Error("Malformed URL");return {meta:{...a},results:l}}catch(t){throw console.error(t),new Error("Error in save flickr provider")}}async function mo(e,r){let t=We(e),o=f$1({query:r.prompt,limit:"50",visible:"false"}),i=(await t(o)).results.filter(s=>s.image_id).map(s=>({id:s.image_id,source:`/api/cms/member/image?member=${s.content_id}&size=thumb`}));return {meta:{prompt:g$1(o.query)},results:i}}async function po(e,r){let{search:t}=e,{content_id:o,image_id:a}=r;await t.update({image_id:a},{where:{content_id:o}});let i=await t.findOne({where:{content_id:o},include:X}).then(s=>s?{...s.toJSON(),image:{...s.image.toJSON(),thumb:!!s.image.thumb}}:null);return {meta:{id:a,content_id:o},results:i}}var{locales:On}=a(),st;if(process.env.UNSPLASH_API_KEY)try{st=createApi({accessKey:process.env.UNSPLASH_API_KEY});}catch(e){throw console.error("Unsplash error:",e),new Error(e.message)}async function uo(e,r){try{let t={prompt:r.prompt||"",page:r.page||1};if(!st)throw new Error("Unsplash API Key not configured");let o=t.prompt,i=(await st.search.getPhotos({query:o,perPage:24,page:t.page,orientation:"landscape"}).then(s=>s.response.results)).map(s=>({id:s.id,source:s.urls.thumb}));return {meta:{prompt:g$1(t.prompt),page:g$1(`${t.page}`)},results:i}}catch(t){throw console.error(t),new Error("Error in search unsplash provider")}}async function fo(e,r){try{let{content_id:t,image_id:o}=r,a={content_id:g$1(`${t}`)||"",id:g$1(`${o}`)||""};if(!st)throw console.warn("Unsplash is not initialized. Check the credentials"),new Error("Unsplash is not initialized. Check the credentials");let i=await st.photos.get({photoId:o}).then(n=>n.response),s;if(i){let n=await e.search.findOne({where:{content_id:t}}),l=i.links.html,c=await e.image.findOne({where:{url:l}});if(n){if(c)await e.search.update({image_id:c.id},{where:{content_id:t}});else {let m=await tr.get(i.urls.full,{responseType:"arraybuffer"}).then(g=>g.data),u={url:l,author:i.user.name||i.user.username,license:"Free Unsplash license: https://unsplash.com/license"},f=await e.image.create(u);await e.image_content.destroy({where:{id:f.id}});let p=On.map(g=>({id:f.id,locale:g,meta:i.description||i.alt_description}));await e.image_content.bulkCreate(p),await e.search.update({image_id:f.id},{where:{content_id:t}}),await re(e,f.id,m);}let d=await e.search.findOne({where:{content_id:t},include:X});d&&d.image&&(d.image.thumb=!!d.image.thumb);}else throw new Error("Error updating Search")}else throw new Error("Malformed URL");return {meta:{...a},results:s}}catch(t){throw console.error(t),new Error("Error in save unsplash provider")}}var{locales:Ln}=a();async function go(e,r){try{let{content_id:t,image_source:o,files:a}=r,i={content_id:g$1(`${t}`)||""};if(await e.search.findOne({where:{content_id:t}})&&a){let l=await Nn.readFileSync(a.file.filepath),c={url:o,author:"",license:""},d=await e.image.create(c);await e.image_content.destroy({where:{id:d.id}});let m=Ln.map(u=>({id:d.id,locale:u,meta:""}));await e.image_content.bulkCreate(m),await e.search.update({image_id:d.id},{where:{content_id:t}}),await re(e,d.id,l);}let n=await e.search.findOne({where:{content_id:t},include:X});return n&&n.image&&(n.image.thumb=!!n.image.thumb),{meta:{...i},results:n}}catch(t){throw console.error(t),new Error("Error in save upload provider")}}var{locales:Un}=a();var ho=async e=>{let r={"x-api-key":process.env.ADOBE_STOCK_API_KEY||"EMPTY_ADOBE_KEY","X-Product":"BespokeApp/0.1"};return r};var it;if(process.env.ADOBE_STOCK_API_KEY)try{it={search:async(e,r)=>await tr.get("https://stock.adobe.io/Rest/Media/1/Search/Files",{headers:await ho(!1),params:{locale:"en_US","search_parameters[limit]":24,"search_parameters[offset]":r*24,"search_parameters[words]":e,"search_parameters[filters][content_type:photo]":"1","search_parameters[filters][content_type:image]":"1","search_parameters[filters][orientation]":"horizontal",result_columns:["id","stock_id","thumbnail_url","is_licensed"]}}).then(t=>t.data.files),get:async e=>await tr.get("https://stock.adobe.io/Rest/Media/1/Files",{headers:await ho(!1),params:{locale:"en_US",ids:e,result_columns:["id","thumbnail_url","creator_name","title","thumbnail_1000_url","details_url","category"]}}).then(r=>r.data.files[0])};}catch{}async function yo(e,r){try{let t={prompt:r.prompt||"",page:r.page||1};if(!it)throw new Error("Adobe API Key not configured");let a=(await it.search(t.prompt,t.page)).map(i=>({id:i.id,source:i.thumbnail_url}));return {meta:{prompt:g$1(t.prompt),page:g$1(`${t.page}`)},results:a}}catch(t){throw console.error(t),new Error("Error in search Adobe provider")}}async function bo(e,r){try{let{content_id:t,image_id:o}=r,a={content_id:g$1(`${t}`)||"",id:g$1(`${o}`)||""};if(!it)throw console.warn("Adobe is not initialized. Check the credentials"),new Error("Adobe is not initialized. Check the credentials");let i=await it.get(o),s;if(i){let n=await e.search.findOne({where:{content_id:t}}),l=i.details_url,c=await e.image.findOne({where:{url:l}});if(n){if(c)await e.search.update({image_id:c.id},{where:{content_id:t}});else {let m=await tr.get(i.thumbnail_1000_url,{responseType:"arraybuffer"}).then(g=>g.data),u={url:l,author:i.creator_name,license:"ADOBE, TO-DO"},f=await e.image.create(u);await e.image_content.destroy({where:{id:f.id}});let p=Un.map(g=>({id:f.id,locale:g,meta:i.title||i.description}));await e.image_content.bulkCreate(p),await e.search.update({image_id:f.id},{where:{content_id:t}}),await re(e,f.id,m);}let d=await e.search.findOne({where:{content_id:t},include:X});d&&d.image&&(d.image.thumb=!!d.image.thumb);}else throw new Error("Error updating Search")}else throw new Error("Malformed URL");return {meta:{...a},results:s}}catch(t){throw console.error(t),new Error("Error in save adobe provider")}}var{locales:Fn}=a(),Ot=process.env.PIXABAY_API_KEY,Ro="https://pixabay.com/api/";async function So(e,r){try{let t={prompt:r.prompt||"",page:r.page||1};if(!Ot)throw new Error("Pixabay API Key not configured");let o=encodeURIComponent(t.prompt),a=`${Ro}?key=${Ot}&q=${o}&per_page=${24}&page=${t.page}&image_type=photo&orientation=horizontal&safesearch=true`,n=(await tr.get(a)).data.hits?.map(l=>({id:l.id,source:l.previewURL||l.webformatURL}))||[];return {meta:{prompt:g$1(t.prompt),page:g$1(`${t.page}`)},results:n}}catch(t){throw console.error(t),new Error("Error in search pixabay provider")}}async function wo(e,r){try{let{content_id:t,image_id:o}=r,a={content_id:g$1(`${t}`)||"",id:g$1(`${o}`)||""};if(!Ot)throw console.warn("Pixabay is not initialized. Check the credentials"),new Error("Pixabay is not initialized. Check the credentials");let i=`${Ro}?key=${Ot}&id=${o}`,n=(await tr.get(i)).data,l;if(n.hits&&n.hits.length>0){let c=n.hits[0],d=await e.search.findOne({where:{content_id:t}}),m=c.pageURL,u=await e.image.findOne({where:{url:m}});if(d){if(u)await e.search.update({image_id:u.id},{where:{content_id:t}});else {let p=c.largeImageURL||c.webformatURL||c.imageURL;if(!p)throw new Error("Pixabay image URL not available");let g=await tr.get(p,{responseType:"arraybuffer"}).then(B=>B.data),h={url:m,author:c.user||`Pixabay User ${c.user_id}`,license:"Free Pixabay License: https://pixabay.com/service/license/"},_=await e.image.create(h);await e.image_content.destroy({where:{id:_.id}});let O=Fn.map(B=>({id:_.id,locale:B,meta:c.tags||c.description||""}));await e.image_content.bulkCreate(O),await e.search.update({image_id:_.id},{where:{content_id:t}}),await re(e,_.id,g);}let f=await e.search.findOne({where:{content_id:t},include:X});f&&f.image&&(f.image.thumb=!!f.image.thumb);}else throw new Error("Error updating Search")}else throw new Error("Image not found in Pixabay");return {meta:{...a},results:l}}catch(t){throw console.error(t),new Error("Error in save pixabay provider")}}var zn={local:po,flickr:lo,unsplash:fo,upload:go,adobe:bo,pixabay:wo};function xe(e,r){let t=zn[r];if(!t)throw new ha$1(500,`Wrong provider dbImageSaveFactory.ts: ${r}`);return ia$1(o=>t(e,o))}var Gn={local:mo,flickr:co,unsplash:uo,adobe:yo,pixabay:So};function Ye(e,r){let t=Gn[r];if(!t)throw new ha$1(500,`Wrong provider dbImageSearchFactory.ts: ${r}`);return ia$1(o=>t(e,o))}var Hn=e=>(e.dimensions&&e.dimensions.forEach(r=>{r.variants&&r.variants.forEach(t=>{t.members_count&&(t.members_count=parseInt(t.members_count,10));});}),e);function Lt(e){let{report:r,search:t}=e;return o;async function o(a){let i=a?.report_id?Number(a.report_id):void 0,s=!(typeof a?.count<"u"&&(a.count==="false"||a.count===false)),n={attributes:["id","name",[literal("COALESCE(NULLIF(settings ->> 'order', '')::INTEGER, 0)"),"ordering"],[literal("COALESCE(NULLIF(settings ->> 'hide', '')::BOOL, false)"),"hide"]],where:{[Op.or]:[where(cast(json("settings.hide"),"boolean"),false),literal("NOT (settings::jsonb ? 'hide')")]},order:[["ordering","ASC"]],include:[{attributes:["id","name","ordering"],association:"dimensions",separate:true,order:[["ordering","ASC"]],include:[{attributes:["id","name","slug",[literal("COALESCE(NULLIF(settings ->> 'order', '')::INTEGER, 0)"),"ordering"]],association:"variants",separate:true,group:["variant.id"],order:[["ordering","ASC"]]}]}]};return i&&(n.where={...n.where,id:i}),s&&n.include&&n.include[0]&&(n.include[0].include[0].attributes.push([fn$1("COUNT",col("members.id")),"members_count"]),n.include[0].include[0].include=[{model:t,attributes:[],as:"members",where:{visible:true}}]),{data:(await r.findAll(n)).map(c=>({...Hn(c.toJSON()),mode:c.dimensions.length===1?w.UNILATERAL:w.MULTILATERAL}))}}}function _o(e){return async()=>(await Be(e,true),{error:false})}var{locales:Wn,localeDefault:Yn}=a(),Qn=(e,r)=>{if(!e)return [];let t=[];return r.forEach(o=>{let a=e.filter(i=>i.metadata.report.id===o.id);if(a.length>0)if(o.mode===w.UNILATERAL){let i=o.dimensions[0];i.variants.forEach(s=>{let n=a.filter(l=>l.metadata.dimension.id===i.id&&l.metadata.variant.id===s.id);n.length>0&&(t=t.concat(n.map(l=>({path:`/${s.slug}/${l.slug}`,name:l.name,confidence:l.confidence,report:{id:o.id,name:o.name,mode:o.mode},members:[l],id:`r-${o.id}-${[l].map(c=>`${c.id}`).join("-")}`}))));});}else o.mode,w.MULTILATERAL;}),t},Zn=(e,r)=>{if(!e)return [];let t,o,a;return e.map(i=>(t={...r.find(s=>s.id===i.report_id)},o={...t.dimensions.find(s=>s.id===i.dimension_id)},a={...o.variants.find(s=>s.id===i.variant_id)},delete t.dimensions,delete o.variants,{name:i.name,confidence:i.zvalue,metadata:{id:i.id,slug:i.slug,report:t,dimension:o,variant:a},id:i.content_id,slug:i.slug}))};function Ao(e){let r=We(e),t=Lt(e);return o;async function o(a){let i=a.format||"results",s=Wn.includes(a.locale)?a.locale:Yn,n=a.origin||"flexsearch",l=process.env.REPORTS_EXTERNAL_SEARCH&&n==="typesense",c=await r({...a,format:"plain",locale:g$1(s),visible:true});if(l)return c;{let d=c.results?c.results:[],u=(await t()).data,f=Zn(d,u);return {meta:{...c.meta,origin:"flexsearch",format:i},results:Qn(f,u)}}}}function Po(e){return async r=>{try{let{variantPaths:t}=r,o=[];if(t)for(let a=0;a<t.length;a++){let i=t[a];(await e.search.findAll({attributes:["slug"],where:{variant_id:i.variantId}})).forEach(n=>{o.push(`/${i.prefix}/${i.variantSlug}/${n.slug}`);});}return {...r,paths:o,revalidated:0,samples:[]}}catch(t){throw new ha$1(t.response?.status||500,t.message)}}}function ko(){return async e=>{try{let{target:r}=e;return {target:r}}catch(r){throw new ha$1(r.response?.status||500,r.message)}}}function es(e,r){return e.some(t=>r.includes(`role.${t}`))}function Eo(e){let{report:r}=e;return t;async function t(o){let a=await r.findByPk(o.report_id,{include:{association:"sections",separate:true,where:{id:o.section_id},include:[{association:"blocks",separate:true,include:[{association:"contentByLocale",separate:true,where:{locale:{[Op.or]:[o.locale,"logic"]}}},{association:"inputs"},{association:"consumers"}]}]}}).then(s=>s&&s.sections&&Array.isArray(s.sections)?s.sections.reduce((n,l)=>{let c=l.blocks.map(d=>{let m=d.toJSON();return m.inputs=m.inputs.map(u=>u.id),m.consumers=m.consumers.map(u=>u.id),m});return n.concat(c)},[]):[]),i=a.filter(s=>s.settings&&s.settings.access&&Array.isArray(s.settings.access)&&Array.isArray(o.roles)&&(s.settings.access.includes("private")||es(o.roles,s.settings.access))).map(s=>s.id);return i=i.concat(j(i,a)),{params:{...o},data:a.filter(s=>i.includes(s.id))}}}function Io(e){let{report:r}=e;return t;async function t(o){let a=await r.findByPk(o.report_id,{include:{association:"sections",separate:true,where:{id:o.section_id},include:[{association:"blocks",separate:true,include:[{association:"contentByLocale",separate:true,where:{locale:{[Op.or]:[o.locale,"logic"]}}},{association:"inputs"},{association:"consumers"}]}]}}).then(i=>i&&i.sections&&Array.isArray(i.sections)?i.sections.reduce((s,n)=>{let l=n.blocks.map(c=>{let d=c.toJSON();return d.inputs=d.inputs.map(m=>m.id),d.consumers=d.consumers.map(m=>m.id),d});return s.concat(l)},[]):[]);return {params:{...o},data:a}}}var as=Object.keys(or).filter(e=>e.indexOf("Icon")===0);async function vo(){return {meta:{provider:"tabler"},results:as}}async function Bo(e){let r=or[e.name]?or[e.name]:()=>"";return renderToString(createElement(r))}var ns={tabler:vo};function Co(e){let r=ns[e];if(!r)throw new ha$1(500,`Wrong provider dbListIconsFactory.ts: ${e}`);return ia$1(()=>r())}var ss={tabler:Bo};function xo(e){return ia$1(r=>{let t=ss[e];if(!t)throw new ha$1(500,`Wrong provider dbReadIconFactory.ts: ${r.provider}`);return t({name:r.name,provider:e})})}function To(){return e;async function e(){return {secrets:Y()}}}function Te(e,r,t){return Ie().then(o=>{Object.assign(t,Qe(o));})}function Qe(e,r){let t={},o=Re(r||{providers:[]});return r&&o.actions&&o.source==="custom"?(t.searchRole=ia$1(o.actions.searchRole()),t.searchUser=ia$1(o.actions.searchUser()),t.readUser=ia$1(o.actions.readUser()),t.updateUser=ia$1(o.actions.updateUser())):o.source==="auth0"&&(t.searchRole=ia$1(Rr()),t.searchUser=ia$1(Sr()),t.readUser=ia$1(wr()),t.updateUser=ia$1(_r())),{...no(e),searchReport:ia$1(Ao(e)),readMetadata:ia$1(Lt(e)),regenerateSearch:ia$1(_o(e)),imageFlickrSearch:Ye(e,"flickr"),imageLocalSearch:Ye(e,"local"),imageUnsplashSearch:Ye(e,"unsplash"),imageAdobeSearch:Ye(e,"adobe"),imagePixabaySearch:Ye(e,"pixabay"),imageFlickrSave:xe(e,"flickr"),imageLocalSave:xe(e,"local"),imageUnsplashSave:xe(e,"unsplash"),imageUploadSave:xe(e,"upload"),imageAdobeSave:xe(e,"adobe"),imagePixabaySave:xe(e,"pixabay"),urlProxy:xt(e),searchRole:t.searchRole,searchUser:t.searchUser,readUser:t.readUser,updateUser:t.updateUser,updateMyData:ia$1(Ar()),revalidateReport:ia$1(Po(e)),revalidateUrl:ia$1(ko()),readPrivateBlocks:ia$1(Eo(e)),readClientSideBlocks:ia$1(Io(e)),listTablerIcons:Co("tabler"),readTablerIcon:xo("tabler"),readEnvSecrets:ia$1(To())}}async function ar(e){try{let r=new is.IncomingForm,t=await new Promise((o,a)=>{r.parse(e,(i,s,n)=>{if(i){console.error("Error in formidable parse function inside internal parseBody.ts",i),a(i);return}o({fields:s,files:n});});});return {...t.fields,files:t.files}}catch(r){return {error:r}}}function he(e,r){let t=ja(e,"create",r),o=ja(e,"read",r),a=ja(e,"update",r),i=ja(e,"delete",r),s=ja(e,"updateBulk",r),n=ja(e,"createBulk",r);return [a$2("POST",`create/bulk/${r}`,l=>{let{body:c}=l,{files:d,...m}=c,u=Object.keys(m).map(f=>m[f]);return n(u)},[a$1.EDITOR]),a$2("POST",`create/${r}`,l=>{let{body:c}=l;return t(c)},[a$1.EDITOR]),a$2("GET",`read/${r}`,l=>{let c=l.query,d=c$1(c.id).map(b$2);return o({id:d,include:ba(c.include)})}),a$2("POST",`update/${r}`,l=>{let{body:c}=l;return a(c)},[a$1.EDITOR]),a$2("POST",`update/bulk/${r}`,l=>{let{body:c}=l,{files:d,...m}=c,u=Object.keys(m).map(f=>m[f]);return s(u)},[a$1.EDITOR]),a$2("DELETE",`delete/${r}`,l=>{let c=b$2(l.query.id);return i(c)},[a$1.EDITOR])]}function Do(e){let{validateVariantSlug:r}=e;return [...he(e,"variant"),a$2("GET","validate/variant",t=>{let o=t.query,a=b$2(o.dimension);return r({dimension:a,slug:i(o.slug)})},[a$1.EDITOR])]}function Mo(e){return he(e,"datasource").map(t=>({...t,roleRequired:[a$1.EDITOR]}))}function De(e,r){let t=`image${ka(r)}Save`,o=e[t];return a$2("POST",`images/save/${r}`,a=>{let i=a.body;if(!i.content_id)throw new ha$1(400,"Missing 'content_id' parameter.");if(!i.image_id)throw new ha$1(400,"Missing 'image_id' parameter.");return o(i)},[a$1.EDITOR])}function Ze(e,r){let t=`image${ka(r)}Search`,o=e[t];return a$2("GET",`images/search/${r}`,async a=>{let i=c$1(a.query.prompt)[0];if(!i)throw new ha$1(400,"Empty 'prompt' param.");return o({prompt:i,page:b$2(a.query.page)})},[a$1.EDITOR])}function Oo(e){let{readMetadata:r}=e;return a$2("GET","read/metadata",t=>r(t.query))}function No(e){let{regenerateSearch:r}=e;return a$2("POST","search/regenerate",()=>r(void 0),[a$1.EDITOR])}function Lo(e){let{searchReport:r}=e;return a$2("GET","search/reports",t=>{let o=ls(t.query);return r(o)})}function ls(e){return {...f$1(e),format:c$1(e.format)[0]}}function Uo(e){let{urlProxy:r}=e;return a$2("GET","url/proxy",(t,o,a)=>{let{url:i,method:s="GET",wrapper:n="true"}=t.query;if(!i)throw new ha$1(400,"Missing URL parameter");let l=[];return a&&a.user&&a.user.bespoke_roles&&(l=a.user.bespoke_roles),r({url:Array.isArray(i)?i.join(","):i,method:c$1(s)[0]==="POST"?"POST":"GET",user_roles:l,wrapper:n!=="false",session:a})})}function Fo(e){let{readMetadata:r,revalidateReport:t}=e;return a$2("GET","revalidate/report",async(o,a)=>{let{reportId:i,profilePrefix:s}=o.query;if(!i||!s)throw new ha$1(400,"Missing URL parameter in revalidate factory: reportId or profilePrefix");try{let n=parseInt(`${i}`,10),l=`${s}`.split("/").filter(p=>p!=="").join("/"),c=[],d=await r({}).then(p=>p.ok?p.data.data.find(g=>g.id===n):[]);d&&d.mode===w.UNILATERAL&&d.dimensions.forEach(p=>{p.variants.forEach(g=>{c.push({prefix:l,variantId:g.id,variantSlug:g.slug});});});let m=await t({profilePrefix:l,reportId:n,variantPaths:c}),u=[],f=0;return m.ok&&(f=m.data.paths.length,u=m.data.paths.slice(0,5),Promise.all(m.data.paths.map(p=>{let g;try{g=a.revalidate(p,{unstable_onlyGenerated:!0});}catch(h){console.error("error",p,h);}return g}))),{ok:!0,status:200,data:{reportId:i,revalidated:f,samples:u}}}catch(n){throw console.error(n),new ha$1(500,"Error revalidating")}},[a$1.EDITOR])}function zo(){return a$2("GET","revalidate/url",async(e,r)=>{let{target:t}=e.query;if(t)try{return r.revalidate(t,{unstable_onlyGenerated:!0}),{ok:!0,status:200,data:{target:t}}}catch(o){throw console.error(o),new ha$1(500,"Error revalidating")}else throw new ha$1(400,"Missing target parameter in revalidate factory")},[a$1.ADMIN,a$1.EDITOR,a$1.WRITER])}function Me(e=process.env){let r=e.BESPOKE_JWT_SECRET;return r||(console.warn("WARNING: Using default BESPOKE_JWT_SECRET. This is insecure and not recommended for production environments."),"BESPOKE_JWT_SECRET")}var{localeDefault:ms}=a(),Go=Me();function Vo(e){let{readPrivateBlocks:r}=e;return a$2("POST","read/blocks/private",(t,o,a)=>{let{userToken:i}=t.body,s=null;if(i&&Go)try{let c=ds.verify(i,Go);s=typeof c=="object"&&c!==null&&"roles"in c?c.roles:[];}catch(c){console.error("Failed to verify user token:",c);}if(!s&&(!a||!a.user))throw new ha$1(401,"Unauthorized. Must be logged in or provide a valid token.");let n=i&&s?s:a&&a.user?a.user.bespoke_roles:[],l={report_id:parseInt(t.body.report_id,10),locale:t.body.locale||ms,roles:n,section_id:t.body.section_id||[]};return r(l)})}var{localeDefault:ps}=a();function qo(e){let{readClientSideBlocks:r}=e;return a$2("GET","read/section/client",(t,o,a)=>{let i={report_id:b$2(t.query.report_id),locale:t.query.locale||ps,section_id:b$2(t.query.section_id)};return r(i)})}function Ko(e){let{readEnvSecrets:r}=e;return a$2("GET","read/secrets",()=>r({}),[a$1.EDITOR])}function $o(e){let{searchRole:r}=e;return a$2("GET","auth/search/roles",(t,o)=>r(""),[a$1.EDITOR,a$1.ADMIN])}function jo(e){let{searchUser:r}=e;return a$2("GET","auth/search/users",t=>r({query:t.query.query,role_id:t.query.role_id,page:t.query.page||0}),[a$1.ADMIN])}function Jo(e){let{readUser:r}=e;return a$2("GET","auth/read/user",t=>r(t.query.user_id),[a$1.ADMIN])}function Ho(e){let{updateUser:r}=e;return a$2("POST","auth/update/user",async t=>{let o=t.body;return await r(o)},[a$1.ADMIN])}function Wo(e){let{updateUser:r,readUser:t}=e;return a$2("POST","auth/update/me",async(o,a,i)=>{let{report_id:s,user_metadata:n}=o.body,l={user_id:i.user.id,user_metadata:{}};try{let{user:c}=i;return i&&c&&s&&(c.bespoke_app_metadata&&c.bespoke_app_metadata.reports&&Array.isArray(c.bespoke_app_metadata.reports)?l.app_metadata={...c.bespoke_app_metadata}:l.app_metadata={reports:[]},l.app_metadata.reports.push({reportId:s})),n&&(l.user_metadata={...c.bespoke_app_metadata,...n}),await r(l),{ok:!0,status:200,wrapper:!0,data:{ok:!0,message:"User & session updated"}}}catch(c){return {ok:false,status:500,error:c.message}}},[])}async function us(e){try{return "JVBERi0xLjcKJYGBgYEKCjYgMCBvYmoKPDwKL0ZpbHRlciAvRmxhdGVEZWNvZGUKL0xlbmd0aCAxMTYKPj4Kc3RyZWFtCnicHYqxCsJAEAX79xVbC+Lmbm/3DoKFeEcKG2F/QCSKYgol+P0mMkwxMG8cHEwrnzt2w/j6jvPjetkalyyZLReKTH5DEPITuv/aUWKKiz6hTywiGliTZWNtFkyWitr0qEWrWmBbq2ndkz/hG1THGT/eextGCmVuZHN0cmVhbQplbmRvYmoKCjcgMCBvYmoKPDwKL0ZpbHRlciAvRmxhdGVEZWNvZGUKL1R5cGUgL09ialN0bQovTiA1Ci9GaXJzdCAyNgovTGVuZ3RoIDM2Mgo+PgpzdHJlYW0KeJzVUt9LwzAQfs9fcY/6IEnTH2llDLa1VZChbIKi+JC1YVRGIm0m87/3ru0cexCfpXwkd/cl+a73BSBAQhRBCCqFCOJQQgwqCGAyYfzx68MAf9Bb0zF+19QdvCJHwAreGF+4vfUQsOmUnbgL7fXObdlwCAIiHxkPrav3lWlhUhZlKYQSQiQRIhFC5rguEBlCYow1meIeoaIRmFOhEOEMa+WARA1nqN5z4/F8gStyE+LkAzdKh/jnXXqrGO6Qf+nJpowvXZ1rb+Aiv5ZCRiKTsQyjTKYvl/g7WqO9+7/N9fobZ3/t8GzONF4acmvIA/2U+cp0bt9WOHbilQ4rtLk1u0/jm0pfKZGlqFOlGXpsNAZ/vt+8m6qnUlgc/M3ak4YhQbmlqRs9dwd0n8APOwDshDw4s9Z5cmXvR+tRDUXJ6NEzySSI8fV+4/uQkgHjc92ZXupJJ4qwlasbuwX+1NiZ7Zpjgm78BkHDxfcKZW5kc3RyZWFtCmVuZG9iagoKOCAwIG9iago8PAovU2l6ZSA5Ci9Sb290IDIgMCBSCi9JbmZvIDMgMCBSCi9GaWx0ZXIgL0ZsYXRlRGVjb2RlCi9UeXBlIC9YUmVmCi9MZW5ndGggNDEKL1cgWyAxIDIgMiBdCi9JbmRleCBbIDAgOSBdCj4+CnN0cmVhbQp4nBXEwQ0AIAwDsUuKxJf9JUZippb4YaDbbEhKTpWWOCDezxcGYeEDtQplbmRzdHJlYW0KZW5kb2JqCgpzdGFydHhyZWYKNjY5CiUlRU9G"}catch(r){throw console.error("Error generating PDF:",r),r}}function Yo(){return a$2("POST","pdf",async(e,r)=>{let{slugs:t,path:o}=e.body;if(!t||!o)throw new ha$1(400,"Missing path parameter in request.");{new URL(o,e.headers.origin);return {ok:true,status:200,data:await us()}}})}function Qo(e,r){let t=`list${ka(r)}Icons`,o=e[t];return a$2("GET",`list/icons/${r}`,async()=>o({}),[a$1.EDITOR])}function Zo(e,r){let t=`read${ka(r)}Icon`,o=e[t];return a$2("GET",`read/icons/${r}/icon.svg`,async a=>o({provider:r,name:a.query.name}))}function Xo(){return a$2("GET","report",async(e,r)=>{let{report:t,prefix:o,locale:a}=e.query;if(!t)throw new ha$1(400,"Missing report parameter.");if(!o)throw new ha$1(400,"Missing report parameter.");if(!a)throw new ha$1(400,"Missing report parameter.");try{let s=await(await fetch(`${process.env.NEXT_PUBLIC_REPORTS_BASE_URL}/${a}${o}${t}`)).text(),c=new fs().parseFromString(s,"text/html").getElementById("__NEXT_DATA__")?.textContent,d=JSON.parse(c).props;return {ok:!0,status:200,data:{variables:d.pageProps.initialState.variables,status:d.pageProps.initialState.status}}}catch(i){throw console.error(i),new ha$1(500,"Couldn't find page cache")}})}var hs=Me();function ys(e){let r={email:e.user.email,name:e.user.name,roles:e.user.bespoke_roles||[]};return ds.sign(r,hs,{expiresIn:"1min"})}function ea(){return a$2("POST","users/generate-token",async(e,r,t)=>{if(!t||!t.user)throw new ha$1(401,"Unauthorized. Must be logged in to generate a token.");try{return {ok:!0,status:200,wrapper:!1,data:{token:ys(t)}}}catch(o){throw console.error("Error generating token:",o),new ha$1(500,"Internal Server Error")}})}var Rs=Me(),Ss=e=>!!ds.verify(e,Rs);function ta(){return a$2("POST","users/validate-token",async(e,r)=>{let{token:t}=e.body;try{return Ss(t)?{ok:!0,status:200,wrapper:!1,data:{success:!0}}:{ok:!1,status:401,error:"Invalid token"}}catch{return {ok:false,status:401,error:"Invalid token"}}})}var As=pe();function nr(e,r){return `${e.toUpperCase()} ${r.toLowerCase()}`}function Ps(e,r){let t=Qe(e,r);return Object.fromEntries([...he(t,"block"),...he(t,"dimension"),...he(t,"formatter"),...he(t,"report"),...he(t,"section"),...Mo(t),...Do(t),...d(t),Lo(t),Oo(t),No(t),De(t,"flickr"),De(t,"local"),De(t,"unsplash"),De(t,"upload"),De(t,"adobe"),De(t,"pixabay"),Ze(t,"flickr"),Ze(t,"local"),Ze(t,"unsplash"),Ze(t,"adobe"),Ze(t,"pixabay"),Uo(t),$o(t),jo(t),Jo(t),Ho(t),Wo(t),Fo(t),zo(),Vo(t),qo(t),Yo(),Qo(t,"tabler"),Zo(t,"tabler"),Xo(),Ko(t),ea(),ta()].map(({handler:o,method:a,path:i,roleRequired:s})=>[nr(a,i),{handler:o,roleRequired:s}]))}function ks(e){let r=Ie().then(t=>Ps(t,e));return async function(o,a){await ws(o,a,{methods:["GET","HEAD","PUT","PATCH","POST","DELETE"],origin:"*"});let{query:i,method:s}=o,{path:n,...l}=i;if(n&&s){let c=await r.then(d=>{let m=[].concat(n).join("/"),u=nr(s,m);return d[u]});if(c){let d=await Z(o,a,e);if(c.roleRequired){if(!d)return a.status(401).json({error:"Unauthorized. Must be logged in."});let m=d&&d.user&&d.user.bespoke_roles&&Array.isArray(d.user.bespoke_roles)?d.user.bespoke_roles:[];if(Array.isArray(c.roleRequired)&&c.roleRequired.length>0&&!R(m,c.roleRequired))return a.status(402).json({error:"Forbidden. Not enough roles."})}if(c.handler)return ["POST","DELETE"].includes(s)&&(o.body=await ar(o)),Promise.resolve(o).then(m=>c.handler(m,a,d||void 0)).then(async m=>{if(m&&"error"in m)throw new ha$1(m.status,m.error);if(m.ok)if(m.data instanceof Buffer){let u=await _s(m.data),f=Buffer.byteLength(m.data);a.writeHead(m.status,{"Content-Type":u?u.mime:"image/jpeg","Content-Length":f.toString()}).send(m.data);}else o.url&&o.url.indexOf("/icon.svg?name=")>0?(a.setHeader("Content-Type","image/svg+xml"),a.status(m.status).send(m.data)):a.status(m.status).json(m.wrapper?{data:m.data}:m.data);}).catch(m=>{As&&console.error("Backend Error",m),a.status(m.code).json({error:m.message});})}}else n||await r.then(console.info);return a.status(404).json({error:"No matching route",path:n,query:l})}}var Es=e=>{let r=e;return async function(t,o){let a=await r({test:"pala"});return o.json(a)}},Is=Es;function Cs(e){let r=process.cwd(),t=Bs.resolve(r.endsWith("/example")?r.replace("/example",""):r,"package-lock.json"),o;try{let a=JSON.parse(Nn.readFileSync(t,"utf-8"));o=a.dependencies&&a.dependencies[e]&&a.dependencies[e].version!=="file:packages/reports"?a.dependencies[e].version:"0.dev";}catch{o="0.vercel";}return o||"Version not found"}function xs(e){let r=()=>Promise.resolve({}),{pathSegmentsKey:t="bespoke",preResolve:o=r,postResolve:a=r,authOptions:i={providers:[]}}=e||{};return bb.getServerSideProps(s=>{let{dispatch:n}=s;return async l=>{let c=await Z(l.req,l.res,i);if(!c)return {redirect:{destination:"/api/auth/signin?callbackUrl=/cms",permanent:false}};let d=new Set([a$1.ADMIN,a$1.EDITOR,a$1.WRITER]);if(!(c?.user?.bespoke_roles||[]).some(_=>d.has(_)))return {redirect:{destination:"/",permanent:false}};let u=l.query[t],[f]=Array.isArray(u)?u:[u];await n(Te);let p=await Cs("@datawheel/bespoke"),g=await o(s,l);if("redirect"in g)return {props:g};f==="reports"&&(ra(l.query[t])?await Promise.all([n(la$1("formatter",{})),n(la$1("datasource",{include:true})),n(la$1("report",{id:ra(l.query[t]),include:true})),fa$1.setStatus({isCMS:true})]):await Promise.all([n(la$1("report",{include:"dimensions"})),fa$1.setStatus({isCMS:true})])),f==="metadata"&&await n(la$1("report",{include:"dimensions"})),f==="formatters"&&await n(la$1("formatter",{})),f==="datasources"&&await n(la$1("datasource",{include:true}));let h=await a(s,l);return {props:{...g,...h,bespokeVersion:p,session:c}}}})}function ra(e){if(e==null||e==="")return;let[,r]=Array.isArray(e)?e:[e];return Number.parseInt(r)||void 0}var Ts=async(e,r,t,o,a)=>{if(e.length===0)throw new Error("No slugs provided");let i=await r(t({mode:"slugs",locale:a,slugs:e,output:"full"})),s=i.results[0].report_id;if(i.results.length>1){if(i.results.every(p=>p.report_id===s)===false)throw new Error("Members belong to different reports");let c=i.results.map(p=>p.dimension_id),d=new Set(c);if(c.length!==d.size)throw new Error("Members belong to same dimensions");let m=i.results.sort((p,g)=>p.dimension_ordering>g.dimension_ordering?1:-1).reduce((p,g,h)=>(p[g.variant_slug]=h,p),{}),u=e.reduce((p,g,h)=>(p[g.variantSlug]=h,p),{});if(!(Object.keys(m).length===Object.keys(u).length&&Object.keys(m).every(p=>Object.prototype.hasOwnProperty.call(u,p)&&m[p]===u[p])))throw new Error("Variant slugs do not match the expected dimension order")}let l=(await r(o({report_id:s,count:false}))).data.find(c=>c.id===s);if(!l||i.results.length!==l.dimensions.length)throw new Error(`Missing members for report ID ${s}`);return i},Ut=Ts;function Ds(e){let{fallback:r=true,limit:t=50}=e||{};return async o=>{let{defaultLocale:a=ea$1,locales:i=[]}=o,s=[];if(t>0){let n=i.find(d=>d===a),{searchMember:l}=await Ie().then(Qe),c=await l({query:"",limit:t,format:"plain",locale:n||ea$1,noImage:false,visible:true,report:[],dimension:[],variant:[],includes:true});c.ok===true&&(s=c.data.results.map(d=>({locale:i.find(m=>m===d.locale),params:{bespoke:[d.variant.slug,d.slug]}})));}return {fallback:r,paths:s}}}function Ms(e$1){let{pathSegmentsKey:r="bespoke"}=e$1||{};try{return bb.getStaticProps(t=>{let{dispatch:o}=t;return async a=>{await o(Te);let i=new Date().toISOString(),{locale:s=ea$1,params:n={}}=a,l=Array.from(sr(n[r])),c$1;try{c$1=await Ut(l,o,ma$1,pa$1,s);}catch(w){return console.error("[Bespoke slug validation Failed]: Return 404:",w.message,`[${s}] -> /${l.map(E=>`${E.variantSlug}/${E.memberSlug}`).join("/")}`),{notFound:!0}}o(ta$1.setPreviews(c$1.results)),await Promise.all([o(la$1("formatter",{})),o(la$1("datasource",{include:!0})),o(la$1("report",{id:c$1.results.map(w=>w.report_id),include:!0,locales:[s]}))]);let d=t.getState(),m=e(d),u=f(d),f$1=k(m,s),p=c(d),h={...b(d)},_={},O=p.filter(w=>w.settings[C.CLIENT_SIDE]).map(w=>w.id),B=Object.values(h).filter(w=>!O.includes(w.section_id)||w.type===z.SECTION_FLAG||w.type===z.GENERATOR||w.consumers?.some(D=>{let $=h[D];return $&&$.section_id!==w.section_id})?!1:!w.consumers?.some(D=>{let $=h[D];return $&&$.section_id===w.section_id&&$.type===z.GENERATOR})).map(w=>w.id);B.forEach(w=>{delete h[w];}),await o(qa(B)),Object.values(h).forEach(w=>{if(O.includes(w.section_id)&&w.type===z.GENERATOR){let E=w.consumers?.filter(C=>!B.includes(C))||[];h[w.id]={...w,_clientSideGenerator:!0,_requiredByConsumers:E.length>0,inputs:w.inputs?.filter(C=>!B.includes(C))||[],consumers:E};}});let T=Object.values(h).reduce((w,E)=>("access"in E.settings&&!["public","guest"].some(C=>!E.settings.access||E.settings.access.includes(C))&&w.push(E.id),w),[]),P=T.filter(w=>h[w].settings[C.FALLBACK]),U=Array.from(new Set([...P,...j(P,Object.values(h))])),F=T.filter(w=>[z.SELECTOR,z.MULTIHIERARCHY_SELECTOR].includes(h[w].type)),z$1=Array.from(new Set([...F,...j(F,Object.values(h))]));T=Array.from(new Set([...T,...U,...z$1,...j(T,Object.values(h))])),T.forEach(w=>{P.includes(w)?(_[w]={...h[w],type:z.FALLBACK,original_type:h[w].type},delete h[w]):F.includes(w)&&(_[w]={...h[w],settings:{...h[w].settings,[C.DISABLED]:!0}},delete h[w]),z$1.includes(w)||delete h[w];}),await o(qa(T.filter(w=>!z$1.includes(w)))),await o(ra$1(_));let q={...da$1(c$1.results),locale:s,...X$1()},K=async w=>await o(ma$1(w));return await aa({...h,..._},p,void 0,f$1,{locale:s,query:n,variables:q},void 0,K,"report",u,void 0).then(async w=>{let E=Object.keys({...h,..._}).reduce((C,D)=>(w.variables[D]&&w.status[D]||C.push(D),C),[]);await o(qa(E)),await o(ga$1.setVariableChange({...w,attributes:q})),await o(sa());}),{props:{buildTime:i}}}})}catch(t){console.error("ERROR SSR",t);}}function sr(e=[]){let r=[].concat(e),t=0;return {next(){return {value:{variantSlug:r[t++],memberSlug:r[t++]},done:t>r.length}},[Symbol.iterator](){return this}}}function Os(e$1){let{pathSegmentsKey:r="bespoke"}=e$1||{};try{return bb.getServerSideProps(t=>{let{dispatch:o}=t;return async a=>{let{section:i,block:s}=a.query,n=Object.fromEntries(Object.entries(a.query).filter(([R])=>R.match(/selector\d+id/)));if(!i&&!s)return {notFound:!0};let l=Number(i);await o(Te);let c$1=new Date().toISOString(),{locale:d=ea$1,params:m={},req:u}=a,f$1=Array.from(sr(m[r])),p;try{p=await Ut(f$1,o,ma$1,pa$1,d);}catch(R){return console.error("[Bespoke slug validation Failed]: Return 404:",R.message,`/${d}/${u.url}`),{notFound:!0}}o(ta$1.setPreviews(p.results)),await Promise.all([o(la$1("formatter",{})),o(la$1("datasource",{include:!0})),o(la$1("report",{id:p.results.map(R=>R.report_id),include:!0,locales:[d]}))]);let g=t.getState(),h=e(g),_=f(g),O=k(h,d),B=c(g).filter(R=>R.id===l),P={...b(g)},U={},F=B.filter(R=>R.settings[C.CLIENT_SIDE]).map(R=>R.id),z$1=Object.values(P).filter(R=>!F.includes(R.section_id)||R.type===z.GENERATOR||R.consumers?.some(M=>{let V=P[M];return V&&V.section_id!==R.section_id})?!1:!R.consumers?.some(M=>{let V=P[M];return V&&V.section_id!==R.section_id&&V.type===z.GENERATOR})).map(R=>R.id);z$1.forEach(R=>{delete P[R];}),await o(qa(z$1)),Object.values(P).forEach(R=>{if(F.includes(R.section_id)&&R.type===z.GENERATOR){let k=R.consumers?.filter(v=>!z$1.includes(v))||[];P[R.id]={...R,_clientSideGenerator:!0,_requiredByConsumers:k.length>0,inputs:R.inputs?.filter(v=>!z$1.includes(v))||[],consumers:k};}});let q=Object.values(P).reduce((R,k)=>("access"in k.settings&&!["public","guest"].some(v=>!k.settings.access||k.settings.access.includes(v))&&R.push(k.id),R),[]),K=q.filter(R=>P[R].settings[C.FALLBACK]),w=Array.from(new Set([...K,...j(K,Object.values(P))])),E=q.filter(R=>[z.SELECTOR,z.MULTIHIERARCHY_SELECTOR].includes(P[R].type)),C$1=Array.from(new Set([...E,...j(E,Object.values(P))]));q=Array.from(new Set([...q,...w,...C$1,...j(q,Object.values(P))])),q.forEach(R=>{K.includes(R)?(U[R]={...P[R],type:z.FALLBACK,original_type:P[R].type},delete P[R]):E.includes(R)&&(U[R]={...P[R],settings:{...P[R].settings,[C.DISABLED]:!0}},delete P[R]),C$1.includes(R)||delete P[R];}),await o(qa(q.filter(R=>!C$1.includes(R)))),await o(ra$1(U));let D={...da$1(p.results),locale:d,...X$1()},$=async R=>await o(ma$1(R));await aa({...P,...U},B,void 0,O,{locale:d,query:{...m,...n},variables:D},void 0,$,"section",_,void 0).then(async R=>{let k=Object.keys({...P,...U}).reduce((v,M)=>(R.variables[M]&&R.status[M]||v.push(M),v),[]);await Promise.all([o(qa(k)),o(ga$1.setVariableChange({...R,attributes:D})),o(sa())]);});let Y=Object.keys({...P,...U}).filter(R=>i&&s?R!==s:P[R]&&P[R].section_id!==l);return await o(qa(Y)),{props:{buildTime:c$1}}}})}catch(t){return console.error("ERROR SSR",t),async()=>({notFound:true})}}
30
+ export{Os as BespokeEmbedServerSideProps,ks as BespokeEndpointNextJsHandlerFactory,Z as BespokeGetSession,la as BespokeHandleAuth,xs as BespokeManagerServerSideProps,Ds as BespokeRendererStaticPaths,Ms as BespokeRendererStaticProps,ya as BespokeSearchUsersByMetadata,ma as BespokeUpdateCurrentUserAppMetadata,ua as BespokeUpdateCurrentUserMetadata,ga as BespokeWithApiRoleAuthRequired,Is as ReportCrosswalkHandler,Qe as dbApiFactory,nr as endpointKey,Ie as getDB,Te as useDatabaseApi};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@datawheel/bespoke",
3
- "version": "0.9.11",
3
+ "version": "0.9.12-rc.2",
4
4
  "description": "Content management system for creating automated data reports",
5
5
  "exports": {
6
6
  ".": {
@@ -1 +0,0 @@
1
- import {a as a$1}from'./chunk-7K6SKRXP.js';import {K}from'./chunk-PGBDZWWY.js';import {b as b$1,d as d$1,c}from'./chunk-2D75X364.js';import'./chunk-JU4YILPF.js';import {O,Oa,Va,Pa,J as J$1}from'./chunk-EYRXKCMJ.js';import {a}from'./chunk-P6ORTCRN.js';import {b}from'./chunk-QZ5NBDGE.js';import*as J from'd3plus-react';import {useMemo}from'react';import {useRouter}from'next/router';import {jsx}from'react/jsx-runtime';var d={...J,[c]:d$1},Z=(c,n)=>{let o={...c};return n&&(o.detectResize=false,o.detectResizeDelay=0,o.detectVisible=false,o.detectVisibleInterval=0,o.duration=0,o.shapeConfig={...o.shapeConfig,duration:0}),o};function $(c$1){let{print:n}=K(),{block:o,active:h,locale:l,variables:s,configOverride:x={}}=c$1,m=O(o),u=Oa(l),L={variables:s},N=useRouter(),{sectionVariables:g,setSectionVariables:O$1,resetSectionVariables:H}=Va(o.section_id),M=Pa(),v=a(),y=b(),b$2=JSON.stringify(g),e=useMemo(()=>{if(!m?.logic)return {error:"Add a Configuration"};let a=J$1({logic:m.logic},u,L).logic,t={router:N,section:{variables:g,setVariables:O$1,resetVariables:H},events:{fire:(p,w={})=>y("viz_interaction",{name:p,...w},{component:"Viz",blockId:o.id,sectionId:o.section_id})}};return b$1(a,u,s,l,o.id,{},t,M,v)},[o,h,s,b$2,v.status,y]),{type:r}=e.config||{},A=r&&d[r]?r:"Treemap";d[r]||(e.config={error:`"${r}" is not a valid Visualization Type`});let D=d[A],j=useMemo(()=>{let{_data:a,...t}=e.config;return Z(t,n)},[e,n]),V={locale:l,variables:s,...j,...x};return jsx("div",{className:"bespoke-Viz","data-ignore-print":V._printIgnore?"true":void 0,children:jsx("div",{style:{display:"flex",flex:"1 1 100%",minHeight:r===c?void 0:400},children:jsx(a$1,{fallback:jsx("p",{children:"Error in d3plus viz config."}),children:jsx(D,{style:{flex:1},dataFormat:a=>{let t;try{t=e.dataFormat(a);}catch(p){console.error("Error in dataFormat: ",p),t=[];}return t},linksFormat:e.linksFormat,nodesFormat:e.nodesFormat,topojsonFormat:e.topojsonFormat,config:{...V,sectionVariables:b$2}},"viz-key")})})})}export{$ as default};
@@ -1 +0,0 @@
1
- import {a as a$1}from'./chunk-7K6SKRXP.js';import {b as b$1,d,c}from'./chunk-2D75X364.js';import {O,Oa,Pa,Va,J}from'./chunk-EYRXKCMJ.js';import {a}from'./chunk-P6ORTCRN.js';import {b}from'./chunk-QZ5NBDGE.js';import {memo,useMemo}from'react';import {Center,Badge}from'@mantine/core';import*as Z from'd3plus-react';import {useRouter}from'next/router';import {jsx}from'react/jsx-runtime';var q=()=>({}),G={},m={[c]:d,...Z,...G};function K({block:o,active:e,locale:a$2,variables:s,configOverride:L={}}){let N=q(),c=O(o),u=Oa(a$2),I={variables:s},A=Pa(),g=a(),J$1=useRouter(),{sectionVariables:d,setSectionVariables:M,resetSectionVariables:R}=Va(o.section_id),p=b(),t=useMemo(()=>{if(!e)return {error:"Activate to View"};if(!c?.logic)return {error:"Add a Configuration"};let f=J({logic:c.logic},u,I).logic,n={router:J$1,section:{variables:d,setVariables:M,resetVariables:R},events:{fire:(l,x={})=>p("viz_interaction",{name:l,...x},{component:"Viz",blockId:o.id,sectionId:o.section_id})}};return b$1(f,u,s,a$2,o.id,{},n,A,g)},[c?.logic,e,s,d,g.status,p]),{type:i}=t.config||{},_=i&&m[i]?i:"Treemap";i||(t.config={error:'Visualization missing "type"'}),m[i]||(t.config={error:`"${i}" is not a valid Visualization Type`});let h=m[_],y=t.error||t.config?.error||false;if(y)return jsx(Center,{style:{height:"100%"},children:jsx(Badge,{color:"gray",variant:"outline",children:y},"type")});let{_data:Q,...w}=t.config,V={locale:a$2,variables:s,...w,...L};return N.print&&(V.detectVisible=false),jsx("div",{style:{display:"flex",flex:"1 1 100%"},children:jsx(a$1,{fallback:jsx("p",{children:"Error in d3plus viz config."}),children:jsx(h,{style:{flex:1},dataFormat:f=>{let n;try{n=t.dataFormat(f);}catch(l){console.error("Error in dataFormat: ",l),n=[];}return n},linksFormat:t.linksFormat,nodesFormat:t.nodesFormat,topojsonFormat:t.topojsonFormat,config:{...V}},"viz-key")})})}var mo=memo(K,(o,e)=>o.block.contentByLocale.logic.content===e.block.contentByLocale.logic.content&&o.active===e.active&&o.locale===e.locale&&JSON.stringify(o.variables)===JSON.stringify(e.variables)&&JSON.stringify(o.configOverride)===JSON.stringify(e.configOverride));export{mo as default};