Skip to content

Commit a001633

Browse files
committed
Merge branch 'main' of https://github.com/smartcontractkit/cre-sdk-typescript into template_tests
2 parents 316eac1 + 210f8a9 commit a001633

8 files changed

Lines changed: 65 additions & 37 deletions

File tree

1.01 KB
Binary file not shown.

packages/cre-sdk-javy-plugin/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@chainlink/cre-sdk-javy-plugin",
3-
"version": "1.5.0",
3+
"version": "1.6.0",
44
"type": "module",
55
"bin": {
66
"cre-setup": "bin/setup.ts",

packages/cre-sdk-javy-plugin/src/javy_chainlink_sdk/src/lib.rs

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,15 @@ pub fn modify_runtime(runtime: Runtime) -> Runtime {
170170
)
171171
};
172172
if n < 0 {
173-
return Err(Error::new_into_js("Error", "get_secrets failed"));
173+
let error_len = (-n) as usize;
174+
let error_msg =
175+
String::from_utf8_lossy(&buf[..error_len.min(max_len as usize)]).into_owned();
176+
let error_msg = if error_msg.is_empty() {
177+
"get_secrets failed".to_string()
178+
} else {
179+
error_msg
180+
};
181+
return Err(Exception::throw_message(&ctx, &error_msg));
174182
}
175183
if n > max_len as i64 {
176184
return Err(Error::new_into_js(
@@ -203,7 +211,15 @@ pub fn modify_runtime(runtime: Runtime) -> Runtime {
203211
)
204212
};
205213
if n < 0 {
206-
return Err(Error::new_into_js("Error", "await_secrets failed"));
214+
let error_len = (-n) as usize;
215+
let error_msg =
216+
String::from_utf8_lossy(&buf[..error_len.min(max_len as usize)]).into_owned();
217+
let error_msg = if error_msg.is_empty() {
218+
"await_secrets failed".to_string()
219+
} else {
220+
error_msg
221+
};
222+
return Err(Exception::throw_message(&ctx, &error_msg));
207223
}
208224
if n > max_len as i64 {
209225
return Err(Error::new_into_js(
@@ -330,4 +346,3 @@ pub fn modify_runtime(runtime: Runtime) -> Runtime {
330346

331347
runtime
332348
}
333-

packages/cre-sdk/src/sdk/impl/runtime-impl.test.ts

Lines changed: 29 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -368,7 +368,6 @@ describe('test getSecret', () => {
368368
getSecrets: mock((request) => {
369369
expect(request.callbackId).toEqual(1)
370370
expect(request.requests.length).toEqual(1)
371-
return true
372371
}),
373372
awaitSecrets: mock((request) => {
374373
expect(request.ids.length).toEqual(1)
@@ -409,7 +408,6 @@ describe('test getSecret', () => {
409408
getSecrets: mock((request) => {
410409
expect(request.callbackId).toEqual(1)
411410
expect(request.requests.length).toEqual(1)
412-
return true
413411
}),
414412
awaitSecrets: mock((request) => {
415413
expect(request.ids.length).toEqual(1)
@@ -443,19 +441,40 @@ describe('test getSecret', () => {
443441
expect(result.value).toEqual('value-456')
444442
})
445443

446-
test('getSecrets returns false', () => {
444+
test('getSecrets throws → wrapped as SecretsError', () => {
447445
const secretRequest = create(SecretRequestSchema, {
448446
id: 'test-secret',
449447
namespace: 'test-ns',
450448
})
451449

452450
const helpers = createRuntimeHelpersMock({
453-
getSecrets: mock(() => false),
451+
getSecrets: mock(() => {
452+
throw new Error('vault: signer unreachable')
453+
}),
454454
})
455455

456456
const runtime = new RuntimeImpl<unknown>({}, 1, helpers, anyMaxSize)
457457
expect(() => runtime.getSecret(secretRequest).result()).toThrow(
458-
new SecretsError(secretRequest, 'host is not making the secrets request'),
458+
new SecretsError(secretRequest, 'vault: signer unreachable'),
459+
)
460+
})
461+
462+
test('awaitSecrets throws → wrapped as SecretsError', () => {
463+
const secretRequest = create(SecretRequestSchema, {
464+
id: 'test-secret',
465+
namespace: 'test-ns',
466+
})
467+
468+
const helpers = createRuntimeHelpersMock({
469+
getSecrets: mock(() => undefined),
470+
awaitSecrets: mock(() => {
471+
throw new Error('vault: timeout fetching secret')
472+
}),
473+
})
474+
475+
const runtime = new RuntimeImpl<unknown>({}, 1, helpers, anyMaxSize)
476+
expect(() => runtime.getSecret(secretRequest).result()).toThrow(
477+
new SecretsError(secretRequest, 'vault: timeout fetching secret'),
459478
)
460479
})
461480

@@ -466,7 +485,7 @@ describe('test getSecret', () => {
466485
})
467486

468487
const helpers = createRuntimeHelpersMock({
469-
getSecrets: mock(() => true),
488+
getSecrets: mock(() => undefined),
470489
awaitSecrets: mock(() => {
471490
return create(AwaitSecretsResponseSchema, {
472491
responses: {},
@@ -487,7 +506,7 @@ describe('test getSecret', () => {
487506
})
488507

489508
const helpers = createRuntimeHelpersMock({
490-
getSecrets: mock(() => true),
509+
getSecrets: mock(() => undefined),
491510
awaitSecrets: mock(() => {
492511
return create(AwaitSecretsResponseSchema, {
493512
responses: {
@@ -518,7 +537,7 @@ describe('test getSecret', () => {
518537
}
519538

520539
const helpers = createRuntimeHelpersMock({
521-
getSecrets: mock(() => true),
540+
getSecrets: mock(() => undefined),
522541
awaitSecrets: mock(() => {
523542
return create(AwaitSecretsResponseSchema, {
524543
responses: {
@@ -551,7 +570,7 @@ describe('test getSecret', () => {
551570
const errorMessage = 'secret not found'
552571

553572
const helpers = createRuntimeHelpersMock({
554-
getSecrets: mock(() => true),
573+
getSecrets: mock(() => undefined),
555574
awaitSecrets: mock(() => {
556575
return create(AwaitSecretsResponseSchema, {
557576
responses: {
@@ -580,7 +599,7 @@ describe('test getSecret', () => {
580599
})
581600

582601
const helpers = createRuntimeHelpersMock({
583-
getSecrets: mock(() => true),
602+
getSecrets: mock(() => undefined),
584603
awaitSecrets: mock(() => {
585604
return create(AwaitSecretsResponseSchema, {
586605
responses: {
@@ -614,7 +633,6 @@ describe('test getSecret', () => {
614633
const helpers = createRuntimeHelpersMock({
615634
getSecrets: mock((request) => {
616635
callbackIds.push(request.callbackId)
617-
return true
618636
}),
619637
awaitSecrets: mock((request) => {
620638
const id = request.ids[0]

packages/cre-sdk/src/sdk/impl/runtime-impl.ts

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -375,10 +375,13 @@ export class RuntimeImpl<C> extends BaseRuntimeImpl<C> implements Runtime<C> {
375375
requests: [secretRequest],
376376
})
377377

378-
if (!this.helpers.getSecrets(secretsReq, this.maxResponseSize)) {
378+
try {
379+
this.helpers.getSecrets(secretsReq, this.maxResponseSize)
380+
} catch (err) {
381+
const message = err instanceof Error ? err.message : String(err)
379382
return {
380383
result: () => {
381-
throw new SecretsError(secretRequest, 'host is not making the secrets request')
384+
throw new SecretsError(secretRequest, message)
382385
},
383386
}
384387
}
@@ -391,7 +394,13 @@ export class RuntimeImpl<C> extends BaseRuntimeImpl<C> implements Runtime<C> {
391394

392395
private awaitAndUnwrapSecret(id: number, secretRequest: SecretRequest): Secret {
393396
const awaitRequest = create(AwaitSecretsRequestSchema, { ids: [id] })
394-
const awaitResponse = this.helpers.awaitSecrets(awaitRequest, this.maxResponseSize)
397+
let awaitResponse: AwaitSecretsResponse
398+
try {
399+
awaitResponse = this.helpers.awaitSecrets(awaitRequest, this.maxResponseSize)
400+
} catch (err) {
401+
const message = err instanceof Error ? err.message : String(err)
402+
throw new SecretsError(secretRequest, message)
403+
}
395404
const secretsResponse = awaitResponse.responses[id]
396405

397406
if (!secretsResponse) {
@@ -437,8 +446,8 @@ export interface RuntimeHelpers {
437446
/** Awaits capability responses. Blocks until responses are ready. */
438447
await(request: AwaitCapabilitiesRequest, maxResponseSize: bigint): AwaitCapabilitiesResponse
439448

440-
/** Requests secrets from host. Returns false if host rejects request. */
441-
getSecrets(request: GetSecretsRequest, maxResponseSize: bigint): boolean
449+
/** Requests secrets from host. Throws if host rejects the request. */
450+
getSecrets(request: GetSecretsRequest, maxResponseSize: bigint): void
442451

443452
/** Awaits secret responses. Blocks until secrets are ready. */
444453
awaitSecrets(request: AwaitSecretsRequest, maxResponseSize: bigint): AwaitSecretsResponse

packages/cre-sdk/src/sdk/testutils/test-runtime.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -266,7 +266,7 @@ function createTestRuntimeHelpers(
266266
return response
267267
},
268268

269-
getSecrets(req: GetSecretsRequest, _maxResponseSize: bigint): boolean {
269+
getSecrets(req: GetSecretsRequest, _maxResponseSize: bigint): void {
270270
const resp: SecretResponse[] = []
271271
for (const secretReq of req.requests) {
272272
const ns = secrets.get(secretReq.namespace || 'default')
@@ -301,7 +301,6 @@ function createTestRuntimeHelpers(
301301
}
302302
}
303303
pendingSecrets.set(req.callbackId, resp)
304-
return true
305304
},
306305

307306
awaitSecrets(request: { ids: number[] }, _maxResponseSize: bigint): AwaitSecretsResponse {

packages/cre-sdk/src/sdk/utils/secrets-error.ts

Lines changed: 0 additions & 13 deletions
This file was deleted.

packages/cre-sdk/src/sdk/wasm/runtime.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,9 +69,9 @@ class WasmRuntimeHelpers implements RuntimeHelpers {
6969
return fromBinary(AwaitCapabilitiesResponseSchema, responseBytes)
7070
}
7171

72-
getSecrets(request: GetSecretsRequest, maxResponseSize: bigint): boolean {
72+
getSecrets(request: GetSecretsRequest, maxResponseSize: bigint): void {
7373
const responseSize = toI32ResponseSize(maxResponseSize)
74-
return hostBindings.getSecrets(toBinary(GetSecretsRequestSchema, request), responseSize) >= 0
74+
hostBindings.getSecrets(toBinary(GetSecretsRequestSchema, request), responseSize)
7575
}
7676

7777
awaitSecrets(request: AwaitSecretsRequest, maxResponseSize: bigint): AwaitSecretsResponse {

0 commit comments

Comments
 (0)