diff --git a/kustomize/base/hasura/hasura-bootstrap.mjs b/kustomize/base/hasura/hasura-bootstrap.mjs index 398b7d0..2c19cdb 100644 --- a/kustomize/base/hasura/hasura-bootstrap.mjs +++ b/kustomize/base/hasura/hasura-bootstrap.mjs @@ -96,7 +96,11 @@ async function main() { const baseTicks = { schema: 'public', name: 'drift_ticks' }; const dlobL2LatestTable = { schema: 'public', name: 'dlob_l2_latest' }; + const dlobL2LatestProjectionView = { schema: 'public', name: 'dlob_l2_latest_projection' }; + const dlobL3LatestProjectionView = { schema: 'public', name: 'dlob_l3_latest_projection' }; + const dlobBestMakersLatestProjectionView = { schema: 'public', name: 'dlob_best_makers_latest_projection' }; const dlobStatsLatestTable = { schema: 'public', name: 'dlob_stats_latest' }; + const dlobStatsLatestProjectionView = { schema: 'public', name: 'dlob_stats_latest_projection' }; const dlobDepthBpsLatestTable = { schema: 'public', name: 'dlob_depth_bps_latest' }; const dlobSlippageLatestTable = { schema: 'public', name: 'dlob_slippage_latest' }; const dlobSlippageLatestV2Table = { schema: 'public', name: 'dlob_slippage_latest_v2' }; @@ -261,9 +265,36 @@ async function main() { await metadataIgnore({ type: 'pg_drop_update_permission', args: { source, table, role: 'ingestor' } }); } + async function ensureProjectedPublicSelectTable(table, columns, { publicFilter, customName } = {}) { + await metadataIgnore({ type: 'pg_untrack_table', args: { source, table, cascade: true } }); + const args = { source, table }; + if (customName) { + args.configuration = { custom_name: customName }; + } + await metadata({ type: 'pg_track_table', args }); + + await metadataIgnore({ type: 'pg_drop_select_permission', args: { source, table, role: 'public' } }); + await metadata({ + type: 'pg_create_select_permission', + args: { + source, + table, + role: 'public', + permission: { + columns, + filter: publicFilter || {}, + }, + }, + }); + + await metadataIgnore({ type: 'pg_drop_insert_permission', args: { source, table, role: 'ingestor' } }); + await metadataIgnore({ type: 'pg_drop_update_permission', args: { source, table, role: 'ingestor' } }); + } + const dlobPublicFilter = { source: { _eq: PUBLIC_DLOB_SOURCE_HEADER } }; - await ensureDlobTable(dlobL2LatestTable, [ + await metadataIgnore({ type: 'pg_untrack_table', args: { source, table: dlobL2LatestTable, cascade: true } }); + await ensureProjectedPublicSelectTable(dlobL2LatestProjectionView, [ 'source', 'market_name', 'market_type', @@ -278,9 +309,10 @@ async function main() { 'asks', 'raw', 'updated_at', - ], { publicFilter: dlobPublicFilter }); + ], { publicFilter: dlobPublicFilter, customName: 'dlob_l2_latest' }); - await ensureDlobTable(dlobStatsLatestTable, [ + await metadataIgnore({ type: 'pg_untrack_table', args: { source, table: dlobStatsLatestTable, cascade: true } }); + await ensureProjectedPublicSelectTable(dlobStatsLatestProjectionView, [ 'source', 'market_name', 'market_type', @@ -302,6 +334,31 @@ async function main() { 'imbalance', 'raw', 'updated_at', + ], { publicFilter: dlobPublicFilter, customName: 'dlob_stats_latest' }); + + await ensureProjectedPublicSelectTable(dlobL3LatestProjectionView, [ + 'source', + 'market_name', + 'market_type', + 'market_index', + 'ts', + 'slot', + 'bids', + 'asks', + 'raw', + 'updated_at', + ], { publicFilter: dlobPublicFilter }); + + await ensureProjectedPublicSelectTable(dlobBestMakersLatestProjectionView, [ + 'source', + 'market_name', + 'market_type', + 'market_index', + 'slot', + 'bids', + 'asks', + 'raw', + 'updated_at', ], { publicFilter: dlobPublicFilter }); await ensurePublicSelectTable(dlobDepthBpsLatestTable, [