Skip to content

Commit 63f22c0

Browse files
authored
Merge pull request #16 from code0-tech/tucana-0.0.66
Update to tucana 0.0.66, implement function definitions
2 parents d587168 + d5a1f84 commit 63f22c0

9 files changed

Lines changed: 217 additions & 170 deletions

File tree

.github/workflows/build.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ jobs:
1717
- name: Set up Node
1818
uses: actions/setup-node@v6
1919
with:
20-
node-version: '24.x'
20+
node-version: '25.9.x'
2121
registry-url: 'https://registry.npmjs.org'
2222
- name: Install dependencies
2323
run: npm ci

.github/workflows/publish.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ jobs:
2424
- name: Set up Node
2525
uses: actions/setup-node@v6
2626
with:
27-
node-version: '24.x'
27+
node-version: '25.9.x'
2828
registry-url: 'https://registry.npmjs.org'
2929
- name: Install dependencies
3030
run: npm ci

mise.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
[tools]
2+
node = "25.9.0"
23
ruby = "latest"

ts/.tool-versions

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
node 24.8.0
1+
nodejs 25.9.0

ts/examples/simple-example-ts/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@ import {
66
} from "@code0-tech/hercules";
77

88
const sdk = createSdk({
9-
authToken: "someToken",
9+
authToken: "token",
1010
aquilaUrl: "127.0.0.1:50051",
11-
actionId: "action_123",
11+
actionId: "service",
1212
version: "0.0.0",
1313
}, [
1414
{

ts/package-lock.json

Lines changed: 142 additions & 156 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

ts/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
"license": "ISC",
3131
"type": "module",
3232
"dependencies": {
33-
"@code0-tech/tucana": "^0.0.65",
33+
"@code0-tech/tucana": "^0.0.66",
3434
"@grpc/grpc-js": "^1.14.3",
3535
"@protobuf-ts/grpc-backend": "^2.11.1",
3636
"@protobuf-ts/grpc-transport": "^2.11.1",

ts/src/action_sdk.ts

Lines changed: 55 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,9 @@ import {
1010
DataTypeServiceClient,
1111
DataTypeUpdateRequest, ExecutionRequest,
1212
FlowTypeServiceClient,
13-
FlowTypeUpdateRequest, RuntimeFunctionDefinitionServiceClient, RuntimeFunctionDefinitionUpdateRequest,
13+
FlowTypeUpdateRequest,
14+
FunctionDefinitionServiceClient,
15+
FunctionDefinitionUpdateRequest, RuntimeFunctionDefinitionServiceClient, RuntimeFunctionDefinitionUpdateRequest,
1416
TransferRequest, TransferResponse
1517
} from "@code0-tech/tucana/aquila";
1618
import {
@@ -30,6 +32,7 @@ const createSdk = (config: ActionSdk["config"], configDefinitions?: HerculesActi
3032

3133
const state: SdkState = {
3234
functions: [],
35+
runtimeFunctions: [],
3336
dataTypes: [],
3437
flowTypes: [],
3538
configurationDefinitions: configDefinitions?.map(value => {
@@ -137,11 +140,11 @@ const createSdk = (config: ActionSdk["config"], configDefinitions?: HerculesActi
137140
})
138141
return Promise.resolve()
139142
},
140-
registerFunctionDefinitions: async (...functionDefinitions) => {
141-
for (const registeredFunction of functionDefinitions) {
143+
registerRuntimeFunctionDefinitions: async (...runtimeFunctionDefinitions) => {
144+
for (const registeredFunction of runtimeFunctionDefinitions) {
142145
const handler = registeredFunction.handler;
143146
const functionDefinition = registeredFunction.definition;
144-
state.functions.push({
147+
state.runtimeFunctions.push({
145148
identifier: functionDefinition.runtimeName,
146149
definition: {
147150
displayMessage: functionDefinition.displayMessage || [],
@@ -170,6 +173,36 @@ const createSdk = (config: ActionSdk["config"], configDefinitions?: HerculesActi
170173
}
171174
return Promise.resolve()
172175
},
176+
registerFunctionDefinitions: async (...functionDefinitions) => {
177+
for (const functionDefinition of functionDefinitions) {
178+
state.functions.push({
179+
identifier: functionDefinition.runtimeName,
180+
definition: {
181+
displayMessage: functionDefinition.displayMessage || [],
182+
name: functionDefinition.name || [],
183+
documentation: functionDefinition.documentation || [],
184+
description: functionDefinition.description || [],
185+
deprecationMessage: functionDefinition.deprecationMessage || [],
186+
displayIcon: functionDefinition.displayIcon || "",
187+
alias: functionDefinition.alias || [],
188+
linkedDataTypeIdentifiers: functionDefinition.linkedDataTypes || [],
189+
definitionSource: "action",
190+
version: functionDefinition.version || config.version,
191+
runtimeName: functionDefinition.runtimeName,
192+
parameterDefinitions: (functionDefinition.parameters || []).map(param => ({
193+
runtimeName: param.runtimeName,
194+
name: param.name || [],
195+
description: param.description || [],
196+
documentation: param.documentation || [],
197+
defaultValue: constructValue(param.defaultValue || null),
198+
})),
199+
signature: functionDefinition.signature,
200+
throwsError: functionDefinition.throwsError || false,
201+
}
202+
});
203+
}
204+
return Promise.resolve()
205+
},
173206
dispatchEvent: async (eventType, projectId, payload) => {
174207
if (!state.stream) {
175208
return Promise.reject("SDK is not connected. Call connect() before dispatching events.");
@@ -242,6 +275,23 @@ async function connect(state: SdkState, config: ActionSdk["config"], options?: R
242275
RuntimeFunctionDefinitionUpdateRequest.create(
243276
{
244277
runtimeFunctions: [
278+
...state.runtimeFunctions.map(func => ({
279+
...func.definition,
280+
}))
281+
]
282+
}
283+
), builtOptions
284+
).then(value => {
285+
if (!value.response.success) {
286+
return Promise.reject(value.response);
287+
}
288+
})
289+
290+
const FunctionDefinitionClient = new FunctionDefinitionServiceClient(state.transport)
291+
await FunctionDefinitionClient.update(
292+
FunctionDefinitionUpdateRequest.create(
293+
{
294+
functions: [
245295
...state.functions.map(func => ({
246296
...func.definition,
247297
}))
@@ -309,7 +359,7 @@ function handleExecutionRequest(state: SdkState, message: TransferResponse) {
309359
return
310360
}
311361
const execution = message.data.execution as ExecutionRequest;
312-
const func = state.functions.find(value => value.identifier == execution.functionIdentifier);
362+
const func = state.runtimeFunctions.find(value => value.identifier == execution.functionIdentifier);
313363
if (func) {
314364
const params = Object.entries(execution.parameters!.fields!).map(([key, value]) => {
315365
const param = func.definition.runtimeParameterDefinitions

ts/src/types.ts

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import {
44
ActionConfigurationDefinition, ActionProjectConfiguration,
55
DefinitionDataType,
66
DefinitionDataTypeRule, FlowType,
7-
FlowTypeSetting_UniquenessScope,
7+
FlowTypeSetting_UniquenessScope, FunctionDefinition,
88
RuntimeFunctionDefinition,
99
Translation
1010
} from "@code0-tech/tucana/shared";
@@ -56,6 +56,7 @@ export interface HerculesFlowType {
5656
displayIcon?: string,
5757
}
5858

59+
5960
export interface HerculesRuntimeFunctionDefinition {
6061
runtimeName: string,
6162
parameters?: {
@@ -78,6 +79,8 @@ export interface HerculesRuntimeFunctionDefinition {
7879
displayIcon?: string,
7980
}
8081

82+
export type HerculesRegisterFunctionDefinition = HerculesRuntimeFunctionDefinition
83+
8184
export interface HerculesActionProjectConfiguration {
8285
projectId: number | bigint,
8386
configValues: {
@@ -96,7 +99,7 @@ export interface HerculesActionConfigurationDefinition {
9699
identifier: string,
97100
}
98101

99-
export type HerculesRegisterFunctionParameter = {
102+
export type HerculesRegisterRuntimeFunctionParameter = {
100103
definition: HerculesRuntimeFunctionDefinition,
101104
handler: (...args: any[]) => Promise<PlainValue> | PlainValue,
102105
}
@@ -117,7 +120,8 @@ export interface ActionSdk {
117120
registerConfigDefinitions: (...actionConfigurations: Array<HerculesActionConfigurationDefinition>) => Promise<void>,
118121
registerDataTypes: (...dataType: Array<HerculesDataType>) => Promise<void>,
119122
registerFlowTypes: (...flowTypes: Array<HerculesFlowType>) => Promise<void>,
120-
registerFunctionDefinitions: (...functionDefinitions: Array<HerculesRegisterFunctionParameter>) => Promise<void>,
123+
registerFunctionDefinitions: (...functionDefinitions: Array<HerculesRegisterFunctionDefinition>) => Promise<void>,
124+
registerRuntimeFunctionDefinitions: (...runtimeFunctionDefinitions: Array<HerculesRegisterRuntimeFunctionParameter>) => Promise<void>,
121125
dispatchEvent: (eventType: string, projectId: number | bigint, payload: PlainValue) => Promise<void>,
122126
}
123127

@@ -134,13 +138,19 @@ export class RuntimeErrorException extends Error {
134138
}
135139

136140
export interface RegisteredFunction {
141+
identifier: string,
142+
definition: FunctionDefinition
143+
}
144+
145+
export interface RegisteredRuntimeFunction {
137146
identifier: string,
138147
definition: RuntimeFunctionDefinition,
139148
handler: (...args: any[]) => Promise<PlainValue> | PlainValue,
140149
}
141150

142151
export interface SdkState {
143152
functions: RegisteredFunction[],
153+
runtimeFunctions: RegisteredRuntimeFunction[],
144154
dataTypes: DefinitionDataType[],
145155
flowTypes: FlowType[],
146156
configurationDefinitions: ActionConfigurationDefinition[],

0 commit comments

Comments
 (0)