diff --git a/packages/azure-functions-durable/package.json b/packages/azure-functions-durable/package.json index 614016ac..d4cf0059 100644 --- a/packages/azure-functions-durable/package.json +++ b/packages/azure-functions-durable/package.json @@ -34,8 +34,11 @@ ], "scripts": { "clean": "node -e \"require('fs').rmSync('dist', {recursive:true, force:true})\"", + "prebuild": "node -p \"'// Auto-generated by prebuild\\nexport const SDK_VERSION = ' + JSON.stringify(require('./package.json').version) + ';\\nexport const SDK_PACKAGE_NAME = ' + JSON.stringify(require('./package.json').name) + ';'\" > src/version.ts", "build:core": "npm run build -w @microsoft/durabletask-js", "build": "npm run clean && npm run build:core && tsc -p tsconfig.build.json", + "pretest": "npm run prebuild", + "pretest:unit": "npm run prebuild", "test": "jest --runInBand --detectOpenHandles", "test:unit": "jest test/unit --runInBand --detectOpenHandles", "prepublishOnly": "npm run build && npm run test" diff --git a/packages/azure-functions-durable/src/durable-grpc.ts b/packages/azure-functions-durable/src/durable-grpc.ts index 47b5058f..d96e6e1b 100644 --- a/packages/azure-functions-durable/src/durable-grpc.ts +++ b/packages/azure-functions-durable/src/durable-grpc.ts @@ -1,13 +1,21 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. +import { SDK_PACKAGE_NAME, SDK_VERSION } from "./version"; + export type DurableBindingMetadata = Record; export function addDurableGrpcMetadata( binding: TBinding, -): TBinding & { durableRequiresGrpc: true } { +): TBinding & { + durableRequiresGrpc: true; + durableSdkName: string; + durableSdkVersion: string; +} { return { ...binding, durableRequiresGrpc: true, + durableSdkName: SDK_PACKAGE_NAME, + durableSdkVersion: SDK_VERSION, }; } diff --git a/packages/azure-functions-durable/test/unit/durable-grpc.spec.ts b/packages/azure-functions-durable/test/unit/durable-grpc.spec.ts index 89d01ac8..6a9d7860 100644 --- a/packages/azure-functions-durable/test/unit/durable-grpc.spec.ts +++ b/packages/azure-functions-durable/test/unit/durable-grpc.spec.ts @@ -2,6 +2,7 @@ // Licensed under the MIT License. import { addDurableGrpcMetadata } from "../../src/durable-grpc"; +import packageJson from "../../package.json"; describe("addDurableGrpcMetadata", () => { it("adds durableRequiresGrpc without mutating the original binding", () => { @@ -13,6 +14,8 @@ describe("addDurableGrpcMetadata", () => { type: "orchestrationTrigger", name: "context", durableRequiresGrpc: true, + durableSdkName: packageJson.name, + durableSdkVersion: packageJson.version, }); expect(binding).toEqual({ type: "orchestrationTrigger", name: "context" }); }); diff --git a/packages/azure-functions-durable/test/unit/trigger.spec.ts b/packages/azure-functions-durable/test/unit/trigger.spec.ts index 882337c5..6dcb2c20 100644 --- a/packages/azure-functions-durable/test/unit/trigger.spec.ts +++ b/packages/azure-functions-durable/test/unit/trigger.spec.ts @@ -3,6 +3,7 @@ import * as input from "../../src/input"; import * as trigger from "../../src/trigger"; +import packageJson from "../../package.json"; function flag(binding: Record): unknown { return binding.durableRequiresGrpc; @@ -14,6 +15,10 @@ describe("durable triggers and inputs", () => { expect(orchestration.type).toBe("orchestrationTrigger"); expect(flag(orchestration)).toBe(true); + expect(orchestration).toMatchObject({ + durableSdkName: packageJson.name, + durableSdkVersion: packageJson.version, + }); }); it("activity trigger uses the extension type string and opts in to gRPC", () => { @@ -21,6 +26,10 @@ describe("durable triggers and inputs", () => { expect(activity.type).toBe("activityTrigger"); expect(flag(activity)).toBe(true); + expect(activity).toMatchObject({ + durableSdkName: packageJson.name, + durableSdkVersion: packageJson.version, + }); }); it("entity trigger uses the extension type string and opts in to gRPC", () => { @@ -28,6 +37,10 @@ describe("durable triggers and inputs", () => { expect(entity.type).toBe("entityTrigger"); expect(flag(entity)).toBe(true); + expect(entity).toMatchObject({ + durableSdkName: packageJson.name, + durableSdkVersion: packageJson.version, + }); }); it("durableClient input uses the extension type string and opts in to gRPC", () => { @@ -35,5 +48,9 @@ describe("durable triggers and inputs", () => { expect(clientInput.type).toBe("durableClient"); expect(flag(clientInput)).toBe(true); + expect(clientInput).toMatchObject({ + durableSdkName: packageJson.name, + durableSdkVersion: packageJson.version, + }); }); });