Skip to content

Commit 31fe073

Browse files
committed
fix: enhance error handling in canvas controller and update fullscreen parameter comment
1 parent 21615dc commit 31fe073

3 files changed

Lines changed: 27 additions & 8 deletions

File tree

apps/api/src/app/controllers/canvas.controller.ts

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -139,15 +139,36 @@ const appHandler = createRoute(routeDefinition.appHandler.validators, async ({ b
139139
},
140140
'[CANVAS][SIGNED_REQUEST_VERIFIED]',
141141
);
142+
} else {
143+
res.status(400).send({
144+
status: 'error',
145+
message: 'Missing required Canvas parameters. Expected either a signed_request or user_approval_required auth flow.',
146+
});
147+
return;
148+
}
149+
150+
const canvasScriptBaseUrl = (envelope as any)?.client?.instanceUrl || loginUrl;
151+
if (!canvasScriptBaseUrl) {
152+
res.status(400).send({
153+
status: 'error',
154+
message: 'Unable to determine Salesforce instance URL for Canvas SDK.',
155+
});
156+
return;
157+
}
158+
159+
const canvasScriptUrl = new URL(`${canvasScriptBaseUrl}/canvas/sdk/js/${ENV.SFDC_API_VERSION}/canvas-all.js`);
160+
161+
if (!canvasScriptUrl.hostname.endsWith('.salesforce.com')) {
162+
res.status(400).send({
163+
status: 'error',
164+
message: 'Invalid Salesforce instance URL for Canvas SDK.',
165+
});
166+
return;
142167
}
143168

144-
// we could also use login.salesforce.com
145169
const fileContents = await getCanvasIndexFile().then((file) =>
146170
file
147-
.replace(
148-
'<%=canvasImportScriptUrl%>',
149-
`${(envelope as any)?.client?.instanceUrl || loginUrl}/canvas/sdk/js/${ENV.SFDC_API_VERSION}/canvas-all.js`,
150-
)
171+
.replace('<%=canvasImportScriptUrl%>', canvasScriptUrl.toString())
151172
.replace('<%=signedRequestJson%>', escapeJsonForScript(JSON.stringify(envelope))),
152173
);
153174

apps/jetstream-canvas/src/app/app.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import './core/monaco-loader';
1212

1313
const Sfdc = window.Sfdc;
1414

15-
// The fullscreen VF page passes { isFullscreen: true } via the apex:canvasApp parameters attribute
15+
// The fullscreen VF page passes { isFullScreen: true } via the apex:canvasApp parameters attribute
1616
const isFullscreen = z.coerce.boolean().default(true).parse(sr.context?.environment?.parameters?.isFullScreen);
1717

1818
export const App = () => {

apps/jetstream-canvas/src/controllers/sf-bulk-api.canvas.controller.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -185,8 +185,6 @@ const downloadResults = createRoute(routeDefinition.downloadResults.validators,
185185
const type = query.type;
186186
const isQuery = ensureBoolean(query.isQuery);
187187

188-
// IN THE MIDDLE OF THIS - giving some issues
189-
190188
let results: ReadableStream<Uint8Array>;
191189
if (isQuery) {
192190
const resultIds = await jetstreamConn!.bulk.getQueryResultsJobIds(jobId, batchId);

0 commit comments

Comments
 (0)