dineway 0.1.49 → 0.2.1
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/activity-DUaz_w7p.mjs +79 -0
- package/dist/{activity-events-CwM7yxPW.mjs → activity-events-CJDvE2uc.mjs} +5 -113
- package/dist/actor-0QJ1Gbtf.mjs +37 -0
- package/dist/after-BfniwgIf.mjs +9 -0
- package/dist/{allowed-origins-CyGnbgBd.mjs → allowed-origins--OwHHiY8.mjs} +1 -1
- package/dist/api/route-utils.d.mts +9 -10
- package/dist/api/route-utils.mjs +16 -13
- package/dist/api/schemas/index.d.mts +2 -2
- package/dist/api/schemas/index.mjs +5 -4
- package/dist/{api-BMIxRIEN.mjs → api-B4PHIF4V.mjs} +93 -41
- package/dist/{api-tokens-DtvdtIkm.mjs → api-tokens-tbK_sORH.mjs} +6 -2
- package/dist/{apply-D_RlTYtC.mjs → apply-DjTqq6Ae.mjs} +117 -77
- package/dist/astro/image-endpoint.d.mts +7 -0
- package/dist/astro/image-endpoint.mjs +54 -0
- package/dist/astro/index.d.mts +34 -11
- package/dist/astro/index.mjs +163 -24
- package/dist/astro/integration/shims/use-sync-external-store-with-selector.js +71 -0
- package/dist/astro/integration/shims/use-sync-external-store.js +1 -0
- package/dist/astro/middleware/auth.d.mts +8 -18
- package/dist/astro/middleware/auth.mjs +42 -24
- package/dist/astro/middleware/redirect.mjs +13 -4
- package/dist/astro/middleware/request-context.mjs +8 -5
- package/dist/astro/middleware/seed.d.mts +1 -1
- package/dist/astro/middleware/seed.mjs +2 -2
- package/dist/astro/middleware/setup.mjs +1 -1
- package/dist/astro/middleware.mjs +389 -206
- package/dist/astro/routes/admin.astro +6 -1
- package/dist/astro/routes/api/admin/allowed-domains/_domain_.mjs +7 -6
- package/dist/astro/routes/api/admin/allowed-domains/index.mjs +7 -6
- package/dist/astro/routes/api/admin/api-tokens/_id_.mjs +4 -4
- package/dist/astro/routes/api/admin/api-tokens/index.mjs +6 -6
- package/dist/astro/routes/api/admin/briefing.mjs +21 -17
- package/dist/astro/routes/api/admin/byline-fields/_slug_/usage.mjs +4 -4
- package/dist/astro/routes/api/admin/byline-fields/_slug_.mjs +9 -8
- package/dist/astro/routes/api/admin/byline-fields/index.mjs +9 -8
- package/dist/astro/routes/api/admin/byline-fields/reorder.mjs +9 -8
- package/dist/astro/routes/api/admin/bylines/_id_/index.mjs +17 -14
- package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs +17 -14
- package/dist/astro/routes/api/admin/bylines/index.mjs +17 -14
- package/dist/astro/routes/api/admin/comments/_id_/status.mjs +14 -12
- package/dist/astro/routes/api/admin/comments/_id_.mjs +6 -5
- package/dist/astro/routes/api/admin/comments/bulk.mjs +11 -9
- package/dist/astro/routes/api/admin/comments/counts.mjs +6 -5
- package/dist/astro/routes/api/admin/comments/index.mjs +11 -9
- package/dist/astro/routes/api/admin/context/_id_/history.mjs +27 -24
- package/dist/astro/routes/api/admin/context/_id_/index.mjs +27 -24
- package/dist/astro/routes/api/admin/context/_id_/review.mjs +32 -28
- package/dist/astro/routes/api/admin/context/_id_/supersede.mjs +32 -28
- package/dist/astro/routes/api/admin/context/diff.mjs +31 -27
- package/dist/astro/routes/api/admin/context/index.mjs +32 -28
- package/dist/astro/routes/api/admin/context/stale.mjs +31 -27
- package/dist/astro/routes/api/admin/hitl-requests/_id_/index.mjs +27 -24
- package/dist/astro/routes/api/admin/hitl-requests/_id_/resolve.mjs +31 -27
- package/dist/astro/routes/api/admin/hitl-requests/index.mjs +31 -27
- package/dist/astro/routes/api/admin/hooks/exclusive/_hookName_.mjs +28 -25
- package/dist/astro/routes/api/admin/hooks/exclusive/index.mjs +3 -3
- package/dist/astro/routes/api/admin/oauth-clients/_id_.mjs +6 -6
- package/dist/astro/routes/api/admin/oauth-clients/index.mjs +6 -6
- package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs +56 -51
- package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs +56 -51
- package/dist/astro/routes/api/admin/plugins/_id_/index.mjs +47 -43
- package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs +54 -49
- package/dist/astro/routes/api/admin/plugins/_id_/update.mjs +53 -48
- package/dist/astro/routes/api/admin/plugins/index.mjs +47 -43
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/icon.mjs +2 -2
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs +46 -42
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs +53 -48
- package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs +46 -42
- package/dist/astro/routes/api/admin/plugins/updates.mjs +46 -42
- package/dist/astro/routes/api/admin/review-requests/_id_/index.mjs +5 -5
- package/dist/astro/routes/api/admin/review-requests/_id_/resolve.mjs +32 -63
- package/dist/astro/routes/api/admin/review-requests/index.d.mts +2 -1
- package/dist/astro/routes/api/admin/review-requests/index.mjs +58 -10
- package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs +46 -42
- package/dist/astro/routes/api/admin/themes/marketplace/_id_/thumbnail.mjs +2 -2
- package/dist/astro/routes/api/admin/themes/marketplace/index.mjs +46 -42
- package/dist/astro/routes/api/admin/users/_id_/disable.mjs +3 -3
- package/dist/astro/routes/api/admin/users/_id_/enable.mjs +2 -2
- package/dist/astro/routes/api/admin/users/_id_/index.mjs +8 -7
- package/dist/astro/routes/api/admin/users/_id_/send-recovery.mjs +4 -4
- package/dist/astro/routes/api/admin/users/index.mjs +7 -6
- package/dist/astro/routes/api/auth/dev-bypass.mjs +4 -4
- package/dist/astro/routes/api/auth/invite/accept.mjs +2 -2
- package/dist/astro/routes/api/auth/invite/complete.mjs +12 -11
- package/dist/astro/routes/api/auth/invite/index.mjs +9 -8
- package/dist/astro/routes/api/auth/invite/register-options.mjs +11 -10
- package/dist/astro/routes/api/auth/logout.mjs +2 -2
- package/dist/astro/routes/api/auth/magic-link/send.mjs +11 -10
- package/dist/astro/routes/api/auth/magic-link/verify.mjs +3 -3
- package/dist/astro/routes/api/auth/me.mjs +9 -8
- package/dist/astro/routes/api/auth/mode.mjs +1 -1
- package/dist/astro/routes/api/auth/oauth/_provider_/callback.mjs +3 -3
- package/dist/astro/routes/api/auth/oauth/_provider_.mjs +2 -2
- package/dist/astro/routes/api/auth/passkey/_id_.mjs +6 -5
- package/dist/astro/routes/api/auth/passkey/index.mjs +1 -1
- package/dist/astro/routes/api/auth/passkey/options.mjs +12 -11
- package/dist/astro/routes/api/auth/passkey/register/options.mjs +10 -9
- package/dist/astro/routes/api/auth/passkey/register/verify.mjs +11 -10
- package/dist/astro/routes/api/auth/passkey/verify.mjs +11 -10
- package/dist/astro/routes/api/auth/setup-token/index.mjs +5 -5
- package/dist/astro/routes/api/auth/setup-token/verify.mjs +2 -2
- package/dist/astro/routes/api/auth/signup/complete.mjs +12 -11
- package/dist/astro/routes/api/auth/signup/request.mjs +11 -10
- package/dist/astro/routes/api/auth/signup/verify.mjs +2 -2
- package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs +15 -13
- package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.d.mts +8 -0
- package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.mjs +160 -0
- package/dist/astro/routes/api/content/_collection_/_id_/compare.mjs +2 -2
- package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs +6 -5
- package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs +6 -5
- package/dist/astro/routes/api/content/_collection_/_id_/permanent.mjs +6 -5
- package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs +11 -10
- package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs +49 -20
- package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs +6 -5
- package/dist/astro/routes/api/content/_collection_/_id_/revisions.mjs +2 -2
- package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs +67 -32
- package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs +16 -14
- package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs +2 -2
- package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs +6 -5
- package/dist/astro/routes/api/content/_collection_/_id_.mjs +11 -9
- package/dist/astro/routes/api/content/_collection_/authors.mjs +2 -2
- package/dist/astro/routes/api/content/_collection_/index.mjs +11 -9
- package/dist/astro/routes/api/content/_collection_/trash.mjs +7 -6
- package/dist/astro/routes/api/dashboard.mjs +9 -8
- package/dist/astro/routes/api/dev/emails.mjs +2 -2
- package/dist/astro/routes/api/health.mjs +1 -1
- package/dist/astro/routes/api/import/probe.d.mts +3 -3
- package/dist/astro/routes/api/import/probe.mjs +22 -10
- package/dist/astro/routes/api/import/wordpress/analyze.mjs +9 -6
- package/dist/astro/routes/api/import/wordpress/execute.d.mts +18 -1
- package/dist/astro/routes/api/import/wordpress/execute.mjs +85 -37
- package/dist/astro/routes/api/import/wordpress/media.d.mts +12 -1
- package/dist/astro/routes/api/import/wordpress/media.mjs +20 -14
- package/dist/astro/routes/api/import/wordpress/prepare.mjs +36 -32
- package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts +17 -1
- package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs +121 -100
- package/dist/astro/routes/api/import/wordpress-plugin/analyze.d.mts +1 -1
- package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs +24 -12
- package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts +55 -2
- package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs +284 -55
- package/dist/astro/routes/api/manifest.mjs +14 -5
- package/dist/astro/routes/api/mcp.mjs +753 -170
- package/dist/astro/routes/api/media/_id_/confirm.mjs +38 -10
- package/dist/astro/routes/api/media/_id_.mjs +11 -7
- package/dist/astro/routes/api/media/file/_...key_.mjs +1 -1
- package/dist/astro/routes/api/media/providers/_providerId_/_itemId_.mjs +2 -2
- package/dist/astro/routes/api/media/providers/_providerId_/index.mjs +2 -2
- package/dist/astro/routes/api/media/providers/index.mjs +2 -2
- package/dist/astro/routes/api/media/upload-url.mjs +11 -10
- package/dist/astro/routes/api/media.mjs +28 -35
- package/dist/astro/routes/api/menus/_name_/items/_id_.mjs +32 -28
- package/dist/astro/routes/api/menus/_name_/items.mjs +32 -28
- package/dist/astro/routes/api/menus/_name_/reorder.mjs +32 -28
- package/dist/astro/routes/api/menus/_name_/translations.mjs +32 -28
- package/dist/astro/routes/api/menus/_name_.mjs +32 -28
- package/dist/astro/routes/api/menus/index.mjs +32 -28
- package/dist/astro/routes/api/oauth/authorize.mjs +7 -7
- package/dist/astro/routes/api/oauth/device/authorize.mjs +6 -6
- package/dist/astro/routes/api/oauth/device/code.mjs +9 -9
- package/dist/astro/routes/api/oauth/device/token.mjs +8 -8
- package/dist/astro/routes/api/oauth/register.mjs +4 -4
- package/dist/astro/routes/api/oauth/token/refresh.mjs +6 -6
- package/dist/astro/routes/api/oauth/token/revoke.mjs +6 -6
- package/dist/astro/routes/api/oauth/token.mjs +6 -6
- package/dist/astro/routes/api/openapi.json.mjs +4 -3
- package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs +46 -31
- package/dist/astro/routes/api/redirects/404s/index.mjs +11 -10
- package/dist/astro/routes/api/redirects/404s/summary.mjs +11 -10
- package/dist/astro/routes/api/redirects/_id_.mjs +33 -29
- package/dist/astro/routes/api/redirects/index.mjs +33 -29
- package/dist/astro/routes/api/revisions/_revisionId_/index.mjs +2 -2
- package/dist/astro/routes/api/revisions/_revisionId_/restore.mjs +2 -2
- package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs +48 -43
- package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs +48 -43
- package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs +48 -43
- package/dist/astro/routes/api/schema/collections/_slug_/index.mjs +48 -43
- package/dist/astro/routes/api/schema/collections/index.mjs +48 -43
- package/dist/astro/routes/api/schema/index.mjs +14 -15
- package/dist/astro/routes/api/schema/orphans/_slug_.mjs +46 -42
- package/dist/astro/routes/api/schema/orphans/index.mjs +46 -42
- package/dist/astro/routes/api/search/enable.mjs +11 -10
- package/dist/astro/routes/api/search/index.mjs +10 -9
- package/dist/astro/routes/api/search/rebuild.mjs +11 -10
- package/dist/astro/routes/api/search/stats.mjs +6 -6
- package/dist/astro/routes/api/search/suggest.mjs +10 -9
- package/dist/astro/routes/api/sections/_slug_.mjs +32 -28
- package/dist/astro/routes/api/sections/index.mjs +32 -28
- package/dist/astro/routes/api/settings/email.mjs +4 -4
- package/dist/astro/routes/api/settings.mjs +32 -28
- package/dist/astro/routes/api/setup/admin-verify.mjs +14 -13
- package/dist/astro/routes/api/setup/admin.mjs +12 -11
- package/dist/astro/routes/api/setup/dev-bypass.mjs +31 -25
- package/dist/astro/routes/api/setup/dev-reset.mjs +2 -2
- package/dist/astro/routes/api/setup/index.mjs +29 -25
- package/dist/astro/routes/api/setup/status.mjs +3 -3
- package/dist/astro/routes/api/snapshot.mjs +8 -7
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs +35 -31
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs +35 -31
- package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs +35 -31
- package/dist/astro/routes/api/taxonomies/index.mjs +35 -31
- package/dist/astro/routes/api/themes/preview.mjs +5 -5
- package/dist/astro/routes/api/typegen.mjs +4 -4
- package/dist/astro/routes/api/well-known/auth.mjs +3 -3
- package/dist/astro/routes/api/well-known/oauth-authorization-server.mjs +3 -3
- package/dist/astro/routes/api/well-known/oauth-protected-resource.mjs +3 -3
- package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs +31 -27
- package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs +32 -28
- package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs +32 -28
- package/dist/astro/routes/api/widget-areas/_name_.mjs +29 -26
- package/dist/astro/routes/api/widget-areas/index.mjs +32 -28
- package/dist/astro/routes/api/widget-components.mjs +2 -2
- package/dist/astro/routes/robots.txt.mjs +8 -7
- package/dist/astro/routes/sitemap-_collection_.xml.mjs +23 -14
- package/dist/astro/routes/sitemap.xml.mjs +9 -8
- package/dist/astro/session-driver.d.mts +1 -1
- package/dist/astro/session-driver.mjs +2 -2
- package/dist/astro/types.d.mts +22 -13
- package/dist/{audit-BeNsSyfU.mjs → audit-B2pRxZ20.mjs} +1 -1
- package/dist/auth/providers/github.d.mts +1 -1
- package/dist/auth/providers/google.d.mts +1 -1
- package/dist/{auth-control-guard-Dr14I98m.mjs → auth-control-guard-D71jourk.mjs} +1 -1
- package/dist/{authorize-BLO0m7fW.mjs → authorize-ZXPGPwKn.mjs} +1 -1
- package/dist/{briefing-CkTee1ex.mjs → briefing-0rf-su3-.mjs} +90 -28
- package/dist/{briefing-DJX6irto.mjs → briefing-kRhegBoF.mjs} +2 -1
- package/dist/bundle-CEcdUa1s.mjs +602 -0
- package/dist/{byline-BVC1lV6G.mjs → byline-7xR185Ly.mjs} +30 -62
- package/dist/{byline-fields-Cj39WhXC.mjs → byline-fields-BKzA0fJU.mjs} +1 -1
- package/dist/{byline-fields-uJlygdzM.d.mts → byline-fields-Ckeqd1OY.d.mts} +88 -35
- package/dist/{byline-fields-cNrLJVRs.mjs → byline-fields-WN7RQT4q.mjs} +10 -4
- package/dist/{byline-registry-4v6tXMNX.mjs → byline-registry-Ba54M74c.mjs} +2 -2
- package/dist/{bylines-LN9XISRo.mjs → bylines-C-EL6dh3.mjs} +9 -3
- package/dist/{bylines-DwokOFj6.mjs → bylines-CmZFCMr0.mjs} +5 -5
- package/dist/{cache-Bac05gBd.mjs → cache-DkVCKGio.mjs} +2 -2
- package/dist/{chunks-CuUt7K50.mjs → chunks-ChGNDY8r.mjs} +1 -1
- package/dist/cli/index.d.mts +29 -1
- package/dist/cli/index.mjs +1466 -1763
- package/dist/cli/plugin-kit.d.mts +75 -0
- package/dist/cli/plugin-kit.mjs +4 -0
- package/dist/client/external-auth-headers.d.mts +1 -1
- package/dist/client/index.d.mts +27 -52
- package/dist/client/index.mjs +34 -6
- package/dist/client-factory-BDD9azPJ.mjs +233 -0
- package/dist/{comment-Beue8-15.mjs → comment-DFALgsJD.mjs} +13 -3
- package/dist/comment-reaction-C37bf99u.mjs +58 -0
- package/dist/{comments-DcjFIfqX.mjs → comments-B3NwDBxl.mjs} +1 -1
- package/dist/{content-CBxYGWfL.mjs → content-DJcAYFhz.mjs} +51 -34
- package/dist/content-refresh-B4ZCmxgd.mjs +1576 -0
- package/dist/{context-Df1xVYyr.mjs → context-DnpXcp6Y.mjs} +2 -2
- package/dist/{context-CQVNZaR8.mjs → context-fSCYLL3c.mjs} +125 -53
- package/dist/{context-route-helpers-B9wj8Rmh.mjs → context-route-helpers-CI8XzcsK.mjs} +2 -1
- package/dist/{cron-DxCAU_Sn.mjs → cron-B1SL_lsb.mjs} +7 -3
- package/dist/{dashboard-B7ZUNuyF.mjs → dashboard-D0nj5oWg.mjs} +4 -4
- package/dist/db/index.d.mts +3 -3
- package/dist/db/index.mjs +1 -1
- package/dist/db/libsql.d.mts +1 -1
- package/dist/db/postgres.d.mts +1 -1
- package/dist/db/sqlite.d.mts +1 -1
- package/dist/{device-flow-BZVGftqi.mjs → device-flow-BJe6VEhP.mjs} +5 -5
- package/dist/{placeholder-d54Qr_7n.mjs → enrich-Ck9tfMqe.mjs} +36 -9
- package/dist/{error-DCSuUAZW.mjs → error-CSVaQNZy.mjs} +5 -0
- package/dist/{experimental-workflows-CSMffP6q.mjs → experimental-workflows-GVhUgzEs.mjs} +1 -1
- package/dist/field-defs-cache-DL-T2XVS.mjs +49 -0
- package/dist/forgeway-seo-client-G5ddhVHd.mjs +456 -0
- package/dist/{fts-manager-B5l_qwrA.mjs → fts-manager-ewTGohf4.mjs} +1 -1
- package/dist/{hitl-requests-7NlzVeUA.mjs → hitl-requests-DEFj8e6u.mjs} +2 -2
- package/dist/{hitl-route-helpers-k---_H3-.mjs → hitl-route-helpers-C23JHaWz.mjs} +5 -4
- package/dist/import-CXXL5pip.mjs +1354 -0
- package/dist/index-DcnOCD1e.d.mts +375 -0
- package/dist/index.d.mts +15 -16
- package/dist/index.mjs +85 -70
- package/dist/{jsonld-DZ67souc.d.mts → jsonld-DzKbhRZ4.d.mts} +8 -4
- package/dist/{load-D9OiGr2m.mjs → load-CFtJRT3c.mjs} +1 -1
- package/dist/{loader--GOYux8M.mjs → loader-aWkkc1_o.mjs} +117 -31
- package/dist/{manifest-schema-qh2P7RDX.mjs → manifest-schema-uA6pRFXi.mjs} +38 -1
- package/dist/mcp-reviewed-executor-Dn52L_yY.mjs +558 -0
- package/dist/media/image-endpoint.d.mts +32 -0
- package/dist/media/image-endpoint.mjs +111 -0
- package/dist/media/index.d.mts +27 -2
- package/dist/media/index.mjs +5 -3
- package/dist/media/local-runtime.d.mts +15 -11
- package/dist/media/local-runtime.mjs +9 -7
- package/dist/{media-CbKyYukG.mjs → media-CVMOoywq.mjs} +3 -1
- package/dist/{media-allowlist-BYxJIcTO.mjs → media-allowlist-zDNJmXCo.mjs} +1 -1
- package/dist/media-url-BdoLPvg8.mjs +20 -0
- package/dist/{menus-C7F0sCrC.mjs → menus-CCG2z5um.mjs} +80 -15
- package/dist/{menus-BZbXf-ej.mjs → menus-CmyIkRG5.mjs} +19 -5
- package/dist/{normalize-ByemhhfW.mjs → normalize-Cyt7JdF7.mjs} +8 -1
- package/dist/{oauth-authorization-DF-LCsIA.mjs → oauth-authorization-B9H7X85L.mjs} +5 -5
- package/dist/{oauth-clients-Du-V0fEm.mjs → oauth-clients-Dwl32-Uj.mjs} +2 -2
- package/dist/object-cache/memory.d.mts +14 -0
- package/dist/object-cache/memory.mjs +55 -0
- package/dist/object-cache-D51qOseS.mjs +419 -0
- package/dist/output-DhBe5_Pi.mjs +68 -0
- package/dist/page/index.d.mts +10 -3
- package/dist/page/index.mjs +2 -2
- package/dist/{parse-CneSgl7-.mjs → parse-i15EFSAE.mjs} +1 -1
- package/dist/{parser-DxfsARXL.mjs → parser-06LLLL4E.mjs} +151 -9
- package/dist/{placeholder-CXfoCtCd.d.mts → placeholder-DkWkXfDI.d.mts} +12 -4
- package/dist/plugin-utils.d.mts +8 -9
- package/dist/plugins/adapt-sandbox-entry.d.mts +8 -9
- package/dist/plugins/adapt-sandbox-entry.mjs +13 -2
- package/dist/{plugins-DzfqRREq.mjs → plugins-CPA2PtfY.mjs} +919 -66
- package/dist/{transport-LSdZVXHF.mjs → portable-text-BASHceim.mjs} +1 -134
- package/dist/portable-text-E79LyjGo.d.mts +45 -0
- package/dist/{preview-C-3YTX2U.mjs → preview-BjedZm8G.mjs} +4 -3
- package/dist/process-cache-CCDgti7j.mjs +106 -0
- package/dist/project-env-DKibmuP8.mjs +95 -0
- package/dist/{provider-loader-9it4vd6L.d.mts → provider-loader-DC2JdWeO.d.mts} +1 -1
- package/dist/{public-url-B4xV4rGa.d.mts → public-url-DQJCnYi9.d.mts} +1 -1
- package/dist/publication-authorization-RKiHXKtq.mjs +985 -0
- package/dist/{query-CZ3TH_Uu.mjs → query-C2U5u5_p.mjs} +11 -6
- package/dist/{query-Ds0EnMFX.mjs → query-DEv5x6yB.mjs} +281 -76
- package/dist/{rate-limit-i0G3IAOX.mjs → rate-limit-DglsAJSw.mjs} +2 -2
- package/dist/{redirect-CEACczxo.mjs → redirect-ubhEqQCQ.mjs} +2 -2
- package/dist/{redirects-ocRJmQHP.mjs → redirects-Bhpm8bRe.mjs} +35 -19
- package/dist/{redirects-DYj1yPxs.mjs → redirects-xs2yahLq.mjs} +47 -24
- package/dist/{registry-D7HACema.mjs → registry-BYYyb2tF.mjs} +148 -81
- package/dist/request-context.d.mts +2 -0
- package/dist/{request-meta-DAb6xaP9.mjs → request-meta-CFe1tW2M.mjs} +1 -1
- package/dist/review-payload-BysRWpxS.mjs +111 -0
- package/dist/{review-requests-BW2NxY-l.mjs → review-requests-CTWGnWUt.mjs} +1 -1
- package/dist/review-requests-D42VEP1l.mjs +142 -0
- package/dist/review-route-helpers-C31vO6SI.mjs +41 -0
- package/dist/runner-BgmttQmD.mjs +7444 -0
- package/dist/{runner-09sTqtv0.d.mts → runner-D6hzs8L9.d.mts} +1 -1
- package/dist/runtime.d.mts +9 -10
- package/dist/runtime.mjs +3 -3
- package/dist/schema-DUtnZxjZ.mjs +8 -0
- package/dist/{search-Gdrqj582.mjs → search-DUKgZUlm.mjs} +5 -3
- package/dist/{secrets-CeGpBFV2.mjs → secrets-ZV5rd8yV.mjs} +14 -11
- package/dist/{sections-BOjU13Y-.mjs → sections-DvFgsnda.mjs} +2 -2
- package/dist/seed/index.d.mts +2 -2
- package/dist/seed/index.mjs +21 -18
- package/dist/seo/index.d.mts +1 -1
- package/dist/seo/index.mjs +3 -12
- package/dist/{seo-5lJOtB5J.mjs → seo-BLszyJxd.mjs} +22 -4
- package/dist/{seo-CLj8lS7Q.mjs → seo-BU8MLCS9.mjs} +5 -2
- package/dist/{seo-contributions-CqVvReEj.mjs → seo-contributions-GnCuL1ML.mjs} +11 -3
- package/dist/{service-jGlhrICs.mjs → service-FL3fB0Rx.mjs} +2 -2
- package/dist/session-user-Ct6GBLvn.mjs +22 -0
- package/dist/{settings-CUXOxzsT.mjs → settings-BECcAIRH.mjs} +28 -55
- package/dist/{settings-DlBsT2VS.mjs → settings-EzADu-dd.mjs} +2 -2
- package/dist/{setup-complete-BRrdPYjZ.mjs → setup-complete-Da0axZEE.mjs} +1 -1
- package/dist/{site-activity-DONFrMBJ.mjs → site-activity-h8smOlYI.mjs} +1 -1
- package/dist/{site-context-C8Az_P_I.mjs → site-context-B8T1kpUP.mjs} +337 -530
- package/dist/{site-url-DIMD68go.mjs → site-url-DJEid0ml.mjs} +1 -1
- package/dist/stable-hash-DshcXvRE.mjs +19 -0
- package/dist/status-NqWOSFAD.mjs +21 -0
- package/dist/storage/local.d.mts +1 -1
- package/dist/storage/local.mjs +1 -1
- package/dist/storage/s3.d.mts +1 -1
- package/dist/storage/s3.mjs +1 -1
- package/dist/{taxonomies-D9Sw4wWM.mjs → taxonomies-BiM9NtgW.mjs} +36 -29
- package/dist/taxonomies-DSnY5nOa.mjs +443 -0
- package/dist/{taxonomy-B169Nm6B.mjs → taxonomy-0k_vRVsD.mjs} +44 -9
- package/dist/transport-C46KHLMP.mjs +134 -0
- package/dist/types-A8fPOJnl.mjs +69 -0
- package/dist/types-BLQCz46p.d.mts +118 -0
- package/dist/{types-CwawBUTa.d.mts → types-B_FlxIIl.d.mts} +4 -1
- package/dist/{types-CSgR9nQB.mjs → types-ChxYDRvx.mjs} +1 -1
- package/dist/{types-GaCtZ1k9.d.mts → types-Cw0PeCT_.d.mts} +18 -0
- package/dist/types-DuQn1G7-.d.mts +2973 -0
- package/dist/{runtime-C4-2lSFg.d.mts → types-DwoUifGE.d.mts} +5668 -3000
- package/dist/{types-DRIKLmJI.d.mts → types-opjX_kz6.d.mts} +17 -2
- package/dist/ui/server-runtime.d.mts +13 -15
- package/dist/ui/server-runtime.mjs +24 -20
- package/dist/url-guoXQQcV.mjs +33 -0
- package/dist/{user-DTLoZs16.mjs → user-BH-n01y3.mjs} +2 -2
- package/dist/{utils-B8hBJ9Oz.mjs → utils-D1SrKGtP.mjs} +129 -7
- package/dist/{validate-DzjCdy6v.d.mts → validate-CbVFoJgc.d.mts} +65 -8
- package/dist/{validate-DWmPO6oj.mjs → validate-D1HL-oLR.mjs} +11 -6
- package/dist/version-C3iVRuaF.mjs +6 -0
- package/dist/{widgets-BpJ8EpPd.mjs → widgets-BZrLrNgS.mjs} +46 -43
- package/dist/{wordpress-slugs-DHNR9LpG.mjs → wordpress-slugs-C3PWcowq.mjs} +1 -1
- package/dist/{zod-generator-K91-g665.mjs → zod-generator-C7AsLpSB.mjs} +42 -14
- package/package.json +38 -8
- package/src/components/Block.astro +50 -0
- package/src/components/Comments.astro +143 -1
- package/src/components/DinewayHead.astro +19 -2
- package/src/components/DinewayImage.astro +66 -33
- package/src/components/DinewayMedia.astro +1 -2
- package/src/components/Image.astro +85 -40
- package/src/components/InlinePortableTextEditor.tsx +12 -2
- package/src/components/JsonLdScript.astro +9 -0
- package/src/components/LiveSearch.astro +40 -4
- package/src/components/index.ts +4 -0
- package/src/components/live-search-routing.ts +30 -0
- package/src/components/portable-text-text-align.ts +15 -0
- package/src/ui.ts +2 -0
- package/dist/entity-aliases-4y93Yjuc.mjs +0 -51
- package/dist/import-4YBXbDkI.mjs +0 -684
- package/dist/index-CZiWCQDp.d.mts +0 -227
- package/dist/review-requests-Qum4713s.mjs +0 -79
- package/dist/runner-DzIpHGND.mjs +0 -2836
- package/dist/schema-Bsi-VpYv.mjs +0 -8
- package/dist/taxonomies-CZ-_DitR.mjs +0 -327
- package/dist/types-CuJOqHfM.d.mts +0 -758
- package/dist/types-DSPGWjxO.d.mts +0 -1247
- package/dist/types-nP9vGUFq.d.mts +0 -56
- package/dist/version-C4gfn0PJ.mjs +0 -6
- /package/dist/{adapters-OQCImOL7.d.mts → adapters-BiRymx02.d.mts} +0 -0
- /package/dist/{api-tokens-CYUoFGo7.mjs → api-tokens-Ypaly90d.mjs} +0 -0
- /package/dist/{challenge-store-DFxX0_15.mjs → challenge-store-D5pSY2S1.mjs} +0 -0
- /package/dist/{components--pg6zBvu.mjs → components-DImzlLhb.mjs} +0 -0
- /package/dist/{context-types-r8oFvyOq.mjs → context-types-eBuMDAg-.mjs} +0 -0
- /package/dist/{default-B6iaLvP7.mjs → default-D4Vygcy_.mjs} +0 -0
- /package/dist/{email-console-BOVqIYpB.mjs → email-console-Bp0r68iF.mjs} +0 -0
- /package/dist/{escape-BDgouFFY.mjs → escape-DN4Qmjsl.mjs} +0 -0
- /package/dist/{hash-BPmX6P8I.mjs → hash-mxxx2oPW.mjs} +0 -0
- /package/dist/{mime-CbKsKDCB.mjs → mime-C0vOHFm7.mjs} +0 -0
- /package/dist/{mode-CZqCF9dZ.mjs → mode-C8yZnIlR.mjs} +0 -0
- /package/dist/{oauth-state-store-qncPB_IU.mjs → oauth-state-store-CndT35iw.mjs} +0 -0
- /package/dist/{oauth-user-lookup-BFjWF8wK.mjs → oauth-user-lookup-CMehAaKs.mjs} +0 -0
- /package/dist/{options-LsPjZlqD.mjs → options-DQPTH5n0.mjs} +0 -0
- /package/dist/{passkey-config-DzHQK90v.mjs → passkey-config-NYukYGed.mjs} +0 -0
- /package/dist/{patterns-DKAX6oqN.mjs → patterns-CoqlXUvk.mjs} +0 -0
- /package/dist/{provider-loader-DzUxejk7.mjs → provider-loader-BtfrrzfD.mjs} +0 -0
- /package/dist/{public-url-B_m9IwdV.mjs → public-url-Cp6hyjVR.mjs} +0 -0
- /package/dist/{redirect-BjIBtDWY.mjs → redirect-DrbEmU9a.mjs} +0 -0
- /package/dist/{request-cache-ho99schz.mjs → request-cache-CBFjCwSt.mjs} +0 -0
- /package/dist/{resolve-DTuDyYKs.mjs → resolve-DE71WcL9.mjs} +0 -0
- /package/dist/{setup-nonce-pyGfc9hV.mjs → setup-nonce-BtkKnvxQ.mjs} +0 -0
- /package/dist/{sidecar-client-mJxwayYN.mjs → sidecar-client-Ctzfyyp-.mjs} +0 -0
- /package/dist/{slugify-BqebcqBg.mjs → slugify-KSsVD_D3.mjs} +0 -0
- /package/dist/{ssrf-DiKqWd3N.mjs → ssrf-FJqwQzj4.mjs} +0 -0
- /package/dist/{tokens-SLmgowfd.mjs → tokens-BDQU29Vd.mjs} +0 -0
- /package/dist/{transaction-CFLhEOuH.mjs → transaction-0LEAAy8R.mjs} +0 -0
- /package/dist/{transport-BnsNxh2l.d.mts → transport-D9pKAzFP.d.mts} +0 -0
- /package/dist/{trusted-proxy-BgIIcbsN.mjs → trusted-proxy-Dm7Mxvt6.mjs} +0 -0
- /package/dist/{types-CJ8DkL0q.mjs → types-B7TDDFMG.mjs} +0 -0
- /package/dist/{types-Dryvv7LH.d.mts → types-g0zMtraY.d.mts} +0 -0
- /package/dist/{types-Cg276-3z.mjs → types-mVVgRPaU.mjs} +0 -0
- /package/dist/{types-DZpT-PnG.d.mts → types-wFu80FrO.d.mts} +0 -0
- /package/dist/{url-w7Mp5qAD.mjs → url-EMAguGVk.mjs} +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { _ as toPublicContextDiff, v as toPublicContextEntry, y as toPublicContextEntryPage } from "./site-context-B8T1kpUP.mjs";
|
|
2
|
+
import { a as ContextRepository, i as parseSiteBriefingScope, n as SiteBriefingError } from "./briefing-0rf-su3-.mjs";
|
|
3
3
|
|
|
4
4
|
//#region src/api/handlers/context.ts
|
|
5
5
|
async function handleContextEntryList(db, input = {}) {
|
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
import { n as validateJsonFieldName } from "./validate-VPnKoIzW.mjs";
|
|
2
2
|
import { c as jsonExtractExpr } from "./dialect-helpers-fk43GbDb.mjs";
|
|
3
|
-
import { i as encodeCursor, r as decodeCursor } from "./types-
|
|
4
|
-
import { t as ContentRepository } from "./content-
|
|
5
|
-
import { t as MediaRepository } from "./media-
|
|
6
|
-
import { t as UserRepository } from "./user-
|
|
7
|
-
import { t as OptionsRepository } from "./options-
|
|
8
|
-
import { t as withTransaction } from "./transaction-
|
|
9
|
-
import { t as
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
3
|
+
import { i as encodeCursor, r as decodeCursor } from "./types-ChxYDRvx.mjs";
|
|
4
|
+
import { t as ContentRepository } from "./content-DJcAYFhz.mjs";
|
|
5
|
+
import { t as MediaRepository } from "./media-CVMOoywq.mjs";
|
|
6
|
+
import { t as UserRepository } from "./user-BH-n01y3.mjs";
|
|
7
|
+
import { t as OptionsRepository } from "./options-DQPTH5n0.mjs";
|
|
8
|
+
import { t as withTransaction } from "./transaction-0LEAAy8R.mjs";
|
|
9
|
+
import { t as enrichImageMetadata } from "./enrich-Ck9tfMqe.mjs";
|
|
10
|
+
import { t as SeoRepository } from "./seo-BU8MLCS9.mjs";
|
|
11
|
+
import { a as markContentMediaUsageCollectionStaleSafely } from "./content-refresh-B4ZCmxgd.mjs";
|
|
12
|
+
import { a as validateExternalUrl, i as stripCredentialHeaders, t as SsrfError } from "./ssrf-FJqwQzj4.mjs";
|
|
13
|
+
import { t as CronAccessImpl } from "./cron-B1SL_lsb.mjs";
|
|
12
14
|
import { sql } from "kysely";
|
|
13
15
|
import { ulid } from "ulidx";
|
|
14
16
|
|
|
@@ -486,37 +488,58 @@ function createContentAccessWithWrite(db) {
|
|
|
486
488
|
...createContentAccess(db),
|
|
487
489
|
async create(collection, data) {
|
|
488
490
|
const { fields, seo } = splitSeoFromInput(data);
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
const
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
491
|
+
let contentMutated = false;
|
|
492
|
+
try {
|
|
493
|
+
const created = await withTransaction(db, async (trx) => {
|
|
494
|
+
const trxContentRepo = new ContentRepository(trx);
|
|
495
|
+
const trxSeoRepo = new SeoRepository(trx);
|
|
496
|
+
const hasSeo = await assertSeoEnabled(trxSeoRepo, collection, seo);
|
|
497
|
+
const item = await trxContentRepo.create({
|
|
498
|
+
type: collection,
|
|
499
|
+
data: fields
|
|
500
|
+
});
|
|
501
|
+
contentMutated = true;
|
|
502
|
+
const result = toPluginContentItem(item);
|
|
503
|
+
if (hasSeo) result.seo = seo !== void 0 ? await trxSeoRepo.upsert(collection, item.id, seo) : await trxSeoRepo.get(collection, item.id);
|
|
504
|
+
return result;
|
|
496
505
|
});
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
506
|
+
await markContentMediaUsageCollectionStaleSafely(db, collection, "CONTENT_USAGE_STALE");
|
|
507
|
+
return created;
|
|
508
|
+
} catch (error) {
|
|
509
|
+
if (contentMutated) await markContentMediaUsageCollectionStaleSafely(db, collection, "CONTENT_USAGE_STALE");
|
|
510
|
+
throw error;
|
|
511
|
+
}
|
|
501
512
|
},
|
|
502
513
|
async update(collection, id, data) {
|
|
503
514
|
const { fields, seo } = splitSeoFromInput(data);
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
const
|
|
508
|
-
|
|
509
|
-
const
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
515
|
+
const hasFieldUpdates = Object.keys(fields).length > 0;
|
|
516
|
+
let contentMutated = false;
|
|
517
|
+
try {
|
|
518
|
+
const updated = await withTransaction(db, async (trx) => {
|
|
519
|
+
const trxContentRepo = new ContentRepository(trx);
|
|
520
|
+
const trxSeoRepo = new SeoRepository(trx);
|
|
521
|
+
const hasSeo = await assertSeoEnabled(trxSeoRepo, collection, seo);
|
|
522
|
+
const item = hasFieldUpdates ? await trxContentRepo.update(collection, id, { data: fields }) : await (async () => {
|
|
523
|
+
const existing = await trxContentRepo.findById(collection, id);
|
|
524
|
+
if (!existing) throw new Error("Content not found");
|
|
525
|
+
return existing;
|
|
526
|
+
})();
|
|
527
|
+
if (hasFieldUpdates) contentMutated = true;
|
|
528
|
+
const result = toPluginContentItem(item);
|
|
529
|
+
if (hasSeo) result.seo = seo !== void 0 ? await trxSeoRepo.upsert(collection, item.id, seo) : await trxSeoRepo.get(collection, item.id);
|
|
530
|
+
return result;
|
|
531
|
+
});
|
|
532
|
+
if (hasFieldUpdates) await markContentMediaUsageCollectionStaleSafely(db, collection, "CONTENT_USAGE_STALE");
|
|
533
|
+
return updated;
|
|
534
|
+
} catch (error) {
|
|
535
|
+
if (contentMutated) await markContentMediaUsageCollectionStaleSafely(db, collection, "CONTENT_USAGE_STALE");
|
|
536
|
+
throw error;
|
|
537
|
+
}
|
|
517
538
|
},
|
|
518
539
|
async delete(collection, id) {
|
|
519
|
-
|
|
540
|
+
const deleted = await new ContentRepository(db).delete(collection, id);
|
|
541
|
+
if (deleted) await markContentMediaUsageCollectionStaleSafely(db, collection, "CONTENT_USAGE_STALE");
|
|
542
|
+
return deleted;
|
|
520
543
|
}
|
|
521
544
|
};
|
|
522
545
|
}
|
|
@@ -561,13 +584,38 @@ function createMediaAccess(db) {
|
|
|
561
584
|
}
|
|
562
585
|
/**
|
|
563
586
|
* Create full media access with write operations.
|
|
564
|
-
*
|
|
587
|
+
*
|
|
588
|
+
* `getUploadUrlFn` is optional. When it is omitted and storage is configured,
|
|
589
|
+
* `getUploadUrl()` is derived from storage by creating a pending media row and
|
|
590
|
+
* signed upload URL, matching the REST signed-upload path. `upload()` only
|
|
591
|
+
* needs storage. If storage is not provided, both throw at call time.
|
|
565
592
|
*/
|
|
566
593
|
function createMediaAccessWithWrite(db, getUploadUrlFn, storage) {
|
|
567
594
|
const mediaRepo = new MediaRepository(db);
|
|
595
|
+
const readAccess = createMediaAccess(db);
|
|
596
|
+
const getUploadUrl = getUploadUrlFn ?? (async (filename, contentType) => {
|
|
597
|
+
if (!storage) throw new Error("Media getUploadUrl() requires a storage backend. Configure storage in PluginContextFactoryOptions.");
|
|
598
|
+
const basename = filename.split("/").pop() ?? filename;
|
|
599
|
+
const dotIdx = basename.lastIndexOf(".");
|
|
600
|
+
const ext = dotIdx > 0 ? basename.slice(dotIdx).toLowerCase() : "";
|
|
601
|
+
const storageKey = `${ulid()}${ext}`;
|
|
602
|
+
const media = await mediaRepo.createPending({
|
|
603
|
+
filename: basename,
|
|
604
|
+
mimeType: contentType,
|
|
605
|
+
storageKey
|
|
606
|
+
});
|
|
607
|
+
return {
|
|
608
|
+
uploadUrl: (await storage.getSignedUploadUrl({
|
|
609
|
+
key: storageKey,
|
|
610
|
+
contentType,
|
|
611
|
+
expiresIn: 3600
|
|
612
|
+
})).url,
|
|
613
|
+
mediaId: media.id
|
|
614
|
+
};
|
|
615
|
+
});
|
|
568
616
|
return {
|
|
569
|
-
...
|
|
570
|
-
getUploadUrl
|
|
617
|
+
...readAccess,
|
|
618
|
+
getUploadUrl,
|
|
571
619
|
async upload(filename, contentType, bytes) {
|
|
572
620
|
if (!storage) throw new Error("Media upload() requires a storage backend. Configure storage in PluginContextFactoryOptions.");
|
|
573
621
|
const keyPrefix = ulid();
|
|
@@ -579,6 +627,7 @@ function createMediaAccessWithWrite(db, getUploadUrlFn, storage) {
|
|
|
579
627
|
body: new Uint8Array(bytes),
|
|
580
628
|
contentType
|
|
581
629
|
});
|
|
630
|
+
const enriched = await enrichImageMetadata(new Uint8Array(bytes), contentType);
|
|
582
631
|
let media;
|
|
583
632
|
try {
|
|
584
633
|
media = await mediaRepo.create({
|
|
@@ -586,7 +635,11 @@ function createMediaAccessWithWrite(db, getUploadUrlFn, storage) {
|
|
|
586
635
|
mimeType: contentType,
|
|
587
636
|
size: bytes.byteLength,
|
|
588
637
|
storageKey,
|
|
589
|
-
status: "ready"
|
|
638
|
+
status: "ready",
|
|
639
|
+
width: enriched.width,
|
|
640
|
+
height: enriched.height,
|
|
641
|
+
blurhash: enriched.blurhash,
|
|
642
|
+
dominantColor: enriched.dominantColor
|
|
590
643
|
});
|
|
591
644
|
} catch (error) {
|
|
592
645
|
try {
|
|
@@ -650,13 +703,13 @@ function createHttpAccess(pluginId, allowedHosts) {
|
|
|
650
703
|
* No host validation, but applies SSRF protection on redirect targets to
|
|
651
704
|
* prevent plugins from being tricked into reaching internal services.
|
|
652
705
|
*/
|
|
653
|
-
function createUnrestrictedHttpAccess(pluginId) {
|
|
706
|
+
function createUnrestrictedHttpAccess(pluginId, options = {}) {
|
|
654
707
|
return { async fetch(url, init) {
|
|
655
708
|
let currentUrl = url;
|
|
656
709
|
let currentInit = init;
|
|
657
710
|
for (let i = 0; i <= MAX_PLUGIN_REDIRECTS; i++) {
|
|
658
711
|
try {
|
|
659
|
-
validateExternalUrl(currentUrl);
|
|
712
|
+
if (!isAllowedDevelopmentLoopback(currentUrl, options.allowDevelopmentLoopback)) validateExternalUrl(currentUrl);
|
|
660
713
|
} catch (e) {
|
|
661
714
|
const msg = e instanceof SsrfError ? e.message : "SSRF validation failed";
|
|
662
715
|
throw new Error(`Plugin "${pluginId}": blocked fetch to "${new URL(currentUrl).hostname}": ${msg}`, { cause: e });
|
|
@@ -675,6 +728,17 @@ function createUnrestrictedHttpAccess(pluginId) {
|
|
|
675
728
|
throw new Error(`Plugin "${pluginId}": too many redirects (max ${MAX_PLUGIN_REDIRECTS})`);
|
|
676
729
|
} };
|
|
677
730
|
}
|
|
731
|
+
function isAllowedDevelopmentLoopback(url, capability = false) {
|
|
732
|
+
if (!capability || process.env.NODE_ENV !== "development") return false;
|
|
733
|
+
let parsed;
|
|
734
|
+
try {
|
|
735
|
+
parsed = new URL(url);
|
|
736
|
+
} catch {
|
|
737
|
+
return false;
|
|
738
|
+
}
|
|
739
|
+
if (parsed.protocol !== "http:" && parsed.protocol !== "https:") return false;
|
|
740
|
+
return parsed.hostname === "127.0.0.1" || parsed.hostname === "[::1]";
|
|
741
|
+
}
|
|
678
742
|
/**
|
|
679
743
|
* Create logger for a plugin
|
|
680
744
|
*/
|
|
@@ -774,17 +838,17 @@ function createUserAccess(db) {
|
|
|
774
838
|
* Factory for creating plugin contexts
|
|
775
839
|
*/
|
|
776
840
|
var PluginContextFactory = class {
|
|
777
|
-
|
|
778
|
-
db;
|
|
841
|
+
resolveDb;
|
|
779
842
|
storage;
|
|
780
843
|
getUploadUrl;
|
|
781
844
|
site;
|
|
782
845
|
urlHelper;
|
|
783
846
|
cronReschedule;
|
|
784
847
|
emailPipeline;
|
|
848
|
+
warnedMissingMediaBackend = /* @__PURE__ */ new Set();
|
|
785
849
|
constructor(options) {
|
|
786
|
-
|
|
787
|
-
this.
|
|
850
|
+
const fixedDb = options.db;
|
|
851
|
+
this.resolveDb = options.getDb ?? (() => fixedDb);
|
|
788
852
|
this.storage = options.storage;
|
|
789
853
|
this.getUploadUrl = options.getUploadUrl;
|
|
790
854
|
this.site = createSiteInfo(options.siteInfo ?? {});
|
|
@@ -797,22 +861,30 @@ var PluginContextFactory = class {
|
|
|
797
861
|
*/
|
|
798
862
|
createContext(plugin) {
|
|
799
863
|
const capabilities = new Set(plugin.capabilities);
|
|
800
|
-
const
|
|
864
|
+
const db = this.resolveDb();
|
|
865
|
+
const kv = createKVAccess(new OptionsRepository(db), plugin.id);
|
|
801
866
|
const log = createLogAccess(plugin.id);
|
|
802
|
-
const storage = createStorageAccess(
|
|
867
|
+
const storage = createStorageAccess(db, plugin.id, plugin.storage);
|
|
803
868
|
let content;
|
|
804
|
-
if (capabilities.has("content:write")) content = createContentAccessWithWrite(
|
|
805
|
-
else if (capabilities.has("content:read")) content = createContentAccess(
|
|
869
|
+
if (capabilities.has("content:write")) content = createContentAccessWithWrite(db);
|
|
870
|
+
else if (capabilities.has("content:read")) content = createContentAccess(db);
|
|
806
871
|
let media;
|
|
807
|
-
if (capabilities.has("media:write")
|
|
808
|
-
else
|
|
872
|
+
if (capabilities.has("media:write")) if (this.getUploadUrl || this.storage) media = createMediaAccessWithWrite(db, this.getUploadUrl, this.storage);
|
|
873
|
+
else {
|
|
874
|
+
if (!this.warnedMissingMediaBackend.has(plugin.id)) {
|
|
875
|
+
this.warnedMissingMediaBackend.add(plugin.id);
|
|
876
|
+
log.warn("declares the media:write capability but no storage backend is configured; upload() is unavailable.");
|
|
877
|
+
}
|
|
878
|
+
if (capabilities.has("media:read")) media = createMediaAccess(db);
|
|
879
|
+
}
|
|
880
|
+
else if (capabilities.has("media:read")) media = createMediaAccess(db);
|
|
809
881
|
let http;
|
|
810
|
-
if (capabilities.has("network:request:unrestricted")) http = createUnrestrictedHttpAccess(plugin.id);
|
|
882
|
+
if (capabilities.has("network:request:unrestricted")) http = createUnrestrictedHttpAccess(plugin.id, { allowDevelopmentLoopback: capabilities.has("network:request:development-loopback") });
|
|
811
883
|
else if (capabilities.has("network:request")) http = createHttpAccess(plugin.id, plugin.allowedHosts);
|
|
812
884
|
let users;
|
|
813
|
-
if (capabilities.has("users:read")) users = createUserAccess(
|
|
885
|
+
if (capabilities.has("users:read")) users = createUserAccess(db);
|
|
814
886
|
let cron;
|
|
815
|
-
if (this.cronReschedule) cron = new CronAccessImpl(
|
|
887
|
+
if (this.cronReschedule) cron = new CronAccessImpl(db, plugin.id, this.cronReschedule);
|
|
816
888
|
let email;
|
|
817
889
|
if (capabilities.has("email:send") && this.emailPipeline?.isAvailable()) {
|
|
818
890
|
const pipeline = this.emailPipeline;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { n as resolveActorIdentity } from "./actor-0QJ1Gbtf.mjs";
|
|
2
|
+
import { p as logSiteActivitySafely } from "./activity-events-CJDvE2uc.mjs";
|
|
2
3
|
|
|
3
4
|
//#region src/api/context-route-helpers.ts
|
|
4
5
|
function resolveContextRouteActor(locals) {
|
|
@@ -17,13 +17,17 @@ const MAX_ONESHOT_RETRIES = 5;
|
|
|
17
17
|
/**
|
|
18
18
|
* Executes overdue cron tasks.
|
|
19
19
|
*
|
|
20
|
-
* Called by
|
|
21
|
-
*
|
|
20
|
+
* Called by schedulers (NodeCronScheduler, PiggybackScheduler). Stateless —
|
|
21
|
+
* all state lives in the database.
|
|
22
22
|
*/
|
|
23
23
|
var CronExecutor = class {
|
|
24
|
+
resolveDb;
|
|
24
25
|
constructor(db, invokeCronHook) {
|
|
25
|
-
this.db = db;
|
|
26
26
|
this.invokeCronHook = invokeCronHook;
|
|
27
|
+
this.resolveDb = typeof db === "function" ? db : () => db;
|
|
28
|
+
}
|
|
29
|
+
get db() {
|
|
30
|
+
return this.resolveDb();
|
|
27
31
|
}
|
|
28
32
|
/**
|
|
29
33
|
* Process all overdue tasks.
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { t as validateIdentifier } from "./validate-VPnKoIzW.mjs";
|
|
2
|
-
import { t as ContentRepository } from "./content-
|
|
3
|
-
import { t as MediaRepository } from "./media-
|
|
4
|
-
import { t as UserRepository } from "./user-
|
|
5
|
-
import { t as ReviewRequestRepository } from "./review-requests-
|
|
2
|
+
import { t as ContentRepository } from "./content-DJcAYFhz.mjs";
|
|
3
|
+
import { t as MediaRepository } from "./media-CVMOoywq.mjs";
|
|
4
|
+
import { t as UserRepository } from "./user-BH-n01y3.mjs";
|
|
5
|
+
import { t as ReviewRequestRepository } from "./review-requests-CTWGnWUt.mjs";
|
|
6
6
|
import { sql } from "kysely";
|
|
7
7
|
|
|
8
8
|
//#region src/api/handlers/dashboard.ts
|
package/dist/db/index.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import "../types-
|
|
2
|
-
import {
|
|
3
|
-
import { i as
|
|
1
|
+
import "../types-DuQn1G7-.mjs";
|
|
2
|
+
import { i as runMigrations, n as getMigrationStatus, r as rollbackMigration, t as MigrationStatus } from "../runner-D6hzs8L9.mjs";
|
|
3
|
+
import { a as SqliteConfig, c as sqlite, i as PostgresConfig, n as DatabaseDialectType, o as libsql, r as LibsqlConfig, s as postgres, t as DatabaseDescriptor } from "../adapters-BiRymx02.mjs";
|
|
4
4
|
export { type DatabaseDescriptor, type DatabaseDialectType, type LibsqlConfig, type MigrationStatus, type PostgresConfig, type SqliteConfig, getMigrationStatus, libsql, postgres, rollbackMigration, runMigrations, sqlite };
|
package/dist/db/index.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { i as runMigrations, n as getMigrationStatus, r as rollbackMigration } from "../runner-
|
|
1
|
+
import { i as runMigrations, n as getMigrationStatus, r as rollbackMigration } from "../runner-BgmttQmD.mjs";
|
|
2
2
|
import "../dialect-helpers-fk43GbDb.mjs";
|
|
3
3
|
|
|
4
4
|
//#region src/db/adapters.ts
|
package/dist/db/libsql.d.mts
CHANGED
package/dist/db/postgres.d.mts
CHANGED
package/dist/db/sqlite.d.mts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { t as withTransaction } from "./transaction-
|
|
2
|
-
import { a as
|
|
3
|
-
import { a as
|
|
4
|
-
import { o as lookupOAuthClient } from "./oauth-clients-
|
|
5
|
-
import { t as lookupUserRoleAndStatus } from "./oauth-user-lookup-
|
|
1
|
+
import { t as withTransaction } from "./transaction-0LEAAy8R.mjs";
|
|
2
|
+
import { a as hashApiToken, n as TOKEN_PREFIXES, r as generatePrefixedToken, t as ALL_VALID_SCOPES } from "./api-tokens-Ypaly90d.mjs";
|
|
3
|
+
import { a as filterExperimentalSiteContextWorkflowScopes, i as experimentalSiteContextWorkflowsEnabled, o as getExperimentalSiteContextWorkflowScopesDisabledMessage, r as disabledExperimentalSiteContextWorkflowScopes } from "./experimental-workflows-GVhUgzEs.mjs";
|
|
4
|
+
import { o as lookupOAuthClient } from "./oauth-clients-Dwl32-Uj.mjs";
|
|
5
|
+
import { t as lookupUserRoleAndStatus } from "./oauth-user-lookup-CMehAaKs.mjs";
|
|
6
6
|
import { clampScopes } from "@dineway-ai/auth";
|
|
7
7
|
import { generateCodeVerifier } from "arctic";
|
|
8
8
|
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { n as normalizeMime } from "./mime-C0vOHFm7.mjs";
|
|
1
2
|
import { encode } from "blurhash";
|
|
2
3
|
import { imageSize } from "image-size";
|
|
3
4
|
|
|
@@ -67,8 +68,9 @@ function extractDominantColor(data, width, height) {
|
|
|
67
68
|
}
|
|
68
69
|
/**
|
|
69
70
|
* Read image dimensions from headers without decoding pixel data.
|
|
71
|
+
* Returns null when the header cannot be parsed.
|
|
70
72
|
*/
|
|
71
|
-
function
|
|
73
|
+
function readDimensions(buffer) {
|
|
72
74
|
try {
|
|
73
75
|
const result = imageSize(buffer);
|
|
74
76
|
if (result.width != null && result.height != null) return {
|
|
@@ -84,17 +86,18 @@ function getImageDimensions(buffer) {
|
|
|
84
86
|
* Generate blurhash and dominant color from an image buffer.
|
|
85
87
|
* Returns null for non-image MIME types or on failure.
|
|
86
88
|
*
|
|
87
|
-
* @param dimensions - Optional pre-known dimensions.
|
|
88
|
-
*
|
|
89
|
-
*
|
|
90
|
-
*
|
|
89
|
+
* @param dimensions - Optional pre-known dimensions. When present they are
|
|
90
|
+
* trusted as bounds for the buffer that will be decoded; otherwise dimensions
|
|
91
|
+
* are read from this buffer's header. Generation is skipped when no dimensions
|
|
92
|
+
* are available or when the decoded size exceeds MAX_DECODED_BYTES.
|
|
91
93
|
*/
|
|
92
94
|
async function generatePlaceholder(buffer, mimeType, dimensions) {
|
|
93
|
-
const format = SUPPORTED_TYPES[mimeType];
|
|
95
|
+
const format = SUPPORTED_TYPES[normalizeMime(mimeType)];
|
|
94
96
|
if (!format) return null;
|
|
95
97
|
try {
|
|
96
|
-
const dims =
|
|
97
|
-
if (dims
|
|
98
|
+
const dims = dimensions ?? readDimensions(buffer);
|
|
99
|
+
if (!dims) return null;
|
|
100
|
+
if (dims.width * dims.height * 4 > MAX_DECODED_BYTES) return null;
|
|
98
101
|
const { width, height, data } = format === "jpeg" ? await decodeJpeg(buffer) : await decodePng(buffer);
|
|
99
102
|
if (width === 0 || height === 0) return null;
|
|
100
103
|
let encodePixels;
|
|
@@ -139,4 +142,28 @@ function downsample(src, srcW, srcH, dstW, dstH) {
|
|
|
139
142
|
}
|
|
140
143
|
|
|
141
144
|
//#endregion
|
|
142
|
-
|
|
145
|
+
//#region src/media/enrich.ts
|
|
146
|
+
/**
|
|
147
|
+
* Image Metadata Enrichment
|
|
148
|
+
*
|
|
149
|
+
* Derives dimensions and LQIP placeholders from image bytes. Server-side media
|
|
150
|
+
* creation paths share this helper so direct uploads, signed upload confirms,
|
|
151
|
+
* imports, and plugin uploads store consistent image metadata.
|
|
152
|
+
*/
|
|
153
|
+
async function enrichImageMetadata(bytes, contentType, opts) {
|
|
154
|
+
const normalizedContentType = normalizeMime(contentType);
|
|
155
|
+
if (!normalizedContentType.startsWith("image/")) return {};
|
|
156
|
+
const headerDims = readDimensions(bytes) ?? void 0;
|
|
157
|
+
const recordDims = opts?.knownDimensions ?? headerDims;
|
|
158
|
+
const override = opts?.placeholder;
|
|
159
|
+
const placeholder = await generatePlaceholder(override ? override.bytes : bytes, override ? normalizeMime(override.contentType) : normalizedContentType, override ? void 0 : headerDims);
|
|
160
|
+
return {
|
|
161
|
+
width: recordDims?.width,
|
|
162
|
+
height: recordDims?.height,
|
|
163
|
+
blurhash: placeholder?.blurhash,
|
|
164
|
+
dominantColor: placeholder?.dominantColor
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
//#endregion
|
|
169
|
+
export { generatePlaceholder as n, enrichImageMetadata as t };
|
|
@@ -61,6 +61,7 @@ const ErrorCode = {
|
|
|
61
61
|
URL_PATTERN_EXISTS: "URL_PATTERN_EXISTS",
|
|
62
62
|
TABLE_NOT_FOUND: "TABLE_NOT_FOUND",
|
|
63
63
|
FIELD_EXISTS: "FIELD_EXISTS",
|
|
64
|
+
FIELD_TYPE_COLUMN_CHANGE: "FIELD_TYPE_COLUMN_CHANGE",
|
|
64
65
|
RESERVED_SLUG: "RESERVED_SLUG",
|
|
65
66
|
INVALID_SLUG: "INVALID_SLUG",
|
|
66
67
|
INVALID_URL_PATTERN: "INVALID_URL_PATTERN",
|
|
@@ -98,6 +99,9 @@ const ErrorCode = {
|
|
|
98
99
|
COMMENTS_DISABLED: "COMMENTS_DISABLED",
|
|
99
100
|
COMMENTS_CLOSED: "COMMENTS_CLOSED",
|
|
100
101
|
COMMENT_REJECTED: "COMMENT_REJECTED",
|
|
102
|
+
COMMENT_NOT_APPROVED: "COMMENT_NOT_APPROVED",
|
|
103
|
+
REACTION_TOGGLE_ERROR: "REACTION_TOGGLE_ERROR",
|
|
104
|
+
REACTION_COUNTS_ERROR: "REACTION_COUNTS_ERROR",
|
|
101
105
|
ACCOUNT_DISABLED: "ACCOUNT_DISABLED",
|
|
102
106
|
ADMIN_EXISTS: "ADMIN_EXISTS",
|
|
103
107
|
SETUP_COMPLETE: "SETUP_COMPLETE",
|
|
@@ -309,6 +313,7 @@ function mapErrorStatus(code) {
|
|
|
309
313
|
case ErrorCode.COMMENTS_DISABLED:
|
|
310
314
|
case ErrorCode.COMMENTS_CLOSED:
|
|
311
315
|
case ErrorCode.COMMENT_REJECTED:
|
|
316
|
+
case ErrorCode.COMMENT_NOT_APPROVED:
|
|
312
317
|
case ErrorCode.DOMAIN_NOT_ALLOWED:
|
|
313
318
|
case ErrorCode.INSUFFICIENT_ROLE:
|
|
314
319
|
case ErrorCode.CAPABILITY_ESCALATION:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
//#region src/site-context/experimental-workflows.ts
|
|
2
2
|
const EXPERIMENTAL_SITE_CONTEXT_WORKFLOWS_ENV = "DINEWAY_EXPERIMENTAL_SITE_CONTEXT_WORKFLOWS";
|
|
3
|
-
const EXPERIMENTAL_SITE_CONTEXT_WORKFLOW_SCOPES = new Set(
|
|
3
|
+
const EXPERIMENTAL_SITE_CONTEXT_WORKFLOW_SCOPES = /* @__PURE__ */ new Set();
|
|
4
4
|
var ExperimentalSiteContextWorkflowDisabledError = class extends Error {
|
|
5
5
|
code = "EXPERIMENTAL_SITE_CONTEXT_WORKFLOW_DISABLED";
|
|
6
6
|
constructor(message = getExperimentalSiteContextWorkflowsDisabledMessage()) {
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { a as __exportAll } from "./runner-BgmttQmD.mjs";
|
|
2
|
+
import { getRequestContext } from "./request-context.mjs";
|
|
3
|
+
import { t as after } from "./after-BfniwgIf.mjs";
|
|
4
|
+
import { r as requestCached } from "./request-cache-CBFjCwSt.mjs";
|
|
5
|
+
import { n as BylineSchemaRegistry } from "./byline-registry-Ba54M74c.mjs";
|
|
6
|
+
import { n as invalidateProcessCache, r as processCachedAsync, t as createProcessCache } from "./process-cache-CCDgti7j.mjs";
|
|
7
|
+
|
|
8
|
+
//#region src/bylines/field-defs-cache.ts
|
|
9
|
+
var field_defs_cache_exports = /* @__PURE__ */ __exportAll({ getBylineFieldDefs: () => getBylineFieldDefs });
|
|
10
|
+
const HOLDER_KEY = Symbol.for("dineway:byline-field-defs");
|
|
11
|
+
const REQUEST_CACHE_KEY_VERSION = "byline-fields-version";
|
|
12
|
+
const REQUEST_CACHE_KEY_DEFS_PREFIX = "byline-field-defs:";
|
|
13
|
+
function getHolder() {
|
|
14
|
+
const existing = Reflect.get(globalThis, HOLDER_KEY);
|
|
15
|
+
if (isFieldDefsHolder(existing)) return existing;
|
|
16
|
+
const holder = {
|
|
17
|
+
cache: createProcessCache(),
|
|
18
|
+
cachedVersion: -1
|
|
19
|
+
};
|
|
20
|
+
Reflect.set(globalThis, HOLDER_KEY, holder);
|
|
21
|
+
return holder;
|
|
22
|
+
}
|
|
23
|
+
function isFieldDefsHolder(value) {
|
|
24
|
+
if (value && typeof value === "object" && "cache" in value && "cachedVersion" in value) {
|
|
25
|
+
const cache = value.cache;
|
|
26
|
+
return typeof value.cachedVersion === "number" && !!cache && typeof cache === "object" && "lock" in cache;
|
|
27
|
+
}
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
const holder = getHolder();
|
|
31
|
+
async function getBylineFieldsVersion(db) {
|
|
32
|
+
return requestCached(REQUEST_CACHE_KEY_VERSION, () => new BylineSchemaRegistry(db).getVersion());
|
|
33
|
+
}
|
|
34
|
+
async function getBylineFieldDefs(db) {
|
|
35
|
+
const hasDbOverride = !!getRequestContext()?.db;
|
|
36
|
+
const version = await getBylineFieldsVersion(db);
|
|
37
|
+
const dirty = version % 2 !== 0;
|
|
38
|
+
return requestCached(`${REQUEST_CACHE_KEY_DEFS_PREFIX}${version}`, async () => {
|
|
39
|
+
if (hasDbOverride || dirty) return new BylineSchemaRegistry(db).listFields();
|
|
40
|
+
if (holder.cachedVersion !== version) {
|
|
41
|
+
invalidateProcessCache(holder.cache);
|
|
42
|
+
holder.cachedVersion = version;
|
|
43
|
+
}
|
|
44
|
+
return processCachedAsync(holder.cache, () => new BylineSchemaRegistry(db).listFields(), { anchor: (promise) => after(() => promise) });
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
//#endregion
|
|
49
|
+
export { getBylineFieldDefs as n, field_defs_cache_exports as t };
|