Skip to content

Commit 1ab161c

Browse files
authored
fix(worker): Disallow importing non-Workflow @temporalio packages (#722)
* fix(worker): Disallow importing non-Workflow @temporalio packages * Move otel.ts to common
1 parent ada5736 commit 1ab161c

File tree

7 files changed

+19
-7
lines changed

7 files changed

+19
-7
lines changed

packages/common/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
"dependencies": {
1515
"@temporalio/internal-workflow-common": "file:../internal-workflow-common",
1616
"@temporalio/proto": "file:../proto",
17+
"@opentelemetry/api": "^1.0.3",
1718
"proto3-json-serializer": "^0.1.6"
1819
},
1920
"bugs": {

packages/internal-non-workflow-common/src/otel.ts renamed to packages/common/src/otel.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import * as otel from '@opentelemetry/api';
2-
import { defaultPayloadConverter } from '@temporalio/common';
32
import { Headers } from '@temporalio/internal-workflow-common';
3+
import { defaultPayloadConverter } from './converter/payload-converters';
44

55
/** Default trace header for opentelemetry interceptors */
66
export const TRACE_HEADER = '_tracer-data';

packages/interceptors-opentelemetry/src/client/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import * as otel from '@opentelemetry/api';
22
import { Next, WorkflowClientCallsInterceptor, WorkflowStartInput } from '@temporalio/client';
3-
import { headersWithContext, RUN_ID_ATTR_KEY } from '@temporalio/internal-non-workflow-common/lib/otel';
3+
import { headersWithContext, RUN_ID_ATTR_KEY } from '@temporalio/common/lib/otel';
44
import { instrument } from '../instrumentation';
55
import { SpanName, SPAN_DELIMITER } from '../workflow';
66

packages/interceptors-opentelemetry/src/worker/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import * as otel from '@opentelemetry/api';
22
import { Resource } from '@opentelemetry/resources';
33
import { ReadableSpan, SpanExporter } from '@opentelemetry/sdk-trace-base';
44
import { Context as ActivityContext } from '@temporalio/activity';
5-
import { extractContextFromHeaders } from '@temporalio/internal-non-workflow-common/lib/otel';
5+
import { extractContextFromHeaders } from '@temporalio/common/lib/otel';
66
import { ActivityExecuteInput, ActivityInboundCallsInterceptor, InjectedSink, Next } from '@temporalio/worker';
77
import { instrument } from '../instrumentation';
88
import { OpenTelemetryWorkflowExporter, SerializableSpan, SpanName, SPAN_DELIMITER } from '../workflow';

packages/interceptors-opentelemetry/src/workflow/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import './runtime'; // Patch the Workflow isolate runtime for opentelemetry
22
import * as otel from '@opentelemetry/api';
33
import * as tracing from '@opentelemetry/sdk-trace-base';
4-
import { extractContextFromHeaders, headersWithContext } from '@temporalio/internal-non-workflow-common/lib/otel';
4+
import { extractContextFromHeaders, headersWithContext } from '@temporalio/common/lib/otel';
55
import {
66
ActivityInput,
77
ContinueAsNew,

packages/worker/src/worker.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ import {
2626
NUM_JOBS_ATTR_KEY,
2727
RUN_ID_ATTR_KEY,
2828
TASK_TOKEN_ATTR_KEY,
29-
} from '@temporalio/internal-non-workflow-common/lib/otel';
29+
} from '@temporalio/common/lib/otel';
3030
import {
3131
decompileRetryPolicy,
3232
optionalTsToDate,

packages/worker/src/workflow/bundler.ts

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,17 @@ import { DefaultLogger, Logger } from '../logger';
1111

1212
export const allowedBuiltinModules = ['assert'];
1313
export const disallowedBuiltinModules = builtinModules.filter((module) => !allowedBuiltinModules.includes(module));
14+
export const disallowedModules = [
15+
...disallowedBuiltinModules,
16+
'@temporalio/activity',
17+
'@temporalio/client',
18+
'@temporalio/worker',
19+
'@temporalio/internal-non-workflow-common',
20+
'@temporalio/interceptors-opentelemetry/lib/client',
21+
'@temporalio/interceptors-opentelemetry/lib/worker',
22+
'@temporalio/testing',
23+
'@temporalio/core-bridge',
24+
];
1425

1526
export function moduleMatches(userModule: string, modules: string[]): boolean {
1627
return modules.some((module) => userModule === module || userModule.startsWith(`${module}/`));
@@ -162,7 +173,7 @@ export class WorkflowCodeBundler {
162173
? data.request.slice('node:'.length)
163174
: data.request ?? '';
164175

165-
if (moduleMatches(module, disallowedBuiltinModules) && !moduleMatches(module, this.ignoreModules)) {
176+
if (moduleMatches(module, disallowedModules) && !moduleMatches(module, this.ignoreModules)) {
166177
this.foundProblematicModules.add(module);
167178
}
168179

@@ -176,7 +187,7 @@ export class WorkflowCodeBundler {
176187
extensions: ['.ts', '.js'],
177188
alias: {
178189
__temporal_custom_payload_converter$: this.payloadConverterPath ?? false,
179-
...Object.fromEntries([...this.ignoreModules, ...disallowedBuiltinModules].map((m) => [m, false])),
190+
...Object.fromEntries([...this.ignoreModules, ...disallowedModules].map((m) => [m, false])),
180191
},
181192
},
182193
externals: captureProblematicModules,

0 commit comments

Comments
 (0)