Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/sixty-knives-thank.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'@powersync/service-sync-rules': patch
---

Export SQL functions for sync streams.
1 change: 1 addition & 0 deletions packages/sync-rules/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ export * from './SqlParameterQuery.js';
export * from './SqlSyncRules.js';
export * from './StaticSchema.js';
export { SyncStream } from './streams/stream.js';
export { STREAM_FUNCTIONS } from './streams/functions.js';
export { syncStreamFromSql } from './streams/from_sql.js';
export * from './TablePattern.js';
export * from './types.js';
Expand Down
32 changes: 17 additions & 15 deletions packages/sync-rules/src/request_functions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -107,25 +107,27 @@ export const request_jwt: SqlParameterFunction = {
usesUnauthenticatedRequestParameters: false
};

export const request_user_id: SqlParameterFunction = {
debugName: 'request.user_id',
parameterCount: 0,
call(parameters: ParameterValueSet) {
return parameters.userId;
},
getReturnType() {
return ExpressionType.TEXT;
},
detail: 'Authenticated user id',
documentation: "The id of the authenticated user.\nSame as `request.jwt() ->> 'sub'`.",
usesAuthenticatedRequestParameters: true,
usesUnauthenticatedRequestParameters: false
};
export function generateUserIdFunction(debugName: string): SqlParameterFunction {
return {
debugName,
parameterCount: 0,
call(parameters: ParameterValueSet) {
return parameters.userId;
},
getReturnType() {
return ExpressionType.TEXT;
},
detail: 'Authenticated user id',
documentation: "The id of the authenticated user.\nSame as `request.jwt() ->> 'sub'`.",
usesAuthenticatedRequestParameters: true,
usesUnauthenticatedRequestParameters: false
};
}

const REQUEST_FUNCTIONS_NAMED = {
...globalRequestParameterFunctions('request'),
jwt: request_jwt,
user_id: request_user_id
user_id: generateUserIdFunction('request.user_id')
};

export const REQUEST_FUNCTIONS: Record<string, SqlParameterFunction> = REQUEST_FUNCTIONS_NAMED;
2 changes: 1 addition & 1 deletion packages/sync-rules/src/sql_functions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -514,7 +514,7 @@ export function generateSqlFunctions(compatibility: CompatibilityContext) {
SqlFunction['call']
>;

const namedRecord: Record<string, SqlFunction> = named;
const namedRecord: Record<string, DocumentedSqlFunction> = named;

return {
named: namedRecord,
Expand Down
4 changes: 2 additions & 2 deletions packages/sync-rules/src/streams/functions.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import {
generateUserIdFunction,
globalRequestParameterFunctions,
parameterFunctions,
request_user_id,
SqlParameterFunction
} from '../request_functions.js';
import { ParameterValueSet } from '../types.js';
Expand All @@ -27,7 +27,7 @@ export const STREAM_FUNCTIONS: Record<string, Record<string, SqlParameterFunctio
...globalRequestParameterFunctions('connection')
},
auth: {
user_id: request_user_id,
user_id: generateUserIdFunction('auth.user_id'),
...parameterFunctions({
schema: 'auth',
extractJsonString: function (v: ParameterValueSet): string {
Expand Down