dineway 0.1.49 → 0.2.0
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-events-CwM7yxPW.mjs → activity-events-y6eT8UW6.mjs} +6 -38
- package/dist/actor-CrObAPV0.mjs +37 -0
- package/dist/after-BfniwgIf.mjs +9 -0
- package/dist/{allowed-origins-CyGnbgBd.mjs → allowed-origins-_oeyP6x-.mjs} +1 -1
- package/dist/api/route-utils.d.mts +10 -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-ByrU2q-Z.mjs} +60 -36
- package/dist/{api-tokens-DtvdtIkm.mjs → api-tokens-CjVMQT-X.mjs} +6 -2
- package/dist/{apply-D_RlTYtC.mjs → apply-bZswmZPm.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 +35 -11
- package/dist/astro/index.mjs +157 -23
- 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 +10 -10
- 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 +333 -192
- 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 +26 -24
- package/dist/astro/routes/api/admin/context/_id_/index.mjs +26 -24
- package/dist/astro/routes/api/admin/context/_id_/review.mjs +31 -28
- package/dist/astro/routes/api/admin/context/_id_/supersede.mjs +31 -28
- package/dist/astro/routes/api/admin/context/diff.mjs +30 -27
- package/dist/astro/routes/api/admin/context/index.mjs +31 -28
- package/dist/astro/routes/api/admin/context/stale.mjs +30 -27
- package/dist/astro/routes/api/admin/hitl-requests/_id_/index.mjs +26 -24
- package/dist/astro/routes/api/admin/hitl-requests/_id_/resolve.mjs +30 -27
- package/dist/astro/routes/api/admin/hitl-requests/index.mjs +30 -27
- package/dist/astro/routes/api/admin/hooks/exclusive/_hookName_.mjs +27 -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 +55 -51
- package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs +55 -51
- package/dist/astro/routes/api/admin/plugins/_id_/index.mjs +47 -43
- package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs +53 -49
- package/dist/astro/routes/api/admin/plugins/_id_/update.mjs +52 -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 +52 -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 +31 -27
- package/dist/astro/routes/api/admin/review-requests/index.mjs +10 -9
- 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 +5 -5
- package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs +5 -5
- package/dist/astro/routes/api/content/_collection_/_id_/permanent.mjs +5 -5
- package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs +11 -10
- package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs +10 -9
- package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs +5 -5
- package/dist/astro/routes/api/content/_collection_/_id_/revisions.mjs +2 -2
- package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs +10 -9
- 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 +5 -5
- package/dist/astro/routes/api/content/_collection_/_id_.mjs +10 -9
- package/dist/astro/routes/api/content/_collection_/authors.mjs +2 -2
- package/dist/astro/routes/api/content/_collection_/index.mjs +10 -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 +19 -1
- package/dist/astro/routes/api/import/wordpress/execute.mjs +84 -37
- package/dist/astro/routes/api/import/wordpress/media.d.mts +13 -1
- package/dist/astro/routes/api/import/wordpress/media.mjs +19 -13
- package/dist/astro/routes/api/import/wordpress/prepare.mjs +35 -32
- package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts +18 -1
- package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs +120 -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 +56 -2
- package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs +283 -55
- package/dist/astro/routes/api/manifest.mjs +14 -5
- package/dist/astro/routes/api/mcp.mjs +265 -69
- 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 +27 -34
- package/dist/astro/routes/api/menus/_name_/items/_id_.mjs +31 -28
- package/dist/astro/routes/api/menus/_name_/items.mjs +31 -28
- package/dist/astro/routes/api/menus/_name_/reorder.mjs +31 -28
- package/dist/astro/routes/api/menus/_name_/translations.mjs +31 -28
- package/dist/astro/routes/api/menus/_name_.mjs +31 -28
- package/dist/astro/routes/api/menus/index.mjs +31 -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 +30 -30
- 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 +32 -29
- package/dist/astro/routes/api/redirects/index.mjs +32 -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 +47 -43
- package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs +47 -43
- package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs +47 -43
- package/dist/astro/routes/api/schema/collections/_slug_/index.mjs +47 -43
- package/dist/astro/routes/api/schema/collections/index.mjs +47 -43
- package/dist/astro/routes/api/schema/index.mjs +13 -14
- 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 +31 -28
- package/dist/astro/routes/api/sections/index.mjs +31 -28
- package/dist/astro/routes/api/settings/email.mjs +4 -4
- package/dist/astro/routes/api/settings.mjs +31 -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 +34 -31
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs +34 -31
- package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs +34 -31
- package/dist/astro/routes/api/taxonomies/index.mjs +34 -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 +30 -27
- package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs +31 -28
- package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs +31 -28
- package/dist/astro/routes/api/widget-areas/_name_.mjs +28 -26
- package/dist/astro/routes/api/widget-areas/index.mjs +31 -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 +21 -13
- package/dist/{audit-BeNsSyfU.mjs → audit-ByVKIwWF.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-CqeUmQsv.mjs} +1 -1
- package/dist/{authorize-BLO0m7fW.mjs → authorize-CcBxcHtz.mjs} +1 -1
- package/dist/{briefing-DJX6irto.mjs → briefing-BJaJI8dm.mjs} +2 -1
- package/dist/{briefing-CkTee1ex.mjs → briefing-CawZ59CY.mjs} +90 -28
- package/dist/bundle-7C_DpkEq.mjs +602 -0
- package/dist/{byline-BVC1lV6G.mjs → byline-e51-fWRs.mjs} +30 -62
- package/dist/{byline-fields-uJlygdzM.d.mts → byline-fields-CUvbslGc.d.mts} +80 -37
- package/dist/{byline-fields-Cj39WhXC.mjs → byline-fields-D-N5qVIG.mjs} +1 -1
- package/dist/{byline-fields-cNrLJVRs.mjs → byline-fields-DOJO16Gm.mjs} +3 -3
- package/dist/{byline-registry-4v6tXMNX.mjs → byline-registry-87nNnYl4.mjs} +2 -2
- package/dist/{bylines-LN9XISRo.mjs → bylines-CMQNCNFh.mjs} +9 -3
- package/dist/{bylines-DwokOFj6.mjs → bylines-y4LO-dTj.mjs} +5 -5
- package/dist/{cache-Bac05gBd.mjs → cache-C-FNTFYK.mjs} +2 -2
- package/dist/{chunks-CuUt7K50.mjs → chunks-CxBt-GxR.mjs} +1 -1
- package/dist/cli/index.mjs +94 -659
- package/dist/client/external-auth-headers.d.mts +1 -1
- package/dist/client/index.d.mts +1 -1
- package/dist/client/index.mjs +2 -1
- package/dist/{comment-Beue8-15.mjs → comment-DlA4iChg.mjs} +13 -3
- package/dist/comment-reaction-DfFao1ST.mjs +58 -0
- package/dist/{comments-DcjFIfqX.mjs → comments-DApFGMsP.mjs} +1 -1
- package/dist/{content-CBxYGWfL.mjs → content-Bh4BDjv8.mjs} +51 -34
- package/dist/content-refresh-CgutSUfO.mjs +1576 -0
- package/dist/{context-CQVNZaR8.mjs → context-C5W3G18y.mjs} +111 -50
- package/dist/{context-Df1xVYyr.mjs → context-CK4ym2Sf.mjs} +2 -2
- package/dist/{context-route-helpers-B9wj8Rmh.mjs → context-route-helpers-MASyGgWf.mjs} +2 -1
- package/dist/{cron-DxCAU_Sn.mjs → cron-cKcNTix_.mjs} +7 -3
- package/dist/{dashboard-B7ZUNuyF.mjs → dashboard-DQkVT7Ei.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-BnqRH-T9.mjs} +5 -5
- package/dist/{placeholder-d54Qr_7n.mjs → enrich-DIFIFA8O.mjs} +36 -9
- package/dist/{error-DCSuUAZW.mjs → error-CytFlgcd.mjs} +5 -0
- package/dist/field-defs-cache-DRNdhBJv.mjs +49 -0
- package/dist/{fts-manager-B5l_qwrA.mjs → fts-manager-Crzypjqu.mjs} +1 -1
- package/dist/hitl-Hw1RmWOq.mjs +677 -0
- package/dist/{hitl-requests-7NlzVeUA.mjs → hitl-requests-B4Vbcmaq.mjs} +2 -2
- package/dist/{hitl-route-helpers-k---_H3-.mjs → hitl-route-helpers-hEVzvP8l.mjs} +5 -4
- package/dist/import-Bh9biJfx.mjs +1354 -0
- package/dist/{index-CZiWCQDp.d.mts → index-D4y6NGiy.d.mts} +75 -3
- package/dist/index.d.mts +17 -16
- package/dist/index.mjs +80 -68
- package/dist/{jsonld-DZ67souc.d.mts → jsonld-Dq0gsnOH.d.mts} +8 -4
- package/dist/{load-D9OiGr2m.mjs → load-DmYeniXl.mjs} +1 -1
- package/dist/{loader--GOYux8M.mjs → loader-CjWqjweO.mjs} +117 -31
- package/dist/{manifest-schema-qh2P7RDX.mjs → manifest-schema-BxVPYMJR.mjs} +34 -1
- package/dist/mcp-reviewed-executor-TwVbMzG6.mjs +555 -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 +16 -11
- package/dist/media/local-runtime.mjs +9 -7
- package/dist/{media-CbKyYukG.mjs → media-DMj0grzC.mjs} +3 -1
- package/dist/{media-allowlist-BYxJIcTO.mjs → media-allowlist-BlVCSzHx.mjs} +1 -1
- package/dist/media-url-lEKSrpr9.mjs +20 -0
- package/dist/{menus-BZbXf-ej.mjs → menus-TaW1gKnk.mjs} +19 -5
- package/dist/{menus-C7F0sCrC.mjs → menus-xvsnVZXw.mjs} +80 -15
- package/dist/{normalize-ByemhhfW.mjs → normalize-5ek_z7de.mjs} +8 -1
- package/dist/{oauth-authorization-DF-LCsIA.mjs → oauth-authorization-DiaGvRVz.mjs} +5 -5
- package/dist/{oauth-clients-Du-V0fEm.mjs → oauth-clients-Dl9E8dEM.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/page/index.d.mts +4 -3
- package/dist/page/index.mjs +2 -2
- package/dist/{parse-CneSgl7-.mjs → parse-CbymENaR.mjs} +1 -1
- package/dist/{parser-DxfsARXL.mjs → parser-C1nYd-81.mjs} +151 -9
- package/dist/{placeholder-CXfoCtCd.d.mts → placeholder-uvNRZBX9.d.mts} +12 -4
- package/dist/plugin-utils.d.mts +9 -9
- package/dist/plugins/adapt-sandbox-entry.d.mts +9 -9
- package/dist/plugins/adapt-sandbox-entry.mjs +11 -2
- package/dist/{plugins-DzfqRREq.mjs → plugins-BolVa-tl.mjs} +831 -63
- package/dist/{transport-LSdZVXHF.mjs → portable-text-dA_UlJwW.mjs} +1 -134
- package/dist/{preview-C-3YTX2U.mjs → preview-vSVg6fwG.mjs} +4 -3
- package/dist/process-cache-7xgAO9JY.mjs +106 -0
- package/dist/{provider-loader-9it4vd6L.d.mts → provider-loader-MD8zAbnH.d.mts} +1 -1
- package/dist/{public-url-B4xV4rGa.d.mts → public-url-gsp3oUbu.d.mts} +1 -1
- package/dist/{query-Ds0EnMFX.mjs → query-CfRCdaL3.mjs} +281 -76
- package/dist/{query-CZ3TH_Uu.mjs → query-jaAmw8E1.mjs} +11 -6
- package/dist/{rate-limit-i0G3IAOX.mjs → rate-limit-ZLdyWoZF.mjs} +2 -2
- package/dist/{redirect-CEACczxo.mjs → redirect-BAjt4Z6b.mjs} +2 -2
- package/dist/{redirects-DYj1yPxs.mjs → redirects-BTdwpQtE.mjs} +47 -24
- package/dist/{redirects-ocRJmQHP.mjs → redirects-CA-xylPG.mjs} +19 -11
- package/dist/{registry-D7HACema.mjs → registry-CtyVedcN.mjs} +130 -77
- package/dist/request-context.d.mts +2 -0
- package/dist/{request-meta-DAb6xaP9.mjs → request-meta-CUypToDJ.mjs} +1 -1
- package/dist/{review-requests-Qum4713s.mjs → review-requests-C9Ff11Vq.mjs} +1 -1
- package/dist/{review-requests-BW2NxY-l.mjs → review-requests-DUyEmtmG.mjs} +1 -1
- package/dist/{runner-09sTqtv0.d.mts → runner-1tC2tIRV.d.mts} +1 -1
- package/dist/runner-DB7CRfOF.mjs +6740 -0
- package/dist/{runtime-C4-2lSFg.d.mts → runtime-BOeiQsCv.d.mts} +1952 -1489
- package/dist/runtime.d.mts +10 -10
- package/dist/runtime.mjs +3 -3
- package/dist/schema-DXdYj4R3.mjs +8 -0
- package/dist/{search-Gdrqj582.mjs → search-DSaLgEFI.mjs} +5 -3
- package/dist/{secrets-CeGpBFV2.mjs → secrets-CDZo2k8L.mjs} +14 -11
- package/dist/{sections-BOjU13Y-.mjs → sections-PVVXHGfp.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-CLj8lS7Q.mjs → seo-CQG3GCHQ.mjs} +5 -2
- package/dist/{seo-contributions-CqVvReEj.mjs → seo-contributions-C1EnikHB.mjs} +11 -3
- package/dist/{seo-5lJOtB5J.mjs → seo-qa7Dn0jK.mjs} +22 -4
- package/dist/{service-jGlhrICs.mjs → service-DiN4ZuPp.mjs} +2 -2
- package/dist/session-user-CAKImna3.mjs +22 -0
- package/dist/{settings-CUXOxzsT.mjs → settings-BbqgHWpU.mjs} +28 -55
- package/dist/{settings-DlBsT2VS.mjs → settings-i4VPP8bT.mjs} +2 -2
- package/dist/{setup-complete-BRrdPYjZ.mjs → setup-complete-B8fl-mjV.mjs} +1 -1
- package/dist/{site-activity-DONFrMBJ.mjs → site-activity-Dy3FROs0.mjs} +1 -1
- package/dist/{site-context-C8Az_P_I.mjs → site-context-DQiL8Fl5.mjs} +23 -652
- package/dist/{site-url-DIMD68go.mjs → site-url-BML3GQYm.mjs} +1 -1
- package/dist/status-DANd8ERo.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-9s-v03H-.mjs} +36 -29
- package/dist/taxonomies-DRiixp_E.mjs +443 -0
- package/dist/{taxonomy-B169Nm6B.mjs → taxonomy-Dvsw6BOs.mjs} +44 -9
- package/dist/transport-BNmCqLu7.mjs +134 -0
- package/dist/types-4garmdWa.mjs +66 -0
- package/dist/{types-DSPGWjxO.d.mts → types-C8XW6L19.d.mts} +225 -4
- package/dist/{types-GaCtZ1k9.d.mts → types-CDpH6MA4.d.mts} +18 -0
- package/dist/{types-DRIKLmJI.d.mts → types-C_ly5eTp.d.mts} +17 -2
- package/dist/types-DF7ZuGGk.d.mts +118 -0
- package/dist/types-DU0bU2Wu.d.mts +2392 -0
- package/dist/{types-CwawBUTa.d.mts → types-DW_-sFyz.d.mts} +2 -1
- package/dist/{types-CSgR9nQB.mjs → types-Dq1qT19x.mjs} +1 -1
- package/dist/ui/server-runtime.d.mts +15 -15
- package/dist/ui/server-runtime.mjs +24 -20
- package/dist/url-Cac7a9QZ.mjs +33 -0
- package/dist/{user-DTLoZs16.mjs → user-BIZPzCb9.mjs} +2 -2
- package/dist/{utils-B8hBJ9Oz.mjs → utils-CMDhr5Xd.mjs} +129 -7
- package/dist/{validate-DzjCdy6v.d.mts → validate-CZvb-BKB.d.mts} +10 -7
- package/dist/{validate-DWmPO6oj.mjs → validate-DNs0pTSc.mjs} +11 -6
- package/dist/version-BTvfRGc6.mjs +6 -0
- package/dist/{widgets-BpJ8EpPd.mjs → widgets-f0ibZUIq.mjs} +46 -43
- package/dist/{wordpress-slugs-DHNR9LpG.mjs → wordpress-slugs-BhHJX8XE.mjs} +1 -1
- package/dist/{zod-generator-K91-g665.mjs → zod-generator-B7TMjyFJ.mjs} +41 -13
- package/package.json +30 -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/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/version-C4gfn0PJ.mjs +0 -6
- /package/dist/{adapters-OQCImOL7.d.mts → adapters-NVSs4UH7.d.mts} +0 -0
- /package/dist/{api-tokens-CYUoFGo7.mjs → api-tokens-2r7OWi_I.mjs} +0 -0
- /package/dist/{challenge-store-DFxX0_15.mjs → challenge-store-Bjlepa2E.mjs} +0 -0
- /package/dist/{components--pg6zBvu.mjs → components-Bclf98Be.mjs} +0 -0
- /package/dist/{context-types-r8oFvyOq.mjs → context-types-DqTo6C79.mjs} +0 -0
- /package/dist/{default-B6iaLvP7.mjs → default--K40jqm0.mjs} +0 -0
- /package/dist/{email-console-BOVqIYpB.mjs → email-console-ChgKFO8-.mjs} +0 -0
- /package/dist/{escape-BDgouFFY.mjs → escape-Bd4P_xKg.mjs} +0 -0
- /package/dist/{experimental-workflows-CSMffP6q.mjs → experimental-workflows-BMsUnIAw.mjs} +0 -0
- /package/dist/{mime-CbKsKDCB.mjs → mime-CA7Lgovc.mjs} +0 -0
- /package/dist/{mode-CZqCF9dZ.mjs → mode-C4CIyjtR.mjs} +0 -0
- /package/dist/{oauth-state-store-qncPB_IU.mjs → oauth-state-store-CNoXafF7.mjs} +0 -0
- /package/dist/{oauth-user-lookup-BFjWF8wK.mjs → oauth-user-lookup-Ygw4bNyt.mjs} +0 -0
- /package/dist/{options-LsPjZlqD.mjs → options-DQPTH5n0.mjs} +0 -0
- /package/dist/{passkey-config-DzHQK90v.mjs → passkey-config-BUwu8BA3.mjs} +0 -0
- /package/dist/{patterns-DKAX6oqN.mjs → patterns-BhAvqO0S.mjs} +0 -0
- /package/dist/{provider-loader-DzUxejk7.mjs → provider-loader-D0w9dqjm.mjs} +0 -0
- /package/dist/{public-url-B_m9IwdV.mjs → public-url-BEz_sM9n.mjs} +0 -0
- /package/dist/{redirect-BjIBtDWY.mjs → redirect-wphRBv4y.mjs} +0 -0
- /package/dist/{request-cache-ho99schz.mjs → request-cache-D9GQBxMP.mjs} +0 -0
- /package/dist/{resolve-DTuDyYKs.mjs → resolve-Cb6Dbz-C.mjs} +0 -0
- /package/dist/{setup-nonce-pyGfc9hV.mjs → setup-nonce-CoyjILvW.mjs} +0 -0
- /package/dist/{sidecar-client-mJxwayYN.mjs → sidecar-client-C3mqXg4C.mjs} +0 -0
- /package/dist/{slugify-BqebcqBg.mjs → slugify-KSsVD_D3.mjs} +0 -0
- /package/dist/{ssrf-DiKqWd3N.mjs → ssrf-DWe8jwAp.mjs} +0 -0
- /package/dist/{tokens-SLmgowfd.mjs → tokens-1RK1n6ED.mjs} +0 -0
- /package/dist/{transaction-CFLhEOuH.mjs → transaction-C2EOMTJA.mjs} +0 -0
- /package/dist/{transport-BnsNxh2l.d.mts → transport-CcJu3Co8.d.mts} +0 -0
- /package/dist/{trusted-proxy-BgIIcbsN.mjs → trusted-proxy-DTXQ2IMv.mjs} +0 -0
- /package/dist/{types-CJ8DkL0q.mjs → types-B3t5cxhU.mjs} +0 -0
- /package/dist/{types-nP9vGUFq.d.mts → types-C46EvNdc.d.mts} +0 -0
- /package/dist/{types-Cg276-3z.mjs → types-C5CVgwsV.mjs} +0 -0
- /package/dist/{types-DZpT-PnG.d.mts → types-POH8PQZh.d.mts} +0 -0
- /package/dist/{types-Dryvv7LH.d.mts → types-Rc3gQqqw.d.mts} +0 -0
- /package/dist/{url-w7Mp5qAD.mjs → url-CpyFDFpO.mjs} +0 -0
package/dist/media/index.d.mts
CHANGED
|
@@ -1,5 +1,30 @@
|
|
|
1
|
-
import { _ as MediaValue, a as ComponentEmbed, b as mediaItemToValue, c as EmbedResult, d as MediaListResult, f as MediaProvider, g as MediaUploadInput, h as MediaProviderItem, i as AudioEmbed, l as ImageEmbed, m as MediaProviderDescriptor, n as generatePlaceholder, o as CreateMediaProviderFn, p as MediaProviderCapabilities, r as normalizeMediaValue, s as EmbedOptions, t as PlaceholderData, u as MediaListOptions, v as ThumbnailOptions, y as VideoEmbed } from "../placeholder-
|
|
1
|
+
import { _ as MediaValue, a as ComponentEmbed, b as mediaItemToValue, c as EmbedResult, d as MediaListResult, f as MediaProvider, g as MediaUploadInput, h as MediaProviderItem, i as AudioEmbed, l as ImageEmbed, m as MediaProviderDescriptor, n as generatePlaceholder, o as CreateMediaProviderFn, p as MediaProviderCapabilities, r as normalizeMediaValue, s as EmbedOptions, t as PlaceholderData, u as MediaListOptions, v as ThumbnailOptions, y as VideoEmbed } from "../placeholder-uvNRZBX9.mjs";
|
|
2
2
|
|
|
3
|
+
//#region src/media/enrich.d.ts
|
|
4
|
+
/**
|
|
5
|
+
* Image Metadata Enrichment
|
|
6
|
+
*
|
|
7
|
+
* Derives dimensions and LQIP placeholders from image bytes. Server-side media
|
|
8
|
+
* creation paths share this helper so direct uploads, signed upload confirms,
|
|
9
|
+
* imports, and plugin uploads store consistent image metadata.
|
|
10
|
+
*/
|
|
11
|
+
interface EnrichedImageMetadata {
|
|
12
|
+
width?: number;
|
|
13
|
+
height?: number;
|
|
14
|
+
blurhash?: string;
|
|
15
|
+
dominantColor?: string;
|
|
16
|
+
}
|
|
17
|
+
declare function enrichImageMetadata(bytes: Uint8Array, contentType: string, opts?: {
|
|
18
|
+
knownDimensions?: {
|
|
19
|
+
width: number;
|
|
20
|
+
height: number;
|
|
21
|
+
};
|
|
22
|
+
placeholder?: {
|
|
23
|
+
bytes: Uint8Array;
|
|
24
|
+
contentType: string;
|
|
25
|
+
};
|
|
26
|
+
}): Promise<EnrichedImageMetadata>;
|
|
27
|
+
//#endregion
|
|
3
28
|
//#region src/media/local.d.ts
|
|
4
29
|
interface LocalMediaConfig {
|
|
5
30
|
/** Whether the local provider is enabled (default true) */
|
|
@@ -22,4 +47,4 @@ interface LocalMediaConfig {
|
|
|
22
47
|
*/
|
|
23
48
|
declare function localMedia(config?: LocalMediaConfig): MediaProviderDescriptor;
|
|
24
49
|
//#endregion
|
|
25
|
-
export { type AudioEmbed, type ComponentEmbed, type CreateMediaProviderFn, type EmbedOptions, type EmbedResult, type ImageEmbed, type LocalMediaConfig, type MediaListOptions, type MediaListResult, type MediaProvider, type MediaProviderCapabilities, type MediaProviderDescriptor, type MediaProviderItem, type MediaUploadInput, type MediaValue, type PlaceholderData, type ThumbnailOptions, type VideoEmbed, generatePlaceholder, localMedia, mediaItemToValue, normalizeMediaValue };
|
|
50
|
+
export { type AudioEmbed, type ComponentEmbed, type CreateMediaProviderFn, type EmbedOptions, type EmbedResult, type EnrichedImageMetadata, type ImageEmbed, type LocalMediaConfig, type MediaListOptions, type MediaListResult, type MediaProvider, type MediaProviderCapabilities, type MediaProviderDescriptor, type MediaProviderItem, type MediaUploadInput, type MediaValue, type PlaceholderData, type ThumbnailOptions, type VideoEmbed, enrichImageMetadata, generatePlaceholder, localMedia, mediaItemToValue, normalizeMediaValue };
|
package/dist/media/index.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { n as normalizeMediaValue } from "../normalize-
|
|
2
|
-
import {
|
|
1
|
+
import { n as normalizeMediaValue } from "../normalize-5ek_z7de.mjs";
|
|
2
|
+
import { n as generatePlaceholder, t as enrichImageMetadata } from "../enrich-DIFIFA8O.mjs";
|
|
3
3
|
|
|
4
4
|
//#region src/media/types.ts
|
|
5
5
|
/**
|
|
@@ -13,6 +13,8 @@ function mediaItemToValue(providerId, item) {
|
|
|
13
13
|
mimeType: item.mimeType,
|
|
14
14
|
width: item.width,
|
|
15
15
|
height: item.height,
|
|
16
|
+
blurhash: item.blurhash,
|
|
17
|
+
dominantColor: item.dominantColor,
|
|
16
18
|
alt: item.alt,
|
|
17
19
|
meta: item.meta
|
|
18
20
|
};
|
|
@@ -52,4 +54,4 @@ function localMedia(config = {}) {
|
|
|
52
54
|
}
|
|
53
55
|
|
|
54
56
|
//#endregion
|
|
55
|
-
export { generatePlaceholder, localMedia, mediaItemToValue, normalizeMediaValue };
|
|
57
|
+
export { enrichImageMetadata, generatePlaceholder, localMedia, mediaItemToValue, normalizeMediaValue };
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import "../runtime-
|
|
2
|
-
import { t as Database } from "../types-
|
|
3
|
-
import "../types-
|
|
4
|
-
import "../types-
|
|
5
|
-
import
|
|
6
|
-
import "../
|
|
7
|
-
import "../
|
|
8
|
-
import
|
|
9
|
-
import "../byline-fields-
|
|
10
|
-
import "../types-
|
|
11
|
-
import "../validate-
|
|
1
|
+
import "../runtime-BOeiQsCv.mjs";
|
|
2
|
+
import { t as Database } from "../types-DU0bU2Wu.mjs";
|
|
3
|
+
import "../types-C8XW6L19.mjs";
|
|
4
|
+
import { d as Storage } from "../types-POH8PQZh.mjs";
|
|
5
|
+
import "../types-Rc3gQqqw.mjs";
|
|
6
|
+
import { h as MediaProviderItem, o as CreateMediaProviderFn } from "../placeholder-uvNRZBX9.mjs";
|
|
7
|
+
import "../runner-1tC2tIRV.mjs";
|
|
8
|
+
import "../index-D4y6NGiy.mjs";
|
|
9
|
+
import "../byline-fields-CUvbslGc.mjs";
|
|
10
|
+
import "../types-CDpH6MA4.mjs";
|
|
11
|
+
import "../validate-CZvb-BKB.mjs";
|
|
12
12
|
import "../index.mjs";
|
|
13
13
|
import { Kysely } from "kysely";
|
|
14
14
|
|
|
@@ -16,6 +16,11 @@ import { Kysely } from "kysely";
|
|
|
16
16
|
interface LocalMediaRuntimeConfig {
|
|
17
17
|
enabled?: boolean;
|
|
18
18
|
db?: Kysely<Database>;
|
|
19
|
+
/**
|
|
20
|
+
* Resolver for the current database connection. Runtime code injects this
|
|
21
|
+
* so media provider operations honor request-scoped database overrides.
|
|
22
|
+
*/
|
|
23
|
+
getDb?: () => Kysely<Database>;
|
|
19
24
|
storage?: Storage;
|
|
20
25
|
}
|
|
21
26
|
/**
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import "../base64-F8-DUraK.mjs";
|
|
2
|
-
import "../types-
|
|
3
|
-
import { t as MediaRepository } from "../media-
|
|
2
|
+
import "../types-Dq1qT19x.mjs";
|
|
3
|
+
import { t as MediaRepository } from "../media-DMj0grzC.mjs";
|
|
4
4
|
|
|
5
5
|
//#region src/media/local-runtime.ts
|
|
6
6
|
/**
|
|
@@ -9,10 +9,11 @@ import { t as MediaRepository } from "../media-CbKyYukG.mjs";
|
|
|
9
9
|
const createMediaProvider = (config) => {
|
|
10
10
|
const { db, storage } = config;
|
|
11
11
|
if (!db) throw new Error("Local media provider requires database connection");
|
|
12
|
-
const
|
|
12
|
+
const resolveDb = config.getDb ?? (() => db);
|
|
13
|
+
const repo = () => new MediaRepository(resolveDb());
|
|
13
14
|
return {
|
|
14
15
|
async list(options) {
|
|
15
|
-
const result = await repo.findMany({
|
|
16
|
+
const result = await repo().findMany({
|
|
16
17
|
cursor: options.cursor,
|
|
17
18
|
limit: options.limit,
|
|
18
19
|
mimeType: options.mimeType
|
|
@@ -38,7 +39,7 @@ const createMediaProvider = (config) => {
|
|
|
38
39
|
};
|
|
39
40
|
},
|
|
40
41
|
async get(id) {
|
|
41
|
-
const item = await repo.findById(id);
|
|
42
|
+
const item = await repo().findById(id);
|
|
42
43
|
if (!item) return null;
|
|
43
44
|
return {
|
|
44
45
|
id: item.id,
|
|
@@ -62,12 +63,13 @@ const createMediaProvider = (config) => {
|
|
|
62
63
|
throw new Error("Local upload should use /_dineway/api/media endpoint");
|
|
63
64
|
},
|
|
64
65
|
async delete(id) {
|
|
65
|
-
const
|
|
66
|
+
const repoInstance = repo();
|
|
67
|
+
const item = await repoInstance.findById(id);
|
|
66
68
|
if (!item) return;
|
|
67
69
|
if (storage) try {
|
|
68
70
|
await storage.delete(item.storageKey);
|
|
69
71
|
} catch {}
|
|
70
|
-
await
|
|
72
|
+
await repoInstance.delete(id);
|
|
71
73
|
},
|
|
72
74
|
getEmbed(value, _options) {
|
|
73
75
|
const src = `/_dineway/api/media/file/${typeof value.meta?.storageKey === "string" ? value.meta.storageKey : value.id}`;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { i as encodeCursor, r as decodeCursor } from "./types-
|
|
1
|
+
import { i as encodeCursor, r as decodeCursor } from "./types-Dq1qT19x.mjs";
|
|
2
2
|
import { sql } from "kysely";
|
|
3
3
|
import { ulid } from "ulidx";
|
|
4
4
|
|
|
@@ -65,6 +65,8 @@ var MediaRepository = class {
|
|
|
65
65
|
if (metadata?.width !== void 0) updates.width = metadata.width;
|
|
66
66
|
if (metadata?.height !== void 0) updates.height = metadata.height;
|
|
67
67
|
if (metadata?.size !== void 0) updates.size = metadata.size;
|
|
68
|
+
if (metadata?.blurhash !== void 0) updates.blurhash = metadata.blurhash;
|
|
69
|
+
if (metadata?.dominantColor !== void 0) updates.dominant_color = metadata.dominantColor;
|
|
68
70
|
await this.db.updateTable("media").set(updates).where("id", "=", id).execute();
|
|
69
71
|
return this.findById(id);
|
|
70
72
|
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
//#region src/seo/media-url.ts
|
|
2
|
+
/**
|
|
3
|
+
* Resolve a stored SEO image reference to a URL.
|
|
4
|
+
*
|
|
5
|
+
* SEO image values can be stored as:
|
|
6
|
+
* - absolute URLs, which are returned unchanged;
|
|
7
|
+
* - root-relative media paths, which are prefixed with the site URL;
|
|
8
|
+
* - bare media IDs, which are expanded to the Dineway media API path.
|
|
9
|
+
*/
|
|
10
|
+
const TRAILING_SLASH_RE = /\/$/;
|
|
11
|
+
const ABSOLUTE_URL_RE = /^https?:\/\//i;
|
|
12
|
+
function buildSeoImageUrl(imageRef, siteUrl) {
|
|
13
|
+
if (ABSOLUTE_URL_RE.test(imageRef)) return imageRef;
|
|
14
|
+
if (imageRef.startsWith("/")) return siteUrl ? `${siteUrl.replace(TRAILING_SLASH_RE, "")}${imageRef}` : imageRef;
|
|
15
|
+
const mediaPath = `/_dineway/api/media/file/${imageRef}`;
|
|
16
|
+
return siteUrl ? `${siteUrl.replace(TRAILING_SLASH_RE, "")}${mediaPath}` : mediaPath;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
//#endregion
|
|
20
|
+
export { buildSeoImageUrl as t };
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { a as __exportAll } from "./runner-
|
|
1
|
+
import { a as __exportAll } from "./runner-DB7CRfOF.mjs";
|
|
2
2
|
import { n as getI18nConfig } from "./config-CVssduLe.mjs";
|
|
3
|
-
import {
|
|
3
|
+
import { c as invalidateMenuObjectCache } from "./object-cache-D51qOseS.mjs";
|
|
4
|
+
import { t as withTransaction } from "./transaction-C2EOMTJA.mjs";
|
|
4
5
|
import { ulid } from "ulidx";
|
|
5
6
|
|
|
6
7
|
//#region src/database/repositories/menu.ts
|
|
@@ -175,6 +176,7 @@ var MenuRepository = class {
|
|
|
175
176
|
}
|
|
176
177
|
}
|
|
177
178
|
});
|
|
179
|
+
invalidateMenuObjectCache();
|
|
178
180
|
const created = await this.findById(id);
|
|
179
181
|
if (!created) throw new Error("Failed to create menu");
|
|
180
182
|
return created;
|
|
@@ -183,7 +185,10 @@ var MenuRepository = class {
|
|
|
183
185
|
if (!await this.findById(id)) return null;
|
|
184
186
|
const values = {};
|
|
185
187
|
if (input.label !== void 0) values.label = input.label;
|
|
186
|
-
if (Object.keys(values).length > 0)
|
|
188
|
+
if (Object.keys(values).length > 0) {
|
|
189
|
+
await this.db.updateTable("_dineway_menus").set(values).where("id", "=", id).execute();
|
|
190
|
+
invalidateMenuObjectCache();
|
|
191
|
+
}
|
|
187
192
|
return await this.findById(id);
|
|
188
193
|
}
|
|
189
194
|
/**
|
|
@@ -198,6 +203,7 @@ var MenuRepository = class {
|
|
|
198
203
|
await trx.deleteFrom("_dineway_menu_items").where("menu_id", "=", id).execute();
|
|
199
204
|
await trx.deleteFrom("_dineway_menus").where("id", "=", id).execute();
|
|
200
205
|
});
|
|
206
|
+
invalidateMenuObjectCache();
|
|
201
207
|
return true;
|
|
202
208
|
}
|
|
203
209
|
/**
|
|
@@ -250,6 +256,7 @@ var MenuRepository = class {
|
|
|
250
256
|
locale,
|
|
251
257
|
translation_group: id
|
|
252
258
|
}).execute();
|
|
259
|
+
invalidateMenuObjectCache();
|
|
253
260
|
return rowToMenuItem(await this.db.selectFrom("_dineway_menu_items").selectAll().where("id", "=", id).executeTakeFirstOrThrow());
|
|
254
261
|
}
|
|
255
262
|
/**
|
|
@@ -267,12 +274,17 @@ var MenuRepository = class {
|
|
|
267
274
|
if (input.cssClasses !== void 0) values.css_classes = input.cssClasses;
|
|
268
275
|
if (input.parentId !== void 0) values.parent_id = input.parentId;
|
|
269
276
|
if (input.sortOrder !== void 0) values.sort_order = input.sortOrder;
|
|
270
|
-
if (Object.keys(values).length > 0)
|
|
277
|
+
if (Object.keys(values).length > 0) {
|
|
278
|
+
await this.db.updateTable("_dineway_menu_items").set(values).where("id", "=", itemId).execute();
|
|
279
|
+
invalidateMenuObjectCache();
|
|
280
|
+
}
|
|
271
281
|
return rowToMenuItem(await this.db.selectFrom("_dineway_menu_items").selectAll().where("id", "=", itemId).executeTakeFirstOrThrow());
|
|
272
282
|
}
|
|
273
283
|
/** Delete an item scoped to its menu. Returns false if nothing was deleted. */
|
|
274
284
|
async deleteItem(menuId, itemId) {
|
|
275
|
-
|
|
285
|
+
const deleted = (await this.db.deleteFrom("_dineway_menu_items").where("id", "=", itemId).where("menu_id", "=", menuId).execute())[0]?.numDeletedRows !== 0n;
|
|
286
|
+
if (deleted) invalidateMenuObjectCache();
|
|
287
|
+
return deleted;
|
|
276
288
|
}
|
|
277
289
|
/**
|
|
278
290
|
* Atomic replace: delete every existing item and re-insert in order.
|
|
@@ -310,6 +322,7 @@ var MenuRepository = class {
|
|
|
310
322
|
}
|
|
311
323
|
await trx.updateTable("_dineway_menus").set({ updated_at: (/* @__PURE__ */ new Date()).toISOString() }).where("id", "=", menuId).execute();
|
|
312
324
|
});
|
|
325
|
+
invalidateMenuObjectCache();
|
|
313
326
|
return { itemCount: items.length };
|
|
314
327
|
}
|
|
315
328
|
/**
|
|
@@ -317,6 +330,7 @@ var MenuRepository = class {
|
|
|
317
330
|
* malicious payload cannot move foreign items into this menu's siblings.
|
|
318
331
|
*/
|
|
319
332
|
async reorderItems(menuId, items) {
|
|
333
|
+
invalidateMenuObjectCache();
|
|
320
334
|
return withTransaction(this.db, async (trx) => {
|
|
321
335
|
for (const item of items) await trx.updateTable("_dineway_menu_items").set({
|
|
322
336
|
parent_id: item.parentId,
|
|
@@ -1,11 +1,33 @@
|
|
|
1
1
|
import { t as validateIdentifier } from "./validate-VPnKoIzW.mjs";
|
|
2
|
-
import { r as getDb } from "./loader
|
|
3
|
-
import { t as
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
2
|
+
import { r as getDb } from "./loader-CjWqjweO.mjs";
|
|
3
|
+
import { n as cachedQuery, t as CacheNamespace } from "./object-cache-D51qOseS.mjs";
|
|
4
|
+
import { t as CommentRepository } from "./comment-DlA4iChg.mjs";
|
|
5
|
+
import { r as requestCached } from "./request-cache-D9GQBxMP.mjs";
|
|
6
|
+
import { i as resolveLocaleChain, r as resolveLocale } from "./resolve-Cb6Dbz-C.mjs";
|
|
7
|
+
import { n as sanitizeHref } from "./url-CpyFDFpO.mjs";
|
|
8
|
+
import { t as CommentReactionRepository } from "./comment-reaction-DfFao1ST.mjs";
|
|
7
9
|
import { sql } from "kysely";
|
|
8
10
|
|
|
11
|
+
//#region src/comments/ranking.ts
|
|
12
|
+
const DEFAULT_Z = 1.96;
|
|
13
|
+
const NEGATIVE_REACTIONS = new Set(["dislike", "down"]);
|
|
14
|
+
function wilsonLowerBound(up, down, z = DEFAULT_Z) {
|
|
15
|
+
const n = up + down;
|
|
16
|
+
if (n <= 0) return 0;
|
|
17
|
+
const phat = up / n;
|
|
18
|
+
const z2 = z * z;
|
|
19
|
+
const denom = 1 + z2 / n;
|
|
20
|
+
return (phat + z2 / (2 * n) - z * Math.sqrt((phat * (1 - phat) + z2 / (4 * n)) / n)) / denom;
|
|
21
|
+
}
|
|
22
|
+
function reactionScore(counts) {
|
|
23
|
+
let up = 0;
|
|
24
|
+
let down = 0;
|
|
25
|
+
for (const [reaction, count] of Object.entries(counts)) if (NEGATIVE_REACTIONS.has(reaction)) down += count;
|
|
26
|
+
else up += count;
|
|
27
|
+
return wilsonLowerBound(up, down);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
//#endregion
|
|
9
31
|
//#region src/comments/query.ts
|
|
10
32
|
/**
|
|
11
33
|
* Get approved comments for a content item.
|
|
@@ -22,7 +44,15 @@ import { sql } from "kysely";
|
|
|
22
44
|
* ```
|
|
23
45
|
*/
|
|
24
46
|
async function getComments(options) {
|
|
25
|
-
|
|
47
|
+
const sort = options.sort ?? "oldest";
|
|
48
|
+
const withReactions = options.reactions || sort === "best";
|
|
49
|
+
return cachedQuery({
|
|
50
|
+
namespace: CacheNamespace.COMMENTS,
|
|
51
|
+
key: `comments:${options.collection}:${options.contentId}:${options.threaded ? "t" : "f"}:${withReactions ? "r" : "n"}:${sort}`,
|
|
52
|
+
load: async () => {
|
|
53
|
+
return getCommentsWithDb(await getDb(), options);
|
|
54
|
+
}
|
|
55
|
+
});
|
|
26
56
|
}
|
|
27
57
|
/**
|
|
28
58
|
* Get approved comments with an explicit db handle.
|
|
@@ -37,15 +67,42 @@ async function getCommentsWithDb(db, options) {
|
|
|
37
67
|
status: "approved",
|
|
38
68
|
limit: 500
|
|
39
69
|
});
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
70
|
+
const items = options.threaded ? CommentRepository.assembleThreads(result.items).map((c) => CommentRepository.toPublicComment(c)) : result.items.map((c) => CommentRepository.toPublicComment(c));
|
|
71
|
+
if (options.reactions || options.sort === "best") {
|
|
72
|
+
await attachReactions(db, items);
|
|
73
|
+
if (options.sort === "best") sortByBest(items);
|
|
74
|
+
}
|
|
44
75
|
return {
|
|
45
|
-
items
|
|
76
|
+
items,
|
|
46
77
|
total
|
|
47
78
|
};
|
|
48
79
|
}
|
|
80
|
+
async function attachReactions(db, items) {
|
|
81
|
+
const ids = [];
|
|
82
|
+
for (const comment of items) {
|
|
83
|
+
ids.push(comment.id);
|
|
84
|
+
for (const reply of comment.replies ?? []) ids.push(reply.id);
|
|
85
|
+
}
|
|
86
|
+
if (ids.length === 0) return;
|
|
87
|
+
const counts = await new CommentReactionRepository(db).countsForComments(ids);
|
|
88
|
+
const assign = (comment) => {
|
|
89
|
+
const reactions = counts.get(comment.id);
|
|
90
|
+
if (reactions) comment.reactions = reactions;
|
|
91
|
+
};
|
|
92
|
+
for (const comment of items) {
|
|
93
|
+
assign(comment);
|
|
94
|
+
for (const reply of comment.replies ?? []) assign(reply);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
function sortByBest(items) {
|
|
98
|
+
items.sort((a, b) => {
|
|
99
|
+
const scoreDelta = reactionScore(b.reactions ?? {}) - reactionScore(a.reactions ?? {});
|
|
100
|
+
if (scoreDelta !== 0) return scoreDelta;
|
|
101
|
+
if (a.createdAt < b.createdAt) return -1;
|
|
102
|
+
if (a.createdAt > b.createdAt) return 1;
|
|
103
|
+
return 0;
|
|
104
|
+
});
|
|
105
|
+
}
|
|
49
106
|
/**
|
|
50
107
|
* Get the count of approved comments for a content item.
|
|
51
108
|
*
|
|
@@ -75,9 +132,13 @@ async function getCommentCountWithDb(db, collection, contentId) {
|
|
|
75
132
|
*/
|
|
76
133
|
function getMenu(name, options = {}) {
|
|
77
134
|
const locale = resolveLocale(options.locale);
|
|
78
|
-
return requestCached(`menu:${name}:${locale ?? "*"}`,
|
|
79
|
-
|
|
80
|
-
|
|
135
|
+
return requestCached(`menu:${name}:${locale ?? "*"}`, () => cachedQuery({
|
|
136
|
+
namespace: CacheNamespace.MENUS,
|
|
137
|
+
key: `${name}:${locale ?? "*"}`,
|
|
138
|
+
load: async () => {
|
|
139
|
+
return getMenuWithDb(name, await getDb(), { locale });
|
|
140
|
+
}
|
|
141
|
+
}));
|
|
81
142
|
}
|
|
82
143
|
/**
|
|
83
144
|
* Get menu by name with resolved URLs (with explicit db).
|
|
@@ -182,7 +243,11 @@ async function resolveMenuItem(item, db, urlPatterns, locale) {
|
|
|
182
243
|
if (url === null) return null;
|
|
183
244
|
break;
|
|
184
245
|
case "collection":
|
|
185
|
-
|
|
246
|
+
if (!item.reference_collection) return null;
|
|
247
|
+
if (item.reference_id) {
|
|
248
|
+
url = await resolveContentUrl(item.reference_collection, item.reference_id, db, urlPatterns, locale);
|
|
249
|
+
if (url === null) return null;
|
|
250
|
+
} else url = `/${item.reference_collection}/`;
|
|
186
251
|
break;
|
|
187
252
|
default: if (item.reference_collection && item.reference_id) {
|
|
188
253
|
url = await resolveContentUrl(item.reference_collection, item.reference_id, db, urlPatterns, locale);
|
|
@@ -25,7 +25,8 @@ async function normalizeMediaValue(value, getProvider) {
|
|
|
25
25
|
const needsDimensions = result.width == null || result.height == null;
|
|
26
26
|
const needsStorageKey = provider === "local" && !result.meta?.storageKey;
|
|
27
27
|
const needsFileInfo = !result.mimeType || !result.filename;
|
|
28
|
-
|
|
28
|
+
const needsLqip = (result.mimeType ?? "").startsWith("image/") && (result.blurhash == null || result.dominantColor == null);
|
|
29
|
+
if (!(needsDimensions || needsStorageKey || needsFileInfo || needsLqip) || !id) return result;
|
|
29
30
|
const mediaProvider = getProvider(provider);
|
|
30
31
|
if (!mediaProvider?.get) return result;
|
|
31
32
|
let providerItem;
|
|
@@ -80,6 +81,8 @@ async function resolveInternalUrl(url, getProvider) {
|
|
|
80
81
|
mimeType: item.mimeType,
|
|
81
82
|
width: item.width,
|
|
82
83
|
height: item.height,
|
|
84
|
+
blurhash: item.blurhash,
|
|
85
|
+
dominantColor: item.dominantColor,
|
|
83
86
|
alt: item.alt,
|
|
84
87
|
meta: item.meta
|
|
85
88
|
};
|
|
@@ -92,6 +95,8 @@ function mergeProviderData(existing, item) {
|
|
|
92
95
|
const result = { ...existing };
|
|
93
96
|
if (result.width == null && item.width != null) result.width = item.width;
|
|
94
97
|
if (result.height == null && item.height != null) result.height = item.height;
|
|
98
|
+
if (result.blurhash == null && item.blurhash != null) result.blurhash = item.blurhash;
|
|
99
|
+
if (result.dominantColor == null && item.dominantColor != null) result.dominantColor = item.dominantColor;
|
|
95
100
|
if (!result.filename && item.filename) result.filename = item.filename;
|
|
96
101
|
if (!result.mimeType && item.mimeType) result.mimeType = item.mimeType;
|
|
97
102
|
if (!result.alt && item.alt) result.alt = item.alt;
|
|
@@ -117,6 +122,8 @@ function recordToMediaValue(obj) {
|
|
|
117
122
|
if (typeof obj.mimeType === "string") result.mimeType = obj.mimeType;
|
|
118
123
|
if (typeof obj.width === "number") result.width = obj.width;
|
|
119
124
|
if (typeof obj.height === "number") result.height = obj.height;
|
|
125
|
+
if (typeof obj.blurhash === "string") result.blurhash = obj.blurhash;
|
|
126
|
+
if (typeof obj.dominantColor === "string") result.dominantColor = obj.dominantColor;
|
|
120
127
|
if (typeof obj.alt === "string") result.alt = obj.alt;
|
|
121
128
|
if (isRecord(obj.meta)) result.meta = obj.meta;
|
|
122
129
|
return result;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { t as withTransaction } from "./transaction-
|
|
2
|
-
import { a as
|
|
3
|
-
import { a as
|
|
4
|
-
import { c as validateRedirectUri, o as lookupOAuthClient, s as validateClientRedirectUri } from "./oauth-clients-
|
|
5
|
-
import { t as lookupUserRoleAndStatus } from "./oauth-user-lookup-
|
|
1
|
+
import { t as withTransaction } from "./transaction-C2EOMTJA.mjs";
|
|
2
|
+
import { a as hashApiToken, n as TOKEN_PREFIXES, r as generatePrefixedToken, t as ALL_VALID_SCOPES } from "./api-tokens-2r7OWi_I.mjs";
|
|
3
|
+
import { a as filterExperimentalSiteContextWorkflowScopes, i as experimentalSiteContextWorkflowsEnabled, o as getExperimentalSiteContextWorkflowScopesDisabledMessage, r as disabledExperimentalSiteContextWorkflowScopes } from "./experimental-workflows-BMsUnIAw.mjs";
|
|
4
|
+
import { c as validateRedirectUri, o as lookupOAuthClient, s as validateClientRedirectUri } from "./oauth-clients-Dl9E8dEM.mjs";
|
|
5
|
+
import { t as lookupUserRoleAndStatus } from "./oauth-user-lookup-Ygw4bNyt.mjs";
|
|
6
6
|
import { clampScopes, computeS256Challenge, secureCompare } from "@dineway-ai/auth";
|
|
7
7
|
import { generateCodeVerifier } from "arctic";
|
|
8
8
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { s as validateScopes } from "./api-tokens-2r7OWi_I.mjs";
|
|
2
|
+
import { o as getExperimentalSiteContextWorkflowScopesDisabledMessage, r as disabledExperimentalSiteContextWorkflowScopes } from "./experimental-workflows-BMsUnIAw.mjs";
|
|
3
3
|
|
|
4
4
|
//#region src/api/oauth/redirect-uri.ts
|
|
5
5
|
/**
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { t as CreateObjectCacheBackendFn } from "../types-DF7ZuGGk.mjs";
|
|
2
|
+
|
|
3
|
+
//#region src/object-cache/memory.d.ts
|
|
4
|
+
/**
|
|
5
|
+
* Create the in-isolate memory backend.
|
|
6
|
+
*
|
|
7
|
+
* Config keys (all optional):
|
|
8
|
+
* - `maxEntries` — soft cap on stored keys; oldest insertions are evicted
|
|
9
|
+
* first when exceeded (FIFO, cheap and good enough for a backstop). Default
|
|
10
|
+
* 1000.
|
|
11
|
+
*/
|
|
12
|
+
declare const createObjectCache: CreateObjectCacheBackendFn;
|
|
13
|
+
//#endregion
|
|
14
|
+
export { createObjectCache };
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
//#region src/object-cache/memory.ts
|
|
2
|
+
const STORE_KEY = Symbol.for("dineway:object-cache:memory");
|
|
3
|
+
const g = globalThis;
|
|
4
|
+
function getStore(maxEntries) {
|
|
5
|
+
const existing = g[STORE_KEY];
|
|
6
|
+
if (existing) return existing;
|
|
7
|
+
const store = {
|
|
8
|
+
map: /* @__PURE__ */ new Map(),
|
|
9
|
+
maxEntries
|
|
10
|
+
};
|
|
11
|
+
g[STORE_KEY] = store;
|
|
12
|
+
return store;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Create the in-isolate memory backend.
|
|
16
|
+
*
|
|
17
|
+
* Config keys (all optional):
|
|
18
|
+
* - `maxEntries` — soft cap on stored keys; oldest insertions are evicted
|
|
19
|
+
* first when exceeded (FIFO, cheap and good enough for a backstop). Default
|
|
20
|
+
* 1000.
|
|
21
|
+
*/
|
|
22
|
+
const createObjectCache = (config) => {
|
|
23
|
+
const store = getStore(typeof config.maxEntries === "number" ? config.maxEntries : 1e3);
|
|
24
|
+
return {
|
|
25
|
+
get(key) {
|
|
26
|
+
const entry = store.map.get(key);
|
|
27
|
+
if (!entry) return Promise.resolve(null);
|
|
28
|
+
if (entry.expiresAt !== null && entry.expiresAt <= Date.now()) {
|
|
29
|
+
store.map.delete(key);
|
|
30
|
+
return Promise.resolve(null);
|
|
31
|
+
}
|
|
32
|
+
return Promise.resolve(entry.value);
|
|
33
|
+
},
|
|
34
|
+
set(key, value, ttlSeconds) {
|
|
35
|
+
store.map.delete(key);
|
|
36
|
+
store.map.set(key, {
|
|
37
|
+
value,
|
|
38
|
+
expiresAt: ttlSeconds && ttlSeconds > 0 ? Date.now() + ttlSeconds * 1e3 : null
|
|
39
|
+
});
|
|
40
|
+
while (store.map.size > store.maxEntries) {
|
|
41
|
+
const oldest = store.map.keys().next().value;
|
|
42
|
+
if (oldest === void 0) break;
|
|
43
|
+
store.map.delete(oldest);
|
|
44
|
+
}
|
|
45
|
+
return Promise.resolve();
|
|
46
|
+
},
|
|
47
|
+
delete(key) {
|
|
48
|
+
store.map.delete(key);
|
|
49
|
+
return Promise.resolve();
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
//#endregion
|
|
55
|
+
export { createObjectCache };
|