Skip to content

Commit c2041af

Browse files
committed
fix(selectors): add missing context fields to resolution, ensureCredential to sharepoint.lists, and siteId validation
- Add baseId, datasetId, serviceDeskId to SelectorResolutionArgs, ExtendedSelectorContext, extractExtendedContext, useSelectorDisplayName, and resolveSelectorForSubBlock so cascading selectors resolve correctly through the resolution path. - Add ensureCredential guard to sharepoint.lists registry entry. - Add regex validation for SharePoint siteId format (hostname,GUID,GUID).
1 parent a6e695a commit c2041af

File tree

5 files changed

+39
-2
lines changed

5 files changed

+39
-2
lines changed

apps/sim/app/api/tools/sharepoint/lists/route.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,11 @@ export async function GET(request: NextRequest) {
4646
return NextResponse.json({ error: 'Site ID is required' }, { status: 400 })
4747
}
4848

49+
const SITE_ID_RE = /^[\w.\-,]+$/
50+
if (siteId.length > 512 || !SITE_ID_RE.test(siteId)) {
51+
return NextResponse.json({ error: 'Invalid site ID format' }, { status: 400 })
52+
}
53+
4954
const credentialIdValidation = validateAlphanumericId(credentialId, 'credentialId', 255)
5055
if (!credentialIdValidation.isValid) {
5156
logger.warn(`[${requestId}] Invalid credential ID`, { error: credentialIdValidation.error })

apps/sim/hooks/selectors/registry.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -721,20 +721,22 @@ const registry: Record<SelectorKey, SelectorDefinition> = {
721721
],
722722
enabled: ({ context }) => Boolean(context.credentialId && context.siteId),
723723
fetchList: async ({ context }: SelectorQueryArgs) => {
724+
const credentialId = ensureCredential(context, 'sharepoint.lists')
724725
if (!context.siteId) throw new Error('Missing site ID for sharepoint.lists selector')
725726
const data = await fetchJson<{ lists: SharepointList[] }>('/api/tools/sharepoint/lists', {
726727
searchParams: {
727-
credentialId: context.credentialId,
728+
credentialId,
728729
siteId: context.siteId,
729730
},
730731
})
731732
return (data.lists || []).map((list) => ({ id: list.id, label: list.displayName }))
732733
},
733734
fetchById: async ({ context, detailId }: SelectorQueryArgs) => {
734735
if (!detailId || !context.siteId) return null
736+
const credentialId = ensureCredential(context, 'sharepoint.lists')
735737
const data = await fetchJson<{ lists: SharepointList[] }>('/api/tools/sharepoint/lists', {
736738
searchParams: {
737-
credentialId: context.credentialId,
739+
credentialId,
738740
siteId: context.siteId,
739741
},
740742
})

apps/sim/hooks/selectors/resolution.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@ export interface SelectorResolutionArgs {
1818
siteId?: string
1919
collectionId?: string
2020
spreadsheetId?: string
21+
baseId?: string
22+
datasetId?: string
23+
serviceDeskId?: string
2124
}
2225

2326
export function resolveSelectorForSubBlock(
@@ -38,6 +41,9 @@ export function resolveSelectorForSubBlock(
3841
siteId: args.siteId,
3942
collectionId: args.collectionId,
4043
spreadsheetId: args.spreadsheetId,
44+
baseId: args.baseId,
45+
datasetId: args.datasetId,
46+
serviceDeskId: args.serviceDeskId,
4147
mimeType: subBlock.mimeType,
4248
},
4349
allowSearch: subBlock.selectorAllowSearch ?? true,

apps/sim/hooks/use-selector-display-name.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@ interface SelectorDisplayNameArgs {
1818
planId?: string
1919
teamId?: string
2020
knowledgeBaseId?: string
21+
baseId?: string
22+
datasetId?: string
23+
serviceDeskId?: string
2124
}
2225

2326
export function useSelectorDisplayName({
@@ -30,6 +33,9 @@ export function useSelectorDisplayName({
3033
planId,
3134
teamId,
3235
knowledgeBaseId,
36+
baseId,
37+
datasetId,
38+
serviceDeskId,
3339
}: SelectorDisplayNameArgs) {
3440
const detailId = typeof value === 'string' && value.length > 0 ? value : undefined
3541

@@ -43,6 +49,9 @@ export function useSelectorDisplayName({
4349
planId,
4450
teamId,
4551
knowledgeBaseId,
52+
baseId,
53+
datasetId,
54+
serviceDeskId,
4655
})
4756
}, [
4857
subBlock,
@@ -54,6 +63,9 @@ export function useSelectorDisplayName({
5463
planId,
5564
teamId,
5665
knowledgeBaseId,
66+
baseId,
67+
datasetId,
68+
serviceDeskId,
5769
])
5870

5971
const key = resolution?.key

apps/sim/lib/workflows/comparison/resolve-values.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,9 @@ interface ExtendedSelectorContext {
5252
siteId?: string
5353
collectionId?: string
5454
spreadsheetId?: string
55+
baseId?: string
56+
datasetId?: string
57+
serviceDeskId?: string
5558
}
5659

5760
function getSemanticFallback(subBlockId: string, subBlockConfig?: SubBlockConfig): string {
@@ -163,6 +166,9 @@ async function resolveSelectorValue(
163166
siteId: extendedContext.siteId,
164167
collectionId: extendedContext.collectionId,
165168
spreadsheetId: extendedContext.spreadsheetId,
169+
baseId: extendedContext.baseId,
170+
datasetId: extendedContext.datasetId,
171+
serviceDeskId: extendedContext.serviceDeskId,
166172
}
167173

168174
if (definition.fetchById) {
@@ -240,6 +246,9 @@ function extractExtendedContext(
240246
siteId: getStringValue('siteId'),
241247
collectionId: getStringValue('collectionId'),
242248
spreadsheetId: getStringValue('spreadsheetId') || getStringValue('fileId'),
249+
baseId: getStringValue('baseId') || getStringValue('baseSelector'),
250+
datasetId: getStringValue('datasetId') || getStringValue('datasetSelector'),
251+
serviceDeskId: getStringValue('serviceDeskId') || getStringValue('serviceDeskSelector'),
243252
}
244253
}
245254

@@ -313,6 +322,9 @@ export async function resolveValueForDisplay(
313322
siteId: extendedContext.siteId,
314323
collectionId: extendedContext.collectionId,
315324
spreadsheetId: extendedContext.spreadsheetId,
325+
baseId: extendedContext.baseId,
326+
datasetId: extendedContext.datasetId,
327+
serviceDeskId: extendedContext.serviceDeskId,
316328
})
317329

318330
if (resolution?.key) {

0 commit comments

Comments
 (0)