update fluence-js version, update compiled

This commit is contained in:
DieMyst
2021-10-20 23:09:56 +03:00
parent e25bbc43f6
commit edc8b79cd5
45 changed files with 3855 additions and 6445 deletions

70
package-lock.json generated
View File

@ -10,7 +10,7 @@
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@fluencelabs/aqua-dht-ts": "0.1.36", "@fluencelabs/aqua-dht-ts": "0.1.36",
"@fluencelabs/fluence": "0.13.0", "@fluencelabs/fluence": "0.14.1",
"@fluencelabs/fluence-network-environment": "^1.0.10", "@fluencelabs/fluence-network-environment": "^1.0.10",
"deep-equal": "^2.0.5" "deep-equal": "^2.0.5"
}, },
@ -1531,12 +1531,12 @@
} }
}, },
"node_modules/@fluencelabs/fluence": { "node_modules/@fluencelabs/fluence": {
"version": "0.13.0", "version": "0.14.1",
"resolved": "https://registry.npmjs.org/@fluencelabs/fluence/-/fluence-0.13.0.tgz", "resolved": "https://registry.npmjs.org/@fluencelabs/fluence/-/fluence-0.14.1.tgz",
"integrity": "sha512-Dqhr7CAYeAO8Z5jR+mbGu0cVZjkE06cM2L8n9bQWe4T4y2B83ZxUmrs/OTWlYnsLd1Sr2YdDlnyZeUvWLEEmrQ==", "integrity": "sha512-Yqg5Hw2XO/X28ZU2iOt9znx9MXUOfTIIlJO5JLaoQfRY6k/5deLkJILsxaDbaTWg2iFnURydyP3cUSqBkitFwg==",
"dependencies": { "dependencies": {
"@chainsafe/libp2p-noise": "4.0.0", "@chainsafe/libp2p-noise": "4.0.0",
"@fluencelabs/avm": "0.14.4", "@fluencelabs/avm": "0.15.4",
"async": "3.2.0", "async": "3.2.0",
"base64-js": "1.5.1", "base64-js": "1.5.1",
"bs58": "4.0.1", "bs58": "4.0.1",
@ -1550,6 +1550,8 @@
"loglevel": "1.7.0", "loglevel": "1.7.0",
"multiaddr": "10.0.0", "multiaddr": "10.0.0",
"peer-id": "0.15.3", "peer-id": "0.15.3",
"rxjs": "^7.3.0",
"ts-pattern": "^3.3.3",
"uuid": "8.3.0" "uuid": "8.3.0"
} }
}, },
@ -1559,9 +1561,9 @@
"integrity": "sha512-aaWZDDFIIasSTgdFdw1KEz+boZMSn7pXffUENZNLX4DrP11rC3AEX4c8GnIJQbWqGsouOFZOPna2DSG6o2rLNQ==" "integrity": "sha512-aaWZDDFIIasSTgdFdw1KEz+boZMSn7pXffUENZNLX4DrP11rC3AEX4c8GnIJQbWqGsouOFZOPna2DSG6o2rLNQ=="
}, },
"node_modules/@fluencelabs/fluence/node_modules/@fluencelabs/avm": { "node_modules/@fluencelabs/fluence/node_modules/@fluencelabs/avm": {
"version": "0.14.4", "version": "0.15.4",
"resolved": "https://registry.npmjs.org/@fluencelabs/avm/-/avm-0.14.4.tgz", "resolved": "https://registry.npmjs.org/@fluencelabs/avm/-/avm-0.15.4.tgz",
"integrity": "sha512-XyR+1H5k0CAc+mDHOkl81viX8XeW1Yqbw793xbsfUfju5bUb/hqk+gHv3q8lAFdbrCG5P45gdOT08a5RNODZaQ==", "integrity": "sha512-NLZDq83ocJ1Helm0D8kPMSSkjxH0y+Tujg0px773zjIShbh3jgiJOjAW1xCYgTt9K0LqepjP0bWX4/8nUZfr7g==",
"dependencies": { "dependencies": {
"base64-js": "1.5.1" "base64-js": "1.5.1"
} }
@ -7631,6 +7633,14 @@
"url": "https://github.com/sponsors/isaacs" "url": "https://github.com/sponsors/isaacs"
} }
}, },
"node_modules/rxjs": {
"version": "7.4.0",
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.4.0.tgz",
"integrity": "sha512-7SQDi7xeTMCJpqViXh8gL/lebcwlp3d831F05+9B44A4B0WfsEwUQHR64gsH1kvJ+Ep/J9K2+n1hVl1CsGN23w==",
"dependencies": {
"tslib": "~2.1.0"
}
},
"node_modules/safe-buffer": { "node_modules/safe-buffer": {
"version": "5.2.1", "version": "5.2.1",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
@ -8173,6 +8183,16 @@
"typescript": ">=2.7" "typescript": ">=2.7"
} }
}, },
"node_modules/ts-pattern": {
"version": "3.3.3",
"resolved": "https://registry.npmjs.org/ts-pattern/-/ts-pattern-3.3.3.tgz",
"integrity": "sha512-Z5EFi6g6wyX3uDFHqxF5W5c5h663oZg9O6aOiAT7fqNu0HPSfCxtHzrQ7SblTy738Mrg2Ezorky8H5aUOm8Pvg=="
},
"node_modules/tslib": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz",
"integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A=="
},
"node_modules/tunnel-agent": { "node_modules/tunnel-agent": {
"version": "0.6.0", "version": "0.6.0",
"resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
@ -9973,12 +9993,12 @@
} }
}, },
"@fluencelabs/fluence": { "@fluencelabs/fluence": {
"version": "0.13.0", "version": "0.14.1",
"resolved": "https://registry.npmjs.org/@fluencelabs/fluence/-/fluence-0.13.0.tgz", "resolved": "https://registry.npmjs.org/@fluencelabs/fluence/-/fluence-0.14.1.tgz",
"integrity": "sha512-Dqhr7CAYeAO8Z5jR+mbGu0cVZjkE06cM2L8n9bQWe4T4y2B83ZxUmrs/OTWlYnsLd1Sr2YdDlnyZeUvWLEEmrQ==", "integrity": "sha512-Yqg5Hw2XO/X28ZU2iOt9znx9MXUOfTIIlJO5JLaoQfRY6k/5deLkJILsxaDbaTWg2iFnURydyP3cUSqBkitFwg==",
"requires": { "requires": {
"@chainsafe/libp2p-noise": "4.0.0", "@chainsafe/libp2p-noise": "4.0.0",
"@fluencelabs/avm": "0.14.4", "@fluencelabs/avm": "0.15.4",
"async": "3.2.0", "async": "3.2.0",
"base64-js": "1.5.1", "base64-js": "1.5.1",
"bs58": "4.0.1", "bs58": "4.0.1",
@ -9992,13 +10012,15 @@
"loglevel": "1.7.0", "loglevel": "1.7.0",
"multiaddr": "10.0.0", "multiaddr": "10.0.0",
"peer-id": "0.15.3", "peer-id": "0.15.3",
"rxjs": "^7.3.0",
"ts-pattern": "^3.3.3",
"uuid": "8.3.0" "uuid": "8.3.0"
}, },
"dependencies": { "dependencies": {
"@fluencelabs/avm": { "@fluencelabs/avm": {
"version": "0.14.4", "version": "0.15.4",
"resolved": "https://registry.npmjs.org/@fluencelabs/avm/-/avm-0.14.4.tgz", "resolved": "https://registry.npmjs.org/@fluencelabs/avm/-/avm-0.15.4.tgz",
"integrity": "sha512-XyR+1H5k0CAc+mDHOkl81viX8XeW1Yqbw793xbsfUfju5bUb/hqk+gHv3q8lAFdbrCG5P45gdOT08a5RNODZaQ==", "integrity": "sha512-NLZDq83ocJ1Helm0D8kPMSSkjxH0y+Tujg0px773zjIShbh3jgiJOjAW1xCYgTt9K0LqepjP0bWX4/8nUZfr7g==",
"requires": { "requires": {
"base64-js": "1.5.1" "base64-js": "1.5.1"
} }
@ -14823,6 +14845,14 @@
"glob": "^7.1.3" "glob": "^7.1.3"
} }
}, },
"rxjs": {
"version": "7.4.0",
"resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.4.0.tgz",
"integrity": "sha512-7SQDi7xeTMCJpqViXh8gL/lebcwlp3d831F05+9B44A4B0WfsEwUQHR64gsH1kvJ+Ep/J9K2+n1hVl1CsGN23w==",
"requires": {
"tslib": "~2.1.0"
}
},
"safe-buffer": { "safe-buffer": {
"version": "5.2.1", "version": "5.2.1",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
@ -15219,6 +15249,16 @@
"yn": "3.1.1" "yn": "3.1.1"
} }
}, },
"ts-pattern": {
"version": "3.3.3",
"resolved": "https://registry.npmjs.org/ts-pattern/-/ts-pattern-3.3.3.tgz",
"integrity": "sha512-Z5EFi6g6wyX3uDFHqxF5W5c5h663oZg9O6aOiAT7fqNu0HPSfCxtHzrQ7SblTy738Mrg2Ezorky8H5aUOm8Pvg=="
},
"tslib": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz",
"integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A=="
},
"tunnel-agent": { "tunnel-agent": {
"version": "0.6.0", "version": "0.6.0",
"resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",

View File

@ -38,7 +38,7 @@
}, },
"dependencies": { "dependencies": {
"@fluencelabs/aqua-dht-ts": "0.1.36", "@fluencelabs/aqua-dht-ts": "0.1.36",
"@fluencelabs/fluence": "0.13.0", "@fluencelabs/fluence": "0.14.1",
"@fluencelabs/fluence-network-environment": "^1.0.10", "@fluencelabs/fluence-network-environment": "^1.0.10",
"deep-equal": "^2.0.5" "deep-equal": "^2.0.5"
}, },

View File

@ -8,11 +8,10 @@
*/ */
import { Fluence, FluencePeer } from '@fluencelabs/fluence'; import { Fluence, FluencePeer } from '@fluencelabs/fluence';
import { import {
ResultCodes, CallParams,
RequestFlow, callFunction,
RequestFlowBuilder, registerService,
CallParams } from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
function missingFields(obj: any, fields: string[]): string[] { function missingFields(obj: any, fields: string[]): string[] {
@ -27,28 +26,9 @@ function missingFields(obj: any, fields: string[]): string[] {
export function put_value(initial_peer: string, value: string, config?: {ttl?: number}): Promise<string>; export function put_value(initial_peer: string, value: string, config?: {ttl?: number}): Promise<string>;
export function put_value(peer: FluencePeer, initial_peer: string, value: string, config?: {ttl?: number}): Promise<string>; export function put_value(peer: FluencePeer, initial_peer: string, value: string, config?: {ttl?: number}): Promise<string>;
export function put_value(...args: any) { export function put_value(...args: any) {
let peer: FluencePeer;
let initial_peer: any;
let value: any;
let config: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
initial_peer = args[1];
value = args[2];
config = args[3];
} else {
peer = Fluence.getPeer();
initial_peer = args[0];
value = args[1];
config = args[2];
}
let request: RequestFlow; let script = `
const promise = new Promise<string>((resolve, reject) => { (xor
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
(xor
(seq (seq
(seq (seq
(seq (seq
@ -102,36 +82,40 @@ export function put_value(...args: any) {
) )
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3]) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3])
) )
`, `
) return callFunction(
.configHandler((h) => { args,
h.on('getDataSrv', '-relay-', () => { {
return peer.getStatus().relayPeerId; "functionName" : "put_value",
}); "returnType" : {
h.on('getDataSrv', 'initial_peer', () => {return initial_peer;}); "tag" : "primitive"
h.on('getDataSrv', 'value', () => {return value;}); },
h.onEvent('callbackSrv', 'response', (args) => { "argDefs" : [
const [res] = args; {
resolve(res); "name" : "initial_peer",
}); "argType" : {
h.onEvent('errorHandlingSrv', 'error', (args) => { "tag" : "primitive"
const [err] = args; }
reject(err); },
}); {
}) "name" : "value",
.handleScriptError(reject) "argType" : {
.handleTimeout(() => { "tag" : "primitive"
reject('Request timed out for put_value'); }
}) }
],
if (config && config.ttl) { "names" : {
r.withTTL(config.ttl) "relay" : "-relay-",
} "getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
request = r.build(); "responseSrv" : "callbackSrv",
}); "responseFnName" : "response",
peer.internals.initiateFlow(request!); "errorHandlingSrv" : "errorHandlingSrv",
return promise; "errorFnName" : "error"
}
},
script
)
} }
@ -139,37 +123,9 @@ export function put_value(...args: any) {
export function registerKeyPutValue(node_id: string, key: string, value: string, relay_id: string | null, service_id: string | null, config?: {ttl?: number}): Promise<string[]>; export function registerKeyPutValue(node_id: string, key: string, value: string, relay_id: string | null, service_id: string | null, config?: {ttl?: number}): Promise<string[]>;
export function registerKeyPutValue(peer: FluencePeer, node_id: string, key: string, value: string, relay_id: string | null, service_id: string | null, config?: {ttl?: number}): Promise<string[]>; export function registerKeyPutValue(peer: FluencePeer, node_id: string, key: string, value: string, relay_id: string | null, service_id: string | null, config?: {ttl?: number}): Promise<string[]>;
export function registerKeyPutValue(...args: any) { export function registerKeyPutValue(...args: any) {
let peer: FluencePeer;
let node_id: any;
let key: any;
let value: any;
let relay_id: any;
let service_id: any;
let config: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
node_id = args[1];
key = args[2];
value = args[3];
relay_id = args[4];
service_id = args[5];
config = args[6];
} else {
peer = Fluence.getPeer();
node_id = args[0];
key = args[1];
value = args[2];
relay_id = args[3];
service_id = args[4];
config = args[5];
}
let request: RequestFlow; let script = `
const promise = new Promise<string[]>((resolve, reject) => { (xor
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
(xor
(seq (seq
(seq (seq
(seq (seq
@ -229,39 +185,58 @@ export function registerKeyPutValue(...args: any) {
) )
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 4]) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 4])
) )
`, `
) return callFunction(
.configHandler((h) => { args,
h.on('getDataSrv', '-relay-', () => { {
return peer.getStatus().relayPeerId; "functionName" : "registerKeyPutValue",
}); "returnType" : {
h.on('getDataSrv', 'node_id', () => {return node_id;}); "tag" : "primitive"
h.on('getDataSrv', 'key', () => {return key;}); },
h.on('getDataSrv', 'value', () => {return value;}); "argDefs" : [
h.on('getDataSrv', 'relay_id', () => {return relay_id === null ? [] : [relay_id];}); {
h.on('getDataSrv', 'service_id', () => {return service_id === null ? [] : [service_id];}); "name" : "node_id",
h.onEvent('callbackSrv', 'response', (args) => { "argType" : {
const [res] = args; "tag" : "primitive"
resolve(res); }
}); },
h.onEvent('errorHandlingSrv', 'error', (args) => { {
const [err] = args; "name" : "key",
reject(err); "argType" : {
}); "tag" : "primitive"
}) }
.handleScriptError(reject) },
.handleTimeout(() => { {
reject('Request timed out for registerKeyPutValue'); "name" : "value",
}) "argType" : {
"tag" : "primitive"
if (config && config.ttl) { }
r.withTTL(config.ttl) },
} {
"name" : "relay_id",
request = r.build(); "argType" : {
}); "tag" : "optional"
peer.internals.initiateFlow(request!); }
return promise; },
{
"name" : "service_id",
"argType" : {
"tag" : "optional"
}
}
],
"names" : {
"relay" : "-relay-",
"getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
"responseFnName" : "response",
"errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
}
},
script
)
} }
@ -269,28 +244,9 @@ export function registerKeyPutValue(...args: any) {
export function getNeighbours(node_id: string, topic: string, config?: {ttl?: number}): Promise<string[]>; export function getNeighbours(node_id: string, topic: string, config?: {ttl?: number}): Promise<string[]>;
export function getNeighbours(peer: FluencePeer, node_id: string, topic: string, config?: {ttl?: number}): Promise<string[]>; export function getNeighbours(peer: FluencePeer, node_id: string, topic: string, config?: {ttl?: number}): Promise<string[]>;
export function getNeighbours(...args: any) { export function getNeighbours(...args: any) {
let peer: FluencePeer;
let node_id: any;
let topic: any;
let config: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
node_id = args[1];
topic = args[2];
config = args[3];
} else {
peer = Fluence.getPeer();
node_id = args[0];
topic = args[1];
config = args[2];
}
let request: RequestFlow; let script = `
const promise = new Promise<string[]>((resolve, reject) => { (xor
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
(xor
(seq (seq
(seq (seq
(seq (seq
@ -324,36 +280,40 @@ export function getNeighbours(...args: any) {
) )
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3]) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3])
) )
`, `
) return callFunction(
.configHandler((h) => { args,
h.on('getDataSrv', '-relay-', () => { {
return peer.getStatus().relayPeerId; "functionName" : "getNeighbours",
}); "returnType" : {
h.on('getDataSrv', 'node_id', () => {return node_id;}); "tag" : "primitive"
h.on('getDataSrv', 'topic', () => {return topic;}); },
h.onEvent('callbackSrv', 'response', (args) => { "argDefs" : [
const [res] = args; {
resolve(res); "name" : "node_id",
}); "argType" : {
h.onEvent('errorHandlingSrv', 'error', (args) => { "tag" : "primitive"
const [err] = args; }
reject(err); },
}); {
}) "name" : "topic",
.handleScriptError(reject) "argType" : {
.handleTimeout(() => { "tag" : "primitive"
reject('Request timed out for getNeighbours'); }
}) }
],
if (config && config.ttl) { "names" : {
r.withTTL(config.ttl) "relay" : "-relay-",
} "getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
request = r.build(); "responseSrv" : "callbackSrv",
}); "responseFnName" : "response",
peer.internals.initiateFlow(request!); "errorHandlingSrv" : "errorHandlingSrv",
return promise; "errorFnName" : "error"
}
},
script
)
} }
@ -361,28 +321,9 @@ export function getNeighbours(...args: any) {
export function findSubscribers(node_id: string, topic: string, config?: {ttl?: number}): Promise<{ peer_id: string; relay_id: string[]; service_id: string[]; set_by: string; timestamp_created: number; value: string; weight: number; }[]>; export function findSubscribers(node_id: string, topic: string, config?: {ttl?: number}): Promise<{ peer_id: string; relay_id: string[]; service_id: string[]; set_by: string; timestamp_created: number; value: string; weight: number; }[]>;
export function findSubscribers(peer: FluencePeer, node_id: string, topic: string, config?: {ttl?: number}): Promise<{ peer_id: string; relay_id: string[]; service_id: string[]; set_by: string; timestamp_created: number; value: string; weight: number; }[]>; export function findSubscribers(peer: FluencePeer, node_id: string, topic: string, config?: {ttl?: number}): Promise<{ peer_id: string; relay_id: string[]; service_id: string[]; set_by: string; timestamp_created: number; value: string; weight: number; }[]>;
export function findSubscribers(...args: any) { export function findSubscribers(...args: any) {
let peer: FluencePeer;
let node_id: any;
let topic: any;
let config: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
node_id = args[1];
topic = args[2];
config = args[3];
} else {
peer = Fluence.getPeer();
node_id = args[0];
topic = args[1];
config = args[2];
}
let request: RequestFlow; let script = `
const promise = new Promise<{ peer_id: string; relay_id: string[]; service_id: string[]; set_by: string; timestamp_created: number; value: string; weight: number; }[]>((resolve, reject) => { (xor
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
(xor
(seq (seq
(seq (seq
(seq (seq
@ -451,36 +392,40 @@ export function findSubscribers(...args: any) {
) )
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 4]) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 4])
) )
`, `
) return callFunction(
.configHandler((h) => { args,
h.on('getDataSrv', '-relay-', () => { {
return peer.getStatus().relayPeerId; "functionName" : "findSubscribers",
}); "returnType" : {
h.on('getDataSrv', 'node_id', () => {return node_id;}); "tag" : "primitive"
h.on('getDataSrv', 'topic', () => {return topic;}); },
h.onEvent('callbackSrv', 'response', (args) => { "argDefs" : [
const [res] = args; {
resolve(res); "name" : "node_id",
}); "argType" : {
h.onEvent('errorHandlingSrv', 'error', (args) => { "tag" : "primitive"
const [err] = args; }
reject(err); },
}); {
}) "name" : "topic",
.handleScriptError(reject) "argType" : {
.handleTimeout(() => { "tag" : "primitive"
reject('Request timed out for findSubscribers'); }
}) }
],
if (config && config.ttl) { "names" : {
r.withTTL(config.ttl) "relay" : "-relay-",
} "getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
request = r.build(); "responseSrv" : "callbackSrv",
}); "responseFnName" : "response",
peer.internals.initiateFlow(request!); "errorHandlingSrv" : "errorHandlingSrv",
return promise; "errorFnName" : "error"
}
},
script
)
} }
@ -488,37 +433,9 @@ export function findSubscribers(...args: any) {
export function initTopicAndSubscribe(node_id: string, topic: string, value: string, relay_id: string | null, service_id: string | null, config?: {ttl?: number}): Promise<void>; export function initTopicAndSubscribe(node_id: string, topic: string, value: string, relay_id: string | null, service_id: string | null, config?: {ttl?: number}): Promise<void>;
export function initTopicAndSubscribe(peer: FluencePeer, node_id: string, topic: string, value: string, relay_id: string | null, service_id: string | null, config?: {ttl?: number}): Promise<void>; export function initTopicAndSubscribe(peer: FluencePeer, node_id: string, topic: string, value: string, relay_id: string | null, service_id: string | null, config?: {ttl?: number}): Promise<void>;
export function initTopicAndSubscribe(...args: any) { export function initTopicAndSubscribe(...args: any) {
let peer: FluencePeer;
let node_id: any;
let topic: any;
let value: any;
let relay_id: any;
let service_id: any;
let config: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
node_id = args[1];
topic = args[2];
value = args[3];
relay_id = args[4];
service_id = args[5];
config = args[6];
} else {
peer = Fluence.getPeer();
node_id = args[0];
topic = args[1];
value = args[2];
relay_id = args[3];
service_id = args[4];
config = args[5];
}
let request: RequestFlow; let script = `
const promise = new Promise<void>((resolve, reject) => { (xor
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
(xor
(seq (seq
(seq (seq
(seq (seq
@ -575,36 +492,56 @@ export function initTopicAndSubscribe(...args: any) {
) )
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
) )
`, `
) return callFunction(
.configHandler((h) => { args,
h.on('getDataSrv', '-relay-', () => { {
return peer.getStatus().relayPeerId; "functionName" : "initTopicAndSubscribe",
}); "returnType" : {
h.on('getDataSrv', 'node_id', () => {return node_id;}); "tag" : "void"
h.on('getDataSrv', 'topic', () => {return topic;}); },
h.on('getDataSrv', 'value', () => {return value;}); "argDefs" : [
h.on('getDataSrv', 'relay_id', () => {return relay_id === null ? [] : [relay_id];}); {
h.on('getDataSrv', 'service_id', () => {return service_id === null ? [] : [service_id];}); "name" : "node_id",
h.onEvent('callbackSrv', 'response', (args) => { "argType" : {
"tag" : "primitive"
}); }
h.onEvent('errorHandlingSrv', 'error', (args) => { },
const [err] = args; {
reject(err); "name" : "topic",
}); "argType" : {
}) "tag" : "primitive"
.handleScriptError(reject) }
.handleTimeout(() => { },
reject('Request timed out for initTopicAndSubscribe'); {
}) "name" : "value",
"argType" : {
if (config && config.ttl) { "tag" : "primitive"
r.withTTL(config.ttl) }
} },
{
request = r.build(); "name" : "relay_id",
}); "argType" : {
peer.internals.initiateFlow(request!); "tag" : "optional"
return Promise.race([promise, Promise.resolve()]); }
},
{
"name" : "service_id",
"argType" : {
"tag" : "optional"
}
}
],
"names" : {
"relay" : "-relay-",
"getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
"responseFnName" : "response",
"errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
}
},
script
)
} }

View File

@ -8,11 +8,10 @@
*/ */
import { Fluence, FluencePeer } from '@fluencelabs/fluence'; import { Fluence, FluencePeer } from '@fluencelabs/fluence';
import { import {
ResultCodes, CallParams,
RequestFlow, callFunction,
RequestFlowBuilder, registerService,
CallParams } from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
function missingFields(obj: any, fields: string[]): string[] { function missingFields(obj: any, fields: string[]): string[] {
@ -32,71 +31,42 @@ export function registerComplexService(peer: FluencePeer, serviceId: string, ser
export function registerComplexService(...args: any) { export function registerComplexService(...args: any) {
let peer: FluencePeer; registerService(
let serviceId: any; args,
let service: any; {
if (FluencePeer.isInstance(args[0])) { "defaultServiceId" : "op-ha",
peer = args[0]; "functions" : [
} else { {
peer = Fluence.getPeer(); "functionName" : "call",
} "argDefs" : [
{
if (typeof args[0] === 'string') { "name" : "d",
serviceId = args[0]; "argType" : {
} else if (typeof args[1] === 'string') { "tag" : "primitive"
serviceId = args[1]; }
} else {
serviceId = "op-ha"
}
// Figuring out which overload is the service.
// If the first argument is not Fluence Peer and it is an object, then it can only be the service def
// If the first argument is peer, we are checking further. The second argument might either be
// an object, that it must be the service object
// or a string, which is the service id. In that case the service is the third argument
if (!(FluencePeer.isInstance(args[0])) && typeof args[0] === 'object') {
service = args[0];
} else if (typeof args[1] === 'object') {
service = args[1];
} else {
service = args[2];
}
const incorrectServiceDefinitions = missingFields(service, ['call', 'identity']);
if (!!incorrectServiceDefinitions.length) {
throw new Error("Error registering service ComplexService: missing functions: " + incorrectServiceDefinitions.map((d) => "'" + d + "'").join(", "))
}
peer.internals.callServiceHandler.use((req, resp, next) => {
if (req.serviceId !== serviceId) {
next();
return;
}
if (req.fnName === 'call') {
const callParams = {
...req.particleContext,
tetraplets: {
d: req.tetraplets[0],sd: req.tetraplets[1]
}, },
}; {
resp.retCode = ResultCodes.success; "name" : "sd",
resp.result = service.call(req.args[0], req.args[1], callParams) "argType" : {
"tag" : "primitive"
}
}
],
"returnType" : {
"tag" : "primitive"
}
},
{
"functionName" : "identity",
"argDefs" : [
],
"returnType" : {
"tag" : "primitive"
}
} }
]
if (req.fnName === 'identity') { }
const callParams = { );
...req.particleContext,
tetraplets: {
},
};
resp.retCode = ResultCodes.success;
resp.result = service.identity(callParams)
}
next();
});
} }
// Functions // Functions
@ -107,34 +77,9 @@ export type DoSmthResult = { complex: { otherValue: number; value: string; }; va
export function doSmth(d: DoSmthArgD, d2: DoSmthArgD2, sd: DoSmthArgSd, c: (arg0: { someNum: number; someStr: string; }, arg1: { complex: { someNum: number; someStr: string; }; value: string; }, callParams: CallParams<'arg0' | 'arg1'>) => { complex: { otherValue: number; value: string; }; value: string; }, config?: {ttl?: number}): Promise<DoSmthResult>; export function doSmth(d: DoSmthArgD, d2: DoSmthArgD2, sd: DoSmthArgSd, c: (arg0: { someNum: number; someStr: string; }, arg1: { complex: { someNum: number; someStr: string; }; value: string; }, callParams: CallParams<'arg0' | 'arg1'>) => { complex: { otherValue: number; value: string; }; value: string; }, config?: {ttl?: number}): Promise<DoSmthResult>;
export function doSmth(peer: FluencePeer, d: DoSmthArgD, d2: DoSmthArgD2, sd: DoSmthArgSd, c: (arg0: { someNum: number; someStr: string; }, arg1: { complex: { someNum: number; someStr: string; }; value: string; }, callParams: CallParams<'arg0' | 'arg1'>) => { complex: { otherValue: number; value: string; }; value: string; }, config?: {ttl?: number}): Promise<DoSmthResult>; export function doSmth(peer: FluencePeer, d: DoSmthArgD, d2: DoSmthArgD2, sd: DoSmthArgSd, c: (arg0: { someNum: number; someStr: string; }, arg1: { complex: { someNum: number; someStr: string; }; value: string; }, callParams: CallParams<'arg0' | 'arg1'>) => { complex: { otherValue: number; value: string; }; value: string; }, config?: {ttl?: number}): Promise<DoSmthResult>;
export function doSmth(...args: any) { export function doSmth(...args: any) {
let peer: FluencePeer;
let d: any;
let d2: any;
let sd: any;
let c: any;
let config: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
d = args[1];
d2 = args[2];
sd = args[3];
c = args[4];
config = args[5];
} else {
peer = Fluence.getPeer();
d = args[0];
d2 = args[1];
sd = args[2];
c = args[3];
config = args[4];
}
let request: RequestFlow; let script = `
const promise = new Promise<DoSmthResult>((resolve, reject) => { (xor
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
(xor
(seq (seq
(seq (seq
(seq (seq
@ -162,49 +107,69 @@ export function doSmth(...args: any) {
) )
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3]) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3])
) )
`, `
) return callFunction(
.configHandler((h) => { args,
h.on('getDataSrv', '-relay-', () => { {
return peer.getStatus().relayPeerId; "functionName" : "doSmth",
}); "returnType" : {
h.on('getDataSrv', 'd', () => {return d;}); "tag" : "primitive"
h.on('getDataSrv', 'd2', () => {return d2;}); },
h.on('getDataSrv', 'sd', () => {return sd;}); "argDefs" : [
h.use((req, resp, next) => { {
if(req.serviceId === 'callbackSrv' && req.fnName === 'c') { "name" : "d",
const callParams = { "argType" : {
...req.particleContext, "tag" : "primitive"
tetraplets: { }
arg0: req.tetraplets[0],arg1: req.tetraplets[1] },
}, {
}; "name" : "d2",
resp.retCode = ResultCodes.success; "argType" : {
resp.result = c(req.args[0], req.args[1], callParams) "tag" : "primitive"
}
},
{
"name" : "sd",
"argType" : {
"tag" : "primitive"
}
},
{
"name" : "c",
"argType" : {
"tag" : "callback",
"callback" : {
"argDefs" : [
{
"name" : "arg0",
"argType" : {
"tag" : "primitive"
}
},
{
"name" : "arg1",
"argType" : {
"tag" : "primitive"
}
} }
next(); ],
}); "returnType" : {
"tag" : "primitive"
h.onEvent('callbackSrv', 'response', (args) => { }
const [res] = args;
resolve(res);
});
h.onEvent('errorHandlingSrv', 'error', (args) => {
const [err] = args;
reject(err);
});
})
.handleScriptError(reject)
.handleTimeout(() => {
reject('Request timed out for doSmth');
})
if (config && config.ttl) {
r.withTTL(config.ttl)
} }
}
request = r.build(); }
}); ],
peer.internals.initiateFlow(request!); "names" : {
return promise; "relay" : "-relay-",
"getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
"responseFnName" : "response",
"errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
}
},
script
)
} }

View File

@ -8,11 +8,10 @@
*/ */
import { Fluence, FluencePeer } from '@fluencelabs/fluence'; import { Fluence, FluencePeer } from '@fluencelabs/fluence';
import { import {
ResultCodes, CallParams,
RequestFlow, callFunction,
RequestFlowBuilder, registerService,
CallParams } from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
function missingFields(obj: any, fields: string[]): string[] { function missingFields(obj: any, fields: string[]): string[] {
@ -32,71 +31,48 @@ export function registerOpHa(peer: FluencePeer, serviceId: string, service: OpHa
export function registerOpHa(...args: any) { export function registerOpHa(...args: any) {
let peer: FluencePeer; registerService(
let serviceId: any; args,
let service: any; {
if (FluencePeer.isInstance(args[0])) { "defaultServiceId" : "op",
peer = args[0]; "functions" : [
} else { {
peer = Fluence.getPeer(); "functionName" : "array",
} "argDefs" : [
{
if (typeof args[0] === 'string') { "name" : "a",
serviceId = args[0]; "argType" : {
} else if (typeof args[1] === 'string') { "tag" : "primitive"
serviceId = args[1]; }
} else {
serviceId = "op"
}
// Figuring out which overload is the service.
// If the first argument is not Fluence Peer and it is an object, then it can only be the service def
// If the first argument is peer, we are checking further. The second argument might either be
// an object, that it must be the service object
// or a string, which is the service id. In that case the service is the third argument
if (!(FluencePeer.isInstance(args[0])) && typeof args[0] === 'object') {
service = args[0];
} else if (typeof args[1] === 'object') {
service = args[1];
} else {
service = args[2];
}
const incorrectServiceDefinitions = missingFields(service, ['array', 'identity']);
if (!!incorrectServiceDefinitions.length) {
throw new Error("Error registering service OpHa: missing functions: " + incorrectServiceDefinitions.map((d) => "'" + d + "'").join(", "))
}
peer.internals.callServiceHandler.use((req, resp, next) => {
if (req.serviceId !== serviceId) {
next();
return;
}
if (req.fnName === 'array') {
const callParams = {
...req.particleContext,
tetraplets: {
a: req.tetraplets[0],b: req.tetraplets[1]
}, },
}; {
resp.retCode = ResultCodes.success; "name" : "b",
resp.result = service.array(req.args[0], req.args[1], callParams) "argType" : {
"tag" : "primitive"
}
}
],
"returnType" : {
"tag" : "primitive"
}
},
{
"functionName" : "identity",
"argDefs" : [
{
"name" : "a",
"argType" : {
"tag" : "primitive"
}
}
],
"returnType" : {
"tag" : "primitive"
}
} }
]
if (req.fnName === 'identity') { }
const callParams = { );
...req.particleContext,
tetraplets: {
a: req.tetraplets[0]
},
};
resp.retCode = ResultCodes.success;
resp.result = service.identity(req.args[0], callParams)
}
next();
});
} }
// Functions // Functions
@ -105,25 +81,9 @@ export type DoSmthArgArg = { value: string; }
export function doSmth(arg: DoSmthArgArg, config?: {ttl?: number}): Promise<string[]>; export function doSmth(arg: DoSmthArgArg, config?: {ttl?: number}): Promise<string[]>;
export function doSmth(peer: FluencePeer, arg: DoSmthArgArg, config?: {ttl?: number}): Promise<string[]>; export function doSmth(peer: FluencePeer, arg: DoSmthArgArg, config?: {ttl?: number}): Promise<string[]>;
export function doSmth(...args: any) { export function doSmth(...args: any) {
let peer: FluencePeer;
let arg: any;
let config: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
arg = args[1];
config = args[2];
} else {
peer = Fluence.getPeer();
arg = args[0];
config = args[1];
}
let request: RequestFlow; let script = `
const promise = new Promise<string[]>((resolve, reject) => { (xor
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
(xor
(seq (seq
(seq (seq
(seq (seq
@ -142,33 +102,32 @@ export function doSmth(...args: any) {
) )
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
) )
`, `
) return callFunction(
.configHandler((h) => { args,
h.on('getDataSrv', '-relay-', () => { {
return peer.getStatus().relayPeerId; "functionName" : "doSmth",
}); "returnType" : {
h.on('getDataSrv', 'arg', () => {return arg;}); "tag" : "primitive"
h.onEvent('callbackSrv', 'response', (args) => { },
const [res] = args; "argDefs" : [
resolve(res); {
}); "name" : "arg",
h.onEvent('errorHandlingSrv', 'error', (args) => { "argType" : {
const [err] = args; "tag" : "primitive"
reject(err); }
}); }
}) ],
.handleScriptError(reject) "names" : {
.handleTimeout(() => { "relay" : "-relay-",
reject('Request timed out for doSmth'); "getDataSrv" : "getDataSrv",
}) "callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
if (config && config.ttl) { "responseFnName" : "response",
r.withTTL(config.ttl) "errorHandlingSrv" : "errorHandlingSrv",
} "errorFnName" : "error"
}
request = r.build(); },
}); script
peer.internals.initiateFlow(request!); )
return promise;
} }

View File

@ -8,11 +8,10 @@
*/ */
import { Fluence, FluencePeer } from '@fluencelabs/fluence'; import { Fluence, FluencePeer } from '@fluencelabs/fluence';
import { import {
ResultCodes, CallParams,
RequestFlow, callFunction,
RequestFlowBuilder, registerService,
CallParams } from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
function missingFields(obj: any, fields: string[]): string[] { function missingFields(obj: any, fields: string[]): string[] {
@ -27,31 +26,9 @@ function missingFields(obj: any, fields: string[]): string[] {
export function passFunctionAsArg(node: string, str: string, c: (arg0: string, callParams: CallParams<'arg0'>) => string, config?: {ttl?: number}): Promise<void>; export function passFunctionAsArg(node: string, str: string, c: (arg0: string, callParams: CallParams<'arg0'>) => string, config?: {ttl?: number}): Promise<void>;
export function passFunctionAsArg(peer: FluencePeer, node: string, str: string, c: (arg0: string, callParams: CallParams<'arg0'>) => string, config?: {ttl?: number}): Promise<void>; export function passFunctionAsArg(peer: FluencePeer, node: string, str: string, c: (arg0: string, callParams: CallParams<'arg0'>) => string, config?: {ttl?: number}): Promise<void>;
export function passFunctionAsArg(...args: any) { export function passFunctionAsArg(...args: any) {
let peer: FluencePeer;
let node: any;
let str: any;
let c: any;
let config: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
node = args[1];
str = args[2];
c = args[3];
config = args[4];
} else {
peer = Fluence.getPeer();
node = args[0];
str = args[1];
c = args[2];
config = args[3];
}
let request: RequestFlow; let script = `
const promise = new Promise<void>((resolve, reject) => { (xor
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
(xor
(seq (seq
(seq (seq
(seq (seq
@ -94,47 +71,57 @@ export function passFunctionAsArg(...args: any) {
) )
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3]) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3])
) )
`, `
) return callFunction(
.configHandler((h) => { args,
h.on('getDataSrv', '-relay-', () => { {
return peer.getStatus().relayPeerId; "functionName" : "passFunctionAsArg",
}); "returnType" : {
h.on('getDataSrv', 'node', () => {return node;}); "tag" : "void"
h.on('getDataSrv', 'str', () => {return str;}); },
h.use((req, resp, next) => { "argDefs" : [
if(req.serviceId === 'callbackSrv' && req.fnName === 'c') { {
const callParams = { "name" : "node",
...req.particleContext, "argType" : {
tetraplets: { "tag" : "primitive"
arg0: req.tetraplets[0] }
}, },
}; {
resp.retCode = ResultCodes.success; "name" : "str",
resp.result = c(req.args[0], callParams) "argType" : {
"tag" : "primitive"
}
},
{
"name" : "c",
"argType" : {
"tag" : "callback",
"callback" : {
"argDefs" : [
{
"name" : "arg0",
"argType" : {
"tag" : "primitive"
}
} }
next(); ],
}); "returnType" : {
"tag" : "primitive"
h.onEvent('callbackSrv', 'response', (args) => { }
});
h.onEvent('errorHandlingSrv', 'error', (args) => {
const [err] = args;
reject(err);
});
})
.handleScriptError(reject)
.handleTimeout(() => {
reject('Request timed out for passFunctionAsArg');
})
if (config && config.ttl) {
r.withTTL(config.ttl)
} }
}
request = r.build(); }
}); ],
peer.internals.initiateFlow(request!); "names" : {
return Promise.race([promise, Promise.resolve()]); "relay" : "-relay-",
"getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
"responseFnName" : "response",
"errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
}
},
script
)
} }

View File

@ -8,11 +8,10 @@
*/ */
import { Fluence, FluencePeer } from '@fluencelabs/fluence'; import { Fluence, FluencePeer } from '@fluencelabs/fluence';
import { import {
ResultCodes, CallParams,
RequestFlow, callFunction,
RequestFlowBuilder, registerService,
CallParams } from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
function missingFields(obj: any, fields: string[]): string[] { function missingFields(obj: any, fields: string[]): string[] {
@ -31,60 +30,22 @@ export function registerCoService(peer: FluencePeer, serviceId: string, service:
export function registerCoService(...args: any) { export function registerCoService(...args: any) {
let peer: FluencePeer; registerService(
let serviceId: any; args,
let service: any; {
if (FluencePeer.isInstance(args[0])) { "defaultServiceId" : "coservice-id",
peer = args[0]; "functions" : [
} else { {
peer = Fluence.getPeer(); "functionName" : "call",
} "argDefs" : [
],
if (typeof args[0] === 'string') { "returnType" : {
serviceId = args[0]; "tag" : "primitive"
} else if (typeof args[1] === 'string') { }
serviceId = args[1];
} else {
serviceId = "coservice-id"
}
// Figuring out which overload is the service.
// If the first argument is not Fluence Peer and it is an object, then it can only be the service def
// If the first argument is peer, we are checking further. The second argument might either be
// an object, that it must be the service object
// or a string, which is the service id. In that case the service is the third argument
if (!(FluencePeer.isInstance(args[0])) && typeof args[0] === 'object') {
service = args[0];
} else if (typeof args[1] === 'object') {
service = args[1];
} else {
service = args[2];
}
const incorrectServiceDefinitions = missingFields(service, ['call']);
if (!!incorrectServiceDefinitions.length) {
throw new Error("Error registering service CoService: missing functions: " + incorrectServiceDefinitions.map((d) => "'" + d + "'").join(", "))
}
peer.internals.callServiceHandler.use((req, resp, next) => {
if (req.serviceId !== serviceId) {
next();
return;
} }
]
if (req.fnName === 'call') { }
const callParams = { );
...req.particleContext,
tetraplets: {
},
};
resp.retCode = ResultCodes.success;
resp.result = service.call(callParams)
}
next();
});
} }
// Functions // Functions
@ -93,28 +54,9 @@ export function registerCoService(...args: any) {
export function coFunc(node: string, c: (arg0: { external_addresses: string[]; }, callParams: CallParams<'arg0'>) => void, config?: {ttl?: number}): Promise<void>; export function coFunc(node: string, c: (arg0: { external_addresses: string[]; }, callParams: CallParams<'arg0'>) => void, config?: {ttl?: number}): Promise<void>;
export function coFunc(peer: FluencePeer, node: string, c: (arg0: { external_addresses: string[]; }, callParams: CallParams<'arg0'>) => void, config?: {ttl?: number}): Promise<void>; export function coFunc(peer: FluencePeer, node: string, c: (arg0: { external_addresses: string[]; }, callParams: CallParams<'arg0'>) => void, config?: {ttl?: number}): Promise<void>;
export function coFunc(...args: any) { export function coFunc(...args: any) {
let peer: FluencePeer;
let node: any;
let c: any;
let config: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
node = args[1];
c = args[2];
config = args[3];
} else {
peer = Fluence.getPeer();
node = args[0];
c = args[1];
config = args[2];
}
let request: RequestFlow; let script = `
const promise = new Promise<void>((resolve, reject) => { (xor
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
(xor
(seq (seq
(seq (seq
(seq (seq
@ -148,46 +90,51 @@ export function coFunc(...args: any) {
) )
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3]) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3])
) )
`, `
) return callFunction(
.configHandler((h) => { args,
h.on('getDataSrv', '-relay-', () => { {
return peer.getStatus().relayPeerId; "functionName" : "coFunc",
}); "returnType" : {
h.on('getDataSrv', 'node', () => {return node;}); "tag" : "void"
h.use((req, resp, next) => { },
if(req.serviceId === 'callbackSrv' && req.fnName === 'c') { "argDefs" : [
const callParams = { {
...req.particleContext, "name" : "node",
tetraplets: { "argType" : {
arg0: req.tetraplets[0] "tag" : "primitive"
}, }
}; },
resp.retCode = ResultCodes.success; {
c(req.args[0], callParams); resp.result = {} "name" : "c",
"argType" : {
"tag" : "callback",
"callback" : {
"argDefs" : [
{
"name" : "arg0",
"argType" : {
"tag" : "primitive"
}
} }
next(); ],
}); "returnType" : {
"tag" : "void"
h.onEvent('callbackSrv', 'response', (args) => { }
});
h.onEvent('errorHandlingSrv', 'error', (args) => {
const [err] = args;
reject(err);
});
})
.handleScriptError(reject)
.handleTimeout(() => {
reject('Request timed out for coFunc');
})
if (config && config.ttl) {
r.withTTL(config.ttl)
} }
}
request = r.build(); }
}); ],
peer.internals.initiateFlow(request!); "names" : {
return Promise.race([promise, Promise.resolve()]); "relay" : "-relay-",
"getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
"responseFnName" : "response",
"errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
}
},
script
)
} }

View File

@ -8,11 +8,10 @@
*/ */
import { Fluence, FluencePeer } from '@fluencelabs/fluence'; import { Fluence, FluencePeer } from '@fluencelabs/fluence';
import { import {
ResultCodes, CallParams,
RequestFlow, callFunction,
RequestFlowBuilder, registerService,
CallParams } from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
function missingFields(obj: any, fields: string[]): string[] { function missingFields(obj: any, fields: string[]): string[] {
@ -32,71 +31,54 @@ export function registerTestS(peer: FluencePeer, serviceId: string, service: Tes
export function registerTestS(...args: any) { export function registerTestS(...args: any) {
let peer: FluencePeer; registerService(
let serviceId: any; args,
let service: any; {
if (FluencePeer.isInstance(args[0])) { "defaultServiceId" : "some-id",
peer = args[0]; "functions" : [
} else { {
peer = Fluence.getPeer(); "functionName" : "multiline",
} "argDefs" : [
{
if (typeof args[0] === 'string') { "name" : "a",
serviceId = args[0]; "argType" : {
} else if (typeof args[1] === 'string') { "tag" : "primitive"
serviceId = args[1]; }
} else {
serviceId = "some-id"
}
// Figuring out which overload is the service.
// If the first argument is not Fluence Peer and it is an object, then it can only be the service def
// If the first argument is peer, we are checking further. The second argument might either be
// an object, that it must be the service object
// or a string, which is the service id. In that case the service is the third argument
if (!(FluencePeer.isInstance(args[0])) && typeof args[0] === 'object') {
service = args[0];
} else if (typeof args[1] === 'object') {
service = args[1];
} else {
service = args[2];
}
const incorrectServiceDefinitions = missingFields(service, ['multiline', 't']);
if (!!incorrectServiceDefinitions.length) {
throw new Error("Error registering service TestS: missing functions: " + incorrectServiceDefinitions.map((d) => "'" + d + "'").join(", "))
}
peer.internals.callServiceHandler.use((req, resp, next) => {
if (req.serviceId !== serviceId) {
next();
return;
}
if (req.fnName === 'multiline') {
const callParams = {
...req.particleContext,
tetraplets: {
a: req.tetraplets[0],b: req.tetraplets[1],c: req.tetraplets[2]
}, },
}; {
resp.retCode = ResultCodes.success; "name" : "b",
resp.result = service.multiline(req.args[0], req.args[1], req.args[2], callParams) "argType" : {
} "tag" : "primitive"
}
if (req.fnName === 't') {
const callParams = {
...req.particleContext,
tetraplets: {
arg0: req.tetraplets[0]
}, },
}; {
resp.retCode = ResultCodes.success; "name" : "c",
resp.result = service.t(req.args[0], callParams) "argType" : {
"tag" : "primitive"
}
}
],
"returnType" : {
"tag" : "primitive"
}
},
{
"functionName" : "t",
"argDefs" : [
{
"name" : "arg0",
"argType" : {
"tag" : "primitive"
}
}
],
"returnType" : {
"tag" : "primitive"
}
} }
]
next(); }
}); );
} }
// Functions // Functions
@ -105,43 +87,9 @@ if (req.fnName === 't') {
export function doStuff(a: string, b: string, c: boolean, d: boolean, e: string[], g: string[], str: string, config?: {ttl?: number}): Promise<string[]>; export function doStuff(a: string, b: string, c: boolean, d: boolean, e: string[], g: string[], str: string, config?: {ttl?: number}): Promise<string[]>;
export function doStuff(peer: FluencePeer, a: string, b: string, c: boolean, d: boolean, e: string[], g: string[], str: string, config?: {ttl?: number}): Promise<string[]>; export function doStuff(peer: FluencePeer, a: string, b: string, c: boolean, d: boolean, e: string[], g: string[], str: string, config?: {ttl?: number}): Promise<string[]>;
export function doStuff(...args: any) { export function doStuff(...args: any) {
let peer: FluencePeer;
let a: any;
let b: any;
let c: any;
let d: any;
let e: any;
let g: any;
let str: any;
let config: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
a = args[1];
b = args[2];
c = args[3];
d = args[4];
e = args[5];
g = args[6];
str = args[7];
config = args[8];
} else {
peer = Fluence.getPeer();
a = args[0];
b = args[1];
c = args[2];
d = args[3];
e = args[4];
g = args[5];
str = args[6];
config = args[7];
}
let request: RequestFlow; let script = `
const promise = new Promise<string[]>((resolve, reject) => { (xor
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
(xor
(seq (seq
(seq (seq
(seq (seq
@ -252,39 +200,68 @@ export function doStuff(...args: any) {
) )
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 5]) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 5])
) )
`, `
) return callFunction(
.configHandler((h) => { args,
h.on('getDataSrv', '-relay-', () => { {
return peer.getStatus().relayPeerId; "functionName" : "doStuff",
}); "returnType" : {
h.on('getDataSrv', 'a', () => {return a;}); "tag" : "primitive"
h.on('getDataSrv', 'b', () => {return b;}); },
h.on('getDataSrv', 'c', () => {return c;}); "argDefs" : [
h.on('getDataSrv', 'd', () => {return d;}); {
h.on('getDataSrv', 'e', () => {return e;}); "name" : "a",
h.on('getDataSrv', 'g', () => {return g;}); "argType" : {
h.on('getDataSrv', 'str', () => {return str;}); "tag" : "primitive"
h.onEvent('callbackSrv', 'response', (args) => { }
const [res] = args; },
resolve(res); {
}); "name" : "b",
h.onEvent('errorHandlingSrv', 'error', (args) => { "argType" : {
const [err] = args; "tag" : "primitive"
reject(err); }
}); },
}) {
.handleScriptError(reject) "name" : "c",
.handleTimeout(() => { "argType" : {
reject('Request timed out for doStuff'); "tag" : "primitive"
}) }
},
if (config && config.ttl) { {
r.withTTL(config.ttl) "name" : "d",
} "argType" : {
"tag" : "primitive"
request = r.build(); }
}); },
peer.internals.initiateFlow(request!); {
return promise; "name" : "e",
"argType" : {
"tag" : "primitive"
}
},
{
"name" : "g",
"argType" : {
"tag" : "primitive"
}
},
{
"name" : "str",
"argType" : {
"tag" : "primitive"
}
}
],
"names" : {
"relay" : "-relay-",
"getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
"responseFnName" : "response",
"errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
}
},
script
)
} }

View File

@ -8,11 +8,10 @@
*/ */
import { Fluence, FluencePeer } from '@fluencelabs/fluence'; import { Fluence, FluencePeer } from '@fluencelabs/fluence';
import { import {
ResultCodes, CallParams,
RequestFlow, callFunction,
RequestFlowBuilder, registerService,
CallParams } from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
function missingFields(obj: any, fields: string[]): string[] { function missingFields(obj: any, fields: string[]): string[] {
@ -31,60 +30,28 @@ export function registerGetter(peer: FluencePeer, serviceId: string, service: Ge
export function registerGetter(...args: any) { export function registerGetter(...args: any) {
let peer: FluencePeer; registerService(
let serviceId: any; args,
let service: any; {
if (FluencePeer.isInstance(args[0])) { "defaultServiceId" : "test",
peer = args[0]; "functions" : [
} else { {
peer = Fluence.getPeer(); "functionName" : "createStr",
} "argDefs" : [
{
if (typeof args[0] === 'string') { "name" : "arg0",
serviceId = args[0]; "argType" : {
} else if (typeof args[1] === 'string') { "tag" : "primitive"
serviceId = args[1]; }
} else { }
serviceId = "test" ],
} "returnType" : {
"tag" : "primitive"
// Figuring out which overload is the service. }
// If the first argument is not Fluence Peer and it is an object, then it can only be the service def
// If the first argument is peer, we are checking further. The second argument might either be
// an object, that it must be the service object
// or a string, which is the service id. In that case the service is the third argument
if (!(FluencePeer.isInstance(args[0])) && typeof args[0] === 'object') {
service = args[0];
} else if (typeof args[1] === 'object') {
service = args[1];
} else {
service = args[2];
}
const incorrectServiceDefinitions = missingFields(service, ['createStr']);
if (!!incorrectServiceDefinitions.length) {
throw new Error("Error registering service Getter: missing functions: " + incorrectServiceDefinitions.map((d) => "'" + d + "'").join(", "))
}
peer.internals.callServiceHandler.use((req, resp, next) => {
if (req.serviceId !== serviceId) {
next();
return;
} }
]
if (req.fnName === 'createStr') { }
const callParams = { );
...req.particleContext,
tetraplets: {
arg0: req.tetraplets[0]
},
};
resp.retCode = ResultCodes.success;
resp.result = service.createStr(req.args[0], callParams)
}
next();
});
} }
@ -99,60 +66,28 @@ export function registerOpO(peer: FluencePeer, serviceId: string, service: OpODe
export function registerOpO(...args: any) { export function registerOpO(...args: any) {
let peer: FluencePeer; registerService(
let serviceId: any; args,
let service: any; {
if (FluencePeer.isInstance(args[0])) { "defaultServiceId" : "op",
peer = args[0]; "functions" : [
} else { {
peer = Fluence.getPeer(); "functionName" : "identity",
} "argDefs" : [
{
if (typeof args[0] === 'string') { "name" : "arg0",
serviceId = args[0]; "argType" : {
} else if (typeof args[1] === 'string') { "tag" : "primitive"
serviceId = args[1]; }
} else { }
serviceId = "op" ],
} "returnType" : {
"tag" : "primitive"
// Figuring out which overload is the service. }
// If the first argument is not Fluence Peer and it is an object, then it can only be the service def
// If the first argument is peer, we are checking further. The second argument might either be
// an object, that it must be the service object
// or a string, which is the service id. In that case the service is the third argument
if (!(FluencePeer.isInstance(args[0])) && typeof args[0] === 'object') {
service = args[0];
} else if (typeof args[1] === 'object') {
service = args[1];
} else {
service = args[2];
}
const incorrectServiceDefinitions = missingFields(service, ['identity']);
if (!!incorrectServiceDefinitions.length) {
throw new Error("Error registering service OpO: missing functions: " + incorrectServiceDefinitions.map((d) => "'" + d + "'").join(", "))
}
peer.internals.callServiceHandler.use((req, resp, next) => {
if (req.serviceId !== serviceId) {
next();
return;
} }
]
if (req.fnName === 'identity') { }
const callParams = { );
...req.particleContext,
tetraplets: {
arg0: req.tetraplets[0]
},
};
resp.retCode = ResultCodes.success;
resp.result = service.identity(req.args[0], callParams)
}
next();
});
} }
// Functions // Functions
@ -161,23 +96,9 @@ export function registerOpO(...args: any) {
export function callConstant(config?: {ttl?: number}): Promise<string[]>; export function callConstant(config?: {ttl?: number}): Promise<string[]>;
export function callConstant(peer: FluencePeer, config?: {ttl?: number}): Promise<string[]>; export function callConstant(peer: FluencePeer, config?: {ttl?: number}): Promise<string[]>;
export function callConstant(...args: any) { export function callConstant(...args: any) {
let peer: FluencePeer;
let config: any; let script = `
if (FluencePeer.isInstance(args[0])) { (xor
peer = args[0];
config = args[1];
} else {
peer = Fluence.getPeer();
config = args[0];
}
let request: RequestFlow;
const promise = new Promise<string[]>((resolve, reject) => {
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
(xor
(seq (seq
(seq (seq
(seq (seq
@ -193,33 +114,26 @@ export function callConstant(...args: any) {
) )
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
) )
`, `
) return callFunction(
.configHandler((h) => { args,
h.on('getDataSrv', '-relay-', () => { {
return peer.getStatus().relayPeerId; "functionName" : "callConstant",
}); "returnType" : {
"tag" : "primitive"
h.onEvent('callbackSrv', 'response', (args) => { },
const [res] = args; "argDefs" : [
resolve(res); ],
}); "names" : {
h.onEvent('errorHandlingSrv', 'error', (args) => { "relay" : "-relay-",
const [err] = args; "getDataSrv" : "getDataSrv",
reject(err); "callbackSrv" : "callbackSrv",
}); "responseSrv" : "callbackSrv",
}) "responseFnName" : "response",
.handleScriptError(reject) "errorHandlingSrv" : "errorHandlingSrv",
.handleTimeout(() => { "errorFnName" : "error"
reject('Request timed out for callConstant'); }
}) },
script
if (config && config.ttl) { )
r.withTTL(config.ttl)
}
request = r.build();
});
peer.internals.initiateFlow(request!);
return promise;
} }

View File

@ -8,11 +8,10 @@
*/ */
import { Fluence, FluencePeer } from '@fluencelabs/fluence'; import { Fluence, FluencePeer } from '@fluencelabs/fluence';
import { import {
ResultCodes, CallParams,
RequestFlow, callFunction,
RequestFlowBuilder, registerService,
CallParams } from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
function missingFields(obj: any, fields: string[]): string[] { function missingFields(obj: any, fields: string[]): string[] {
@ -31,60 +30,22 @@ export function registerNodeIdGetter(peer: FluencePeer, serviceId: string, servi
export function registerNodeIdGetter(...args: any) { export function registerNodeIdGetter(...args: any) {
let peer: FluencePeer; registerService(
let serviceId: any; args,
let service: any; {
if (FluencePeer.isInstance(args[0])) { "defaultServiceId" : "somesrv",
peer = args[0]; "functions" : [
} else { {
peer = Fluence.getPeer(); "functionName" : "get",
} "argDefs" : [
],
if (typeof args[0] === 'string') { "returnType" : {
serviceId = args[0]; "tag" : "primitive"
} else if (typeof args[1] === 'string') { }
serviceId = args[1];
} else {
serviceId = "somesrv"
}
// Figuring out which overload is the service.
// If the first argument is not Fluence Peer and it is an object, then it can only be the service def
// If the first argument is peer, we are checking further. The second argument might either be
// an object, that it must be the service object
// or a string, which is the service id. In that case the service is the third argument
if (!(FluencePeer.isInstance(args[0])) && typeof args[0] === 'object') {
service = args[0];
} else if (typeof args[1] === 'object') {
service = args[1];
} else {
service = args[2];
}
const incorrectServiceDefinitions = missingFields(service, ['get']);
if (!!incorrectServiceDefinitions.length) {
throw new Error("Error registering service NodeIdGetter: missing functions: " + incorrectServiceDefinitions.map((d) => "'" + d + "'").join(", "))
}
peer.internals.callServiceHandler.use((req, resp, next) => {
if (req.serviceId !== serviceId) {
next();
return;
} }
]
if (req.fnName === 'get') { }
const callParams = { );
...req.particleContext,
tetraplets: {
},
};
resp.retCode = ResultCodes.success;
resp.result = service.get(callParams)
}
next();
});
} }
// Functions // Functions
@ -93,23 +54,9 @@ export function registerNodeIdGetter(...args: any) {
export function getAliasedData(config?: {ttl?: number}): Promise<string>; export function getAliasedData(config?: {ttl?: number}): Promise<string>;
export function getAliasedData(peer: FluencePeer, config?: {ttl?: number}): Promise<string>; export function getAliasedData(peer: FluencePeer, config?: {ttl?: number}): Promise<string>;
export function getAliasedData(...args: any) { export function getAliasedData(...args: any) {
let peer: FluencePeer;
let config: any; let script = `
if (FluencePeer.isInstance(args[0])) { (xor
peer = args[0];
config = args[1];
} else {
peer = Fluence.getPeer();
config = args[0];
}
let request: RequestFlow;
const promise = new Promise<string>((resolve, reject) => {
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
(xor
(seq (seq
(seq (seq
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
@ -122,33 +69,26 @@ export function getAliasedData(...args: any) {
) )
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
) )
`, `
) return callFunction(
.configHandler((h) => { args,
h.on('getDataSrv', '-relay-', () => { {
return peer.getStatus().relayPeerId; "functionName" : "getAliasedData",
}); "returnType" : {
"tag" : "primitive"
h.onEvent('callbackSrv', 'response', (args) => { },
const [res] = args; "argDefs" : [
resolve(res); ],
}); "names" : {
h.onEvent('errorHandlingSrv', 'error', (args) => { "relay" : "-relay-",
const [err] = args; "getDataSrv" : "getDataSrv",
reject(err); "callbackSrv" : "callbackSrv",
}); "responseSrv" : "callbackSrv",
}) "responseFnName" : "response",
.handleScriptError(reject) "errorHandlingSrv" : "errorHandlingSrv",
.handleTimeout(() => { "errorFnName" : "error"
reject('Request timed out for getAliasedData'); }
}) },
script
if (config && config.ttl) { )
r.withTTL(config.ttl)
}
request = r.build();
});
peer.internals.initiateFlow(request!);
return promise;
} }

View File

@ -8,11 +8,10 @@
*/ */
import { Fluence, FluencePeer } from '@fluencelabs/fluence'; import { Fluence, FluencePeer } from '@fluencelabs/fluence';
import { import {
ResultCodes, CallParams,
RequestFlow, callFunction,
RequestFlowBuilder, registerService,
CallParams } from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
function missingFields(obj: any, fields: string[]): string[] { function missingFields(obj: any, fields: string[]): string[] {
@ -31,60 +30,28 @@ export function registerPeer(peer: FluencePeer, serviceId: string, service: Peer
export function registerPeer(...args: any) { export function registerPeer(...args: any) {
let peer: FluencePeer; registerService(
let serviceId: any; args,
let service: any; {
if (FluencePeer.isInstance(args[0])) { "defaultServiceId" : "peer",
peer = args[0]; "functions" : [
} else { {
peer = Fluence.getPeer(); "functionName" : "is_connected",
} "argDefs" : [
{
if (typeof args[0] === 'string') { "name" : "arg0",
serviceId = args[0]; "argType" : {
} else if (typeof args[1] === 'string') { "tag" : "primitive"
serviceId = args[1]; }
} else { }
serviceId = "peer" ],
} "returnType" : {
"tag" : "primitive"
// Figuring out which overload is the service. }
// If the first argument is not Fluence Peer and it is an object, then it can only be the service def
// If the first argument is peer, we are checking further. The second argument might either be
// an object, that it must be the service object
// or a string, which is the service id. In that case the service is the third argument
if (!(FluencePeer.isInstance(args[0])) && typeof args[0] === 'object') {
service = args[0];
} else if (typeof args[1] === 'object') {
service = args[1];
} else {
service = args[2];
}
const incorrectServiceDefinitions = missingFields(service, ['is_connected']);
if (!!incorrectServiceDefinitions.length) {
throw new Error("Error registering service Peer: missing functions: " + incorrectServiceDefinitions.map((d) => "'" + d + "'").join(", "))
}
peer.internals.callServiceHandler.use((req, resp, next) => {
if (req.serviceId !== serviceId) {
next();
return;
} }
]
if (req.fnName === 'is_connected') { }
const callParams = { );
...req.particleContext,
tetraplets: {
arg0: req.tetraplets[0]
},
};
resp.retCode = ResultCodes.success;
resp.result = service.is_connected(req.args[0], callParams)
}
next();
});
} }
@ -99,60 +66,22 @@ export function registerOp(peer: FluencePeer, serviceId: string, service: OpDef)
export function registerOp(...args: any) { export function registerOp(...args: any) {
let peer: FluencePeer; registerService(
let serviceId: any; args,
let service: any; {
if (FluencePeer.isInstance(args[0])) { "defaultServiceId" : "op",
peer = args[0]; "functions" : [
} else { {
peer = Fluence.getPeer(); "functionName" : "identity",
} "argDefs" : [
],
if (typeof args[0] === 'string') { "returnType" : {
serviceId = args[0]; "tag" : "void"
} else if (typeof args[1] === 'string') { }
serviceId = args[1];
} else {
serviceId = "op"
}
// Figuring out which overload is the service.
// If the first argument is not Fluence Peer and it is an object, then it can only be the service def
// If the first argument is peer, we are checking further. The second argument might either be
// an object, that it must be the service object
// or a string, which is the service id. In that case the service is the third argument
if (!(FluencePeer.isInstance(args[0])) && typeof args[0] === 'object') {
service = args[0];
} else if (typeof args[1] === 'object') {
service = args[1];
} else {
service = args[2];
}
const incorrectServiceDefinitions = missingFields(service, ['identity']);
if (!!incorrectServiceDefinitions.length) {
throw new Error("Error registering service Op: missing functions: " + incorrectServiceDefinitions.map((d) => "'" + d + "'").join(", "))
}
peer.internals.callServiceHandler.use((req, resp, next) => {
if (req.serviceId !== serviceId) {
next();
return;
} }
]
if (req.fnName === 'identity') { }
const callParams = { );
...req.particleContext,
tetraplets: {
},
};
resp.retCode = ResultCodes.success;
service.identity(callParams); resp.result = {}
}
next();
});
} }
@ -168,71 +97,30 @@ export function registerTest(peer: FluencePeer, serviceId: string, service: Test
export function registerTest(...args: any) { export function registerTest(...args: any) {
let peer: FluencePeer; registerService(
let serviceId: any; args,
let service: any; {
if (FluencePeer.isInstance(args[0])) { "defaultServiceId" : "test",
peer = args[0]; "functions" : [
} else { {
peer = Fluence.getPeer(); "functionName" : "doSomething",
} "argDefs" : [
],
if (typeof args[0] === 'string') { "returnType" : {
serviceId = args[0]; "tag" : "primitive"
} else if (typeof args[1] === 'string') { }
serviceId = args[1]; },
} else { {
serviceId = "test" "functionName" : "getUserList",
} "argDefs" : [
],
// Figuring out which overload is the service. "returnType" : {
// If the first argument is not Fluence Peer and it is an object, then it can only be the service def "tag" : "primitive"
// If the first argument is peer, we are checking further. The second argument might either be }
// an object, that it must be the service object
// or a string, which is the service id. In that case the service is the third argument
if (!(FluencePeer.isInstance(args[0])) && typeof args[0] === 'object') {
service = args[0];
} else if (typeof args[1] === 'object') {
service = args[1];
} else {
service = args[2];
}
const incorrectServiceDefinitions = missingFields(service, ['doSomething', 'getUserList']);
if (!!incorrectServiceDefinitions.length) {
throw new Error("Error registering service Test: missing functions: " + incorrectServiceDefinitions.map((d) => "'" + d + "'").join(", "))
}
peer.internals.callServiceHandler.use((req, resp, next) => {
if (req.serviceId !== serviceId) {
next();
return;
} }
]
if (req.fnName === 'doSomething') { }
const callParams = { );
...req.particleContext,
tetraplets: {
},
};
resp.retCode = ResultCodes.success;
resp.result = service.doSomething(callParams)
}
if (req.fnName === 'getUserList') {
const callParams = {
...req.particleContext,
tetraplets: {
},
};
resp.retCode = ResultCodes.success;
resp.result = service.getUserList(callParams)
}
next();
});
} }
// Functions // Functions
@ -241,25 +129,9 @@ if (req.fnName === 'getUserList') {
export function betterMessage(relay: string, config?: {ttl?: number}): Promise<void>; export function betterMessage(relay: string, config?: {ttl?: number}): Promise<void>;
export function betterMessage(peer: FluencePeer, relay: string, config?: {ttl?: number}): Promise<void>; export function betterMessage(peer: FluencePeer, relay: string, config?: {ttl?: number}): Promise<void>;
export function betterMessage(...args: any) { export function betterMessage(...args: any) {
let peer: FluencePeer;
let relay: any;
let config: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
relay = args[1];
config = args[2];
} else {
peer = Fluence.getPeer();
relay = args[0];
config = args[1];
}
let request: RequestFlow; let script = `
const promise = new Promise<void>((resolve, reject) => { (xor
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
(xor
(seq (seq
(seq (seq
(seq (seq
@ -292,32 +164,32 @@ export function betterMessage(...args: any) {
) )
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3]) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3])
) )
`, `
) return callFunction(
.configHandler((h) => { args,
h.on('getDataSrv', '-relay-', () => { {
return peer.getStatus().relayPeerId; "functionName" : "betterMessage",
}); "returnType" : {
h.on('getDataSrv', 'relay', () => {return relay;}); "tag" : "void"
h.onEvent('callbackSrv', 'response', (args) => { },
"argDefs" : [
}); {
h.onEvent('errorHandlingSrv', 'error', (args) => { "name" : "relay",
const [err] = args; "argType" : {
reject(err); "tag" : "primitive"
}); }
}) }
.handleScriptError(reject) ],
.handleTimeout(() => { "names" : {
reject('Request timed out for betterMessage'); "relay" : "-relay-",
}) "getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
if (config && config.ttl) { "responseSrv" : "callbackSrv",
r.withTTL(config.ttl) "responseFnName" : "response",
} "errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
request = r.build(); }
}); },
peer.internals.initiateFlow(request!); script
return Promise.race([promise, Promise.resolve()]); )
} }

View File

@ -8,11 +8,10 @@
*/ */
import { Fluence, FluencePeer } from '@fluencelabs/fluence'; import { Fluence, FluencePeer } from '@fluencelabs/fluence';
import { import {
ResultCodes, CallParams,
RequestFlow, callFunction,
RequestFlowBuilder, registerService,
CallParams } from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
function missingFields(obj: any, fields: string[]): string[] { function missingFields(obj: any, fields: string[]): string[] {
@ -31,60 +30,28 @@ export function registerReturn(peer: FluencePeer, serviceId: string, service: Re
export function registerReturn(...args: any) { export function registerReturn(...args: any) {
let peer: FluencePeer; registerService(
let serviceId: any; args,
let service: any; {
if (FluencePeer.isInstance(args[0])) { "defaultServiceId" : "returnService",
peer = args[0]; "functions" : [
} else { {
peer = Fluence.getPeer(); "functionName" : "run",
} "argDefs" : [
{
if (typeof args[0] === 'string') { "name" : "arg0",
serviceId = args[0]; "argType" : {
} else if (typeof args[1] === 'string') { "tag" : "primitive"
serviceId = args[1]; }
} else { }
serviceId = "returnService" ],
} "returnType" : {
"tag" : "void"
// Figuring out which overload is the service. }
// If the first argument is not Fluence Peer and it is an object, then it can only be the service def
// If the first argument is peer, we are checking further. The second argument might either be
// an object, that it must be the service object
// or a string, which is the service id. In that case the service is the third argument
if (!(FluencePeer.isInstance(args[0])) && typeof args[0] === 'object') {
service = args[0];
} else if (typeof args[1] === 'object') {
service = args[1];
} else {
service = args[2];
}
const incorrectServiceDefinitions = missingFields(service, ['run']);
if (!!incorrectServiceDefinitions.length) {
throw new Error("Error registering service Return: missing functions: " + incorrectServiceDefinitions.map((d) => "'" + d + "'").join(", "))
}
peer.internals.callServiceHandler.use((req, resp, next) => {
if (req.serviceId !== serviceId) {
next();
return;
} }
]
if (req.fnName === 'run') { }
const callParams = { );
...req.particleContext,
tetraplets: {
arg0: req.tetraplets[0]
},
};
resp.retCode = ResultCodes.success;
service.run(req.args[0], callParams); resp.result = {}
}
next();
});
} }
// Functions // Functions
@ -93,25 +60,9 @@ export function registerReturn(...args: any) {
export function test(node: string, config?: {ttl?: number}): Promise<void>; export function test(node: string, config?: {ttl?: number}): Promise<void>;
export function test(peer: FluencePeer, node: string, config?: {ttl?: number}): Promise<void>; export function test(peer: FluencePeer, node: string, config?: {ttl?: number}): Promise<void>;
export function test(...args: any) { export function test(...args: any) {
let peer: FluencePeer;
let node: any;
let config: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
node = args[1];
config = args[2];
} else {
peer = Fluence.getPeer();
node = args[0];
config = args[1];
}
let request: RequestFlow; let script = `
const promise = new Promise<void>((resolve, reject) => { (xor
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
(xor
(seq (seq
(seq (seq
(seq (seq
@ -136,32 +87,32 @@ export function test(...args: any) {
) )
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
) )
`, `
) return callFunction(
.configHandler((h) => { args,
h.on('getDataSrv', '-relay-', () => { {
return peer.getStatus().relayPeerId; "functionName" : "test",
}); "returnType" : {
h.on('getDataSrv', 'node', () => {return node;}); "tag" : "void"
h.onEvent('callbackSrv', 'response', (args) => { },
"argDefs" : [
}); {
h.onEvent('errorHandlingSrv', 'error', (args) => { "name" : "node",
const [err] = args; "argType" : {
reject(err); "tag" : "primitive"
}); }
}) }
.handleScriptError(reject) ],
.handleTimeout(() => { "names" : {
reject('Request timed out for test'); "relay" : "-relay-",
}) "getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
if (config && config.ttl) { "responseSrv" : "callbackSrv",
r.withTTL(config.ttl) "responseFnName" : "response",
} "errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
request = r.build(); }
}); },
peer.internals.initiateFlow(request!); script
return Promise.race([promise, Promise.resolve()]); )
} }

View File

@ -8,11 +8,10 @@
*/ */
import { Fluence, FluencePeer } from '@fluencelabs/fluence'; import { Fluence, FluencePeer } from '@fluencelabs/fluence';
import { import {
ResultCodes, CallParams,
RequestFlow, callFunction,
RequestFlowBuilder, registerService,
CallParams } from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
function missingFields(obj: any, fields: string[]): string[] { function missingFields(obj: any, fields: string[]): string[] {
@ -27,25 +26,9 @@ function missingFields(obj: any, fields: string[]): string[] {
export function iterateAndPrint(strings: string[], config?: {ttl?: number}): Promise<void>; export function iterateAndPrint(strings: string[], config?: {ttl?: number}): Promise<void>;
export function iterateAndPrint(peer: FluencePeer, strings: string[], config?: {ttl?: number}): Promise<void>; export function iterateAndPrint(peer: FluencePeer, strings: string[], config?: {ttl?: number}): Promise<void>;
export function iterateAndPrint(...args: any) { export function iterateAndPrint(...args: any) {
let peer: FluencePeer;
let strings: any;
let config: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
strings = args[1];
config = args[2];
} else {
peer = Fluence.getPeer();
strings = args[0];
config = args[1];
}
let request: RequestFlow; let script = `
const promise = new Promise<void>((resolve, reject) => { (xor
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
(xor
(seq (seq
(seq (seq
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
@ -60,34 +43,34 @@ export function iterateAndPrint(...args: any) {
) )
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1]) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1])
) )
`, `
) return callFunction(
.configHandler((h) => { args,
h.on('getDataSrv', '-relay-', () => { {
return peer.getStatus().relayPeerId; "functionName" : "iterateAndPrint",
}); "returnType" : {
h.on('getDataSrv', 'strings', () => {return strings;}); "tag" : "void"
h.onEvent('callbackSrv', 'response', (args) => { },
"argDefs" : [
}); {
h.onEvent('errorHandlingSrv', 'error', (args) => { "name" : "strings",
const [err] = args; "argType" : {
reject(err); "tag" : "primitive"
}); }
}) }
.handleScriptError(reject) ],
.handleTimeout(() => { "names" : {
reject('Request timed out for iterateAndPrint'); "relay" : "-relay-",
}) "getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
if (config && config.ttl) { "responseSrv" : "callbackSrv",
r.withTTL(config.ttl) "responseFnName" : "response",
} "errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
request = r.build(); }
}); },
peer.internals.initiateFlow(request!); script
return Promise.race([promise, Promise.resolve()]); )
} }
@ -95,28 +78,9 @@ export function iterateAndPrint(...args: any) {
export function iterateAndPrintParallel(nodes: string[], c: (arg0: { external_addresses: string[]; }, callParams: CallParams<'arg0'>) => void, config?: {ttl?: number}): Promise<void>; export function iterateAndPrintParallel(nodes: string[], c: (arg0: { external_addresses: string[]; }, callParams: CallParams<'arg0'>) => void, config?: {ttl?: number}): Promise<void>;
export function iterateAndPrintParallel(peer: FluencePeer, nodes: string[], c: (arg0: { external_addresses: string[]; }, callParams: CallParams<'arg0'>) => void, config?: {ttl?: number}): Promise<void>; export function iterateAndPrintParallel(peer: FluencePeer, nodes: string[], c: (arg0: { external_addresses: string[]; }, callParams: CallParams<'arg0'>) => void, config?: {ttl?: number}): Promise<void>;
export function iterateAndPrintParallel(...args: any) { export function iterateAndPrintParallel(...args: any) {
let peer: FluencePeer;
let nodes: any;
let c: any;
let config: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
nodes = args[1];
c = args[2];
config = args[3];
} else {
peer = Fluence.getPeer();
nodes = args[0];
c = args[1];
config = args[2];
}
let request: RequestFlow; let script = `
const promise = new Promise<void>((resolve, reject) => { (xor
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
(xor
(seq (seq
(seq (seq
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
@ -146,46 +110,51 @@ export function iterateAndPrintParallel(...args: any) {
) )
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3]) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3])
) )
`, `
) return callFunction(
.configHandler((h) => { args,
h.on('getDataSrv', '-relay-', () => { {
return peer.getStatus().relayPeerId; "functionName" : "iterateAndPrintParallel",
}); "returnType" : {
h.on('getDataSrv', 'nodes', () => {return nodes;}); "tag" : "void"
h.use((req, resp, next) => { },
if(req.serviceId === 'callbackSrv' && req.fnName === 'c') { "argDefs" : [
const callParams = { {
...req.particleContext, "name" : "nodes",
tetraplets: { "argType" : {
arg0: req.tetraplets[0] "tag" : "primitive"
}, }
}; },
resp.retCode = ResultCodes.success; {
c(req.args[0], callParams); resp.result = {} "name" : "c",
"argType" : {
"tag" : "callback",
"callback" : {
"argDefs" : [
{
"name" : "arg0",
"argType" : {
"tag" : "primitive"
}
} }
next(); ],
}); "returnType" : {
"tag" : "void"
h.onEvent('callbackSrv', 'response', (args) => { }
});
h.onEvent('errorHandlingSrv', 'error', (args) => {
const [err] = args;
reject(err);
});
})
.handleScriptError(reject)
.handleTimeout(() => {
reject('Request timed out for iterateAndPrintParallel');
})
if (config && config.ttl) {
r.withTTL(config.ttl)
} }
}
request = r.build(); }
}); ],
peer.internals.initiateFlow(request!); "names" : {
return Promise.race([promise, Promise.resolve()]); "relay" : "-relay-",
"getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
"responseFnName" : "response",
"errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
}
},
script
)
} }

View File

@ -8,11 +8,10 @@
*/ */
import { Fluence, FluencePeer } from '@fluencelabs/fluence'; import { Fluence, FluencePeer } from '@fluencelabs/fluence';
import { import {
ResultCodes, CallParams,
RequestFlow, callFunction,
RequestFlowBuilder, registerService,
CallParams } from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
function missingFields(obj: any, fields: string[]): string[] { function missingFields(obj: any, fields: string[]): string[] {
@ -31,60 +30,28 @@ export function registerOp2(peer: FluencePeer, serviceId: string, service: Op2De
export function registerOp2(...args: any) { export function registerOp2(...args: any) {
let peer: FluencePeer; registerService(
let serviceId: any; args,
let service: any; {
if (FluencePeer.isInstance(args[0])) { "defaultServiceId" : "op",
peer = args[0]; "functions" : [
} else { {
peer = Fluence.getPeer(); "functionName" : "identity",
} "argDefs" : [
{
if (typeof args[0] === 'string') { "name" : "s",
serviceId = args[0]; "argType" : {
} else if (typeof args[1] === 'string') { "tag" : "primitive"
serviceId = args[1]; }
} else { }
serviceId = "op" ],
} "returnType" : {
"tag" : "void"
// Figuring out which overload is the service. }
// If the first argument is not Fluence Peer and it is an object, then it can only be the service def
// If the first argument is peer, we are checking further. The second argument might either be
// an object, that it must be the service object
// or a string, which is the service id. In that case the service is the third argument
if (!(FluencePeer.isInstance(args[0])) && typeof args[0] === 'object') {
service = args[0];
} else if (typeof args[1] === 'object') {
service = args[1];
} else {
service = args[2];
}
const incorrectServiceDefinitions = missingFields(service, ['identity']);
if (!!incorrectServiceDefinitions.length) {
throw new Error("Error registering service Op2: missing functions: " + incorrectServiceDefinitions.map((d) => "'" + d + "'").join(", "))
}
peer.internals.callServiceHandler.use((req, resp, next) => {
if (req.serviceId !== serviceId) {
next();
return;
} }
]
if (req.fnName === 'identity') { }
const callParams = { );
...req.particleContext,
tetraplets: {
s: req.tetraplets[0]
},
};
resp.retCode = ResultCodes.success;
service.identity(req.args[0], callParams); resp.result = {}
}
next();
});
} }
// Functions // Functions
@ -93,25 +60,9 @@ export function registerOp2(...args: any) {
export function getTwoResults(relay: string, config?: {ttl?: number}): Promise<number[]>; export function getTwoResults(relay: string, config?: {ttl?: number}): Promise<number[]>;
export function getTwoResults(peer: FluencePeer, relay: string, config?: {ttl?: number}): Promise<number[]>; export function getTwoResults(peer: FluencePeer, relay: string, config?: {ttl?: number}): Promise<number[]>;
export function getTwoResults(...args: any) { export function getTwoResults(...args: any) {
let peer: FluencePeer;
let relay: any;
let config: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
relay = args[1];
config = args[2];
} else {
peer = Fluence.getPeer();
relay = args[0];
config = args[1];
}
let request: RequestFlow; let script = `
const promise = new Promise<number[]>((resolve, reject) => { (xor
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
(xor
(seq (seq
(seq (seq
(seq (seq
@ -165,33 +116,32 @@ export function getTwoResults(...args: any) {
) )
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3]) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3])
) )
`, `
) return callFunction(
.configHandler((h) => { args,
h.on('getDataSrv', '-relay-', () => { {
return peer.getStatus().relayPeerId; "functionName" : "getTwoResults",
}); "returnType" : {
h.on('getDataSrv', 'relay', () => {return relay;}); "tag" : "primitive"
h.onEvent('callbackSrv', 'response', (args) => { },
const [res] = args; "argDefs" : [
resolve(res); {
}); "name" : "relay",
h.onEvent('errorHandlingSrv', 'error', (args) => { "argType" : {
const [err] = args; "tag" : "primitive"
reject(err); }
}); }
}) ],
.handleScriptError(reject) "names" : {
.handleTimeout(() => { "relay" : "-relay-",
reject('Request timed out for getTwoResults'); "getDataSrv" : "getDataSrv",
}) "callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
if (config && config.ttl) { "responseFnName" : "response",
r.withTTL(config.ttl) "errorHandlingSrv" : "errorHandlingSrv",
} "errorFnName" : "error"
}
request = r.build(); },
}); script
peer.internals.initiateFlow(request!); )
return promise;
} }

View File

@ -8,11 +8,10 @@
*/ */
import { Fluence, FluencePeer } from '@fluencelabs/fluence'; import { Fluence, FluencePeer } from '@fluencelabs/fluence';
import { import {
ResultCodes, CallParams,
RequestFlow, callFunction,
RequestFlowBuilder, registerService,
CallParams } from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
function missingFields(obj: any, fields: string[]): string[] { function missingFields(obj: any, fields: string[]): string[] {
@ -31,60 +30,22 @@ export function registerTestSrv(peer: FluencePeer, serviceId: string, service: T
export function registerTestSrv(...args: any) { export function registerTestSrv(...args: any) {
let peer: FluencePeer; registerService(
let serviceId: any; args,
let service: any; {
if (FluencePeer.isInstance(args[0])) { "defaultServiceId" : "test-service-id",
peer = args[0]; "functions" : [
} else { {
peer = Fluence.getPeer(); "functionName" : "str",
} "argDefs" : [
],
if (typeof args[0] === 'string') { "returnType" : {
serviceId = args[0]; "tag" : "primitive"
} else if (typeof args[1] === 'string') { }
serviceId = args[1];
} else {
serviceId = "test-service-id"
}
// Figuring out which overload is the service.
// If the first argument is not Fluence Peer and it is an object, then it can only be the service def
// If the first argument is peer, we are checking further. The second argument might either be
// an object, that it must be the service object
// or a string, which is the service id. In that case the service is the third argument
if (!(FluencePeer.isInstance(args[0])) && typeof args[0] === 'object') {
service = args[0];
} else if (typeof args[1] === 'object') {
service = args[1];
} else {
service = args[2];
}
const incorrectServiceDefinitions = missingFields(service, ['str']);
if (!!incorrectServiceDefinitions.length) {
throw new Error("Error registering service TestSrv: missing functions: " + incorrectServiceDefinitions.map((d) => "'" + d + "'").join(", "))
}
peer.internals.callServiceHandler.use((req, resp, next) => {
if (req.serviceId !== serviceId) {
next();
return;
} }
]
if (req.fnName === 'str') { }
const callParams = { );
...req.particleContext,
tetraplets: {
},
};
resp.retCode = ResultCodes.success;
resp.result = service.str(callParams)
}
next();
});
} }
// Functions // Functions
@ -93,23 +54,9 @@ export function registerTestSrv(...args: any) {
export function testFunc(config?: {ttl?: number}): Promise<string>; export function testFunc(config?: {ttl?: number}): Promise<string>;
export function testFunc(peer: FluencePeer, config?: {ttl?: number}): Promise<string>; export function testFunc(peer: FluencePeer, config?: {ttl?: number}): Promise<string>;
export function testFunc(...args: any) { export function testFunc(...args: any) {
let peer: FluencePeer;
let config: any; let script = `
if (FluencePeer.isInstance(args[0])) { (xor
peer = args[0];
config = args[1];
} else {
peer = Fluence.getPeer();
config = args[0];
}
let request: RequestFlow;
const promise = new Promise<string>((resolve, reject) => {
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
(xor
(seq (seq
(seq (seq
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
@ -122,33 +69,26 @@ export function testFunc(...args: any) {
) )
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
) )
`, `
) return callFunction(
.configHandler((h) => { args,
h.on('getDataSrv', '-relay-', () => { {
return peer.getStatus().relayPeerId; "functionName" : "testFunc",
}); "returnType" : {
"tag" : "primitive"
h.onEvent('callbackSrv', 'response', (args) => { },
const [res] = args; "argDefs" : [
resolve(res); ],
}); "names" : {
h.onEvent('errorHandlingSrv', 'error', (args) => { "relay" : "-relay-",
const [err] = args; "getDataSrv" : "getDataSrv",
reject(err); "callbackSrv" : "callbackSrv",
}); "responseSrv" : "callbackSrv",
}) "responseFnName" : "response",
.handleScriptError(reject) "errorHandlingSrv" : "errorHandlingSrv",
.handleTimeout(() => { "errorFnName" : "error"
reject('Request timed out for testFunc'); }
}) },
script
if (config && config.ttl) { )
r.withTTL(config.ttl)
}
request = r.build();
});
peer.internals.initiateFlow(request!);
return promise;
} }

View File

@ -8,11 +8,10 @@
*/ */
import { Fluence, FluencePeer } from '@fluencelabs/fluence'; import { Fluence, FluencePeer } from '@fluencelabs/fluence';
import { import {
ResultCodes, CallParams,
RequestFlow, callFunction,
RequestFlowBuilder, registerService,
CallParams } from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
function missingFields(obj: any, fields: string[]): string[] { function missingFields(obj: any, fields: string[]): string[] {
@ -31,60 +30,28 @@ export function registerStringExtra(peer: FluencePeer, serviceId: string, servic
export function registerStringExtra(...args: any) { export function registerStringExtra(...args: any) {
let peer: FluencePeer; registerService(
let serviceId: any; args,
let service: any; {
if (FluencePeer.isInstance(args[0])) { "defaultServiceId" : "service-id",
peer = args[0]; "functions" : [
} else { {
peer = Fluence.getPeer(); "functionName" : "addNameToHello",
} "argDefs" : [
{
if (typeof args[0] === 'string') { "name" : "arg0",
serviceId = args[0]; "argType" : {
} else if (typeof args[1] === 'string') { "tag" : "primitive"
serviceId = args[1]; }
} else { }
serviceId = "service-id" ],
} "returnType" : {
"tag" : "primitive"
// Figuring out which overload is the service. }
// If the first argument is not Fluence Peer and it is an object, then it can only be the service def
// If the first argument is peer, we are checking further. The second argument might either be
// an object, that it must be the service object
// or a string, which is the service id. In that case the service is the third argument
if (!(FluencePeer.isInstance(args[0])) && typeof args[0] === 'object') {
service = args[0];
} else if (typeof args[1] === 'object') {
service = args[1];
} else {
service = args[2];
}
const incorrectServiceDefinitions = missingFields(service, ['addNameToHello']);
if (!!incorrectServiceDefinitions.length) {
throw new Error("Error registering service StringExtra: missing functions: " + incorrectServiceDefinitions.map((d) => "'" + d + "'").join(", "))
}
peer.internals.callServiceHandler.use((req, resp, next) => {
if (req.serviceId !== serviceId) {
next();
return;
} }
]
if (req.fnName === 'addNameToHello') { }
const callParams = { );
...req.particleContext,
tetraplets: {
arg0: req.tetraplets[0]
},
};
resp.retCode = ResultCodes.success;
resp.result = service.addNameToHello(req.args[0], callParams)
}
next();
});
} }
// Functions // Functions
@ -93,25 +60,9 @@ export function registerStringExtra(...args: any) {
export function helloWorld(name: string, config?: {ttl?: number}): Promise<string>; export function helloWorld(name: string, config?: {ttl?: number}): Promise<string>;
export function helloWorld(peer: FluencePeer, name: string, config?: {ttl?: number}): Promise<string>; export function helloWorld(peer: FluencePeer, name: string, config?: {ttl?: number}): Promise<string>;
export function helloWorld(...args: any) { export function helloWorld(...args: any) {
let peer: FluencePeer;
let name: any;
let config: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
name = args[1];
config = args[2];
} else {
peer = Fluence.getPeer();
name = args[0];
config = args[1];
}
let request: RequestFlow; let script = `
const promise = new Promise<string>((resolve, reject) => { (xor
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
(xor
(seq (seq
(seq (seq
(seq (seq
@ -127,33 +78,32 @@ export function helloWorld(...args: any) {
) )
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
) )
`, `
) return callFunction(
.configHandler((h) => { args,
h.on('getDataSrv', '-relay-', () => { {
return peer.getStatus().relayPeerId; "functionName" : "helloWorld",
}); "returnType" : {
h.on('getDataSrv', 'name', () => {return name;}); "tag" : "primitive"
h.onEvent('callbackSrv', 'response', (args) => { },
const [res] = args; "argDefs" : [
resolve(res); {
}); "name" : "name",
h.onEvent('errorHandlingSrv', 'error', (args) => { "argType" : {
const [err] = args; "tag" : "primitive"
reject(err); }
}); }
}) ],
.handleScriptError(reject) "names" : {
.handleTimeout(() => { "relay" : "-relay-",
reject('Request timed out for helloWorld'); "getDataSrv" : "getDataSrv",
}) "callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
if (config && config.ttl) { "responseFnName" : "response",
r.withTTL(config.ttl) "errorHandlingSrv" : "errorHandlingSrv",
} "errorFnName" : "error"
}
request = r.build(); },
}); script
peer.internals.initiateFlow(request!); )
return promise;
} }

View File

@ -8,11 +8,10 @@
*/ */
import { Fluence, FluencePeer } from '@fluencelabs/fluence'; import { Fluence, FluencePeer } from '@fluencelabs/fluence';
import { import {
ResultCodes, CallParams,
RequestFlow, callFunction,
RequestFlowBuilder, registerService,
CallParams } from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
function missingFields(obj: any, fields: string[]): string[] { function missingFields(obj: any, fields: string[]): string[] {
@ -27,25 +26,9 @@ function missingFields(obj: any, fields: string[]): string[] {
export function ifElseCall(condition: boolean, config?: {ttl?: number}): Promise<void>; export function ifElseCall(condition: boolean, config?: {ttl?: number}): Promise<void>;
export function ifElseCall(peer: FluencePeer, condition: boolean, config?: {ttl?: number}): Promise<void>; export function ifElseCall(peer: FluencePeer, condition: boolean, config?: {ttl?: number}): Promise<void>;
export function ifElseCall(...args: any) { export function ifElseCall(...args: any) {
let peer: FluencePeer;
let condition: any;
let config: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
condition = args[1];
config = args[2];
} else {
peer = Fluence.getPeer();
condition = args[0];
config = args[1];
}
let request: RequestFlow; let script = `
const promise = new Promise<void>((resolve, reject) => { (xor
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
(xor
(seq (seq
(seq (seq
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
@ -63,34 +46,34 @@ export function ifElseCall(...args: any) {
) )
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
) )
`, `
) return callFunction(
.configHandler((h) => { args,
h.on('getDataSrv', '-relay-', () => { {
return peer.getStatus().relayPeerId; "functionName" : "ifElseCall",
}); "returnType" : {
h.on('getDataSrv', 'condition', () => {return condition;}); "tag" : "void"
h.onEvent('callbackSrv', 'response', (args) => { },
"argDefs" : [
}); {
h.onEvent('errorHandlingSrv', 'error', (args) => { "name" : "condition",
const [err] = args; "argType" : {
reject(err); "tag" : "primitive"
}); }
}) }
.handleScriptError(reject) ],
.handleTimeout(() => { "names" : {
reject('Request timed out for ifElseCall'); "relay" : "-relay-",
}) "getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
if (config && config.ttl) { "responseSrv" : "callbackSrv",
r.withTTL(config.ttl) "responseFnName" : "response",
} "errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
request = r.build(); }
}); },
peer.internals.initiateFlow(request!); script
return Promise.race([promise, Promise.resolve()]); )
} }
@ -98,25 +81,9 @@ export function ifElseCall(...args: any) {
export function ifElseNumCall(condition: number, config?: {ttl?: number}): Promise<void>; export function ifElseNumCall(condition: number, config?: {ttl?: number}): Promise<void>;
export function ifElseNumCall(peer: FluencePeer, condition: number, config?: {ttl?: number}): Promise<void>; export function ifElseNumCall(peer: FluencePeer, condition: number, config?: {ttl?: number}): Promise<void>;
export function ifElseNumCall(...args: any) { export function ifElseNumCall(...args: any) {
let peer: FluencePeer;
let condition: any;
let config: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
condition = args[1];
config = args[2];
} else {
peer = Fluence.getPeer();
condition = args[0];
config = args[1];
}
let request: RequestFlow; let script = `
const promise = new Promise<void>((resolve, reject) => { (xor
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
(xor
(seq (seq
(seq (seq
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
@ -134,32 +101,32 @@ export function ifElseNumCall(...args: any) {
) )
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
) )
`, `
) return callFunction(
.configHandler((h) => { args,
h.on('getDataSrv', '-relay-', () => { {
return peer.getStatus().relayPeerId; "functionName" : "ifElseNumCall",
}); "returnType" : {
h.on('getDataSrv', 'condition', () => {return condition;}); "tag" : "void"
h.onEvent('callbackSrv', 'response', (args) => { },
"argDefs" : [
}); {
h.onEvent('errorHandlingSrv', 'error', (args) => { "name" : "condition",
const [err] = args; "argType" : {
reject(err); "tag" : "primitive"
}); }
}) }
.handleScriptError(reject) ],
.handleTimeout(() => { "names" : {
reject('Request timed out for ifElseNumCall'); "relay" : "-relay-",
}) "getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
if (config && config.ttl) { "responseSrv" : "callbackSrv",
r.withTTL(config.ttl) "responseFnName" : "response",
} "errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
request = r.build(); }
}); },
peer.internals.initiateFlow(request!); script
return Promise.race([promise, Promise.resolve()]); )
} }

View File

@ -8,11 +8,10 @@
*/ */
import { Fluence, FluencePeer } from '@fluencelabs/fluence'; import { Fluence, FluencePeer } from '@fluencelabs/fluence';
import { import {
ResultCodes, CallParams,
RequestFlow, callFunction,
RequestFlowBuilder, registerService,
CallParams } from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
function missingFields(obj: any, fields: string[]): string[] { function missingFields(obj: any, fields: string[]): string[] {
@ -31,60 +30,22 @@ export function registerSuperFoo(peer: FluencePeer, serviceId: string, service:
export function registerSuperFoo(...args: any) { export function registerSuperFoo(...args: any) {
let peer: FluencePeer; registerService(
let serviceId: any; args,
let service: any; {
if (FluencePeer.isInstance(args[0])) { "defaultServiceId" : "super_foo",
peer = args[0]; "functions" : [
} else { {
peer = Fluence.getPeer(); "functionName" : "small_foo",
} "argDefs" : [
],
if (typeof args[0] === 'string') { "returnType" : {
serviceId = args[0]; "tag" : "primitive"
} else if (typeof args[1] === 'string') { }
serviceId = args[1];
} else {
serviceId = "super_foo"
}
// Figuring out which overload is the service.
// If the first argument is not Fluence Peer and it is an object, then it can only be the service def
// If the first argument is peer, we are checking further. The second argument might either be
// an object, that it must be the service object
// or a string, which is the service id. In that case the service is the third argument
if (!(FluencePeer.isInstance(args[0])) && typeof args[0] === 'object') {
service = args[0];
} else if (typeof args[1] === 'object') {
service = args[1];
} else {
service = args[2];
}
const incorrectServiceDefinitions = missingFields(service, ['small_foo']);
if (!!incorrectServiceDefinitions.length) {
throw new Error("Error registering service SuperFoo: missing functions: " + incorrectServiceDefinitions.map((d) => "'" + d + "'").join(", "))
}
peer.internals.callServiceHandler.use((req, resp, next) => {
if (req.serviceId !== serviceId) {
next();
return;
} }
]
if (req.fnName === 'small_foo') { }
const callParams = { );
...req.particleContext,
tetraplets: {
},
};
resp.retCode = ResultCodes.success;
resp.result = service.small_foo(callParams)
}
next();
});
} }
// Functions // Functions

View File

@ -8,11 +8,10 @@
*/ */
import { Fluence, FluencePeer } from '@fluencelabs/fluence'; import { Fluence, FluencePeer } from '@fluencelabs/fluence';
import { import {
ResultCodes, CallParams,
RequestFlow, callFunction,
RequestFlowBuilder, registerService,
CallParams } from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
function missingFields(obj: any, fields: string[]): string[] { function missingFields(obj: any, fields: string[]): string[] {
@ -31,60 +30,22 @@ export function registerMyExportSrv(peer: FluencePeer, serviceId: string, servic
export function registerMyExportSrv(...args: any) { export function registerMyExportSrv(...args: any) {
let peer: FluencePeer; registerService(
let serviceId: any; args,
let service: any; {
if (FluencePeer.isInstance(args[0])) { "defaultServiceId" : "my_export_srv",
peer = args[0]; "functions" : [
} else { {
peer = Fluence.getPeer(); "functionName" : "another_str",
} "argDefs" : [
],
if (typeof args[0] === 'string') { "returnType" : {
serviceId = args[0]; "tag" : "primitive"
} else if (typeof args[1] === 'string') { }
serviceId = args[1];
} else {
serviceId = "my_export_srv"
}
// Figuring out which overload is the service.
// If the first argument is not Fluence Peer and it is an object, then it can only be the service def
// If the first argument is peer, we are checking further. The second argument might either be
// an object, that it must be the service object
// or a string, which is the service id. In that case the service is the third argument
if (!(FluencePeer.isInstance(args[0])) && typeof args[0] === 'object') {
service = args[0];
} else if (typeof args[1] === 'object') {
service = args[1];
} else {
service = args[2];
}
const incorrectServiceDefinitions = missingFields(service, ['another_str']);
if (!!incorrectServiceDefinitions.length) {
throw new Error("Error registering service MyExportSrv: missing functions: " + incorrectServiceDefinitions.map((d) => "'" + d + "'").join(", "))
}
peer.internals.callServiceHandler.use((req, resp, next) => {
if (req.serviceId !== serviceId) {
next();
return;
} }
]
if (req.fnName === 'another_str') { }
const callParams = { );
...req.particleContext,
tetraplets: {
},
};
resp.retCode = ResultCodes.success;
resp.result = service.another_str(callParams)
}
next();
});
} }
// Functions // Functions
@ -93,23 +54,9 @@ export function registerMyExportSrv(...args: any) {
export function string_from_lib(config?: {ttl?: number}): Promise<string>; export function string_from_lib(config?: {ttl?: number}): Promise<string>;
export function string_from_lib(peer: FluencePeer, config?: {ttl?: number}): Promise<string>; export function string_from_lib(peer: FluencePeer, config?: {ttl?: number}): Promise<string>;
export function string_from_lib(...args: any) { export function string_from_lib(...args: any) {
let peer: FluencePeer;
let config: any; let script = `
if (FluencePeer.isInstance(args[0])) { (xor
peer = args[0];
config = args[1];
} else {
peer = Fluence.getPeer();
config = args[0];
}
let request: RequestFlow;
const promise = new Promise<string>((resolve, reject) => {
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
(xor
(seq (seq
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
(xor (xor
@ -119,33 +66,26 @@ export function string_from_lib(...args: any) {
) )
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
) )
`, `
) return callFunction(
.configHandler((h) => { args,
h.on('getDataSrv', '-relay-', () => { {
return peer.getStatus().relayPeerId; "functionName" : "string_from_lib",
}); "returnType" : {
"tag" : "primitive"
h.onEvent('callbackSrv', 'response', (args) => { },
const [res] = args; "argDefs" : [
resolve(res); ],
}); "names" : {
h.onEvent('errorHandlingSrv', 'error', (args) => { "relay" : "-relay-",
const [err] = args; "getDataSrv" : "getDataSrv",
reject(err); "callbackSrv" : "callbackSrv",
}); "responseSrv" : "callbackSrv",
}) "responseFnName" : "response",
.handleScriptError(reject) "errorHandlingSrv" : "errorHandlingSrv",
.handleTimeout(() => { "errorFnName" : "error"
reject('Request timed out for string_from_lib'); }
}) },
script
if (config && config.ttl) { )
r.withTTL(config.ttl)
}
request = r.build();
});
peer.internals.initiateFlow(request!);
return promise;
} }

View File

@ -8,11 +8,10 @@
*/ */
import { Fluence, FluencePeer } from '@fluencelabs/fluence'; import { Fluence, FluencePeer } from '@fluencelabs/fluence';
import { import {
ResultCodes, CallParams,
RequestFlow, callFunction,
RequestFlowBuilder, registerService,
CallParams } from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
function missingFields(obj: any, fields: string[]): string[] { function missingFields(obj: any, fields: string[]): string[] {
@ -29,58 +28,22 @@ export function registerOneMore(peer: FluencePeer, serviceId: string, service: O
export function registerOneMore(...args: any) { export function registerOneMore(...args: any) {
let peer: FluencePeer; registerService(
let serviceId: any; args,
let service: any; {
if (FluencePeer.isInstance(args[0])) { "defaultServiceId" : null,
peer = args[0]; "functions" : [
} else { {
peer = Fluence.getPeer(); "functionName" : "more_call",
} "argDefs" : [
],
if (typeof args[0] === 'string') { "returnType" : {
serviceId = args[0]; "tag" : "void"
} else if (typeof args[1] === 'string') { }
serviceId = args[1];
}
// Figuring out which overload is the service.
// If the first argument is not Fluence Peer and it is an object, then it can only be the service def
// If the first argument is peer, we are checking further. The second argument might either be
// an object, that it must be the service object
// or a string, which is the service id. In that case the service is the third argument
if (!(FluencePeer.isInstance(args[0])) && typeof args[0] === 'object') {
service = args[0];
} else if (typeof args[1] === 'object') {
service = args[1];
} else {
service = args[2];
}
const incorrectServiceDefinitions = missingFields(service, ['more_call']);
if (!!incorrectServiceDefinitions.length) {
throw new Error("Error registering service OneMore: missing functions: " + incorrectServiceDefinitions.map((d) => "'" + d + "'").join(", "))
}
peer.internals.callServiceHandler.use((req, resp, next) => {
if (req.serviceId !== serviceId) {
next();
return;
} }
]
if (req.fnName === 'more_call') { }
const callParams = { );
...req.particleContext,
tetraplets: {
},
};
resp.retCode = ResultCodes.success;
service.more_call(callParams); resp.result = {}
}
next();
});
} }
// Functions // Functions

View File

@ -8,11 +8,10 @@
*/ */
import { Fluence, FluencePeer } from '@fluencelabs/fluence'; import { Fluence, FluencePeer } from '@fluencelabs/fluence';
import { import {
ResultCodes, CallParams,
RequestFlow, callFunction,
RequestFlowBuilder, registerService,
CallParams } from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
function missingFields(obj: any, fields: string[]): string[] { function missingFields(obj: any, fields: string[]): string[] {
@ -27,23 +26,9 @@ function missingFields(obj: any, fields: string[]): string[] {
export function wrap(config?: {ttl?: number}): Promise<string>; export function wrap(config?: {ttl?: number}): Promise<string>;
export function wrap(peer: FluencePeer, config?: {ttl?: number}): Promise<string>; export function wrap(peer: FluencePeer, config?: {ttl?: number}): Promise<string>;
export function wrap(...args: any) { export function wrap(...args: any) {
let peer: FluencePeer;
let config: any; let script = `
if (FluencePeer.isInstance(args[0])) { (xor
peer = args[0];
config = args[1];
} else {
peer = Fluence.getPeer();
config = args[0];
}
let request: RequestFlow;
const promise = new Promise<string>((resolve, reject) => {
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
(xor
(seq (seq
(seq (seq
(seq (seq
@ -59,35 +44,28 @@ export function wrap(...args: any) {
) )
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
) )
`, `
) return callFunction(
.configHandler((h) => { args,
h.on('getDataSrv', '-relay-', () => { {
return peer.getStatus().relayPeerId; "functionName" : "wrap",
}); "returnType" : {
"tag" : "primitive"
h.onEvent('callbackSrv', 'response', (args) => { },
const [res] = args; "argDefs" : [
resolve(res); ],
}); "names" : {
h.onEvent('errorHandlingSrv', 'error', (args) => { "relay" : "-relay-",
const [err] = args; "getDataSrv" : "getDataSrv",
reject(err); "callbackSrv" : "callbackSrv",
}); "responseSrv" : "callbackSrv",
}) "responseFnName" : "response",
.handleScriptError(reject) "errorHandlingSrv" : "errorHandlingSrv",
.handleTimeout(() => { "errorFnName" : "error"
reject('Request timed out for wrap'); }
}) },
script
if (config && config.ttl) { )
r.withTTL(config.ttl)
}
request = r.build();
});
peer.internals.initiateFlow(request!);
return promise;
} }
@ -95,23 +73,9 @@ export function wrap(...args: any) {
export function barfoo(config?: {ttl?: number}): Promise<string[]>; export function barfoo(config?: {ttl?: number}): Promise<string[]>;
export function barfoo(peer: FluencePeer, config?: {ttl?: number}): Promise<string[]>; export function barfoo(peer: FluencePeer, config?: {ttl?: number}): Promise<string[]>;
export function barfoo(...args: any) { export function barfoo(...args: any) {
let peer: FluencePeer;
let config: any; let script = `
if (FluencePeer.isInstance(args[0])) { (xor
peer = args[0];
config = args[1];
} else {
peer = Fluence.getPeer();
config = args[0];
}
let request: RequestFlow;
const promise = new Promise<string[]>((resolve, reject) => {
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
(xor
(seq (seq
(seq (seq
(seq (seq
@ -127,33 +91,26 @@ export function barfoo(...args: any) {
) )
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
) )
`, `
) return callFunction(
.configHandler((h) => { args,
h.on('getDataSrv', '-relay-', () => { {
return peer.getStatus().relayPeerId; "functionName" : "barfoo",
}); "returnType" : {
"tag" : "primitive"
h.onEvent('callbackSrv', 'response', (args) => { },
const [res] = args; "argDefs" : [
resolve(res); ],
}); "names" : {
h.onEvent('errorHandlingSrv', 'error', (args) => { "relay" : "-relay-",
const [err] = args; "getDataSrv" : "getDataSrv",
reject(err); "callbackSrv" : "callbackSrv",
}); "responseSrv" : "callbackSrv",
}) "responseFnName" : "response",
.handleScriptError(reject) "errorHandlingSrv" : "errorHandlingSrv",
.handleTimeout(() => { "errorFnName" : "error"
reject('Request timed out for barfoo'); }
}) },
script
if (config && config.ttl) { )
r.withTTL(config.ttl)
}
request = r.build();
});
peer.internals.initiateFlow(request!);
return promise;
} }

View File

@ -8,11 +8,10 @@
*/ */
import { Fluence, FluencePeer } from '@fluencelabs/fluence'; import { Fluence, FluencePeer } from '@fluencelabs/fluence';
import { import {
ResultCodes, CallParams,
RequestFlow, callFunction,
RequestFlowBuilder, registerService,
CallParams } from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
function missingFields(obj: any, fields: string[]): string[] { function missingFields(obj: any, fields: string[]): string[] {
@ -27,23 +26,9 @@ function missingFields(obj: any, fields: string[]): string[] {
export function foo_wrapper(config?: {ttl?: number}): Promise<string>; export function foo_wrapper(config?: {ttl?: number}): Promise<string>;
export function foo_wrapper(peer: FluencePeer, config?: {ttl?: number}): Promise<string>; export function foo_wrapper(peer: FluencePeer, config?: {ttl?: number}): Promise<string>;
export function foo_wrapper(...args: any) { export function foo_wrapper(...args: any) {
let peer: FluencePeer;
let config: any; let script = `
if (FluencePeer.isInstance(args[0])) { (xor
peer = args[0];
config = args[1];
} else {
peer = Fluence.getPeer();
config = args[0];
}
let request: RequestFlow;
const promise = new Promise<string>((resolve, reject) => {
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
(xor
(seq (seq
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
(xor (xor
@ -53,33 +38,26 @@ export function foo_wrapper(...args: any) {
) )
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
) )
`, `
) return callFunction(
.configHandler((h) => { args,
h.on('getDataSrv', '-relay-', () => { {
return peer.getStatus().relayPeerId; "functionName" : "foo_wrapper",
}); "returnType" : {
"tag" : "primitive"
h.onEvent('callbackSrv', 'response', (args) => { },
const [res] = args; "argDefs" : [
resolve(res); ],
}); "names" : {
h.onEvent('errorHandlingSrv', 'error', (args) => { "relay" : "-relay-",
const [err] = args; "getDataSrv" : "getDataSrv",
reject(err); "callbackSrv" : "callbackSrv",
}); "responseSrv" : "callbackSrv",
}) "responseFnName" : "response",
.handleScriptError(reject) "errorHandlingSrv" : "errorHandlingSrv",
.handleTimeout(() => { "errorFnName" : "error"
reject('Request timed out for foo_wrapper'); }
}) },
script
if (config && config.ttl) { )
r.withTTL(config.ttl)
}
request = r.build();
});
peer.internals.initiateFlow(request!);
return promise;
} }

View File

@ -8,11 +8,10 @@
*/ */
import { Fluence, FluencePeer } from '@fluencelabs/fluence'; import { Fluence, FluencePeer } from '@fluencelabs/fluence';
import { import {
ResultCodes, CallParams,
RequestFlow, callFunction,
RequestFlowBuilder, registerService,
CallParams } from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
function missingFields(obj: any, fields: string[]): string[] { function missingFields(obj: any, fields: string[]): string[] {
@ -41,173 +40,204 @@ export function registerNoop(peer: FluencePeer, serviceId: string, service: Noop
export function registerNoop(...args: any) { export function registerNoop(...args: any) {
let peer: FluencePeer; registerService(
let serviceId: any; args,
let service: any; {
if (FluencePeer.isInstance(args[0])) { "defaultServiceId" : "op",
peer = args[0]; "functions" : [
} else { {
peer = Fluence.getPeer(); "functionName" : "array",
} "argDefs" : [
{
if (typeof args[0] === 'string') { "name" : "a",
serviceId = args[0]; "argType" : {
} else if (typeof args[1] === 'string') { "tag" : "primitive"
serviceId = args[1]; }
} else {
serviceId = "op"
}
// Figuring out which overload is the service.
// If the first argument is not Fluence Peer and it is an object, then it can only be the service def
// If the first argument is peer, we are checking further. The second argument might either be
// an object, that it must be the service object
// or a string, which is the service id. In that case the service is the third argument
if (!(FluencePeer.isInstance(args[0])) && typeof args[0] === 'object') {
service = args[0];
} else if (typeof args[1] === 'object') {
service = args[1];
} else {
service = args[2];
}
const incorrectServiceDefinitions = missingFields(service, ['array', 'array_length', 'bytes_from_b58', 'bytes_to_b58', 'concat', 'concat_strings', 'identity', 'noop', 'sha256_string', 'string_from_b58', 'string_to_b58']);
if (!!incorrectServiceDefinitions.length) {
throw new Error("Error registering service Noop: missing functions: " + incorrectServiceDefinitions.map((d) => "'" + d + "'").join(", "))
}
peer.internals.callServiceHandler.use((req, resp, next) => {
if (req.serviceId !== serviceId) {
next();
return;
}
if (req.fnName === 'array') {
const callParams = {
...req.particleContext,
tetraplets: {
a: req.tetraplets[0],b: req.tetraplets[1],c: req.tetraplets[2],d: req.tetraplets[3]
}, },
}; {
resp.retCode = ResultCodes.success; "name" : "b",
resp.result = service.array(req.args[0], req.args[1].length === 0 ? null : req.args[1][0], req.args[2].length === 0 ? null : req.args[2][0], req.args[3].length === 0 ? null : req.args[3][0], callParams) "argType" : {
} "tag" : "optional"
}
if (req.fnName === 'array_length') {
const callParams = {
...req.particleContext,
tetraplets: {
array: req.tetraplets[0]
}, },
}; {
resp.retCode = ResultCodes.success; "name" : "c",
resp.result = service.array_length(req.args[0], callParams) "argType" : {
} "tag" : "optional"
}
if (req.fnName === 'bytes_from_b58') {
const callParams = {
...req.particleContext,
tetraplets: {
b: req.tetraplets[0]
}, },
}; {
resp.retCode = ResultCodes.success; "name" : "d",
resp.result = service.bytes_from_b58(req.args[0], callParams) "argType" : {
} "tag" : "optional"
}
if (req.fnName === 'bytes_to_b58') { }
const callParams = { ],
...req.particleContext, "returnType" : {
tetraplets: { "tag" : "primitive"
bs: req.tetraplets[0] }
},
{
"functionName" : "array_length",
"argDefs" : [
{
"name" : "array",
"argType" : {
"tag" : "primitive"
}
}
],
"returnType" : {
"tag" : "primitive"
}
},
{
"functionName" : "bytes_from_b58",
"argDefs" : [
{
"name" : "b",
"argType" : {
"tag" : "primitive"
}
}
],
"returnType" : {
"tag" : "primitive"
}
},
{
"functionName" : "bytes_to_b58",
"argDefs" : [
{
"name" : "bs",
"argType" : {
"tag" : "primitive"
}
}
],
"returnType" : {
"tag" : "primitive"
}
},
{
"functionName" : "concat",
"argDefs" : [
{
"name" : "a",
"argType" : {
"tag" : "primitive"
}
}, },
}; {
resp.retCode = ResultCodes.success; "name" : "b",
resp.result = service.bytes_to_b58(req.args[0], callParams) "argType" : {
} "tag" : "optional"
}
if (req.fnName === 'concat') {
const callParams = {
...req.particleContext,
tetraplets: {
a: req.tetraplets[0],b: req.tetraplets[1],c: req.tetraplets[2],d: req.tetraplets[3]
}, },
}; {
resp.retCode = ResultCodes.success; "name" : "c",
resp.result = service.concat(req.args[0], req.args[1].length === 0 ? null : req.args[1][0], req.args[2].length === 0 ? null : req.args[2][0], req.args[3].length === 0 ? null : req.args[3][0], callParams) "argType" : {
} "tag" : "optional"
}
if (req.fnName === 'concat_strings') {
const callParams = {
...req.particleContext,
tetraplets: {
a: req.tetraplets[0],b: req.tetraplets[1]
}, },
}; {
resp.retCode = ResultCodes.success; "name" : "d",
resp.result = service.concat_strings(req.args[0], req.args[1], callParams) "argType" : {
} "tag" : "optional"
}
if (req.fnName === 'identity') { }
const callParams = { ],
...req.particleContext, "returnType" : {
tetraplets: { "tag" : "primitive"
s: req.tetraplets[0] }
},
{
"functionName" : "concat_strings",
"argDefs" : [
{
"name" : "a",
"argType" : {
"tag" : "primitive"
}
}, },
}; {
resp.retCode = ResultCodes.success; "name" : "b",
"argType" : {
var respResult = service.identity(req.args[0].length === 0 ? null : req.args[0][0], callParams); "tag" : "primitive"
resp.result = respResult === null ? [] : [respResult] }
}
],
"returnType" : {
"tag" : "primitive"
}
},
{
"functionName" : "identity",
"argDefs" : [
{
"name" : "s",
"argType" : {
"tag" : "optional"
}
}
],
"returnType" : {
"tag" : "optional"
}
},
{
"functionName" : "noop",
"argDefs" : [
],
"returnType" : {
"tag" : "void"
}
},
{
"functionName" : "sha256_string",
"argDefs" : [
{
"name" : "s",
"argType" : {
"tag" : "primitive"
}
}
],
"returnType" : {
"tag" : "primitive"
}
},
{
"functionName" : "string_from_b58",
"argDefs" : [
{
"name" : "b",
"argType" : {
"tag" : "primitive"
}
}
],
"returnType" : {
"tag" : "primitive"
}
},
{
"functionName" : "string_to_b58",
"argDefs" : [
{
"name" : "s",
"argType" : {
"tag" : "primitive"
}
}
],
"returnType" : {
"tag" : "primitive"
}
} }
]
if (req.fnName === 'noop') { }
const callParams = { );
...req.particleContext,
tetraplets: {
},
};
resp.retCode = ResultCodes.success;
service.noop(callParams); resp.result = {}
}
if (req.fnName === 'sha256_string') {
const callParams = {
...req.particleContext,
tetraplets: {
s: req.tetraplets[0]
},
};
resp.retCode = ResultCodes.success;
resp.result = service.sha256_string(req.args[0], callParams)
}
if (req.fnName === 'string_from_b58') {
const callParams = {
...req.particleContext,
tetraplets: {
b: req.tetraplets[0]
},
};
resp.retCode = ResultCodes.success;
resp.result = service.string_from_b58(req.args[0], callParams)
}
if (req.fnName === 'string_to_b58') {
const callParams = {
...req.particleContext,
tetraplets: {
s: req.tetraplets[0]
},
};
resp.retCode = ResultCodes.success;
resp.result = service.string_to_b58(req.args[0], callParams)
}
next();
});
} }
@ -222,60 +252,22 @@ export function registerMyExportSrv(peer: FluencePeer, serviceId: string, servic
export function registerMyExportSrv(...args: any) { export function registerMyExportSrv(...args: any) {
let peer: FluencePeer; registerService(
let serviceId: any; args,
let service: any; {
if (FluencePeer.isInstance(args[0])) { "defaultServiceId" : "my_export_srv",
peer = args[0]; "functions" : [
} else { {
peer = Fluence.getPeer(); "functionName" : "another_str",
} "argDefs" : [
],
if (typeof args[0] === 'string') { "returnType" : {
serviceId = args[0]; "tag" : "primitive"
} else if (typeof args[1] === 'string') { }
serviceId = args[1];
} else {
serviceId = "my_export_srv"
}
// Figuring out which overload is the service.
// If the first argument is not Fluence Peer and it is an object, then it can only be the service def
// If the first argument is peer, we are checking further. The second argument might either be
// an object, that it must be the service object
// or a string, which is the service id. In that case the service is the third argument
if (!(FluencePeer.isInstance(args[0])) && typeof args[0] === 'object') {
service = args[0];
} else if (typeof args[1] === 'object') {
service = args[1];
} else {
service = args[2];
}
const incorrectServiceDefinitions = missingFields(service, ['another_str']);
if (!!incorrectServiceDefinitions.length) {
throw new Error("Error registering service MyExportSrv: missing functions: " + incorrectServiceDefinitions.map((d) => "'" + d + "'").join(", "))
}
peer.internals.callServiceHandler.use((req, resp, next) => {
if (req.serviceId !== serviceId) {
next();
return;
} }
]
if (req.fnName === 'another_str') { }
const callParams = { );
...req.particleContext,
tetraplets: {
},
};
resp.retCode = ResultCodes.success;
resp.result = service.another_str(callParams)
}
next();
});
} }
// Functions // Functions
@ -284,23 +276,9 @@ export function registerMyExportSrv(...args: any) {
export function some_str(config?: {ttl?: number}): Promise<string>; export function some_str(config?: {ttl?: number}): Promise<string>;
export function some_str(peer: FluencePeer, config?: {ttl?: number}): Promise<string>; export function some_str(peer: FluencePeer, config?: {ttl?: number}): Promise<string>;
export function some_str(...args: any) { export function some_str(...args: any) {
let peer: FluencePeer;
let config: any; let script = `
if (FluencePeer.isInstance(args[0])) { (xor
peer = args[0];
config = args[1];
} else {
peer = Fluence.getPeer();
config = args[0];
}
let request: RequestFlow;
const promise = new Promise<string>((resolve, reject) => {
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
(xor
(seq (seq
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
(xor (xor
@ -310,35 +288,28 @@ export function some_str(...args: any) {
) )
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
) )
`, `
) return callFunction(
.configHandler((h) => { args,
h.on('getDataSrv', '-relay-', () => { {
return peer.getStatus().relayPeerId; "functionName" : "some_str",
}); "returnType" : {
"tag" : "primitive"
h.onEvent('callbackSrv', 'response', (args) => { },
const [res] = args; "argDefs" : [
resolve(res); ],
}); "names" : {
h.onEvent('errorHandlingSrv', 'error', (args) => { "relay" : "-relay-",
const [err] = args; "getDataSrv" : "getDataSrv",
reject(err); "callbackSrv" : "callbackSrv",
}); "responseSrv" : "callbackSrv",
}) "responseFnName" : "response",
.handleScriptError(reject) "errorHandlingSrv" : "errorHandlingSrv",
.handleTimeout(() => { "errorFnName" : "error"
reject('Request timed out for some_str'); }
}) },
script
if (config && config.ttl) { )
r.withTTL(config.ttl)
}
request = r.build();
});
peer.internals.initiateFlow(request!);
return promise;
} }
@ -346,23 +317,9 @@ export function some_str(...args: any) {
export function some_string(config?: {ttl?: number}): Promise<string>; export function some_string(config?: {ttl?: number}): Promise<string>;
export function some_string(peer: FluencePeer, config?: {ttl?: number}): Promise<string>; export function some_string(peer: FluencePeer, config?: {ttl?: number}): Promise<string>;
export function some_string(...args: any) { export function some_string(...args: any) {
let peer: FluencePeer;
let config: any; let script = `
if (FluencePeer.isInstance(args[0])) { (xor
peer = args[0];
config = args[1];
} else {
peer = Fluence.getPeer();
config = args[0];
}
let request: RequestFlow;
const promise = new Promise<string>((resolve, reject) => {
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
(xor
(seq (seq
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
(xor (xor
@ -372,35 +329,28 @@ export function some_string(...args: any) {
) )
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
) )
`, `
) return callFunction(
.configHandler((h) => { args,
h.on('getDataSrv', '-relay-', () => { {
return peer.getStatus().relayPeerId; "functionName" : "some_string",
}); "returnType" : {
"tag" : "primitive"
h.onEvent('callbackSrv', 'response', (args) => { },
const [res] = args; "argDefs" : [
resolve(res); ],
}); "names" : {
h.onEvent('errorHandlingSrv', 'error', (args) => { "relay" : "-relay-",
const [err] = args; "getDataSrv" : "getDataSrv",
reject(err); "callbackSrv" : "callbackSrv",
}); "responseSrv" : "callbackSrv",
}) "responseFnName" : "response",
.handleScriptError(reject) "errorHandlingSrv" : "errorHandlingSrv",
.handleTimeout(() => { "errorFnName" : "error"
reject('Request timed out for some_string'); }
}) },
script
if (config && config.ttl) { )
r.withTTL(config.ttl)
}
request = r.build();
});
peer.internals.initiateFlow(request!);
return promise;
} }
@ -408,23 +358,9 @@ export function some_string(...args: any) {
export function decl_foo(config?: {ttl?: number}): Promise<string>; export function decl_foo(config?: {ttl?: number}): Promise<string>;
export function decl_foo(peer: FluencePeer, config?: {ttl?: number}): Promise<string>; export function decl_foo(peer: FluencePeer, config?: {ttl?: number}): Promise<string>;
export function decl_foo(...args: any) { export function decl_foo(...args: any) {
let peer: FluencePeer;
let config: any; let script = `
if (FluencePeer.isInstance(args[0])) { (xor
peer = args[0];
config = args[1];
} else {
peer = Fluence.getPeer();
config = args[0];
}
let request: RequestFlow;
const promise = new Promise<string>((resolve, reject) => {
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
(xor
(seq (seq
(seq (seq
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
@ -437,35 +373,28 @@ export function decl_foo(...args: any) {
) )
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
) )
`, `
) return callFunction(
.configHandler((h) => { args,
h.on('getDataSrv', '-relay-', () => { {
return peer.getStatus().relayPeerId; "functionName" : "decl_foo",
}); "returnType" : {
"tag" : "primitive"
h.onEvent('callbackSrv', 'response', (args) => { },
const [res] = args; "argDefs" : [
resolve(res); ],
}); "names" : {
h.onEvent('errorHandlingSrv', 'error', (args) => { "relay" : "-relay-",
const [err] = args; "getDataSrv" : "getDataSrv",
reject(err); "callbackSrv" : "callbackSrv",
}); "responseSrv" : "callbackSrv",
}) "responseFnName" : "response",
.handleScriptError(reject) "errorHandlingSrv" : "errorHandlingSrv",
.handleTimeout(() => { "errorFnName" : "error"
reject('Request timed out for decl_foo'); }
}) },
script
if (config && config.ttl) { )
r.withTTL(config.ttl)
}
request = r.build();
});
peer.internals.initiateFlow(request!);
return promise;
} }
@ -473,23 +402,9 @@ export function decl_foo(...args: any) {
export function decl_bar(config?: {ttl?: number}): Promise<string>; export function decl_bar(config?: {ttl?: number}): Promise<string>;
export function decl_bar(peer: FluencePeer, config?: {ttl?: number}): Promise<string>; export function decl_bar(peer: FluencePeer, config?: {ttl?: number}): Promise<string>;
export function decl_bar(...args: any) { export function decl_bar(...args: any) {
let peer: FluencePeer;
let config: any; let script = `
if (FluencePeer.isInstance(args[0])) { (xor
peer = args[0];
config = args[1];
} else {
peer = Fluence.getPeer();
config = args[0];
}
let request: RequestFlow;
const promise = new Promise<string>((resolve, reject) => {
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
(xor
(seq (seq
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
(xor (xor
@ -499,35 +414,28 @@ export function decl_bar(...args: any) {
) )
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
) )
`, `
) return callFunction(
.configHandler((h) => { args,
h.on('getDataSrv', '-relay-', () => { {
return peer.getStatus().relayPeerId; "functionName" : "decl_bar",
}); "returnType" : {
"tag" : "primitive"
h.onEvent('callbackSrv', 'response', (args) => { },
const [res] = args; "argDefs" : [
resolve(res); ],
}); "names" : {
h.onEvent('errorHandlingSrv', 'error', (args) => { "relay" : "-relay-",
const [err] = args; "getDataSrv" : "getDataSrv",
reject(err); "callbackSrv" : "callbackSrv",
}); "responseSrv" : "callbackSrv",
}) "responseFnName" : "response",
.handleScriptError(reject) "errorHandlingSrv" : "errorHandlingSrv",
.handleTimeout(() => { "errorFnName" : "error"
reject('Request timed out for decl_bar'); }
}) },
script
if (config && config.ttl) { )
r.withTTL(config.ttl)
}
request = r.build();
});
peer.internals.initiateFlow(request!);
return promise;
} }
@ -535,23 +443,9 @@ export function decl_bar(...args: any) {
export function some_random_func(config?: {ttl?: number}): Promise<string>; export function some_random_func(config?: {ttl?: number}): Promise<string>;
export function some_random_func(peer: FluencePeer, config?: {ttl?: number}): Promise<string>; export function some_random_func(peer: FluencePeer, config?: {ttl?: number}): Promise<string>;
export function some_random_func(...args: any) { export function some_random_func(...args: any) {
let peer: FluencePeer;
let config: any; let script = `
if (FluencePeer.isInstance(args[0])) { (xor
peer = args[0];
config = args[1];
} else {
peer = Fluence.getPeer();
config = args[0];
}
let request: RequestFlow;
const promise = new Promise<string>((resolve, reject) => {
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
(xor
(seq (seq
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
(xor (xor
@ -561,33 +455,26 @@ export function some_random_func(...args: any) {
) )
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
) )
`, `
) return callFunction(
.configHandler((h) => { args,
h.on('getDataSrv', '-relay-', () => { {
return peer.getStatus().relayPeerId; "functionName" : "some_random_func",
}); "returnType" : {
"tag" : "primitive"
h.onEvent('callbackSrv', 'response', (args) => { },
const [res] = args; "argDefs" : [
resolve(res); ],
}); "names" : {
h.onEvent('errorHandlingSrv', 'error', (args) => { "relay" : "-relay-",
const [err] = args; "getDataSrv" : "getDataSrv",
reject(err); "callbackSrv" : "callbackSrv",
}); "responseSrv" : "callbackSrv",
}) "responseFnName" : "response",
.handleScriptError(reject) "errorHandlingSrv" : "errorHandlingSrv",
.handleTimeout(() => { "errorFnName" : "error"
reject('Request timed out for some_random_func'); }
}) },
script
if (config && config.ttl) { )
r.withTTL(config.ttl)
}
request = r.build();
});
peer.internals.initiateFlow(request!);
return promise;
} }

View File

@ -8,11 +8,10 @@
*/ */
import { Fluence, FluencePeer } from '@fluencelabs/fluence'; import { Fluence, FluencePeer } from '@fluencelabs/fluence';
import { import {
ResultCodes, CallParams,
RequestFlow, callFunction,
RequestFlowBuilder, registerService,
CallParams } from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
function missingFields(obj: any, fields: string[]): string[] { function missingFields(obj: any, fields: string[]): string[] {
@ -31,60 +30,34 @@ export function registerStringService(peer: FluencePeer, serviceId: string, serv
export function registerStringService(...args: any) { export function registerStringService(...args: any) {
let peer: FluencePeer; registerService(
let serviceId: any; args,
let service: any; {
if (FluencePeer.isInstance(args[0])) { "defaultServiceId" : "string_service",
peer = args[0]; "functions" : [
} else { {
peer = Fluence.getPeer(); "functionName" : "concat",
} "argDefs" : [
{
if (typeof args[0] === 'string') { "name" : "a",
serviceId = args[0]; "argType" : {
} else if (typeof args[1] === 'string') { "tag" : "primitive"
serviceId = args[1]; }
} else {
serviceId = "string_service"
}
// Figuring out which overload is the service.
// If the first argument is not Fluence Peer and it is an object, then it can only be the service def
// If the first argument is peer, we are checking further. The second argument might either be
// an object, that it must be the service object
// or a string, which is the service id. In that case the service is the third argument
if (!(FluencePeer.isInstance(args[0])) && typeof args[0] === 'object') {
service = args[0];
} else if (typeof args[1] === 'object') {
service = args[1];
} else {
service = args[2];
}
const incorrectServiceDefinitions = missingFields(service, ['concat']);
if (!!incorrectServiceDefinitions.length) {
throw new Error("Error registering service StringService: missing functions: " + incorrectServiceDefinitions.map((d) => "'" + d + "'").join(", "))
}
peer.internals.callServiceHandler.use((req, resp, next) => {
if (req.serviceId !== serviceId) {
next();
return;
}
if (req.fnName === 'concat') {
const callParams = {
...req.particleContext,
tetraplets: {
a: req.tetraplets[0],b: req.tetraplets[1]
}, },
}; {
resp.retCode = ResultCodes.success; "name" : "b",
resp.result = service.concat(req.args[0], req.args[1], callParams) "argType" : {
"tag" : "primitive"
}
}
],
"returnType" : {
"tag" : "primitive"
}
} }
]
next(); }
}); );
} }
// Functions // Functions
@ -93,23 +66,9 @@ export function registerStringService(...args: any) {
export function concat_foobars(config?: {ttl?: number}): Promise<string>; export function concat_foobars(config?: {ttl?: number}): Promise<string>;
export function concat_foobars(peer: FluencePeer, config?: {ttl?: number}): Promise<string>; export function concat_foobars(peer: FluencePeer, config?: {ttl?: number}): Promise<string>;
export function concat_foobars(...args: any) { export function concat_foobars(...args: any) {
let peer: FluencePeer;
let config: any; let script = `
if (FluencePeer.isInstance(args[0])) { (xor
peer = args[0];
config = args[1];
} else {
peer = Fluence.getPeer();
config = args[0];
}
let request: RequestFlow;
const promise = new Promise<string>((resolve, reject) => {
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
(xor
(seq (seq
(seq (seq
(seq (seq
@ -140,33 +99,26 @@ export function concat_foobars(...args: any) {
) )
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
) )
`, `
) return callFunction(
.configHandler((h) => { args,
h.on('getDataSrv', '-relay-', () => { {
return peer.getStatus().relayPeerId; "functionName" : "concat_foobars",
}); "returnType" : {
"tag" : "primitive"
h.onEvent('callbackSrv', 'response', (args) => { },
const [res] = args; "argDefs" : [
resolve(res); ],
}); "names" : {
h.onEvent('errorHandlingSrv', 'error', (args) => { "relay" : "-relay-",
const [err] = args; "getDataSrv" : "getDataSrv",
reject(err); "callbackSrv" : "callbackSrv",
}); "responseSrv" : "callbackSrv",
}) "responseFnName" : "response",
.handleScriptError(reject) "errorHandlingSrv" : "errorHandlingSrv",
.handleTimeout(() => { "errorFnName" : "error"
reject('Request timed out for concat_foobars'); }
}) },
script
if (config && config.ttl) { )
r.withTTL(config.ttl)
}
request = r.build();
});
peer.internals.initiateFlow(request!);
return promise;
} }

View File

@ -8,11 +8,10 @@
*/ */
import { Fluence, FluencePeer } from '@fluencelabs/fluence'; import { Fluence, FluencePeer } from '@fluencelabs/fluence';
import { import {
ResultCodes, CallParams,
RequestFlow, callFunction,
RequestFlowBuilder, registerService,
CallParams } from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
function missingFields(obj: any, fields: string[]): string[] { function missingFields(obj: any, fields: string[]): string[] {
@ -31,60 +30,28 @@ export function registerSubService(peer: FluencePeer, serviceId: string, service
export function registerSubService(...args: any) { export function registerSubService(...args: any) {
let peer: FluencePeer; registerService(
let serviceId: any; args,
let service: any; {
if (FluencePeer.isInstance(args[0])) { "defaultServiceId" : "sub_service",
peer = args[0]; "functions" : [
} else { {
peer = Fluence.getPeer(); "functionName" : "sub",
} "argDefs" : [
{
if (typeof args[0] === 'string') { "name" : "s",
serviceId = args[0]; "argType" : {
} else if (typeof args[1] === 'string') { "tag" : "primitive"
serviceId = args[1]; }
} else { }
serviceId = "sub_service" ],
} "returnType" : {
"tag" : "primitive"
// Figuring out which overload is the service. }
// If the first argument is not Fluence Peer and it is an object, then it can only be the service def
// If the first argument is peer, we are checking further. The second argument might either be
// an object, that it must be the service object
// or a string, which is the service id. In that case the service is the third argument
if (!(FluencePeer.isInstance(args[0])) && typeof args[0] === 'object') {
service = args[0];
} else if (typeof args[1] === 'object') {
service = args[1];
} else {
service = args[2];
}
const incorrectServiceDefinitions = missingFields(service, ['sub']);
if (!!incorrectServiceDefinitions.length) {
throw new Error("Error registering service SubService: missing functions: " + incorrectServiceDefinitions.map((d) => "'" + d + "'").join(", "))
}
peer.internals.callServiceHandler.use((req, resp, next) => {
if (req.serviceId !== serviceId) {
next();
return;
} }
]
if (req.fnName === 'sub') { }
const callParams = { );
...req.particleContext,
tetraplets: {
s: req.tetraplets[0]
},
};
resp.retCode = ResultCodes.success;
resp.result = service.sub(req.args[0], callParams)
}
next();
});
} }
// Functions // Functions
@ -93,23 +60,9 @@ export type SubImportResult = { one: string; two: number; }
export function subImport(config?: {ttl?: number}): Promise<SubImportResult>; export function subImport(config?: {ttl?: number}): Promise<SubImportResult>;
export function subImport(peer: FluencePeer, config?: {ttl?: number}): Promise<SubImportResult>; export function subImport(peer: FluencePeer, config?: {ttl?: number}): Promise<SubImportResult>;
export function subImport(...args: any) { export function subImport(...args: any) {
let peer: FluencePeer;
let config: any; let script = `
if (FluencePeer.isInstance(args[0])) { (xor
peer = args[0];
config = args[1];
} else {
peer = Fluence.getPeer();
config = args[0];
}
let request: RequestFlow;
const promise = new Promise<SubImportResult>((resolve, reject) => {
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
(xor
(seq (seq
(seq (seq
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
@ -122,33 +75,26 @@ export function subImport(...args: any) {
) )
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
) )
`, `
) return callFunction(
.configHandler((h) => { args,
h.on('getDataSrv', '-relay-', () => { {
return peer.getStatus().relayPeerId; "functionName" : "subImport",
}); "returnType" : {
"tag" : "primitive"
h.onEvent('callbackSrv', 'response', (args) => { },
const [res] = args; "argDefs" : [
resolve(res); ],
}); "names" : {
h.onEvent('errorHandlingSrv', 'error', (args) => { "relay" : "-relay-",
const [err] = args; "getDataSrv" : "getDataSrv",
reject(err); "callbackSrv" : "callbackSrv",
}); "responseSrv" : "callbackSrv",
}) "responseFnName" : "response",
.handleScriptError(reject) "errorHandlingSrv" : "errorHandlingSrv",
.handleTimeout(() => { "errorFnName" : "error"
reject('Request timed out for subImport'); }
}) },
script
if (config && config.ttl) { )
r.withTTL(config.ttl)
}
request = r.build();
});
peer.internals.initiateFlow(request!);
return promise;
} }

View File

@ -8,11 +8,10 @@
*/ */
import { Fluence, FluencePeer } from '@fluencelabs/fluence'; import { Fluence, FluencePeer } from '@fluencelabs/fluence';
import { import {
ResultCodes, CallParams,
RequestFlow, callFunction,
RequestFlowBuilder, registerService,
CallParams } from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
function missingFields(obj: any, fields: string[]): string[] { function missingFields(obj: any, fields: string[]): string[] {
@ -31,60 +30,28 @@ export function registerGetStr(peer: FluencePeer, serviceId: string, service: Ge
export function registerGetStr(...args: any) { export function registerGetStr(...args: any) {
let peer: FluencePeer; registerService(
let serviceId: any; args,
let service: any; {
if (FluencePeer.isInstance(args[0])) { "defaultServiceId" : "multiret-test",
peer = args[0]; "functions" : [
} else { {
peer = Fluence.getPeer(); "functionName" : "retStr",
} "argDefs" : [
{
if (typeof args[0] === 'string') { "name" : "arg0",
serviceId = args[0]; "argType" : {
} else if (typeof args[1] === 'string') { "tag" : "primitive"
serviceId = args[1]; }
} else { }
serviceId = "multiret-test" ],
} "returnType" : {
"tag" : "primitive"
// Figuring out which overload is the service. }
// If the first argument is not Fluence Peer and it is an object, then it can only be the service def
// If the first argument is peer, we are checking further. The second argument might either be
// an object, that it must be the service object
// or a string, which is the service id. In that case the service is the third argument
if (!(FluencePeer.isInstance(args[0])) && typeof args[0] === 'object') {
service = args[0];
} else if (typeof args[1] === 'object') {
service = args[1];
} else {
service = args[2];
}
const incorrectServiceDefinitions = missingFields(service, ['retStr']);
if (!!incorrectServiceDefinitions.length) {
throw new Error("Error registering service GetStr: missing functions: " + incorrectServiceDefinitions.map((d) => "'" + d + "'").join(", "))
}
peer.internals.callServiceHandler.use((req, resp, next) => {
if (req.serviceId !== serviceId) {
next();
return;
} }
]
if (req.fnName === 'retStr') { }
const callParams = { );
...req.particleContext,
tetraplets: {
arg0: req.tetraplets[0]
},
};
resp.retCode = ResultCodes.success;
resp.result = service.retStr(req.args[0], callParams)
}
next();
});
} }
@ -99,60 +66,22 @@ export function registerGetNum(peer: FluencePeer, serviceId: string, service: Ge
export function registerGetNum(...args: any) { export function registerGetNum(...args: any) {
let peer: FluencePeer; registerService(
let serviceId: any; args,
let service: any; {
if (FluencePeer.isInstance(args[0])) { "defaultServiceId" : "multiret-num",
peer = args[0]; "functions" : [
} else { {
peer = Fluence.getPeer(); "functionName" : "retNum",
} "argDefs" : [
],
if (typeof args[0] === 'string') { "returnType" : {
serviceId = args[0]; "tag" : "primitive"
} else if (typeof args[1] === 'string') { }
serviceId = args[1];
} else {
serviceId = "multiret-num"
}
// Figuring out which overload is the service.
// If the first argument is not Fluence Peer and it is an object, then it can only be the service def
// If the first argument is peer, we are checking further. The second argument might either be
// an object, that it must be the service object
// or a string, which is the service id. In that case the service is the third argument
if (!(FluencePeer.isInstance(args[0])) && typeof args[0] === 'object') {
service = args[0];
} else if (typeof args[1] === 'object') {
service = args[1];
} else {
service = args[2];
}
const incorrectServiceDefinitions = missingFields(service, ['retNum']);
if (!!incorrectServiceDefinitions.length) {
throw new Error("Error registering service GetNum: missing functions: " + incorrectServiceDefinitions.map((d) => "'" + d + "'").join(", "))
}
peer.internals.callServiceHandler.use((req, resp, next) => {
if (req.serviceId !== serviceId) {
next();
return;
} }
]
if (req.fnName === 'retNum') { }
const callParams = { );
...req.particleContext,
tetraplets: {
},
};
resp.retCode = ResultCodes.success;
resp.result = service.retNum(callParams)
}
next();
});
} }
// Functions // Functions
@ -161,23 +90,9 @@ export type TupleFuncResult = [string, number]
export function tupleFunc(config?: {ttl?: number}): Promise<TupleFuncResult>; export function tupleFunc(config?: {ttl?: number}): Promise<TupleFuncResult>;
export function tupleFunc(peer: FluencePeer, config?: {ttl?: number}): Promise<TupleFuncResult>; export function tupleFunc(peer: FluencePeer, config?: {ttl?: number}): Promise<TupleFuncResult>;
export function tupleFunc(...args: any) { export function tupleFunc(...args: any) {
let peer: FluencePeer;
let config: any; let script = `
if (FluencePeer.isInstance(args[0])) { (xor
peer = args[0];
config = args[1];
} else {
peer = Fluence.getPeer();
config = args[0];
}
let request: RequestFlow;
const promise = new Promise<TupleFuncResult>((resolve, reject) => {
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
(xor
(seq (seq
(seq (seq
(seq (seq
@ -193,36 +108,36 @@ export function tupleFunc(...args: any) {
) )
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
) )
`, `
) return callFunction(
.configHandler((h) => { args,
h.on('getDataSrv', '-relay-', () => { {
return peer.getStatus().relayPeerId; "functionName" : "tupleFunc",
}); "returnType" : {
"tag" : "multiReturn",
h.onEvent('callbackSrv', 'response', (args) => { "returnItems" : [
let opt: any = args; {
"tag" : "primitive"
return resolve(opt); },
}); {
h.onEvent('errorHandlingSrv', 'error', (args) => { "tag" : "primitive"
const [err] = args; }
reject(err); ]
}); },
}) "argDefs" : [
.handleScriptError(reject) ],
.handleTimeout(() => { "names" : {
reject('Request timed out for tupleFunc'); "relay" : "-relay-",
}) "getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
if (config && config.ttl) { "responseSrv" : "callbackSrv",
r.withTTL(config.ttl) "responseFnName" : "response",
} "errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
request = r.build(); }
}); },
peer.internals.initiateFlow(request!); script
return promise; )
} }
@ -230,28 +145,9 @@ export type MultiReturnFuncResult = [string[], number, string, number[], string
export function multiReturnFunc(somethingToReturn: number[], smthOption: string | null, config?: {ttl?: number}): Promise<MultiReturnFuncResult>; export function multiReturnFunc(somethingToReturn: number[], smthOption: string | null, config?: {ttl?: number}): Promise<MultiReturnFuncResult>;
export function multiReturnFunc(peer: FluencePeer, somethingToReturn: number[], smthOption: string | null, config?: {ttl?: number}): Promise<MultiReturnFuncResult>; export function multiReturnFunc(peer: FluencePeer, somethingToReturn: number[], smthOption: string | null, config?: {ttl?: number}): Promise<MultiReturnFuncResult>;
export function multiReturnFunc(...args: any) { export function multiReturnFunc(...args: any) {
let peer: FluencePeer;
let somethingToReturn: any;
let smthOption: any;
let config: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
somethingToReturn = args[1];
smthOption = args[2];
config = args[3];
} else {
peer = Fluence.getPeer();
somethingToReturn = args[0];
smthOption = args[1];
config = args[2];
}
let request: RequestFlow; let script = `
const promise = new Promise<MultiReturnFuncResult>((resolve, reject) => { (xor
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
(xor
(seq (seq
(seq (seq
(seq (seq
@ -282,38 +178,58 @@ export function multiReturnFunc(...args: any) {
) )
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
) )
`, `
) return callFunction(
.configHandler((h) => { args,
h.on('getDataSrv', '-relay-', () => { {
return peer.getStatus().relayPeerId; "functionName" : "multiReturnFunc",
}); "returnType" : {
h.on('getDataSrv', 'somethingToReturn', () => {return somethingToReturn;}); "tag" : "multiReturn",
h.on('getDataSrv', 'smthOption', () => {return smthOption === null ? [] : [smthOption];}); "returnItems" : [
h.onEvent('callbackSrv', 'response', (args) => { {
let opt: any = args; "tag" : "primitive"
if( Array.isArray(opt[4])) { },
if (opt[4].length === 0) { opt[4] = null; } {
else {opt[4] = opt[4][0]; } "tag" : "primitive"
} },
return resolve(opt); {
}); "tag" : "primitive"
h.onEvent('errorHandlingSrv', 'error', (args) => { },
const [err] = args; {
reject(err); "tag" : "primitive"
}); },
}) {
.handleScriptError(reject) "tag" : "optional"
.handleTimeout(() => { },
reject('Request timed out for multiReturnFunc'); {
}) "tag" : "primitive"
}
if (config && config.ttl) { ]
r.withTTL(config.ttl) },
} "argDefs" : [
{
request = r.build(); "name" : "somethingToReturn",
}); "argType" : {
peer.internals.initiateFlow(request!); "tag" : "primitive"
return promise; }
},
{
"name" : "smthOption",
"argType" : {
"tag" : "optional"
}
}
],
"names" : {
"relay" : "-relay-",
"getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
"responseFnName" : "response",
"errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
}
},
script
)
} }

View File

@ -8,11 +8,10 @@
*/ */
import { Fluence, FluencePeer } from '@fluencelabs/fluence'; import { Fluence, FluencePeer } from '@fluencelabs/fluence';
import { import {
ResultCodes, CallParams,
RequestFlow, callFunction,
RequestFlowBuilder, registerService,
CallParams } from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
function missingFields(obj: any, fields: string[]): string[] { function missingFields(obj: any, fields: string[]): string[] {
@ -31,60 +30,28 @@ export function registerOpH(peer: FluencePeer, serviceId: string, service: OpHDe
export function registerOpH(...args: any) { export function registerOpH(...args: any) {
let peer: FluencePeer; registerService(
let serviceId: any; args,
let service: any; {
if (FluencePeer.isInstance(args[0])) { "defaultServiceId" : "opa",
peer = args[0]; "functions" : [
} else { {
peer = Fluence.getPeer(); "functionName" : "identity",
} "argDefs" : [
{
if (typeof args[0] === 'string') { "name" : "s",
serviceId = args[0]; "argType" : {
} else if (typeof args[1] === 'string') { "tag" : "primitive"
serviceId = args[1]; }
} else { }
serviceId = "opa" ],
} "returnType" : {
"tag" : "primitive"
// Figuring out which overload is the service. }
// If the first argument is not Fluence Peer and it is an object, then it can only be the service def
// If the first argument is peer, we are checking further. The second argument might either be
// an object, that it must be the service object
// or a string, which is the service id. In that case the service is the third argument
if (!(FluencePeer.isInstance(args[0])) && typeof args[0] === 'object') {
service = args[0];
} else if (typeof args[1] === 'object') {
service = args[1];
} else {
service = args[2];
}
const incorrectServiceDefinitions = missingFields(service, ['identity']);
if (!!incorrectServiceDefinitions.length) {
throw new Error("Error registering service OpH: missing functions: " + incorrectServiceDefinitions.map((d) => "'" + d + "'").join(", "))
}
peer.internals.callServiceHandler.use((req, resp, next) => {
if (req.serviceId !== serviceId) {
next();
return;
} }
]
if (req.fnName === 'identity') { }
const callParams = { );
...req.particleContext,
tetraplets: {
s: req.tetraplets[0]
},
};
resp.retCode = ResultCodes.success;
resp.result = service.identity(req.args[0], callParams)
}
next();
});
} }
// Functions // Functions
@ -93,25 +60,9 @@ export function registerOpH(...args: any) {
export function a(b: string, config?: {ttl?: number}): Promise<string>; export function a(b: string, config?: {ttl?: number}): Promise<string>;
export function a(peer: FluencePeer, b: string, config?: {ttl?: number}): Promise<string>; export function a(peer: FluencePeer, b: string, config?: {ttl?: number}): Promise<string>;
export function a(...args: any) { export function a(...args: any) {
let peer: FluencePeer;
let b: any;
let config: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
b = args[1];
config = args[2];
} else {
peer = Fluence.getPeer();
b = args[0];
config = args[1];
}
let request: RequestFlow; let script = `
const promise = new Promise<string>((resolve, reject) => { (xor
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
(xor
(seq (seq
(seq (seq
(seq (seq
@ -127,35 +78,34 @@ export function a(...args: any) {
) )
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
) )
`, `
) return callFunction(
.configHandler((h) => { args,
h.on('getDataSrv', '-relay-', () => { {
return peer.getStatus().relayPeerId; "functionName" : "a",
}); "returnType" : {
h.on('getDataSrv', 'b', () => {return b;}); "tag" : "primitive"
h.onEvent('callbackSrv', 'response', (args) => { },
const [res] = args; "argDefs" : [
resolve(res); {
}); "name" : "b",
h.onEvent('errorHandlingSrv', 'error', (args) => { "argType" : {
const [err] = args; "tag" : "primitive"
reject(err); }
}); }
}) ],
.handleScriptError(reject) "names" : {
.handleTimeout(() => { "relay" : "-relay-",
reject('Request timed out for a'); "getDataSrv" : "getDataSrv",
}) "callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
if (config && config.ttl) { "responseFnName" : "response",
r.withTTL(config.ttl) "errorHandlingSrv" : "errorHandlingSrv",
} "errorFnName" : "error"
}
request = r.build(); },
}); script
peer.internals.initiateFlow(request!); )
return promise;
} }
@ -163,25 +113,9 @@ export function a(...args: any) {
export function d(e: string, config?: {ttl?: number}): Promise<string>; export function d(e: string, config?: {ttl?: number}): Promise<string>;
export function d(peer: FluencePeer, e: string, config?: {ttl?: number}): Promise<string>; export function d(peer: FluencePeer, e: string, config?: {ttl?: number}): Promise<string>;
export function d(...args: any) { export function d(...args: any) {
let peer: FluencePeer;
let e: any;
let config: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
e = args[1];
config = args[2];
} else {
peer = Fluence.getPeer();
e = args[0];
config = args[1];
}
let request: RequestFlow; let script = `
const promise = new Promise<string>((resolve, reject) => { (xor
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
(xor
(seq (seq
(seq (seq
(seq (seq
@ -197,33 +131,32 @@ export function d(...args: any) {
) )
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
) )
`, `
) return callFunction(
.configHandler((h) => { args,
h.on('getDataSrv', '-relay-', () => { {
return peer.getStatus().relayPeerId; "functionName" : "d",
}); "returnType" : {
h.on('getDataSrv', 'e', () => {return e;}); "tag" : "primitive"
h.onEvent('callbackSrv', 'response', (args) => { },
const [res] = args; "argDefs" : [
resolve(res); {
}); "name" : "e",
h.onEvent('errorHandlingSrv', 'error', (args) => { "argType" : {
const [err] = args; "tag" : "primitive"
reject(err); }
}); }
}) ],
.handleScriptError(reject) "names" : {
.handleTimeout(() => { "relay" : "-relay-",
reject('Request timed out for d'); "getDataSrv" : "getDataSrv",
}) "callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
if (config && config.ttl) { "responseFnName" : "response",
r.withTTL(config.ttl) "errorHandlingSrv" : "errorHandlingSrv",
} "errorFnName" : "error"
}
request = r.build(); },
}); script
peer.internals.initiateFlow(request!); )
return promise;
} }

View File

@ -8,11 +8,10 @@
*/ */
import { Fluence, FluencePeer } from '@fluencelabs/fluence'; import { Fluence, FluencePeer } from '@fluencelabs/fluence';
import { import {
ResultCodes, CallParams,
RequestFlow, callFunction,
RequestFlowBuilder, registerService,
CallParams } from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
function missingFields(obj: any, fields: string[]): string[] { function missingFields(obj: any, fields: string[]): string[] {
@ -31,60 +30,28 @@ export function registerServiceWithDefaultId(peer: FluencePeer, serviceId: strin
export function registerServiceWithDefaultId(...args: any) { export function registerServiceWithDefaultId(...args: any) {
let peer: FluencePeer; registerService(
let serviceId: any; args,
let service: any; {
if (FluencePeer.isInstance(args[0])) { "defaultServiceId" : "defaultId",
peer = args[0]; "functions" : [
} else { {
peer = Fluence.getPeer(); "functionName" : "hello",
} "argDefs" : [
{
if (typeof args[0] === 'string') { "name" : "s",
serviceId = args[0]; "argType" : {
} else if (typeof args[1] === 'string') { "tag" : "primitive"
serviceId = args[1]; }
} else { }
serviceId = "defaultId" ],
} "returnType" : {
"tag" : "void"
// Figuring out which overload is the service. }
// If the first argument is not Fluence Peer and it is an object, then it can only be the service def
// If the first argument is peer, we are checking further. The second argument might either be
// an object, that it must be the service object
// or a string, which is the service id. In that case the service is the third argument
if (!(FluencePeer.isInstance(args[0])) && typeof args[0] === 'object') {
service = args[0];
} else if (typeof args[1] === 'object') {
service = args[1];
} else {
service = args[2];
}
const incorrectServiceDefinitions = missingFields(service, ['hello']);
if (!!incorrectServiceDefinitions.length) {
throw new Error("Error registering service ServiceWithDefaultId: missing functions: " + incorrectServiceDefinitions.map((d) => "'" + d + "'").join(", "))
}
peer.internals.callServiceHandler.use((req, resp, next) => {
if (req.serviceId !== serviceId) {
next();
return;
} }
]
if (req.fnName === 'hello') { }
const callParams = { );
...req.particleContext,
tetraplets: {
s: req.tetraplets[0]
},
};
resp.retCode = ResultCodes.success;
service.hello(req.args[0], callParams); resp.result = {}
}
next();
});
} }
@ -97,58 +64,28 @@ export function registerServiceWithOUTDefaultId(peer: FluencePeer, serviceId: st
export function registerServiceWithOUTDefaultId(...args: any) { export function registerServiceWithOUTDefaultId(...args: any) {
let peer: FluencePeer; registerService(
let serviceId: any; args,
let service: any; {
if (FluencePeer.isInstance(args[0])) { "defaultServiceId" : null,
peer = args[0]; "functions" : [
} else { {
peer = Fluence.getPeer(); "functionName" : "hello",
} "argDefs" : [
{
if (typeof args[0] === 'string') { "name" : "s",
serviceId = args[0]; "argType" : {
} else if (typeof args[1] === 'string') { "tag" : "primitive"
serviceId = args[1]; }
} }
],
// Figuring out which overload is the service. "returnType" : {
// If the first argument is not Fluence Peer and it is an object, then it can only be the service def "tag" : "void"
// If the first argument is peer, we are checking further. The second argument might either be }
// an object, that it must be the service object
// or a string, which is the service id. In that case the service is the third argument
if (!(FluencePeer.isInstance(args[0])) && typeof args[0] === 'object') {
service = args[0];
} else if (typeof args[1] === 'object') {
service = args[1];
} else {
service = args[2];
}
const incorrectServiceDefinitions = missingFields(service, ['hello']);
if (!!incorrectServiceDefinitions.length) {
throw new Error("Error registering service ServiceWithOUTDefaultId: missing functions: " + incorrectServiceDefinitions.map((d) => "'" + d + "'").join(", "))
}
peer.internals.callServiceHandler.use((req, resp, next) => {
if (req.serviceId !== serviceId) {
next();
return;
} }
]
if (req.fnName === 'hello') { }
const callParams = { );
...req.particleContext,
tetraplets: {
s: req.tetraplets[0]
},
};
resp.retCode = ResultCodes.success;
service.hello(req.args[0], callParams); resp.result = {}
}
next();
});
} }
@ -165,102 +102,108 @@ export function registerMoreMembers(peer: FluencePeer, serviceId: string, servic
export function registerMoreMembers(...args: any) { export function registerMoreMembers(...args: any) {
let peer: FluencePeer; registerService(
let serviceId: any; args,
let service: any; {
if (FluencePeer.isInstance(args[0])) { "defaultServiceId" : null,
peer = args[0]; "functions" : [
} else { {
peer = Fluence.getPeer(); "functionName" : "member1",
} "argDefs" : [
],
if (typeof args[0] === 'string') { "returnType" : {
serviceId = args[0]; "tag" : "void"
} else if (typeof args[1] === 'string') { }
serviceId = args[1]; },
} {
"functionName" : "member2",
// Figuring out which overload is the service. "argDefs" : [
// If the first argument is not Fluence Peer and it is an object, then it can only be the service def {
// If the first argument is peer, we are checking further. The second argument might either be "name" : "s1",
// an object, that it must be the service object "argType" : {
// or a string, which is the service id. In that case the service is the third argument "tag" : "primitive"
if (!(FluencePeer.isInstance(args[0])) && typeof args[0] === 'object') { }
service = args[0]; }
} else if (typeof args[1] === 'object') { ],
service = args[1]; "returnType" : {
} else { "tag" : "void"
service = args[2]; }
} },
{
const incorrectServiceDefinitions = missingFields(service, ['member1', 'member2', 'member3', 'member4', 'member5']); "functionName" : "member3",
if (!!incorrectServiceDefinitions.length) { "argDefs" : [
throw new Error("Error registering service MoreMembers: missing functions: " + incorrectServiceDefinitions.map((d) => "'" + d + "'").join(", ")) {
} "name" : "s1",
"argType" : {
peer.internals.callServiceHandler.use((req, resp, next) => { "tag" : "primitive"
if (req.serviceId !== serviceId) { }
next();
return;
}
if (req.fnName === 'member1') {
const callParams = {
...req.particleContext,
tetraplets: {
}, },
}; {
resp.retCode = ResultCodes.success; "name" : "s2",
service.member1(callParams); resp.result = {} "argType" : {
} "tag" : "primitive"
}
if (req.fnName === 'member2') { }
const callParams = { ],
...req.particleContext, "returnType" : {
tetraplets: { "tag" : "void"
s1: req.tetraplets[0] }
},
{
"functionName" : "member4",
"argDefs" : [
{
"name" : "s1",
"argType" : {
"tag" : "primitive"
}
}, },
}; {
resp.retCode = ResultCodes.success; "name" : "s2",
service.member2(req.args[0], callParams); resp.result = {} "argType" : {
} "tag" : "primitive"
}
if (req.fnName === 'member3') {
const callParams = {
...req.particleContext,
tetraplets: {
s1: req.tetraplets[0],s2: req.tetraplets[1]
}, },
}; {
resp.retCode = ResultCodes.success; "name" : "i",
service.member3(req.args[0], req.args[1], callParams); resp.result = {} "argType" : {
} "tag" : "primitive"
}
if (req.fnName === 'member4') { }
const callParams = { ],
...req.particleContext, "returnType" : {
tetraplets: { "tag" : "primitive"
s1: req.tetraplets[0],s2: req.tetraplets[1],i: req.tetraplets[2] }
},
{
"functionName" : "member5",
"argDefs" : [
{
"name" : "s1",
"argType" : {
"tag" : "primitive"
}
}, },
}; {
resp.retCode = ResultCodes.success; "name" : "s2",
resp.result = service.member4(req.args[0], req.args[1], req.args[2], callParams) "argType" : {
} "tag" : "primitive"
}
if (req.fnName === 'member5') {
const callParams = {
...req.particleContext,
tetraplets: {
s1: req.tetraplets[0],s2: req.tetraplets[1],i: req.tetraplets[2]
}, },
}; {
resp.retCode = ResultCodes.success; "name" : "i",
resp.result = service.member5(req.args[0], req.args[1], req.args[2], callParams) "argType" : {
"tag" : "primitive"
}
}
],
"returnType" : {
"tag" : "primitive"
}
} }
]
next(); }
}); );
} }
// Functions // Functions
@ -269,25 +212,9 @@ if (req.fnName === 'member5') {
export function f1(callback: (arg0: string, arg1: number, callParams: CallParams<'arg0' | 'arg1'>) => void, config?: {ttl?: number}): Promise<void>; export function f1(callback: (arg0: string, arg1: number, callParams: CallParams<'arg0' | 'arg1'>) => void, config?: {ttl?: number}): Promise<void>;
export function f1(peer: FluencePeer, callback: (arg0: string, arg1: number, callParams: CallParams<'arg0' | 'arg1'>) => void, config?: {ttl?: number}): Promise<void>; export function f1(peer: FluencePeer, callback: (arg0: string, arg1: number, callParams: CallParams<'arg0' | 'arg1'>) => void, config?: {ttl?: number}): Promise<void>;
export function f1(...args: any) { export function f1(...args: any) {
let peer: FluencePeer;
let callback: any;
let config: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
callback = args[1];
config = args[2];
} else {
peer = Fluence.getPeer();
callback = args[0];
config = args[1];
}
let request: RequestFlow; let script = `
const promise = new Promise<void>((resolve, reject) => { (xor
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
(xor
(seq (seq
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
(xor (xor
@ -297,47 +224,53 @@ export function f1(...args: any) {
) )
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
) )
`, `
) return callFunction(
.configHandler((h) => { args,
h.on('getDataSrv', '-relay-', () => { {
return peer.getStatus().relayPeerId; "functionName" : "f1",
}); "returnType" : {
h.use((req, resp, next) => { "tag" : "void"
if(req.serviceId === 'callbackSrv' && req.fnName === 'callback') { },
const callParams = { "argDefs" : [
...req.particleContext, {
tetraplets: { "name" : "callback",
arg0: req.tetraplets[0],arg1: req.tetraplets[1] "argType" : {
}, "tag" : "callback",
}; "callback" : {
resp.retCode = ResultCodes.success; "argDefs" : [
callback(req.args[0], req.args[1], callParams); resp.result = {} {
"name" : "arg0",
"argType" : {
"tag" : "primitive"
}
},
{
"name" : "arg1",
"argType" : {
"tag" : "primitive"
}
} }
next(); ],
}); "returnType" : {
"tag" : "void"
h.onEvent('callbackSrv', 'response', (args) => { }
});
h.onEvent('errorHandlingSrv', 'error', (args) => {
const [err] = args;
reject(err);
});
})
.handleScriptError(reject)
.handleTimeout(() => {
reject('Request timed out for f1');
})
if (config && config.ttl) {
r.withTTL(config.ttl)
} }
}
request = r.build(); }
}); ],
peer.internals.initiateFlow(request!); "names" : {
return Promise.race([promise, Promise.resolve()]); "relay" : "-relay-",
"getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
"responseFnName" : "response",
"errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
}
},
script
)
} }
@ -345,28 +278,9 @@ export function f1(...args: any) {
export function f2(num: number, callback: (arg0: string, arg1: number, callParams: CallParams<'arg0' | 'arg1'>) => void, config?: {ttl?: number}): Promise<void>; export function f2(num: number, callback: (arg0: string, arg1: number, callParams: CallParams<'arg0' | 'arg1'>) => void, config?: {ttl?: number}): Promise<void>;
export function f2(peer: FluencePeer, num: number, callback: (arg0: string, arg1: number, callParams: CallParams<'arg0' | 'arg1'>) => void, config?: {ttl?: number}): Promise<void>; export function f2(peer: FluencePeer, num: number, callback: (arg0: string, arg1: number, callParams: CallParams<'arg0' | 'arg1'>) => void, config?: {ttl?: number}): Promise<void>;
export function f2(...args: any) { export function f2(...args: any) {
let peer: FluencePeer;
let num: any;
let callback: any;
let config: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
num = args[1];
callback = args[2];
config = args[3];
} else {
peer = Fluence.getPeer();
num = args[0];
callback = args[1];
config = args[2];
}
let request: RequestFlow; let script = `
const promise = new Promise<void>((resolve, reject) => { (xor
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
(xor
(seq (seq
(seq (seq
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
@ -379,48 +293,59 @@ export function f2(...args: any) {
) )
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
) )
`, `
) return callFunction(
.configHandler((h) => { args,
h.on('getDataSrv', '-relay-', () => { {
return peer.getStatus().relayPeerId; "functionName" : "f2",
}); "returnType" : {
h.on('getDataSrv', 'num', () => {return num;}); "tag" : "void"
h.use((req, resp, next) => { },
if(req.serviceId === 'callbackSrv' && req.fnName === 'callback') { "argDefs" : [
const callParams = { {
...req.particleContext, "name" : "num",
tetraplets: { "argType" : {
arg0: req.tetraplets[0],arg1: req.tetraplets[1] "tag" : "primitive"
}, }
}; },
resp.retCode = ResultCodes.success; {
callback(req.args[0], req.args[1], callParams); resp.result = {} "name" : "callback",
"argType" : {
"tag" : "callback",
"callback" : {
"argDefs" : [
{
"name" : "arg0",
"argType" : {
"tag" : "primitive"
}
},
{
"name" : "arg1",
"argType" : {
"tag" : "primitive"
}
} }
next(); ],
}); "returnType" : {
"tag" : "void"
h.onEvent('callbackSrv', 'response', (args) => { }
});
h.onEvent('errorHandlingSrv', 'error', (args) => {
const [err] = args;
reject(err);
});
})
.handleScriptError(reject)
.handleTimeout(() => {
reject('Request timed out for f2');
})
if (config && config.ttl) {
r.withTTL(config.ttl)
} }
}
request = r.build(); }
}); ],
peer.internals.initiateFlow(request!); "names" : {
return Promise.race([promise, Promise.resolve()]); "relay" : "-relay-",
"getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
"responseFnName" : "response",
"errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
}
},
script
)
} }
@ -428,28 +353,9 @@ export function f2(...args: any) {
export function f3(num: number, callback: (arg0: string, arg1: number, callParams: CallParams<'arg0' | 'arg1'>) => void, config?: {ttl?: number}): Promise<string>; export function f3(num: number, callback: (arg0: string, arg1: number, callParams: CallParams<'arg0' | 'arg1'>) => void, config?: {ttl?: number}): Promise<string>;
export function f3(peer: FluencePeer, num: number, callback: (arg0: string, arg1: number, callParams: CallParams<'arg0' | 'arg1'>) => void, config?: {ttl?: number}): Promise<string>; export function f3(peer: FluencePeer, num: number, callback: (arg0: string, arg1: number, callParams: CallParams<'arg0' | 'arg1'>) => void, config?: {ttl?: number}): Promise<string>;
export function f3(...args: any) { export function f3(...args: any) {
let peer: FluencePeer;
let num: any;
let callback: any;
let config: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
num = args[1];
callback = args[2];
config = args[3];
} else {
peer = Fluence.getPeer();
num = args[0];
callback = args[1];
config = args[2];
}
let request: RequestFlow; let script = `
const promise = new Promise<string>((resolve, reject) => { (xor
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
(xor
(seq (seq
(seq (seq
(seq (seq
@ -468,49 +374,59 @@ export function f3(...args: any) {
) )
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3]) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3])
) )
`, `
) return callFunction(
.configHandler((h) => { args,
h.on('getDataSrv', '-relay-', () => { {
return peer.getStatus().relayPeerId; "functionName" : "f3",
}); "returnType" : {
h.on('getDataSrv', 'num', () => {return num;}); "tag" : "primitive"
h.use((req, resp, next) => { },
if(req.serviceId === 'callbackSrv' && req.fnName === 'callback') { "argDefs" : [
const callParams = { {
...req.particleContext, "name" : "num",
tetraplets: { "argType" : {
arg0: req.tetraplets[0],arg1: req.tetraplets[1] "tag" : "primitive"
}, }
}; },
resp.retCode = ResultCodes.success; {
callback(req.args[0], req.args[1], callParams); resp.result = {} "name" : "callback",
"argType" : {
"tag" : "callback",
"callback" : {
"argDefs" : [
{
"name" : "arg0",
"argType" : {
"tag" : "primitive"
}
},
{
"name" : "arg1",
"argType" : {
"tag" : "primitive"
}
} }
next(); ],
}); "returnType" : {
"tag" : "void"
h.onEvent('callbackSrv', 'response', (args) => { }
const [res] = args;
resolve(res);
});
h.onEvent('errorHandlingSrv', 'error', (args) => {
const [err] = args;
reject(err);
});
})
.handleScriptError(reject)
.handleTimeout(() => {
reject('Request timed out for f3');
})
if (config && config.ttl) {
r.withTTL(config.ttl)
} }
}
request = r.build(); }
}); ],
peer.internals.initiateFlow(request!); "names" : {
return promise; "relay" : "-relay-",
"getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
"responseFnName" : "response",
"errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
}
},
script
)
} }
@ -518,25 +434,9 @@ export function f3(...args: any) {
export function callBackZeroArgs(callback: (callParams: CallParams<null>) => void, config?: {ttl?: number}): Promise<void>; export function callBackZeroArgs(callback: (callParams: CallParams<null>) => void, config?: {ttl?: number}): Promise<void>;
export function callBackZeroArgs(peer: FluencePeer, callback: (callParams: CallParams<null>) => void, config?: {ttl?: number}): Promise<void>; export function callBackZeroArgs(peer: FluencePeer, callback: (callParams: CallParams<null>) => void, config?: {ttl?: number}): Promise<void>;
export function callBackZeroArgs(...args: any) { export function callBackZeroArgs(...args: any) {
let peer: FluencePeer;
let callback: any;
let config: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
callback = args[1];
config = args[2];
} else {
peer = Fluence.getPeer();
callback = args[0];
config = args[1];
}
let request: RequestFlow; let script = `
const promise = new Promise<void>((resolve, reject) => { (xor
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
(xor
(seq (seq
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
(xor (xor
@ -546,45 +446,39 @@ export function callBackZeroArgs(...args: any) {
) )
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
) )
`, `
) return callFunction(
.configHandler((h) => { args,
h.on('getDataSrv', '-relay-', () => { {
return peer.getStatus().relayPeerId; "functionName" : "callBackZeroArgs",
}); "returnType" : {
h.use((req, resp, next) => { "tag" : "void"
if(req.serviceId === 'callbackSrv' && req.fnName === 'callback') { },
const callParams = { "argDefs" : [
...req.particleContext, {
tetraplets: { "name" : "callback",
"argType" : {
}, "tag" : "callback",
}; "callback" : {
resp.retCode = ResultCodes.success; "argDefs" : [
callback(callParams); resp.result = {} ],
} "returnType" : {
next(); "tag" : "void"
}); }
h.onEvent('callbackSrv', 'response', (args) => {
});
h.onEvent('errorHandlingSrv', 'error', (args) => {
const [err] = args;
reject(err);
});
})
.handleScriptError(reject)
.handleTimeout(() => {
reject('Request timed out for callBackZeroArgs');
})
if (config && config.ttl) {
r.withTTL(config.ttl)
} }
}
request = r.build(); }
}); ],
peer.internals.initiateFlow(request!); "names" : {
return Promise.race([promise, Promise.resolve()]); "relay" : "-relay-",
"getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
"responseFnName" : "response",
"errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
}
},
script
)
} }

View File

@ -8,11 +8,10 @@
*/ */
import { Fluence, FluencePeer } from '@fluencelabs/fluence'; import { Fluence, FluencePeer } from '@fluencelabs/fluence';
import { import {
ResultCodes, CallParams,
RequestFlow, callFunction,
RequestFlowBuilder, registerService,
CallParams } from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
function missingFields(obj: any, fields: string[]): string[] { function missingFields(obj: any, fields: string[]): string[] {
@ -32,71 +31,36 @@ export function registerHelloWorld(peer: FluencePeer, serviceId: string, service
export function registerHelloWorld(...args: any) { export function registerHelloWorld(...args: any) {
let peer: FluencePeer; registerService(
let serviceId: any; args,
let service: any; {
if (FluencePeer.isInstance(args[0])) { "defaultServiceId" : "default",
peer = args[0]; "functions" : [
} else { {
peer = Fluence.getPeer(); "functionName" : "getNumber",
} "argDefs" : [
],
if (typeof args[0] === 'string') { "returnType" : {
serviceId = args[0]; "tag" : "primitive"
} else if (typeof args[1] === 'string') { }
serviceId = args[1]; },
} else { {
serviceId = "default" "functionName" : "sayHello",
} "argDefs" : [
{
// Figuring out which overload is the service. "name" : "s",
// If the first argument is not Fluence Peer and it is an object, then it can only be the service def "argType" : {
// If the first argument is peer, we are checking further. The second argument might either be "tag" : "primitive"
// an object, that it must be the service object }
// or a string, which is the service id. In that case the service is the third argument }
if (!(FluencePeer.isInstance(args[0])) && typeof args[0] === 'object') { ],
service = args[0]; "returnType" : {
} else if (typeof args[1] === 'object') { "tag" : "void"
service = args[1]; }
} else {
service = args[2];
}
const incorrectServiceDefinitions = missingFields(service, ['getNumber', 'sayHello']);
if (!!incorrectServiceDefinitions.length) {
throw new Error("Error registering service HelloWorld: missing functions: " + incorrectServiceDefinitions.map((d) => "'" + d + "'").join(", "))
}
peer.internals.callServiceHandler.use((req, resp, next) => {
if (req.serviceId !== serviceId) {
next();
return;
} }
]
if (req.fnName === 'getNumber') { }
const callParams = { );
...req.particleContext,
tetraplets: {
},
};
resp.retCode = ResultCodes.success;
resp.result = service.getNumber(callParams)
}
if (req.fnName === 'sayHello') {
const callParams = {
...req.particleContext,
tetraplets: {
s: req.tetraplets[0]
},
};
resp.retCode = ResultCodes.success;
service.sayHello(req.args[0], callParams); resp.result = {}
}
next();
});
} }
// Functions // Functions
@ -105,25 +69,9 @@ if (req.fnName === 'sayHello') {
export function callMeBack(callback: (arg0: string, arg1: number, callParams: CallParams<'arg0' | 'arg1'>) => void, config?: {ttl?: number}): Promise<void>; export function callMeBack(callback: (arg0: string, arg1: number, callParams: CallParams<'arg0' | 'arg1'>) => void, config?: {ttl?: number}): Promise<void>;
export function callMeBack(peer: FluencePeer, callback: (arg0: string, arg1: number, callParams: CallParams<'arg0' | 'arg1'>) => void, config?: {ttl?: number}): Promise<void>; export function callMeBack(peer: FluencePeer, callback: (arg0: string, arg1: number, callParams: CallParams<'arg0' | 'arg1'>) => void, config?: {ttl?: number}): Promise<void>;
export function callMeBack(...args: any) { export function callMeBack(...args: any) {
let peer: FluencePeer;
let callback: any;
let config: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
callback = args[1];
config = args[2];
} else {
peer = Fluence.getPeer();
callback = args[0];
config = args[1];
}
let request: RequestFlow; let script = `
const promise = new Promise<void>((resolve, reject) => { (xor
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
(xor
(seq (seq
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
(xor (xor
@ -133,45 +81,51 @@ export function callMeBack(...args: any) {
) )
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
) )
`, `
) return callFunction(
.configHandler((h) => { args,
h.on('getDataSrv', '-relay-', () => { {
return peer.getStatus().relayPeerId; "functionName" : "callMeBack",
}); "returnType" : {
h.use((req, resp, next) => { "tag" : "void"
if(req.serviceId === 'callbackSrv' && req.fnName === 'callback') { },
const callParams = { "argDefs" : [
...req.particleContext, {
tetraplets: { "name" : "callback",
arg0: req.tetraplets[0],arg1: req.tetraplets[1] "argType" : {
}, "tag" : "callback",
}; "callback" : {
resp.retCode = ResultCodes.success; "argDefs" : [
callback(req.args[0], req.args[1], callParams); resp.result = {} {
"name" : "arg0",
"argType" : {
"tag" : "primitive"
}
},
{
"name" : "arg1",
"argType" : {
"tag" : "primitive"
}
} }
next(); ],
}); "returnType" : {
"tag" : "void"
h.onEvent('callbackSrv', 'response', (args) => { }
});
h.onEvent('errorHandlingSrv', 'error', (args) => {
const [err] = args;
reject(err);
});
})
.handleScriptError(reject)
.handleTimeout(() => {
reject('Request timed out for callMeBack');
})
if (config && config.ttl) {
r.withTTL(config.ttl)
} }
}
request = r.build(); }
}); ],
peer.internals.initiateFlow(request!); "names" : {
return Promise.race([promise, Promise.resolve()]); "relay" : "-relay-",
"getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
"responseFnName" : "response",
"errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
}
},
script
)
} }

View File

@ -8,11 +8,10 @@
*/ */
import { Fluence, FluencePeer } from '@fluencelabs/fluence'; import { Fluence, FluencePeer } from '@fluencelabs/fluence';
import { import {
ResultCodes, CallParams,
RequestFlow, callFunction,
RequestFlowBuilder, registerService,
CallParams } from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
function missingFields(obj: any, fields: string[]): string[] { function missingFields(obj: any, fields: string[]): string[] {
@ -27,25 +26,9 @@ function missingFields(obj: any, fields: string[]): string[] {
export function getPeerExternalAddresses(otherNodePeerId: string, config?: {ttl?: number}): Promise<string[]>; export function getPeerExternalAddresses(otherNodePeerId: string, config?: {ttl?: number}): Promise<string[]>;
export function getPeerExternalAddresses(peer: FluencePeer, otherNodePeerId: string, config?: {ttl?: number}): Promise<string[]>; export function getPeerExternalAddresses(peer: FluencePeer, otherNodePeerId: string, config?: {ttl?: number}): Promise<string[]>;
export function getPeerExternalAddresses(...args: any) { export function getPeerExternalAddresses(...args: any) {
let peer: FluencePeer;
let otherNodePeerId: any;
let config: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
otherNodePeerId = args[1];
config = args[2];
} else {
peer = Fluence.getPeer();
otherNodePeerId = args[0];
config = args[1];
}
let request: RequestFlow; let script = `
const promise = new Promise<string[]>((resolve, reject) => { (xor
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
(xor
(seq (seq
(seq (seq
(seq (seq
@ -73,35 +56,34 @@ export function getPeerExternalAddresses(...args: any) {
) )
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3]) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3])
) )
`, `
) return callFunction(
.configHandler((h) => { args,
h.on('getDataSrv', '-relay-', () => { {
return peer.getStatus().relayPeerId; "functionName" : "getPeerExternalAddresses",
}); "returnType" : {
h.on('getDataSrv', 'otherNodePeerId', () => {return otherNodePeerId;}); "tag" : "primitive"
h.onEvent('callbackSrv', 'response', (args) => { },
const [res] = args; "argDefs" : [
resolve(res); {
}); "name" : "otherNodePeerId",
h.onEvent('errorHandlingSrv', 'error', (args) => { "argType" : {
const [err] = args; "tag" : "primitive"
reject(err); }
}); }
}) ],
.handleScriptError(reject) "names" : {
.handleTimeout(() => { "relay" : "-relay-",
reject('Request timed out for getPeerExternalAddresses'); "getDataSrv" : "getDataSrv",
}) "callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
if (config && config.ttl) { "responseFnName" : "response",
r.withTTL(config.ttl) "errorHandlingSrv" : "errorHandlingSrv",
} "errorFnName" : "error"
}
request = r.build(); },
}); script
peer.internals.initiateFlow(request!); )
return promise;
} }
@ -109,28 +91,9 @@ export function getPeerExternalAddresses(...args: any) {
export function getDistantAddresses(target: string, viaNode: string, config?: {ttl?: number}): Promise<string[]>; export function getDistantAddresses(target: string, viaNode: string, config?: {ttl?: number}): Promise<string[]>;
export function getDistantAddresses(peer: FluencePeer, target: string, viaNode: string, config?: {ttl?: number}): Promise<string[]>; export function getDistantAddresses(peer: FluencePeer, target: string, viaNode: string, config?: {ttl?: number}): Promise<string[]>;
export function getDistantAddresses(...args: any) { export function getDistantAddresses(...args: any) {
let peer: FluencePeer;
let target: any;
let viaNode: any;
let config: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
target = args[1];
viaNode = args[2];
config = args[3];
} else {
peer = Fluence.getPeer();
target = args[0];
viaNode = args[1];
config = args[2];
}
let request: RequestFlow; let script = `
const promise = new Promise<string[]>((resolve, reject) => { (xor
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
(xor
(seq (seq
(seq (seq
(seq (seq
@ -173,34 +136,38 @@ export function getDistantAddresses(...args: any) {
) )
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3]) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3])
) )
`, `
) return callFunction(
.configHandler((h) => { args,
h.on('getDataSrv', '-relay-', () => { {
return peer.getStatus().relayPeerId; "functionName" : "getDistantAddresses",
}); "returnType" : {
h.on('getDataSrv', 'target', () => {return target;}); "tag" : "primitive"
h.on('getDataSrv', 'viaNode', () => {return viaNode;}); },
h.onEvent('callbackSrv', 'response', (args) => { "argDefs" : [
const [res] = args; {
resolve(res); "name" : "target",
}); "argType" : {
h.onEvent('errorHandlingSrv', 'error', (args) => { "tag" : "primitive"
const [err] = args; }
reject(err); },
}); {
}) "name" : "viaNode",
.handleScriptError(reject) "argType" : {
.handleTimeout(() => { "tag" : "primitive"
reject('Request timed out for getDistantAddresses'); }
}) }
],
if (config && config.ttl) { "names" : {
r.withTTL(config.ttl) "relay" : "-relay-",
} "getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
request = r.build(); "responseSrv" : "callbackSrv",
}); "responseFnName" : "response",
peer.internals.initiateFlow(request!); "errorHandlingSrv" : "errorHandlingSrv",
return promise; "errorFnName" : "error"
}
},
script
)
} }

View File

@ -8,11 +8,10 @@
*/ */
import { Fluence, FluencePeer } from '@fluencelabs/fluence'; import { Fluence, FluencePeer } from '@fluencelabs/fluence';
import { import {
ResultCodes, CallParams,
RequestFlow, callFunction,
RequestFlowBuilder, registerService,
CallParams } from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
function missingFields(obj: any, fields: string[]): string[] { function missingFields(obj: any, fields: string[]): string[] {
@ -33,88 +32,50 @@ export function registerSomeS(peer: FluencePeer, serviceId: string, service: Som
export function registerSomeS(...args: any) { export function registerSomeS(...args: any) {
let peer: FluencePeer; registerService(
let serviceId: any; args,
let service: any; {
if (FluencePeer.isInstance(args[0])) { "defaultServiceId" : "test2",
peer = args[0]; "functions" : [
} else { {
peer = Fluence.getPeer(); "functionName" : "getStr",
} "argDefs" : [
{
if (typeof args[0] === 'string') { "name" : "arg0",
serviceId = args[0]; "argType" : {
} else if (typeof args[1] === 'string') { "tag" : "optional"
serviceId = args[1]; }
} else { }
serviceId = "test2" ],
} "returnType" : {
"tag" : "optional"
// Figuring out which overload is the service. }
// If the first argument is not Fluence Peer and it is an object, then it can only be the service def },
// If the first argument is peer, we are checking further. The second argument might either be {
// an object, that it must be the service object "functionName" : "getStr1",
// or a string, which is the service id. In that case the service is the third argument "argDefs" : [
if (!(FluencePeer.isInstance(args[0])) && typeof args[0] === 'object') { ],
service = args[0]; "returnType" : {
} else if (typeof args[1] === 'object') { "tag" : "optional"
service = args[1]; }
} else { },
service = args[2]; {
} "functionName" : "getStr2",
"argDefs" : [
const incorrectServiceDefinitions = missingFields(service, ['getStr', 'getStr1', 'getStr2']); {
if (!!incorrectServiceDefinitions.length) { "name" : "arg0",
throw new Error("Error registering service SomeS: missing functions: " + incorrectServiceDefinitions.map((d) => "'" + d + "'").join(", ")) "argType" : {
} "tag" : "primitive"
}
peer.internals.callServiceHandler.use((req, resp, next) => { }
if (req.serviceId !== serviceId) { ],
next(); "returnType" : {
return; "tag" : "primitive"
}
} }
]
if (req.fnName === 'getStr') { }
const callParams = { );
...req.particleContext,
tetraplets: {
arg0: req.tetraplets[0]
},
};
resp.retCode = ResultCodes.success;
var respResult = service.getStr(req.args[0].length === 0 ? null : req.args[0][0], callParams);
resp.result = respResult === null ? [] : [respResult]
}
if (req.fnName === 'getStr1') {
const callParams = {
...req.particleContext,
tetraplets: {
},
};
resp.retCode = ResultCodes.success;
var respResult = service.getStr1(callParams);
resp.result = respResult === null ? [] : [respResult]
}
if (req.fnName === 'getStr2') {
const callParams = {
...req.particleContext,
tetraplets: {
arg0: req.tetraplets[0]
},
};
resp.retCode = ResultCodes.success;
resp.result = service.getStr2(req.args[0], callParams)
}
next();
});
} }
// Functions // Functions
@ -123,25 +84,9 @@ if (req.fnName === 'getStr2') {
export function useOptional(opt: string | null, config?: {ttl?: number}): Promise<string>; export function useOptional(opt: string | null, config?: {ttl?: number}): Promise<string>;
export function useOptional(peer: FluencePeer, opt: string | null, config?: {ttl?: number}): Promise<string>; export function useOptional(peer: FluencePeer, opt: string | null, config?: {ttl?: number}): Promise<string>;
export function useOptional(...args: any) { export function useOptional(...args: any) {
let peer: FluencePeer;
let opt: any;
let config: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
opt = args[1];
config = args[2];
} else {
peer = Fluence.getPeer();
opt = args[0];
config = args[1];
}
let request: RequestFlow; let script = `
const promise = new Promise<string>((resolve, reject) => { (xor
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
(xor
(seq (seq
(seq (seq
(seq (seq
@ -165,35 +110,34 @@ export function useOptional(...args: any) {
) )
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
) )
`, `
) return callFunction(
.configHandler((h) => { args,
h.on('getDataSrv', '-relay-', () => { {
return peer.getStatus().relayPeerId; "functionName" : "useOptional",
}); "returnType" : {
h.on('getDataSrv', 'opt', () => {return opt === null ? [] : [opt];}); "tag" : "primitive"
h.onEvent('callbackSrv', 'response', (args) => { },
const [res] = args; "argDefs" : [
resolve(res); {
}); "name" : "opt",
h.onEvent('errorHandlingSrv', 'error', (args) => { "argType" : {
const [err] = args; "tag" : "optional"
reject(err); }
}); }
}) ],
.handleScriptError(reject) "names" : {
.handleTimeout(() => { "relay" : "-relay-",
reject('Request timed out for useOptional'); "getDataSrv" : "getDataSrv",
}) "callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
if (config && config.ttl) { "responseFnName" : "response",
r.withTTL(config.ttl) "errorHandlingSrv" : "errorHandlingSrv",
} "errorFnName" : "error"
}
request = r.build(); },
}); script
peer.internals.initiateFlow(request!); )
return promise;
} }
@ -201,23 +145,9 @@ export function useOptional(...args: any) {
export function returnOptional(config?: {ttl?: number}): Promise<string | null>; export function returnOptional(config?: {ttl?: number}): Promise<string | null>;
export function returnOptional(peer: FluencePeer, config?: {ttl?: number}): Promise<string | null>; export function returnOptional(peer: FluencePeer, config?: {ttl?: number}): Promise<string | null>;
export function returnOptional(...args: any) { export function returnOptional(...args: any) {
let peer: FluencePeer;
let config: any; let script = `
if (FluencePeer.isInstance(args[0])) { (xor
peer = args[0];
config = args[1];
} else {
peer = Fluence.getPeer();
config = args[0];
}
let request: RequestFlow;
const promise = new Promise<string | null>((resolve, reject) => {
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
(xor
(seq (seq
(seq (seq
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
@ -230,39 +160,28 @@ export function returnOptional(...args: any) {
) )
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
) )
`, `
) return callFunction(
.configHandler((h) => { args,
h.on('getDataSrv', '-relay-', () => { {
return peer.getStatus().relayPeerId; "functionName" : "returnOptional",
}); "returnType" : {
"tag" : "optional"
h.onEvent('callbackSrv', 'response', (args) => { },
let [opt] = args; "argDefs" : [
if (Array.isArray(opt)) { ],
if (opt.length === 0) { resolve(null); } "names" : {
opt = opt[0]; "relay" : "-relay-",
} "getDataSrv" : "getDataSrv",
return resolve(opt); "callbackSrv" : "callbackSrv",
}); "responseSrv" : "callbackSrv",
h.onEvent('errorHandlingSrv', 'error', (args) => { "responseFnName" : "response",
const [err] = args; "errorHandlingSrv" : "errorHandlingSrv",
reject(err); "errorFnName" : "error"
}); }
}) },
.handleScriptError(reject) script
.handleTimeout(() => { )
reject('Request timed out for returnOptional');
})
if (config && config.ttl) {
r.withTTL(config.ttl)
}
request = r.build();
});
peer.internals.initiateFlow(request!);
return promise;
} }
@ -270,23 +189,9 @@ export function returnOptional(...args: any) {
export function returnNone(config?: {ttl?: number}): Promise<string | null>; export function returnNone(config?: {ttl?: number}): Promise<string | null>;
export function returnNone(peer: FluencePeer, config?: {ttl?: number}): Promise<string | null>; export function returnNone(peer: FluencePeer, config?: {ttl?: number}): Promise<string | null>;
export function returnNone(...args: any) { export function returnNone(...args: any) {
let peer: FluencePeer;
let config: any; let script = `
if (FluencePeer.isInstance(args[0])) { (xor
peer = args[0];
config = args[1];
} else {
peer = Fluence.getPeer();
config = args[0];
}
let request: RequestFlow;
const promise = new Promise<string | null>((resolve, reject) => {
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
(xor
(seq (seq
(seq (seq
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
@ -299,37 +204,26 @@ export function returnNone(...args: any) {
) )
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
) )
`, `
) return callFunction(
.configHandler((h) => { args,
h.on('getDataSrv', '-relay-', () => { {
return peer.getStatus().relayPeerId; "functionName" : "returnNone",
}); "returnType" : {
"tag" : "optional"
h.onEvent('callbackSrv', 'response', (args) => { },
let [opt] = args; "argDefs" : [
if (Array.isArray(opt)) { ],
if (opt.length === 0) { resolve(null); } "names" : {
opt = opt[0]; "relay" : "-relay-",
} "getDataSrv" : "getDataSrv",
return resolve(opt); "callbackSrv" : "callbackSrv",
}); "responseSrv" : "callbackSrv",
h.onEvent('errorHandlingSrv', 'error', (args) => { "responseFnName" : "response",
const [err] = args; "errorHandlingSrv" : "errorHandlingSrv",
reject(err); "errorFnName" : "error"
}); }
}) },
.handleScriptError(reject) script
.handleTimeout(() => { )
reject('Request timed out for returnNone');
})
if (config && config.ttl) {
r.withTTL(config.ttl)
}
request = r.build();
});
peer.internals.initiateFlow(request!);
return promise;
} }

View File

@ -8,11 +8,10 @@
*/ */
import { Fluence, FluencePeer } from '@fluencelabs/fluence'; import { Fluence, FluencePeer } from '@fluencelabs/fluence';
import { import {
ResultCodes, CallParams,
RequestFlow, callFunction,
RequestFlowBuilder, registerService,
CallParams } from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
function missingFields(obj: any, fields: string[]): string[] { function missingFields(obj: any, fields: string[]): string[] {
@ -31,60 +30,28 @@ export function registerOptionString(peer: FluencePeer, serviceId: string, servi
export function registerOptionString(...args: any) { export function registerOptionString(...args: any) {
let peer: FluencePeer; registerService(
let serviceId: any; args,
let service: any; {
if (FluencePeer.isInstance(args[0])) { "defaultServiceId" : "opt_str",
peer = args[0]; "functions" : [
} else { {
peer = Fluence.getPeer(); "functionName" : "checkOption",
} "argDefs" : [
{
if (typeof args[0] === 'string') { "name" : "str",
serviceId = args[0]; "argType" : {
} else if (typeof args[1] === 'string') { "tag" : "optional"
serviceId = args[1]; }
} else { }
serviceId = "opt_str" ],
} "returnType" : {
"tag" : "primitive"
// Figuring out which overload is the service. }
// If the first argument is not Fluence Peer and it is an object, then it can only be the service def
// If the first argument is peer, we are checking further. The second argument might either be
// an object, that it must be the service object
// or a string, which is the service id. In that case the service is the third argument
if (!(FluencePeer.isInstance(args[0])) && typeof args[0] === 'object') {
service = args[0];
} else if (typeof args[1] === 'object') {
service = args[1];
} else {
service = args[2];
}
const incorrectServiceDefinitions = missingFields(service, ['checkOption']);
if (!!incorrectServiceDefinitions.length) {
throw new Error("Error registering service OptionString: missing functions: " + incorrectServiceDefinitions.map((d) => "'" + d + "'").join(", "))
}
peer.internals.callServiceHandler.use((req, resp, next) => {
if (req.serviceId !== serviceId) {
next();
return;
} }
]
if (req.fnName === 'checkOption') { }
const callParams = { );
...req.particleContext,
tetraplets: {
str: req.tetraplets[0]
},
};
resp.retCode = ResultCodes.success;
resp.result = service.checkOption(req.args[0].length === 0 ? null : req.args[0][0], callParams)
}
next();
});
} }
// Functions // Functions
@ -93,23 +60,9 @@ export function registerOptionString(...args: any) {
export function emptyString(config?: {ttl?: number}): Promise<string | null>; export function emptyString(config?: {ttl?: number}): Promise<string | null>;
export function emptyString(peer: FluencePeer, config?: {ttl?: number}): Promise<string | null>; export function emptyString(peer: FluencePeer, config?: {ttl?: number}): Promise<string | null>;
export function emptyString(...args: any) { export function emptyString(...args: any) {
let peer: FluencePeer;
let config: any; let script = `
if (FluencePeer.isInstance(args[0])) { (xor
peer = args[0];
config = args[1];
} else {
peer = Fluence.getPeer();
config = args[0];
}
let request: RequestFlow;
const promise = new Promise<string | null>((resolve, reject) => {
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
(xor
(seq (seq
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
(xor (xor
@ -119,39 +72,28 @@ export function emptyString(...args: any) {
) )
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
) )
`, `
) return callFunction(
.configHandler((h) => { args,
h.on('getDataSrv', '-relay-', () => { {
return peer.getStatus().relayPeerId; "functionName" : "emptyString",
}); "returnType" : {
"tag" : "optional"
h.onEvent('callbackSrv', 'response', (args) => { },
let [opt] = args; "argDefs" : [
if (Array.isArray(opt)) { ],
if (opt.length === 0) { resolve(null); } "names" : {
opt = opt[0]; "relay" : "-relay-",
} "getDataSrv" : "getDataSrv",
return resolve(opt); "callbackSrv" : "callbackSrv",
}); "responseSrv" : "callbackSrv",
h.onEvent('errorHandlingSrv', 'error', (args) => { "responseFnName" : "response",
const [err] = args; "errorHandlingSrv" : "errorHandlingSrv",
reject(err); "errorFnName" : "error"
}); }
}) },
.handleScriptError(reject) script
.handleTimeout(() => { )
reject('Request timed out for emptyString');
})
if (config && config.ttl) {
r.withTTL(config.ttl)
}
request = r.build();
});
peer.internals.initiateFlow(request!);
return promise;
} }
@ -159,23 +101,9 @@ export function emptyString(...args: any) {
export function checkEmpty(config?: {ttl?: number}): Promise<string>; export function checkEmpty(config?: {ttl?: number}): Promise<string>;
export function checkEmpty(peer: FluencePeer, config?: {ttl?: number}): Promise<string>; export function checkEmpty(peer: FluencePeer, config?: {ttl?: number}): Promise<string>;
export function checkEmpty(...args: any) { export function checkEmpty(...args: any) {
let peer: FluencePeer;
let config: any; let script = `
if (FluencePeer.isInstance(args[0])) { (xor
peer = args[0];
config = args[1];
} else {
peer = Fluence.getPeer();
config = args[0];
}
let request: RequestFlow;
const promise = new Promise<string>((resolve, reject) => {
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
(xor
(seq (seq
(seq (seq
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
@ -188,35 +116,28 @@ export function checkEmpty(...args: any) {
) )
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
) )
`, `
) return callFunction(
.configHandler((h) => { args,
h.on('getDataSrv', '-relay-', () => { {
return peer.getStatus().relayPeerId; "functionName" : "checkEmpty",
}); "returnType" : {
"tag" : "primitive"
h.onEvent('callbackSrv', 'response', (args) => { },
const [res] = args; "argDefs" : [
resolve(res); ],
}); "names" : {
h.onEvent('errorHandlingSrv', 'error', (args) => { "relay" : "-relay-",
const [err] = args; "getDataSrv" : "getDataSrv",
reject(err); "callbackSrv" : "callbackSrv",
}); "responseSrv" : "callbackSrv",
}) "responseFnName" : "response",
.handleScriptError(reject) "errorHandlingSrv" : "errorHandlingSrv",
.handleTimeout(() => { "errorFnName" : "error"
reject('Request timed out for checkEmpty'); }
}) },
script
if (config && config.ttl) { )
r.withTTL(config.ttl)
}
request = r.build();
});
peer.internals.initiateFlow(request!);
return promise;
} }
@ -224,25 +145,9 @@ export function checkEmpty(...args: any) {
export function stringAsOption(str: string, config?: {ttl?: number}): Promise<string | null>; export function stringAsOption(str: string, config?: {ttl?: number}): Promise<string | null>;
export function stringAsOption(peer: FluencePeer, str: string, config?: {ttl?: number}): Promise<string | null>; export function stringAsOption(peer: FluencePeer, str: string, config?: {ttl?: number}): Promise<string | null>;
export function stringAsOption(...args: any) { export function stringAsOption(...args: any) {
let peer: FluencePeer;
let str: any;
let config: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
str = args[1];
config = args[2];
} else {
peer = Fluence.getPeer();
str = args[0];
config = args[1];
}
let request: RequestFlow; let script = `
const promise = new Promise<string | null>((resolve, reject) => { (xor
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
(xor
(seq (seq
(seq (seq
(seq (seq
@ -258,39 +163,34 @@ export function stringAsOption(...args: any) {
) )
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
) )
`, `
) return callFunction(
.configHandler((h) => { args,
h.on('getDataSrv', '-relay-', () => { {
return peer.getStatus().relayPeerId; "functionName" : "stringAsOption",
}); "returnType" : {
h.on('getDataSrv', 'str', () => {return str;}); "tag" : "optional"
h.onEvent('callbackSrv', 'response', (args) => { },
let [opt] = args; "argDefs" : [
if (Array.isArray(opt)) { {
if (opt.length === 0) { resolve(null); } "name" : "str",
opt = opt[0]; "argType" : {
} "tag" : "primitive"
return resolve(opt); }
}); }
h.onEvent('errorHandlingSrv', 'error', (args) => { ],
const [err] = args; "names" : {
reject(err); "relay" : "-relay-",
}); "getDataSrv" : "getDataSrv",
}) "callbackSrv" : "callbackSrv",
.handleScriptError(reject) "responseSrv" : "callbackSrv",
.handleTimeout(() => { "responseFnName" : "response",
reject('Request timed out for stringAsOption'); "errorHandlingSrv" : "errorHandlingSrv",
}) "errorFnName" : "error"
}
if (config && config.ttl) { },
r.withTTL(config.ttl) script
} )
request = r.build();
});
peer.internals.initiateFlow(request!);
return promise;
} }
@ -298,25 +198,9 @@ export function stringAsOption(...args: any) {
export function checkNoneEmpty(str: string, config?: {ttl?: number}): Promise<string>; export function checkNoneEmpty(str: string, config?: {ttl?: number}): Promise<string>;
export function checkNoneEmpty(peer: FluencePeer, str: string, config?: {ttl?: number}): Promise<string>; export function checkNoneEmpty(peer: FluencePeer, str: string, config?: {ttl?: number}): Promise<string>;
export function checkNoneEmpty(...args: any) { export function checkNoneEmpty(...args: any) {
let peer: FluencePeer;
let str: any;
let config: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
str = args[1];
config = args[2];
} else {
peer = Fluence.getPeer();
str = args[0];
config = args[1];
}
let request: RequestFlow; let script = `
const promise = new Promise<string>((resolve, reject) => { (xor
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
(xor
(seq (seq
(seq (seq
(seq (seq
@ -335,33 +219,32 @@ export function checkNoneEmpty(...args: any) {
) )
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
) )
`, `
) return callFunction(
.configHandler((h) => { args,
h.on('getDataSrv', '-relay-', () => { {
return peer.getStatus().relayPeerId; "functionName" : "checkNoneEmpty",
}); "returnType" : {
h.on('getDataSrv', 'str', () => {return str;}); "tag" : "primitive"
h.onEvent('callbackSrv', 'response', (args) => { },
const [res] = args; "argDefs" : [
resolve(res); {
}); "name" : "str",
h.onEvent('errorHandlingSrv', 'error', (args) => { "argType" : {
const [err] = args; "tag" : "primitive"
reject(err); }
}); }
}) ],
.handleScriptError(reject) "names" : {
.handleTimeout(() => { "relay" : "-relay-",
reject('Request timed out for checkNoneEmpty'); "getDataSrv" : "getDataSrv",
}) "callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
if (config && config.ttl) { "responseFnName" : "response",
r.withTTL(config.ttl) "errorHandlingSrv" : "errorHandlingSrv",
} "errorFnName" : "error"
}
request = r.build(); },
}); script
peer.internals.initiateFlow(request!); )
return promise;
} }

View File

@ -8,11 +8,10 @@
*/ */
import { Fluence, FluencePeer } from '@fluencelabs/fluence'; import { Fluence, FluencePeer } from '@fluencelabs/fluence';
import { import {
ResultCodes, CallParams,
RequestFlow, callFunction,
RequestFlowBuilder, registerService,
CallParams } from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
function missingFields(obj: any, fields: string[]): string[] { function missingFields(obj: any, fields: string[]): string[] {
@ -31,60 +30,22 @@ export function registerParService(peer: FluencePeer, serviceId: string, service
export function registerParService(...args: any) { export function registerParService(...args: any) {
let peer: FluencePeer; registerService(
let serviceId: any; args,
let service: any; {
if (FluencePeer.isInstance(args[0])) { "defaultServiceId" : "parservice-id",
peer = args[0]; "functions" : [
} else { {
peer = Fluence.getPeer(); "functionName" : "call",
} "argDefs" : [
],
if (typeof args[0] === 'string') { "returnType" : {
serviceId = args[0]; "tag" : "primitive"
} else if (typeof args[1] === 'string') { }
serviceId = args[1];
} else {
serviceId = "parservice-id"
}
// Figuring out which overload is the service.
// If the first argument is not Fluence Peer and it is an object, then it can only be the service def
// If the first argument is peer, we are checking further. The second argument might either be
// an object, that it must be the service object
// or a string, which is the service id. In that case the service is the third argument
if (!(FluencePeer.isInstance(args[0])) && typeof args[0] === 'object') {
service = args[0];
} else if (typeof args[1] === 'object') {
service = args[1];
} else {
service = args[2];
}
const incorrectServiceDefinitions = missingFields(service, ['call']);
if (!!incorrectServiceDefinitions.length) {
throw new Error("Error registering service ParService: missing functions: " + incorrectServiceDefinitions.map((d) => "'" + d + "'").join(", "))
}
peer.internals.callServiceHandler.use((req, resp, next) => {
if (req.serviceId !== serviceId) {
next();
return;
} }
]
if (req.fnName === 'call') { }
const callParams = { );
...req.particleContext,
tetraplets: {
},
};
resp.retCode = ResultCodes.success;
resp.result = service.call(callParams)
}
next();
});
} }
// Functions // Functions
@ -93,28 +54,9 @@ export function registerParService(...args: any) {
export function parFunc(node: string, c: (arg0: { external_addresses: string[]; }, callParams: CallParams<'arg0'>) => void, config?: {ttl?: number}): Promise<void>; export function parFunc(node: string, c: (arg0: { external_addresses: string[]; }, callParams: CallParams<'arg0'>) => void, config?: {ttl?: number}): Promise<void>;
export function parFunc(peer: FluencePeer, node: string, c: (arg0: { external_addresses: string[]; }, callParams: CallParams<'arg0'>) => void, config?: {ttl?: number}): Promise<void>; export function parFunc(peer: FluencePeer, node: string, c: (arg0: { external_addresses: string[]; }, callParams: CallParams<'arg0'>) => void, config?: {ttl?: number}): Promise<void>;
export function parFunc(...args: any) { export function parFunc(...args: any) {
let peer: FluencePeer;
let node: any;
let c: any;
let config: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
node = args[1];
c = args[2];
config = args[3];
} else {
peer = Fluence.getPeer();
node = args[0];
c = args[1];
config = args[2];
}
let request: RequestFlow; let script = `
const promise = new Promise<void>((resolve, reject) => { (xor
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
(xor
(seq (seq
(seq (seq
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
@ -145,46 +87,51 @@ export function parFunc(...args: any) {
) )
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3]) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3])
) )
`, `
) return callFunction(
.configHandler((h) => { args,
h.on('getDataSrv', '-relay-', () => { {
return peer.getStatus().relayPeerId; "functionName" : "parFunc",
}); "returnType" : {
h.on('getDataSrv', 'node', () => {return node;}); "tag" : "void"
h.use((req, resp, next) => { },
if(req.serviceId === 'callbackSrv' && req.fnName === 'c') { "argDefs" : [
const callParams = { {
...req.particleContext, "name" : "node",
tetraplets: { "argType" : {
arg0: req.tetraplets[0] "tag" : "primitive"
}, }
}; },
resp.retCode = ResultCodes.success; {
c(req.args[0], callParams); resp.result = {} "name" : "c",
"argType" : {
"tag" : "callback",
"callback" : {
"argDefs" : [
{
"name" : "arg0",
"argType" : {
"tag" : "primitive"
}
} }
next(); ],
}); "returnType" : {
"tag" : "void"
h.onEvent('callbackSrv', 'response', (args) => { }
});
h.onEvent('errorHandlingSrv', 'error', (args) => {
const [err] = args;
reject(err);
});
})
.handleScriptError(reject)
.handleTimeout(() => {
reject('Request timed out for parFunc');
})
if (config && config.ttl) {
r.withTTL(config.ttl)
} }
}
request = r.build(); }
}); ],
peer.internals.initiateFlow(request!); "names" : {
return Promise.race([promise, Promise.resolve()]); "relay" : "-relay-",
"getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
"responseFnName" : "response",
"errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
}
},
script
)
} }

View File

@ -8,11 +8,10 @@
*/ */
import { Fluence, FluencePeer } from '@fluencelabs/fluence'; import { Fluence, FluencePeer } from '@fluencelabs/fluence';
import { import {
ResultCodes, CallParams,
RequestFlow, callFunction,
RequestFlowBuilder, registerService,
CallParams } from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
function missingFields(obj: any, fields: string[]): string[] { function missingFields(obj: any, fields: string[]): string[] {
@ -31,60 +30,40 @@ export function registerAquaDHT(peer: FluencePeer, serviceId: string, service: A
export function registerAquaDHT(...args: any) { export function registerAquaDHT(...args: any) {
let peer: FluencePeer; registerService(
let serviceId: any; args,
let service: any; {
if (FluencePeer.isInstance(args[0])) { "defaultServiceId" : "test-dht",
peer = args[0]; "functions" : [
} else { {
peer = Fluence.getPeer(); "functionName" : "put_host_value",
} "argDefs" : [
{
if (typeof args[0] === 'string') { "name" : "key",
serviceId = args[0]; "argType" : {
} else if (typeof args[1] === 'string') { "tag" : "primitive"
serviceId = args[1]; }
} else {
serviceId = "test-dht"
}
// Figuring out which overload is the service.
// If the first argument is not Fluence Peer and it is an object, then it can only be the service def
// If the first argument is peer, we are checking further. The second argument might either be
// an object, that it must be the service object
// or a string, which is the service id. In that case the service is the third argument
if (!(FluencePeer.isInstance(args[0])) && typeof args[0] === 'object') {
service = args[0];
} else if (typeof args[1] === 'object') {
service = args[1];
} else {
service = args[2];
}
const incorrectServiceDefinitions = missingFields(service, ['put_host_value']);
if (!!incorrectServiceDefinitions.length) {
throw new Error("Error registering service AquaDHT: missing functions: " + incorrectServiceDefinitions.map((d) => "'" + d + "'").join(", "))
}
peer.internals.callServiceHandler.use((req, resp, next) => {
if (req.serviceId !== serviceId) {
next();
return;
}
if (req.fnName === 'put_host_value') {
const callParams = {
...req.particleContext,
tetraplets: {
key: req.tetraplets[0],value: req.tetraplets[1],service_id: req.tetraplets[2]
}, },
}; {
resp.retCode = ResultCodes.success; "name" : "value",
resp.result = service.put_host_value(req.args[0], req.args[1], req.args[2], callParams) "argType" : {
"tag" : "primitive"
}
},
{
"name" : "service_id",
"argType" : {
"tag" : "primitive"
}
}
],
"returnType" : {
"tag" : "primitive"
}
} }
]
next(); }
}); );
} }
// Functions // Functions
@ -93,31 +72,9 @@ export function registerAquaDHT(...args: any) {
export function putHostValue(key: string, value: string, service_id: string | null, config?: {ttl?: number}): Promise<string>; export function putHostValue(key: string, value: string, service_id: string | null, config?: {ttl?: number}): Promise<string>;
export function putHostValue(peer: FluencePeer, key: string, value: string, service_id: string | null, config?: {ttl?: number}): Promise<string>; export function putHostValue(peer: FluencePeer, key: string, value: string, service_id: string | null, config?: {ttl?: number}): Promise<string>;
export function putHostValue(...args: any) { export function putHostValue(...args: any) {
let peer: FluencePeer;
let key: any;
let value: any;
let service_id: any;
let config: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
key = args[1];
value = args[2];
service_id = args[3];
config = args[4];
} else {
peer = Fluence.getPeer();
key = args[0];
value = args[1];
service_id = args[2];
config = args[3];
}
let request: RequestFlow; let script = `
const promise = new Promise<string>((resolve, reject) => { (xor
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
(xor
(seq (seq
(seq (seq
(seq (seq
@ -139,37 +96,46 @@ export function putHostValue(...args: any) {
) )
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
) )
`, `
) return callFunction(
.configHandler((h) => { args,
h.on('getDataSrv', '-relay-', () => { {
return peer.getStatus().relayPeerId; "functionName" : "putHostValue",
}); "returnType" : {
h.on('getDataSrv', 'key', () => {return key;}); "tag" : "primitive"
h.on('getDataSrv', 'value', () => {return value;}); },
h.on('getDataSrv', 'service_id', () => {return service_id === null ? [] : [service_id];}); "argDefs" : [
h.onEvent('callbackSrv', 'response', (args) => { {
const [res] = args; "name" : "key",
resolve(res); "argType" : {
}); "tag" : "primitive"
h.onEvent('errorHandlingSrv', 'error', (args) => { }
const [err] = args; },
reject(err); {
}); "name" : "value",
}) "argType" : {
.handleScriptError(reject) "tag" : "primitive"
.handleTimeout(() => { }
reject('Request timed out for putHostValue'); },
}) {
"name" : "service_id",
if (config && config.ttl) { "argType" : {
r.withTTL(config.ttl) "tag" : "optional"
} }
}
request = r.build(); ],
}); "names" : {
peer.internals.initiateFlow(request!); "relay" : "-relay-",
return promise; "getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
"responseFnName" : "response",
"errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
}
},
script
)
} }
@ -177,25 +143,9 @@ export function putHostValue(...args: any) {
export function create_client_util(service_id: string, config?: {ttl?: number}): Promise<string>; export function create_client_util(service_id: string, config?: {ttl?: number}): Promise<string>;
export function create_client_util(peer: FluencePeer, service_id: string, config?: {ttl?: number}): Promise<string>; export function create_client_util(peer: FluencePeer, service_id: string, config?: {ttl?: number}): Promise<string>;
export function create_client_util(...args: any) { export function create_client_util(...args: any) {
let peer: FluencePeer;
let service_id: any;
let config: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
service_id = args[1];
config = args[2];
} else {
peer = Fluence.getPeer();
service_id = args[0];
config = args[1];
}
let request: RequestFlow; let script = `
const promise = new Promise<string>((resolve, reject) => { (xor
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
(xor
(seq (seq
(seq (seq
(seq (seq
@ -211,33 +161,32 @@ export function create_client_util(...args: any) {
) )
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
) )
`, `
) return callFunction(
.configHandler((h) => { args,
h.on('getDataSrv', '-relay-', () => { {
return peer.getStatus().relayPeerId; "functionName" : "create_client_util",
}); "returnType" : {
h.on('getDataSrv', 'service_id', () => {return service_id;}); "tag" : "primitive"
h.onEvent('callbackSrv', 'response', (args) => { },
const [res] = args; "argDefs" : [
resolve(res); {
}); "name" : "service_id",
h.onEvent('errorHandlingSrv', 'error', (args) => { "argType" : {
const [err] = args; "tag" : "primitive"
reject(err); }
}); }
}) ],
.handleScriptError(reject) "names" : {
.handleTimeout(() => { "relay" : "-relay-",
reject('Request timed out for create_client_util'); "getDataSrv" : "getDataSrv",
}) "callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
if (config && config.ttl) { "responseFnName" : "response",
r.withTTL(config.ttl) "errorHandlingSrv" : "errorHandlingSrv",
} "errorFnName" : "error"
}
request = r.build(); },
}); script
peer.internals.initiateFlow(request!); )
return promise;
} }

View File

@ -8,11 +8,10 @@
*/ */
import { Fluence, FluencePeer } from '@fluencelabs/fluence'; import { Fluence, FluencePeer } from '@fluencelabs/fluence';
import { import {
ResultCodes, CallParams,
RequestFlow, callFunction,
RequestFlowBuilder, registerService,
CallParams } from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
function missingFields(obj: any, fields: string[]): string[] { function missingFields(obj: any, fields: string[]): string[] {
@ -31,60 +30,28 @@ export function registerPrintln(peer: FluencePeer, serviceId: string, service: P
export function registerPrintln(...args: any) { export function registerPrintln(...args: any) {
let peer: FluencePeer; registerService(
let serviceId: any; args,
let service: any; {
if (FluencePeer.isInstance(args[0])) { "defaultServiceId" : "println-service-id",
peer = args[0]; "functions" : [
} else { {
peer = Fluence.getPeer(); "functionName" : "print",
} "argDefs" : [
{
if (typeof args[0] === 'string') { "name" : "arg0",
serviceId = args[0]; "argType" : {
} else if (typeof args[1] === 'string') { "tag" : "primitive"
serviceId = args[1]; }
} else { }
serviceId = "println-service-id" ],
} "returnType" : {
"tag" : "void"
// Figuring out which overload is the service. }
// If the first argument is not Fluence Peer and it is an object, then it can only be the service def
// If the first argument is peer, we are checking further. The second argument might either be
// an object, that it must be the service object
// or a string, which is the service id. In that case the service is the third argument
if (!(FluencePeer.isInstance(args[0])) && typeof args[0] === 'object') {
service = args[0];
} else if (typeof args[1] === 'object') {
service = args[1];
} else {
service = args[2];
}
const incorrectServiceDefinitions = missingFields(service, ['print']);
if (!!incorrectServiceDefinitions.length) {
throw new Error("Error registering service Println: missing functions: " + incorrectServiceDefinitions.map((d) => "'" + d + "'").join(", "))
}
peer.internals.callServiceHandler.use((req, resp, next) => {
if (req.serviceId !== serviceId) {
next();
return;
} }
]
if (req.fnName === 'print') { }
const callParams = { );
...req.particleContext,
tetraplets: {
arg0: req.tetraplets[0]
},
};
resp.retCode = ResultCodes.success;
service.print(req.args[0], callParams); resp.result = {}
}
next();
});
} }
// Functions // Functions
@ -93,25 +60,9 @@ export function registerPrintln(...args: any) {
export function print(str: string, config?: {ttl?: number}): Promise<void>; export function print(str: string, config?: {ttl?: number}): Promise<void>;
export function print(peer: FluencePeer, str: string, config?: {ttl?: number}): Promise<void>; export function print(peer: FluencePeer, str: string, config?: {ttl?: number}): Promise<void>;
export function print(...args: any) { export function print(...args: any) {
let peer: FluencePeer;
let str: any;
let config: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
str = args[1];
config = args[2];
} else {
peer = Fluence.getPeer();
str = args[0];
config = args[1];
}
let request: RequestFlow; let script = `
const promise = new Promise<void>((resolve, reject) => { (xor
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
(xor
(seq (seq
(seq (seq
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
@ -121,32 +72,32 @@ export function print(...args: any) {
) )
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1]) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1])
) )
`, `
) return callFunction(
.configHandler((h) => { args,
h.on('getDataSrv', '-relay-', () => { {
return peer.getStatus().relayPeerId; "functionName" : "print",
}); "returnType" : {
h.on('getDataSrv', 'str', () => {return str;}); "tag" : "void"
h.onEvent('callbackSrv', 'response', (args) => { },
"argDefs" : [
}); {
h.onEvent('errorHandlingSrv', 'error', (args) => { "name" : "str",
const [err] = args; "argType" : {
reject(err); "tag" : "primitive"
}); }
}) }
.handleScriptError(reject) ],
.handleTimeout(() => { "names" : {
reject('Request timed out for print'); "relay" : "-relay-",
}) "getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
if (config && config.ttl) { "responseSrv" : "callbackSrv",
r.withTTL(config.ttl) "responseFnName" : "response",
} "errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
request = r.build(); }
}); },
peer.internals.initiateFlow(request!); script
return Promise.race([promise, Promise.resolve()]); )
} }

View File

@ -8,11 +8,10 @@
*/ */
import { Fluence, FluencePeer } from '@fluencelabs/fluence'; import { Fluence, FluencePeer } from '@fluencelabs/fluence';
import { import {
ResultCodes, CallParams,
RequestFlow, callFunction,
RequestFlowBuilder, registerService,
CallParams } from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
function missingFields(obj: any, fields: string[]): string[] { function missingFields(obj: any, fields: string[]): string[] {
@ -31,60 +30,22 @@ export function registerOpA(peer: FluencePeer, serviceId: string, service: OpADe
export function registerOpA(...args: any) { export function registerOpA(...args: any) {
let peer: FluencePeer; registerService(
let serviceId: any; args,
let service: any; {
if (FluencePeer.isInstance(args[0])) { "defaultServiceId" : "pop",
peer = args[0]; "functions" : [
} else { {
peer = Fluence.getPeer(); "functionName" : "get_str",
} "argDefs" : [
],
if (typeof args[0] === 'string') { "returnType" : {
serviceId = args[0]; "tag" : "primitive"
} else if (typeof args[1] === 'string') { }
serviceId = args[1];
} else {
serviceId = "pop"
}
// Figuring out which overload is the service.
// If the first argument is not Fluence Peer and it is an object, then it can only be the service def
// If the first argument is peer, we are checking further. The second argument might either be
// an object, that it must be the service object
// or a string, which is the service id. In that case the service is the third argument
if (!(FluencePeer.isInstance(args[0])) && typeof args[0] === 'object') {
service = args[0];
} else if (typeof args[1] === 'object') {
service = args[1];
} else {
service = args[2];
}
const incorrectServiceDefinitions = missingFields(service, ['get_str']);
if (!!incorrectServiceDefinitions.length) {
throw new Error("Error registering service OpA: missing functions: " + incorrectServiceDefinitions.map((d) => "'" + d + "'").join(", "))
}
peer.internals.callServiceHandler.use((req, resp, next) => {
if (req.serviceId !== serviceId) {
next();
return;
} }
]
if (req.fnName === 'get_str') { }
const callParams = { );
...req.particleContext,
tetraplets: {
},
};
resp.retCode = ResultCodes.success;
resp.result = service.get_str(callParams)
}
next();
});
} }
// Functions // Functions
@ -93,23 +54,9 @@ export function registerOpA(...args: any) {
export function get_results(config?: {ttl?: number}): Promise<string[]>; export function get_results(config?: {ttl?: number}): Promise<string[]>;
export function get_results(peer: FluencePeer, config?: {ttl?: number}): Promise<string[]>; export function get_results(peer: FluencePeer, config?: {ttl?: number}): Promise<string[]>;
export function get_results(...args: any) { export function get_results(...args: any) {
let peer: FluencePeer;
let config: any; let script = `
if (FluencePeer.isInstance(args[0])) { (xor
peer = args[0];
config = args[1];
} else {
peer = Fluence.getPeer();
config = args[0];
}
let request: RequestFlow;
const promise = new Promise<string[]>((resolve, reject) => {
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
(xor
(seq (seq
(seq (seq
(seq (seq
@ -128,33 +75,26 @@ export function get_results(...args: any) {
) )
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
) )
`, `
) return callFunction(
.configHandler((h) => { args,
h.on('getDataSrv', '-relay-', () => { {
return peer.getStatus().relayPeerId; "functionName" : "get_results",
}); "returnType" : {
"tag" : "primitive"
h.onEvent('callbackSrv', 'response', (args) => { },
const [res] = args; "argDefs" : [
resolve(res); ],
}); "names" : {
h.onEvent('errorHandlingSrv', 'error', (args) => { "relay" : "-relay-",
const [err] = args; "getDataSrv" : "getDataSrv",
reject(err); "callbackSrv" : "callbackSrv",
}); "responseSrv" : "callbackSrv",
}) "responseFnName" : "response",
.handleScriptError(reject) "errorHandlingSrv" : "errorHandlingSrv",
.handleTimeout(() => { "errorFnName" : "error"
reject('Request timed out for get_results'); }
}) },
script
if (config && config.ttl) { )
r.withTTL(config.ttl)
}
request = r.build();
});
peer.internals.initiateFlow(request!);
return promise;
} }

View File

@ -8,11 +8,10 @@
*/ */
import { Fluence, FluencePeer } from '@fluencelabs/fluence'; import { Fluence, FluencePeer } from '@fluencelabs/fluence';
import { import {
ResultCodes, CallParams,
RequestFlow, callFunction,
RequestFlowBuilder, registerService,
CallParams } from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
function missingFields(obj: any, fields: string[]): string[] { function missingFields(obj: any, fields: string[]): string[] {
@ -27,23 +26,9 @@ function missingFields(obj: any, fields: string[]): string[] {
export function returnLiteral(config?: {ttl?: number}): Promise<string>; export function returnLiteral(config?: {ttl?: number}): Promise<string>;
export function returnLiteral(peer: FluencePeer, config?: {ttl?: number}): Promise<string>; export function returnLiteral(peer: FluencePeer, config?: {ttl?: number}): Promise<string>;
export function returnLiteral(...args: any) { export function returnLiteral(...args: any) {
let peer: FluencePeer;
let config: any; let script = `
if (FluencePeer.isInstance(args[0])) { (xor
peer = args[0];
config = args[1];
} else {
peer = Fluence.getPeer();
config = args[0];
}
let request: RequestFlow;
const promise = new Promise<string>((resolve, reject) => {
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
(xor
(seq (seq
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
(xor (xor
@ -53,33 +38,26 @@ export function returnLiteral(...args: any) {
) )
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
) )
`, `
) return callFunction(
.configHandler((h) => { args,
h.on('getDataSrv', '-relay-', () => { {
return peer.getStatus().relayPeerId; "functionName" : "returnLiteral",
}); "returnType" : {
"tag" : "primitive"
h.onEvent('callbackSrv', 'response', (args) => { },
const [res] = args; "argDefs" : [
resolve(res); ],
}); "names" : {
h.onEvent('errorHandlingSrv', 'error', (args) => { "relay" : "-relay-",
const [err] = args; "getDataSrv" : "getDataSrv",
reject(err); "callbackSrv" : "callbackSrv",
}); "responseSrv" : "callbackSrv",
}) "responseFnName" : "response",
.handleScriptError(reject) "errorHandlingSrv" : "errorHandlingSrv",
.handleTimeout(() => { "errorFnName" : "error"
reject('Request timed out for returnLiteral'); }
}) },
script
if (config && config.ttl) { )
r.withTTL(config.ttl)
}
request = r.build();
});
peer.internals.initiateFlow(request!);
return promise;
} }

View File

@ -8,11 +8,10 @@
*/ */
import { Fluence, FluencePeer } from '@fluencelabs/fluence'; import { Fluence, FluencePeer } from '@fluencelabs/fluence';
import { import {
ResultCodes, CallParams,
RequestFlow, callFunction,
RequestFlowBuilder, registerService,
CallParams } from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
function missingFields(obj: any, fields: string[]): string[] { function missingFields(obj: any, fields: string[]): string[] {
@ -31,60 +30,28 @@ export function registerStringer(peer: FluencePeer, serviceId: string, service:
export function registerStringer(...args: any) { export function registerStringer(...args: any) {
let peer: FluencePeer; registerService(
let serviceId: any; args,
let service: any; {
if (FluencePeer.isInstance(args[0])) { "defaultServiceId" : "stringer-id",
peer = args[0]; "functions" : [
} else { {
peer = Fluence.getPeer(); "functionName" : "returnString",
} "argDefs" : [
{
if (typeof args[0] === 'string') { "name" : "arg0",
serviceId = args[0]; "argType" : {
} else if (typeof args[1] === 'string') { "tag" : "primitive"
serviceId = args[1]; }
} else { }
serviceId = "stringer-id" ],
} "returnType" : {
"tag" : "primitive"
// Figuring out which overload is the service. }
// If the first argument is not Fluence Peer and it is an object, then it can only be the service def
// If the first argument is peer, we are checking further. The second argument might either be
// an object, that it must be the service object
// or a string, which is the service id. In that case the service is the third argument
if (!(FluencePeer.isInstance(args[0])) && typeof args[0] === 'object') {
service = args[0];
} else if (typeof args[1] === 'object') {
service = args[1];
} else {
service = args[2];
}
const incorrectServiceDefinitions = missingFields(service, ['returnString']);
if (!!incorrectServiceDefinitions.length) {
throw new Error("Error registering service Stringer: missing functions: " + incorrectServiceDefinitions.map((d) => "'" + d + "'").join(", "))
}
peer.internals.callServiceHandler.use((req, resp, next) => {
if (req.serviceId !== serviceId) {
next();
return;
} }
]
if (req.fnName === 'returnString') { }
const callParams = { );
...req.particleContext,
tetraplets: {
arg0: req.tetraplets[0]
},
};
resp.retCode = ResultCodes.success;
resp.result = service.returnString(req.args[0], callParams)
}
next();
});
} }
// Functions // Functions
@ -93,23 +60,9 @@ export function registerStringer(...args: any) {
export function returnNone(config?: {ttl?: number}): Promise<string | null>; export function returnNone(config?: {ttl?: number}): Promise<string | null>;
export function returnNone(peer: FluencePeer, config?: {ttl?: number}): Promise<string | null>; export function returnNone(peer: FluencePeer, config?: {ttl?: number}): Promise<string | null>;
export function returnNone(...args: any) { export function returnNone(...args: any) {
let peer: FluencePeer;
let config: any; let script = `
if (FluencePeer.isInstance(args[0])) { (xor
peer = args[0];
config = args[1];
} else {
peer = Fluence.getPeer();
config = args[0];
}
let request: RequestFlow;
const promise = new Promise<string | null>((resolve, reject) => {
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
(xor
(seq (seq
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
(xor (xor
@ -119,39 +72,28 @@ export function returnNone(...args: any) {
) )
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
) )
`, `
) return callFunction(
.configHandler((h) => { args,
h.on('getDataSrv', '-relay-', () => { {
return peer.getStatus().relayPeerId; "functionName" : "returnNone",
}); "returnType" : {
"tag" : "optional"
h.onEvent('callbackSrv', 'response', (args) => { },
let [opt] = args; "argDefs" : [
if (Array.isArray(opt)) { ],
if (opt.length === 0) { resolve(null); } "names" : {
opt = opt[0]; "relay" : "-relay-",
} "getDataSrv" : "getDataSrv",
return resolve(opt); "callbackSrv" : "callbackSrv",
}); "responseSrv" : "callbackSrv",
h.onEvent('errorHandlingSrv', 'error', (args) => { "responseFnName" : "response",
const [err] = args; "errorHandlingSrv" : "errorHandlingSrv",
reject(err); "errorFnName" : "error"
}); }
}) },
.handleScriptError(reject) script
.handleTimeout(() => { )
reject('Request timed out for returnNone');
})
if (config && config.ttl) {
r.withTTL(config.ttl)
}
request = r.build();
});
peer.internals.initiateFlow(request!);
return promise;
} }
@ -159,23 +101,9 @@ export function returnNone(...args: any) {
export function stringNone(config?: {ttl?: number}): Promise<string | null>; export function stringNone(config?: {ttl?: number}): Promise<string | null>;
export function stringNone(peer: FluencePeer, config?: {ttl?: number}): Promise<string | null>; export function stringNone(peer: FluencePeer, config?: {ttl?: number}): Promise<string | null>;
export function stringNone(...args: any) { export function stringNone(...args: any) {
let peer: FluencePeer;
let config: any; let script = `
if (FluencePeer.isInstance(args[0])) { (xor
peer = args[0];
config = args[1];
} else {
peer = Fluence.getPeer();
config = args[0];
}
let request: RequestFlow;
const promise = new Promise<string | null>((resolve, reject) => {
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
(xor
(seq (seq
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
(xor (xor
@ -185,39 +113,28 @@ export function stringNone(...args: any) {
) )
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
) )
`, `
) return callFunction(
.configHandler((h) => { args,
h.on('getDataSrv', '-relay-', () => { {
return peer.getStatus().relayPeerId; "functionName" : "stringNone",
}); "returnType" : {
"tag" : "optional"
h.onEvent('callbackSrv', 'response', (args) => { },
let [opt] = args; "argDefs" : [
if (Array.isArray(opt)) { ],
if (opt.length === 0) { resolve(null); } "names" : {
opt = opt[0]; "relay" : "-relay-",
} "getDataSrv" : "getDataSrv",
return resolve(opt); "callbackSrv" : "callbackSrv",
}); "responseSrv" : "callbackSrv",
h.onEvent('errorHandlingSrv', 'error', (args) => { "responseFnName" : "response",
const [err] = args; "errorHandlingSrv" : "errorHandlingSrv",
reject(err); "errorFnName" : "error"
}); }
}) },
.handleScriptError(reject) script
.handleTimeout(() => { )
reject('Request timed out for stringNone');
})
if (config && config.ttl) {
r.withTTL(config.ttl)
}
request = r.build();
});
peer.internals.initiateFlow(request!);
return promise;
} }
@ -225,23 +142,9 @@ export function stringNone(...args: any) {
export function returnNil(config?: {ttl?: number}): Promise<string[]>; export function returnNil(config?: {ttl?: number}): Promise<string[]>;
export function returnNil(peer: FluencePeer, config?: {ttl?: number}): Promise<string[]>; export function returnNil(peer: FluencePeer, config?: {ttl?: number}): Promise<string[]>;
export function returnNil(...args: any) { export function returnNil(...args: any) {
let peer: FluencePeer;
let config: any; let script = `
if (FluencePeer.isInstance(args[0])) { (xor
peer = args[0];
config = args[1];
} else {
peer = Fluence.getPeer();
config = args[0];
}
let request: RequestFlow;
const promise = new Promise<string[]>((resolve, reject) => {
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
(xor
(seq (seq
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
(xor (xor
@ -251,35 +154,28 @@ export function returnNil(...args: any) {
) )
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
) )
`, `
) return callFunction(
.configHandler((h) => { args,
h.on('getDataSrv', '-relay-', () => { {
return peer.getStatus().relayPeerId; "functionName" : "returnNil",
}); "returnType" : {
"tag" : "primitive"
h.onEvent('callbackSrv', 'response', (args) => { },
const [res] = args; "argDefs" : [
resolve(res); ],
}); "names" : {
h.onEvent('errorHandlingSrv', 'error', (args) => { "relay" : "-relay-",
const [err] = args; "getDataSrv" : "getDataSrv",
reject(err); "callbackSrv" : "callbackSrv",
}); "responseSrv" : "callbackSrv",
}) "responseFnName" : "response",
.handleScriptError(reject) "errorHandlingSrv" : "errorHandlingSrv",
.handleTimeout(() => { "errorFnName" : "error"
reject('Request timed out for returnNil'); }
}) },
script
if (config && config.ttl) { )
r.withTTL(config.ttl)
}
request = r.build();
});
peer.internals.initiateFlow(request!);
return promise;
} }
@ -287,23 +183,9 @@ export function returnNil(...args: any) {
export function stringNil(config?: {ttl?: number}): Promise<string[]>; export function stringNil(config?: {ttl?: number}): Promise<string[]>;
export function stringNil(peer: FluencePeer, config?: {ttl?: number}): Promise<string[]>; export function stringNil(peer: FluencePeer, config?: {ttl?: number}): Promise<string[]>;
export function stringNil(...args: any) { export function stringNil(...args: any) {
let peer: FluencePeer;
let config: any; let script = `
if (FluencePeer.isInstance(args[0])) { (xor
peer = args[0];
config = args[1];
} else {
peer = Fluence.getPeer();
config = args[0];
}
let request: RequestFlow;
const promise = new Promise<string[]>((resolve, reject) => {
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
(xor
(seq (seq
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-) (call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
(xor (xor
@ -313,35 +195,28 @@ export function stringNil(...args: any) {
) )
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
) )
`, `
) return callFunction(
.configHandler((h) => { args,
h.on('getDataSrv', '-relay-', () => { {
return peer.getStatus().relayPeerId; "functionName" : "stringNil",
}); "returnType" : {
"tag" : "primitive"
h.onEvent('callbackSrv', 'response', (args) => { },
const [res] = args; "argDefs" : [
resolve(res); ],
}); "names" : {
h.onEvent('errorHandlingSrv', 'error', (args) => { "relay" : "-relay-",
const [err] = args; "getDataSrv" : "getDataSrv",
reject(err); "callbackSrv" : "callbackSrv",
}); "responseSrv" : "callbackSrv",
}) "responseFnName" : "response",
.handleScriptError(reject) "errorHandlingSrv" : "errorHandlingSrv",
.handleTimeout(() => { "errorFnName" : "error"
reject('Request timed out for stringNil'); }
}) },
script
if (config && config.ttl) { )
r.withTTL(config.ttl)
}
request = r.build();
});
peer.internals.initiateFlow(request!);
return promise;
} }
@ -349,25 +224,9 @@ export function stringNil(...args: any) {
export function checkStreams(ch: string[], config?: {ttl?: number}): Promise<string[]>; export function checkStreams(ch: string[], config?: {ttl?: number}): Promise<string[]>;
export function checkStreams(peer: FluencePeer, ch: string[], config?: {ttl?: number}): Promise<string[]>; export function checkStreams(peer: FluencePeer, ch: string[], config?: {ttl?: number}): Promise<string[]>;
export function checkStreams(...args: any) { export function checkStreams(...args: any) {
let peer: FluencePeer;
let ch: any;
let config: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
ch = args[1];
config = args[2];
} else {
peer = Fluence.getPeer();
ch = args[0];
config = args[1];
}
let request: RequestFlow; let script = `
const promise = new Promise<string[]>((resolve, reject) => { (xor
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
(xor
(seq (seq
(seq (seq
(seq (seq
@ -394,33 +253,32 @@ export function checkStreams(...args: any) {
) )
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
) )
`, `
) return callFunction(
.configHandler((h) => { args,
h.on('getDataSrv', '-relay-', () => { {
return peer.getStatus().relayPeerId; "functionName" : "checkStreams",
}); "returnType" : {
h.on('getDataSrv', 'ch', () => {return ch;}); "tag" : "primitive"
h.onEvent('callbackSrv', 'response', (args) => { },
const [res] = args; "argDefs" : [
resolve(res); {
}); "name" : "ch",
h.onEvent('errorHandlingSrv', 'error', (args) => { "argType" : {
const [err] = args; "tag" : "primitive"
reject(err); }
}); }
}) ],
.handleScriptError(reject) "names" : {
.handleTimeout(() => { "relay" : "-relay-",
reject('Request timed out for checkStreams'); "getDataSrv" : "getDataSrv",
}) "callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
if (config && config.ttl) { "responseFnName" : "response",
r.withTTL(config.ttl) "errorHandlingSrv" : "errorHandlingSrv",
} "errorFnName" : "error"
}
request = r.build(); },
}); script
peer.internals.initiateFlow(request!); )
return promise;
} }

View File

@ -8,11 +8,10 @@
*/ */
import { Fluence, FluencePeer } from '@fluencelabs/fluence'; import { Fluence, FluencePeer } from '@fluencelabs/fluence';
import { import {
ResultCodes, CallParams,
RequestFlow, callFunction,
RequestFlowBuilder, registerService,
CallParams } from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
function missingFields(obj: any, fields: string[]): string[] { function missingFields(obj: any, fields: string[]): string[] {
@ -31,60 +30,28 @@ export function registerTestService(peer: FluencePeer, serviceId: string, servic
export function registerTestService(...args: any) { export function registerTestService(...args: any) {
let peer: FluencePeer; registerService(
let serviceId: any; args,
let service: any; {
if (FluencePeer.isInstance(args[0])) { "defaultServiceId" : "test-service",
peer = args[0]; "functions" : [
} else { {
peer = Fluence.getPeer(); "functionName" : "get_records",
} "argDefs" : [
{
if (typeof args[0] === 'string') { "name" : "key",
serviceId = args[0]; "argType" : {
} else if (typeof args[1] === 'string') { "tag" : "primitive"
serviceId = args[1]; }
} else { }
serviceId = "test-service" ],
} "returnType" : {
"tag" : "primitive"
// Figuring out which overload is the service. }
// If the first argument is not Fluence Peer and it is an object, then it can only be the service def
// If the first argument is peer, we are checking further. The second argument might either be
// an object, that it must be the service object
// or a string, which is the service id. In that case the service is the third argument
if (!(FluencePeer.isInstance(args[0])) && typeof args[0] === 'object') {
service = args[0];
} else if (typeof args[1] === 'object') {
service = args[1];
} else {
service = args[2];
}
const incorrectServiceDefinitions = missingFields(service, ['get_records']);
if (!!incorrectServiceDefinitions.length) {
throw new Error("Error registering service TestService: missing functions: " + incorrectServiceDefinitions.map((d) => "'" + d + "'").join(", "))
}
peer.internals.callServiceHandler.use((req, resp, next) => {
if (req.serviceId !== serviceId) {
next();
return;
} }
]
if (req.fnName === 'get_records') { }
const callParams = { );
...req.particleContext,
tetraplets: {
key: req.tetraplets[0]
},
};
resp.retCode = ResultCodes.success;
resp.result = service.get_records(req.args[0], callParams)
}
next();
});
} }
// Functions // Functions
@ -93,28 +60,9 @@ export function registerTestService(...args: any) {
export function append_records(peer_: string, srum: string[][], config?: {ttl?: number}): Promise<void>; export function append_records(peer_: string, srum: string[][], config?: {ttl?: number}): Promise<void>;
export function append_records(peer: FluencePeer, peer_: string, srum: string[][], config?: {ttl?: number}): Promise<void>; export function append_records(peer: FluencePeer, peer_: string, srum: string[][], config?: {ttl?: number}): Promise<void>;
export function append_records(...args: any) { export function append_records(...args: any) {
let peer: FluencePeer;
let peer_: any;
let srum: any;
let config: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
peer_ = args[1];
srum = args[2];
config = args[3];
} else {
peer = Fluence.getPeer();
peer_ = args[0];
srum = args[1];
config = args[2];
}
let request: RequestFlow; let script = `
const promise = new Promise<void>((resolve, reject) => { (xor
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
(xor
(seq (seq
(seq (seq
(seq (seq
@ -135,35 +83,40 @@ export function append_records(...args: any) {
) )
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1]) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1])
) )
`, `
) return callFunction(
.configHandler((h) => { args,
h.on('getDataSrv', '-relay-', () => { {
return peer.getStatus().relayPeerId; "functionName" : "append_records",
}); "returnType" : {
h.on('getDataSrv', 'peer', () => {return peer_;}); "tag" : "void"
h.on('getDataSrv', 'srum', () => {return srum;}); },
h.onEvent('callbackSrv', 'response', (args) => { "argDefs" : [
{
}); "name" : "peer",
h.onEvent('errorHandlingSrv', 'error', (args) => { "argType" : {
const [err] = args; "tag" : "primitive"
reject(err); }
}); },
}) {
.handleScriptError(reject) "name" : "srum",
.handleTimeout(() => { "argType" : {
reject('Request timed out for append_records'); "tag" : "primitive"
}) }
}
if (config && config.ttl) { ],
r.withTTL(config.ttl) "names" : {
} "relay" : "-relay-",
"getDataSrv" : "getDataSrv",
request = r.build(); "callbackSrv" : "callbackSrv",
}); "responseSrv" : "callbackSrv",
peer.internals.initiateFlow(request!); "responseFnName" : "response",
return Promise.race([promise, Promise.resolve()]); "errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
}
},
script
)
} }
@ -171,25 +124,9 @@ export function append_records(...args: any) {
export function retrieve_records(peer_: string, config?: {ttl?: number}): Promise<string[][]>; export function retrieve_records(peer_: string, config?: {ttl?: number}): Promise<string[][]>;
export function retrieve_records(peer: FluencePeer, peer_: string, config?: {ttl?: number}): Promise<string[][]>; export function retrieve_records(peer: FluencePeer, peer_: string, config?: {ttl?: number}): Promise<string[][]>;
export function retrieve_records(...args: any) { export function retrieve_records(...args: any) {
let peer: FluencePeer;
let peer_: any;
let config: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
peer_ = args[1];
config = args[2];
} else {
peer = Fluence.getPeer();
peer_ = args[0];
config = args[1];
}
let request: RequestFlow; let script = `
const promise = new Promise<string[][]>((resolve, reject) => { (xor
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
(xor
(seq (seq
(seq (seq
(seq (seq
@ -205,33 +142,32 @@ export function retrieve_records(...args: any) {
) )
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
) )
`, `
) return callFunction(
.configHandler((h) => { args,
h.on('getDataSrv', '-relay-', () => { {
return peer.getStatus().relayPeerId; "functionName" : "retrieve_records",
}); "returnType" : {
h.on('getDataSrv', 'peer', () => {return peer_;}); "tag" : "primitive"
h.onEvent('callbackSrv', 'response', (args) => { },
const [res] = args; "argDefs" : [
resolve(res); {
}); "name" : "peer",
h.onEvent('errorHandlingSrv', 'error', (args) => { "argType" : {
const [err] = args; "tag" : "primitive"
reject(err); }
}); }
}) ],
.handleScriptError(reject) "names" : {
.handleTimeout(() => { "relay" : "-relay-",
reject('Request timed out for retrieve_records'); "getDataSrv" : "getDataSrv",
}) "callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
if (config && config.ttl) { "responseFnName" : "response",
r.withTTL(config.ttl) "errorHandlingSrv" : "errorHandlingSrv",
} "errorFnName" : "error"
}
request = r.build(); },
}); script
peer.internals.initiateFlow(request!); )
return promise;
} }

View File

@ -8,11 +8,10 @@
*/ */
import { Fluence, FluencePeer } from '@fluencelabs/fluence'; import { Fluence, FluencePeer } from '@fluencelabs/fluence';
import { import {
ResultCodes, CallParams,
RequestFlow, callFunction,
RequestFlowBuilder, registerService,
CallParams } from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
function missingFields(obj: any, fields: string[]): string[] { function missingFields(obj: any, fields: string[]): string[] {
@ -31,60 +30,28 @@ export function registerDTGetter(peer: FluencePeer, serviceId: string, service:
export function registerDTGetter(...args: any) { export function registerDTGetter(...args: any) {
let peer: FluencePeer; registerService(
let serviceId: any; args,
let service: any; {
if (FluencePeer.isInstance(args[0])) { "defaultServiceId" : "get-dt",
peer = args[0]; "functions" : [
} else { {
peer = Fluence.getPeer(); "functionName" : "get_dt",
} "argDefs" : [
{
if (typeof args[0] === 'string') { "name" : "s",
serviceId = args[0]; "argType" : {
} else if (typeof args[1] === 'string') { "tag" : "primitive"
serviceId = args[1]; }
} else { }
serviceId = "get-dt" ],
} "returnType" : {
"tag" : "primitive"
// Figuring out which overload is the service. }
// If the first argument is not Fluence Peer and it is an object, then it can only be the service def
// If the first argument is peer, we are checking further. The second argument might either be
// an object, that it must be the service object
// or a string, which is the service id. In that case the service is the third argument
if (!(FluencePeer.isInstance(args[0])) && typeof args[0] === 'object') {
service = args[0];
} else if (typeof args[1] === 'object') {
service = args[1];
} else {
service = args[2];
}
const incorrectServiceDefinitions = missingFields(service, ['get_dt']);
if (!!incorrectServiceDefinitions.length) {
throw new Error("Error registering service DTGetter: missing functions: " + incorrectServiceDefinitions.map((d) => "'" + d + "'").join(", "))
}
peer.internals.callServiceHandler.use((req, resp, next) => {
if (req.serviceId !== serviceId) {
next();
return;
} }
]
if (req.fnName === 'get_dt') { }
const callParams = { );
...req.particleContext,
tetraplets: {
s: req.tetraplets[0]
},
};
resp.retCode = ResultCodes.success;
resp.result = service.get_dt(req.args[0], callParams)
}
next();
});
} }
// Functions // Functions
@ -93,25 +60,9 @@ export function registerDTGetter(...args: any) {
export function use_name1(name: string, config?: {ttl?: number}): Promise<string>; export function use_name1(name: string, config?: {ttl?: number}): Promise<string>;
export function use_name1(peer: FluencePeer, name: string, config?: {ttl?: number}): Promise<string>; export function use_name1(peer: FluencePeer, name: string, config?: {ttl?: number}): Promise<string>;
export function use_name1(...args: any) { export function use_name1(...args: any) {
let peer: FluencePeer;
let name: any;
let config: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
name = args[1];
config = args[2];
} else {
peer = Fluence.getPeer();
name = args[0];
config = args[1];
}
let request: RequestFlow; let script = `
const promise = new Promise<string>((resolve, reject) => { (xor
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
(xor
(seq (seq
(seq (seq
(seq (seq
@ -127,35 +78,34 @@ export function use_name1(...args: any) {
) )
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
) )
`, `
) return callFunction(
.configHandler((h) => { args,
h.on('getDataSrv', '-relay-', () => { {
return peer.getStatus().relayPeerId; "functionName" : "use_name1",
}); "returnType" : {
h.on('getDataSrv', 'name', () => {return name;}); "tag" : "primitive"
h.onEvent('callbackSrv', 'response', (args) => { },
const [res] = args; "argDefs" : [
resolve(res); {
}); "name" : "name",
h.onEvent('errorHandlingSrv', 'error', (args) => { "argType" : {
const [err] = args; "tag" : "primitive"
reject(err); }
}); }
}) ],
.handleScriptError(reject) "names" : {
.handleTimeout(() => { "relay" : "-relay-",
reject('Request timed out for use_name1'); "getDataSrv" : "getDataSrv",
}) "callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
if (config && config.ttl) { "responseFnName" : "response",
r.withTTL(config.ttl) "errorHandlingSrv" : "errorHandlingSrv",
} "errorFnName" : "error"
}
request = r.build(); },
}); script
peer.internals.initiateFlow(request!); )
return promise;
} }
@ -163,25 +113,9 @@ export function use_name1(...args: any) {
export function use_name2(name: string, config?: {ttl?: number}): Promise<string[]>; export function use_name2(name: string, config?: {ttl?: number}): Promise<string[]>;
export function use_name2(peer: FluencePeer, name: string, config?: {ttl?: number}): Promise<string[]>; export function use_name2(peer: FluencePeer, name: string, config?: {ttl?: number}): Promise<string[]>;
export function use_name2(...args: any) { export function use_name2(...args: any) {
let peer: FluencePeer;
let name: any;
let config: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
name = args[1];
config = args[2];
} else {
peer = Fluence.getPeer();
name = args[0];
config = args[1];
}
let request: RequestFlow; let script = `
const promise = new Promise<string[]>((resolve, reject) => { (xor
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
(xor
(seq (seq
(seq (seq
(seq (seq
@ -212,33 +146,32 @@ export function use_name2(...args: any) {
) )
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
) )
`, `
) return callFunction(
.configHandler((h) => { args,
h.on('getDataSrv', '-relay-', () => { {
return peer.getStatus().relayPeerId; "functionName" : "use_name2",
}); "returnType" : {
h.on('getDataSrv', 'name', () => {return name;}); "tag" : "primitive"
h.onEvent('callbackSrv', 'response', (args) => { },
const [res] = args; "argDefs" : [
resolve(res); {
}); "name" : "name",
h.onEvent('errorHandlingSrv', 'error', (args) => { "argType" : {
const [err] = args; "tag" : "primitive"
reject(err); }
}); }
}) ],
.handleScriptError(reject) "names" : {
.handleTimeout(() => { "relay" : "-relay-",
reject('Request timed out for use_name2'); "getDataSrv" : "getDataSrv",
}) "callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
if (config && config.ttl) { "responseFnName" : "response",
r.withTTL(config.ttl) "errorHandlingSrv" : "errorHandlingSrv",
} "errorFnName" : "error"
}
request = r.build(); },
}); script
peer.internals.initiateFlow(request!); )
return promise;
} }

View File

@ -8,11 +8,10 @@
*/ */
import { Fluence, FluencePeer } from '@fluencelabs/fluence'; import { Fluence, FluencePeer } from '@fluencelabs/fluence';
import { import {
ResultCodes, CallParams,
RequestFlow, callFunction,
RequestFlowBuilder, registerService,
CallParams } from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
function missingFields(obj: any, fields: string[]): string[] { function missingFields(obj: any, fields: string[]): string[] {
@ -31,60 +30,34 @@ export function registerConcatSubs(peer: FluencePeer, serviceId: string, service
export function registerConcatSubs(...args: any) { export function registerConcatSubs(...args: any) {
let peer: FluencePeer; registerService(
let serviceId: any; args,
let service: any; {
if (FluencePeer.isInstance(args[0])) { "defaultServiceId" : "concat_subs",
peer = args[0]; "functions" : [
} else { {
peer = Fluence.getPeer(); "functionName" : "get_some",
} "argDefs" : [
{
if (typeof args[0] === 'string') { "name" : "s",
serviceId = args[0]; "argType" : {
} else if (typeof args[1] === 'string') { "tag" : "primitive"
serviceId = args[1]; }
} else {
serviceId = "concat_subs"
}
// Figuring out which overload is the service.
// If the first argument is not Fluence Peer and it is an object, then it can only be the service def
// If the first argument is peer, we are checking further. The second argument might either be
// an object, that it must be the service object
// or a string, which is the service id. In that case the service is the third argument
if (!(FluencePeer.isInstance(args[0])) && typeof args[0] === 'object') {
service = args[0];
} else if (typeof args[1] === 'object') {
service = args[1];
} else {
service = args[2];
}
const incorrectServiceDefinitions = missingFields(service, ['get_some']);
if (!!incorrectServiceDefinitions.length) {
throw new Error("Error registering service ConcatSubs: missing functions: " + incorrectServiceDefinitions.map((d) => "'" + d + "'").join(", "))
}
peer.internals.callServiceHandler.use((req, resp, next) => {
if (req.serviceId !== serviceId) {
next();
return;
}
if (req.fnName === 'get_some') {
const callParams = {
...req.particleContext,
tetraplets: {
s: req.tetraplets[0],sr: req.tetraplets[1]
}, },
}; {
resp.retCode = ResultCodes.success; "name" : "sr",
resp.result = service.get_some(req.args[0], req.args[1], callParams) "argType" : {
"tag" : "primitive"
}
}
],
"returnType" : {
"tag" : "primitive"
}
} }
]
next(); }
}); );
} }
// Functions // Functions
@ -93,25 +66,9 @@ export type SubImportUsageResult = { one: string; two: number; }
export function subImportUsage(s: string, config?: {ttl?: number}): Promise<SubImportUsageResult>; export function subImportUsage(s: string, config?: {ttl?: number}): Promise<SubImportUsageResult>;
export function subImportUsage(peer: FluencePeer, s: string, config?: {ttl?: number}): Promise<SubImportUsageResult>; export function subImportUsage(peer: FluencePeer, s: string, config?: {ttl?: number}): Promise<SubImportUsageResult>;
export function subImportUsage(...args: any) { export function subImportUsage(...args: any) {
let peer: FluencePeer;
let s: any;
let config: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
s = args[1];
config = args[2];
} else {
peer = Fluence.getPeer();
s = args[0];
config = args[1];
}
let request: RequestFlow; let script = `
const promise = new Promise<SubImportUsageResult>((resolve, reject) => { (xor
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
(xor
(seq (seq
(seq (seq
(seq (seq
@ -133,33 +90,32 @@ export function subImportUsage(...args: any) {
) )
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2]) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
) )
`, `
) return callFunction(
.configHandler((h) => { args,
h.on('getDataSrv', '-relay-', () => { {
return peer.getStatus().relayPeerId; "functionName" : "subImportUsage",
}); "returnType" : {
h.on('getDataSrv', 's', () => {return s;}); "tag" : "primitive"
h.onEvent('callbackSrv', 'response', (args) => { },
const [res] = args; "argDefs" : [
resolve(res); {
}); "name" : "s",
h.onEvent('errorHandlingSrv', 'error', (args) => { "argType" : {
const [err] = args; "tag" : "primitive"
reject(err); }
}); }
}) ],
.handleScriptError(reject) "names" : {
.handleTimeout(() => { "relay" : "-relay-",
reject('Request timed out for subImportUsage'); "getDataSrv" : "getDataSrv",
}) "callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
if (config && config.ttl) { "responseFnName" : "response",
r.withTTL(config.ttl) "errorHandlingSrv" : "errorHandlingSrv",
} "errorFnName" : "error"
}
request = r.build(); },
}); script
peer.internals.initiateFlow(request!); )
return promise;
} }

View File

@ -8,11 +8,10 @@
*/ */
import { Fluence, FluencePeer } from '@fluencelabs/fluence'; import { Fluence, FluencePeer } from '@fluencelabs/fluence';
import { import {
ResultCodes, CallParams,
RequestFlow, callFunction,
RequestFlowBuilder, registerService,
CallParams } from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
function missingFields(obj: any, fields: string[]): string[] { function missingFields(obj: any, fields: string[]): string[] {
@ -31,60 +30,28 @@ export function registerTesto(peer: FluencePeer, serviceId: string, service: Tes
export function registerTesto(...args: any) { export function registerTesto(...args: any) {
let peer: FluencePeer; registerService(
let serviceId: any; args,
let service: any; {
if (FluencePeer.isInstance(args[0])) { "defaultServiceId" : "testo",
peer = args[0]; "functions" : [
} else { {
peer = Fluence.getPeer(); "functionName" : "getString",
} "argDefs" : [
{
if (typeof args[0] === 'string') { "name" : "arg0",
serviceId = args[0]; "argType" : {
} else if (typeof args[1] === 'string') { "tag" : "primitive"
serviceId = args[1]; }
} else { }
serviceId = "testo" ],
} "returnType" : {
"tag" : "primitive"
// Figuring out which overload is the service. }
// If the first argument is not Fluence Peer and it is an object, then it can only be the service def
// If the first argument is peer, we are checking further. The second argument might either be
// an object, that it must be the service object
// or a string, which is the service id. In that case the service is the third argument
if (!(FluencePeer.isInstance(args[0])) && typeof args[0] === 'object') {
service = args[0];
} else if (typeof args[1] === 'object') {
service = args[1];
} else {
service = args[2];
}
const incorrectServiceDefinitions = missingFields(service, ['getString']);
if (!!incorrectServiceDefinitions.length) {
throw new Error("Error registering service Testo: missing functions: " + incorrectServiceDefinitions.map((d) => "'" + d + "'").join(", "))
}
peer.internals.callServiceHandler.use((req, resp, next) => {
if (req.serviceId !== serviceId) {
next();
return;
} }
]
if (req.fnName === 'getString') { }
const callParams = { );
...req.particleContext,
tetraplets: {
arg0: req.tetraplets[0]
},
};
resp.retCode = ResultCodes.success;
resp.result = service.getString(req.args[0], callParams)
}
next();
});
} }
@ -99,60 +66,28 @@ export function registerLocalPrint(peer: FluencePeer, serviceId: string, service
export function registerLocalPrint(...args: any) { export function registerLocalPrint(...args: any) {
let peer: FluencePeer; registerService(
let serviceId: any; args,
let service: any; {
if (FluencePeer.isInstance(args[0])) { "defaultServiceId" : "lp",
peer = args[0]; "functions" : [
} else { {
peer = Fluence.getPeer(); "functionName" : "print",
} "argDefs" : [
{
if (typeof args[0] === 'string') { "name" : "arg0",
serviceId = args[0]; "argType" : {
} else if (typeof args[1] === 'string') { "tag" : "primitive"
serviceId = args[1]; }
} else { }
serviceId = "lp" ],
} "returnType" : {
"tag" : "void"
// Figuring out which overload is the service. }
// If the first argument is not Fluence Peer and it is an object, then it can only be the service def
// If the first argument is peer, we are checking further. The second argument might either be
// an object, that it must be the service object
// or a string, which is the service id. In that case the service is the third argument
if (!(FluencePeer.isInstance(args[0])) && typeof args[0] === 'object') {
service = args[0];
} else if (typeof args[1] === 'object') {
service = args[1];
} else {
service = args[2];
}
const incorrectServiceDefinitions = missingFields(service, ['print']);
if (!!incorrectServiceDefinitions.length) {
throw new Error("Error registering service LocalPrint: missing functions: " + incorrectServiceDefinitions.map((d) => "'" + d + "'").join(", "))
}
peer.internals.callServiceHandler.use((req, resp, next) => {
if (req.serviceId !== serviceId) {
next();
return;
} }
]
if (req.fnName === 'print') { }
const callParams = { );
...req.particleContext,
tetraplets: {
arg0: req.tetraplets[0]
},
};
resp.retCode = ResultCodes.success;
service.print(req.args[0], callParams); resp.result = {}
}
next();
});
} }
// Functions // Functions
@ -161,34 +96,9 @@ export function registerLocalPrint(...args: any) {
export function topologyTest(me: string, myRelay: string, friend: string, friendRelay: string, config?: {ttl?: number}): Promise<string>; export function topologyTest(me: string, myRelay: string, friend: string, friendRelay: string, config?: {ttl?: number}): Promise<string>;
export function topologyTest(peer: FluencePeer, me: string, myRelay: string, friend: string, friendRelay: string, config?: {ttl?: number}): Promise<string>; export function topologyTest(peer: FluencePeer, me: string, myRelay: string, friend: string, friendRelay: string, config?: {ttl?: number}): Promise<string>;
export function topologyTest(...args: any) { export function topologyTest(...args: any) {
let peer: FluencePeer;
let me: any;
let myRelay: any;
let friend: any;
let friendRelay: any;
let config: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
me = args[1];
myRelay = args[2];
friend = args[3];
friendRelay = args[4];
config = args[5];
} else {
peer = Fluence.getPeer();
me = args[0];
myRelay = args[1];
friend = args[2];
friendRelay = args[3];
config = args[4];
}
let request: RequestFlow; let script = `
const promise = new Promise<string>((resolve, reject) => { (xor
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
(xor
(seq (seq
(seq (seq
(seq (seq
@ -243,36 +153,50 @@ export function topologyTest(...args: any) {
) )
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3]) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3])
) )
`, `
) return callFunction(
.configHandler((h) => { args,
h.on('getDataSrv', '-relay-', () => { {
return peer.getStatus().relayPeerId; "functionName" : "topologyTest",
}); "returnType" : {
h.on('getDataSrv', 'me', () => {return me;}); "tag" : "primitive"
h.on('getDataSrv', 'myRelay', () => {return myRelay;}); },
h.on('getDataSrv', 'friend', () => {return friend;}); "argDefs" : [
h.on('getDataSrv', 'friendRelay', () => {return friendRelay;}); {
h.onEvent('callbackSrv', 'response', (args) => { "name" : "me",
const [res] = args; "argType" : {
resolve(res); "tag" : "primitive"
}); }
h.onEvent('errorHandlingSrv', 'error', (args) => { },
const [err] = args; {
reject(err); "name" : "myRelay",
}); "argType" : {
}) "tag" : "primitive"
.handleScriptError(reject) }
.handleTimeout(() => { },
reject('Request timed out for topologyTest'); {
}) "name" : "friend",
"argType" : {
if (config && config.ttl) { "tag" : "primitive"
r.withTTL(config.ttl) }
} },
{
request = r.build(); "name" : "friendRelay",
}); "argType" : {
peer.internals.initiateFlow(request!); "tag" : "primitive"
return promise; }
}
],
"names" : {
"relay" : "-relay-",
"getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
"responseFnName" : "response",
"errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
}
},
script
)
} }

View File

@ -8,11 +8,10 @@
*/ */
import { Fluence, FluencePeer } from '@fluencelabs/fluence'; import { Fluence, FluencePeer } from '@fluencelabs/fluence';
import { import {
ResultCodes, CallParams,
RequestFlow, callFunction,
RequestFlowBuilder, registerService,
CallParams } from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
function missingFields(obj: any, fields: string[]): string[] { function missingFields(obj: any, fields: string[]): string[] {
@ -31,60 +30,22 @@ export function registerUnexisted(peer: FluencePeer, serviceId: string, service:
export function registerUnexisted(...args: any) { export function registerUnexisted(...args: any) {
let peer: FluencePeer; registerService(
let serviceId: any; args,
let service: any; {
if (FluencePeer.isInstance(args[0])) { "defaultServiceId" : "unex",
peer = args[0]; "functions" : [
} else { {
peer = Fluence.getPeer(); "functionName" : "getStr",
} "argDefs" : [
],
if (typeof args[0] === 'string') { "returnType" : {
serviceId = args[0]; "tag" : "primitive"
} else if (typeof args[1] === 'string') { }
serviceId = args[1];
} else {
serviceId = "unex"
}
// Figuring out which overload is the service.
// If the first argument is not Fluence Peer and it is an object, then it can only be the service def
// If the first argument is peer, we are checking further. The second argument might either be
// an object, that it must be the service object
// or a string, which is the service id. In that case the service is the third argument
if (!(FluencePeer.isInstance(args[0])) && typeof args[0] === 'object') {
service = args[0];
} else if (typeof args[1] === 'object') {
service = args[1];
} else {
service = args[2];
}
const incorrectServiceDefinitions = missingFields(service, ['getStr']);
if (!!incorrectServiceDefinitions.length) {
throw new Error("Error registering service Unexisted: missing functions: " + incorrectServiceDefinitions.map((d) => "'" + d + "'").join(", "))
}
peer.internals.callServiceHandler.use((req, resp, next) => {
if (req.serviceId !== serviceId) {
next();
return;
} }
]
if (req.fnName === 'getStr') { }
const callParams = { );
...req.particleContext,
tetraplets: {
},
};
resp.retCode = ResultCodes.success;
resp.result = service.getStr(callParams)
}
next();
});
} }
@ -99,60 +60,28 @@ export function registerOpA(peer: FluencePeer, serviceId: string, service: OpADe
export function registerOpA(...args: any) { export function registerOpA(...args: any) {
let peer: FluencePeer; registerService(
let serviceId: any; args,
let service: any; {
if (FluencePeer.isInstance(args[0])) { "defaultServiceId" : "op",
peer = args[0]; "functions" : [
} else { {
peer = Fluence.getPeer(); "functionName" : "identity",
} "argDefs" : [
{
if (typeof args[0] === 'string') { "name" : "s",
serviceId = args[0]; "argType" : {
} else if (typeof args[1] === 'string') { "tag" : "primitive"
serviceId = args[1]; }
} else { }
serviceId = "op" ],
} "returnType" : {
"tag" : "primitive"
// Figuring out which overload is the service. }
// If the first argument is not Fluence Peer and it is an object, then it can only be the service def
// If the first argument is peer, we are checking further. The second argument might either be
// an object, that it must be the service object
// or a string, which is the service id. In that case the service is the third argument
if (!(FluencePeer.isInstance(args[0])) && typeof args[0] === 'object') {
service = args[0];
} else if (typeof args[1] === 'object') {
service = args[1];
} else {
service = args[2];
}
const incorrectServiceDefinitions = missingFields(service, ['identity']);
if (!!incorrectServiceDefinitions.length) {
throw new Error("Error registering service OpA: missing functions: " + incorrectServiceDefinitions.map((d) => "'" + d + "'").join(", "))
}
peer.internals.callServiceHandler.use((req, resp, next) => {
if (req.serviceId !== serviceId) {
next();
return;
} }
]
if (req.fnName === 'identity') { }
const callParams = { );
...req.particleContext,
tetraplets: {
s: req.tetraplets[0]
},
};
resp.retCode = ResultCodes.success;
resp.result = service.identity(req.args[0], callParams)
}
next();
});
} }
// Functions // Functions
@ -161,25 +90,9 @@ export function registerOpA(...args: any) {
export function tryCatchTest(node_id: string, config?: {ttl?: number}): Promise<string[]>; export function tryCatchTest(node_id: string, config?: {ttl?: number}): Promise<string[]>;
export function tryCatchTest(peer: FluencePeer, node_id: string, config?: {ttl?: number}): Promise<string[]>; export function tryCatchTest(peer: FluencePeer, node_id: string, config?: {ttl?: number}): Promise<string[]>;
export function tryCatchTest(...args: any) { export function tryCatchTest(...args: any) {
let peer: FluencePeer;
let node_id: any;
let config: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
node_id = args[1];
config = args[2];
} else {
peer = Fluence.getPeer();
node_id = args[0];
config = args[1];
}
let request: RequestFlow; let script = `
const promise = new Promise<string[]>((resolve, reject) => { (xor
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
(xor
(seq (seq
(seq (seq
(seq (seq
@ -216,33 +129,32 @@ export function tryCatchTest(...args: any) {
) )
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3]) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3])
) )
`, `
) return callFunction(
.configHandler((h) => { args,
h.on('getDataSrv', '-relay-', () => { {
return peer.getStatus().relayPeerId; "functionName" : "tryCatchTest",
}); "returnType" : {
h.on('getDataSrv', 'node_id', () => {return node_id;}); "tag" : "primitive"
h.onEvent('callbackSrv', 'response', (args) => { },
const [res] = args; "argDefs" : [
resolve(res); {
}); "name" : "node_id",
h.onEvent('errorHandlingSrv', 'error', (args) => { "argType" : {
const [err] = args; "tag" : "primitive"
reject(err); }
}); }
}) ],
.handleScriptError(reject) "names" : {
.handleTimeout(() => { "relay" : "-relay-",
reject('Request timed out for tryCatchTest'); "getDataSrv" : "getDataSrv",
}) "callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
if (config && config.ttl) { "responseFnName" : "response",
r.withTTL(config.ttl) "errorHandlingSrv" : "errorHandlingSrv",
} "errorFnName" : "error"
}
request = r.build(); },
}); script
peer.internals.initiateFlow(request!); )
return promise;
} }

View File

@ -8,11 +8,10 @@
*/ */
import { Fluence, FluencePeer } from '@fluencelabs/fluence'; import { Fluence, FluencePeer } from '@fluencelabs/fluence';
import { import {
ResultCodes, CallParams,
RequestFlow, callFunction,
RequestFlowBuilder, registerService,
CallParams } from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
function missingFields(obj: any, fields: string[]): string[] { function missingFields(obj: any, fields: string[]): string[] {
@ -31,60 +30,22 @@ export function registerUnexisted(peer: FluencePeer, serviceId: string, service:
export function registerUnexisted(...args: any) { export function registerUnexisted(...args: any) {
let peer: FluencePeer; registerService(
let serviceId: any; args,
let service: any; {
if (FluencePeer.isInstance(args[0])) { "defaultServiceId" : "unex",
peer = args[0]; "functions" : [
} else { {
peer = Fluence.getPeer(); "functionName" : "getStr",
} "argDefs" : [
],
if (typeof args[0] === 'string') { "returnType" : {
serviceId = args[0]; "tag" : "primitive"
} else if (typeof args[1] === 'string') { }
serviceId = args[1];
} else {
serviceId = "unex"
}
// Figuring out which overload is the service.
// If the first argument is not Fluence Peer and it is an object, then it can only be the service def
// If the first argument is peer, we are checking further. The second argument might either be
// an object, that it must be the service object
// or a string, which is the service id. In that case the service is the third argument
if (!(FluencePeer.isInstance(args[0])) && typeof args[0] === 'object') {
service = args[0];
} else if (typeof args[1] === 'object') {
service = args[1];
} else {
service = args[2];
}
const incorrectServiceDefinitions = missingFields(service, ['getStr']);
if (!!incorrectServiceDefinitions.length) {
throw new Error("Error registering service Unexisted: missing functions: " + incorrectServiceDefinitions.map((d) => "'" + d + "'").join(", "))
}
peer.internals.callServiceHandler.use((req, resp, next) => {
if (req.serviceId !== serviceId) {
next();
return;
} }
]
if (req.fnName === 'getStr') { }
const callParams = { );
...req.particleContext,
tetraplets: {
},
};
resp.retCode = ResultCodes.success;
resp.result = service.getStr(callParams)
}
next();
});
} }
@ -99,60 +60,28 @@ export function registerOpE(peer: FluencePeer, serviceId: string, service: OpEDe
export function registerOpE(...args: any) { export function registerOpE(...args: any) {
let peer: FluencePeer; registerService(
let serviceId: any; args,
let service: any; {
if (FluencePeer.isInstance(args[0])) { "defaultServiceId" : "op",
peer = args[0]; "functions" : [
} else { {
peer = Fluence.getPeer(); "functionName" : "identity",
} "argDefs" : [
{
if (typeof args[0] === 'string') { "name" : "s",
serviceId = args[0]; "argType" : {
} else if (typeof args[1] === 'string') { "tag" : "primitive"
serviceId = args[1]; }
} else { }
serviceId = "op" ],
} "returnType" : {
"tag" : "primitive"
// Figuring out which overload is the service. }
// If the first argument is not Fluence Peer and it is an object, then it can only be the service def
// If the first argument is peer, we are checking further. The second argument might either be
// an object, that it must be the service object
// or a string, which is the service id. In that case the service is the third argument
if (!(FluencePeer.isInstance(args[0])) && typeof args[0] === 'object') {
service = args[0];
} else if (typeof args[1] === 'object') {
service = args[1];
} else {
service = args[2];
}
const incorrectServiceDefinitions = missingFields(service, ['identity']);
if (!!incorrectServiceDefinitions.length) {
throw new Error("Error registering service OpE: missing functions: " + incorrectServiceDefinitions.map((d) => "'" + d + "'").join(", "))
}
peer.internals.callServiceHandler.use((req, resp, next) => {
if (req.serviceId !== serviceId) {
next();
return;
} }
]
if (req.fnName === 'identity') { }
const callParams = { );
...req.particleContext,
tetraplets: {
s: req.tetraplets[0]
},
};
resp.retCode = ResultCodes.success;
resp.result = service.identity(req.args[0], callParams)
}
next();
});
} }
// Functions // Functions
@ -161,25 +90,9 @@ export function registerOpE(...args: any) {
export function tryOtherwiseTest(node_id: string, config?: {ttl?: number}): Promise<string>; export function tryOtherwiseTest(node_id: string, config?: {ttl?: number}): Promise<string>;
export function tryOtherwiseTest(peer: FluencePeer, node_id: string, config?: {ttl?: number}): Promise<string>; export function tryOtherwiseTest(peer: FluencePeer, node_id: string, config?: {ttl?: number}): Promise<string>;
export function tryOtherwiseTest(...args: any) { export function tryOtherwiseTest(...args: any) {
let peer: FluencePeer;
let node_id: any;
let config: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
node_id = args[1];
config = args[2];
} else {
peer = Fluence.getPeer();
node_id = args[0];
config = args[1];
}
let request: RequestFlow; let script = `
const promise = new Promise<string>((resolve, reject) => { (xor
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
(xor
(seq (seq
(seq (seq
(seq (seq
@ -210,33 +123,32 @@ export function tryOtherwiseTest(...args: any) {
) )
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3]) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3])
) )
`, `
) return callFunction(
.configHandler((h) => { args,
h.on('getDataSrv', '-relay-', () => { {
return peer.getStatus().relayPeerId; "functionName" : "tryOtherwiseTest",
}); "returnType" : {
h.on('getDataSrv', 'node_id', () => {return node_id;}); "tag" : "primitive"
h.onEvent('callbackSrv', 'response', (args) => { },
const [res] = args; "argDefs" : [
resolve(res); {
}); "name" : "node_id",
h.onEvent('errorHandlingSrv', 'error', (args) => { "argType" : {
const [err] = args; "tag" : "primitive"
reject(err); }
}); }
}) ],
.handleScriptError(reject) "names" : {
.handleTimeout(() => { "relay" : "-relay-",
reject('Request timed out for tryOtherwiseTest'); "getDataSrv" : "getDataSrv",
}) "callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
if (config && config.ttl) { "responseFnName" : "response",
r.withTTL(config.ttl) "errorHandlingSrv" : "errorHandlingSrv",
} "errorFnName" : "error"
}
request = r.build(); },
}); script
peer.internals.initiateFlow(request!); )
return promise;
} }

View File

@ -8,11 +8,10 @@
*/ */
import { Fluence, FluencePeer } from '@fluencelabs/fluence'; import { Fluence, FluencePeer } from '@fluencelabs/fluence';
import { import {
ResultCodes, CallParams,
RequestFlow, callFunction,
RequestFlowBuilder, registerService,
CallParams } from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
function missingFields(obj: any, fields: string[]): string[] { function missingFields(obj: any, fields: string[]): string[] {
@ -31,60 +30,28 @@ export function registerCustomId(peer: FluencePeer, serviceId: string, service:
export function registerCustomId(...args: any) { export function registerCustomId(...args: any) {
let peer: FluencePeer; registerService(
let serviceId: any; args,
let service: any; {
if (FluencePeer.isInstance(args[0])) { "defaultServiceId" : "cid",
peer = args[0]; "functions" : [
} else { {
peer = Fluence.getPeer(); "functionName" : "id",
} "argDefs" : [
{
if (typeof args[0] === 'string') { "name" : "s",
serviceId = args[0]; "argType" : {
} else if (typeof args[1] === 'string') { "tag" : "primitive"
serviceId = args[1]; }
} else { }
serviceId = "cid" ],
} "returnType" : {
"tag" : "primitive"
// Figuring out which overload is the service. }
// If the first argument is not Fluence Peer and it is an object, then it can only be the service def
// If the first argument is peer, we are checking further. The second argument might either be
// an object, that it must be the service object
// or a string, which is the service id. In that case the service is the third argument
if (!(FluencePeer.isInstance(args[0])) && typeof args[0] === 'object') {
service = args[0];
} else if (typeof args[1] === 'object') {
service = args[1];
} else {
service = args[2];
}
const incorrectServiceDefinitions = missingFields(service, ['id']);
if (!!incorrectServiceDefinitions.length) {
throw new Error("Error registering service CustomId: missing functions: " + incorrectServiceDefinitions.map((d) => "'" + d + "'").join(", "))
}
peer.internals.callServiceHandler.use((req, resp, next) => {
if (req.serviceId !== serviceId) {
next();
return;
} }
]
if (req.fnName === 'id') { }
const callParams = { );
...req.particleContext,
tetraplets: {
s: req.tetraplets[0]
},
};
resp.retCode = ResultCodes.success;
resp.result = service.id(req.args[0], callParams)
}
next();
});
} }
// Functions // Functions
@ -93,28 +60,9 @@ export type ViaArrResult = { external_addresses: string[]; }
export function viaArr(node_id: string, viaAr: string[], config?: {ttl?: number}): Promise<ViaArrResult>; export function viaArr(node_id: string, viaAr: string[], config?: {ttl?: number}): Promise<ViaArrResult>;
export function viaArr(peer: FluencePeer, node_id: string, viaAr: string[], config?: {ttl?: number}): Promise<ViaArrResult>; export function viaArr(peer: FluencePeer, node_id: string, viaAr: string[], config?: {ttl?: number}): Promise<ViaArrResult>;
export function viaArr(...args: any) { export function viaArr(...args: any) {
let peer: FluencePeer;
let node_id: any;
let viaAr: any;
let config: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
node_id = args[1];
viaAr = args[2];
config = args[3];
} else {
peer = Fluence.getPeer();
node_id = args[0];
viaAr = args[1];
config = args[2];
}
let request: RequestFlow; let script = `
const promise = new Promise<ViaArrResult>((resolve, reject) => { (xor
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
(xor
(seq (seq
(seq (seq
(seq (seq
@ -172,36 +120,40 @@ export function viaArr(...args: any) {
) )
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3]) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3])
) )
`, `
) return callFunction(
.configHandler((h) => { args,
h.on('getDataSrv', '-relay-', () => { {
return peer.getStatus().relayPeerId; "functionName" : "viaArr",
}); "returnType" : {
h.on('getDataSrv', 'node_id', () => {return node_id;}); "tag" : "primitive"
h.on('getDataSrv', 'viaAr', () => {return viaAr;}); },
h.onEvent('callbackSrv', 'response', (args) => { "argDefs" : [
const [res] = args; {
resolve(res); "name" : "node_id",
}); "argType" : {
h.onEvent('errorHandlingSrv', 'error', (args) => { "tag" : "primitive"
const [err] = args; }
reject(err); },
}); {
}) "name" : "viaAr",
.handleScriptError(reject) "argType" : {
.handleTimeout(() => { "tag" : "primitive"
reject('Request timed out for viaArr'); }
}) }
],
if (config && config.ttl) { "names" : {
r.withTTL(config.ttl) "relay" : "-relay-",
} "getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
request = r.build(); "responseSrv" : "callbackSrv",
}); "responseFnName" : "response",
peer.internals.initiateFlow(request!); "errorHandlingSrv" : "errorHandlingSrv",
return promise; "errorFnName" : "error"
}
},
script
)
} }
@ -209,28 +161,9 @@ export type ViaStreamResult = { external_addresses: string[]; }
export function viaStream(node_id: string, viaStr: string[], config?: {ttl?: number}): Promise<ViaStreamResult>; export function viaStream(node_id: string, viaStr: string[], config?: {ttl?: number}): Promise<ViaStreamResult>;
export function viaStream(peer: FluencePeer, node_id: string, viaStr: string[], config?: {ttl?: number}): Promise<ViaStreamResult>; export function viaStream(peer: FluencePeer, node_id: string, viaStr: string[], config?: {ttl?: number}): Promise<ViaStreamResult>;
export function viaStream(...args: any) { export function viaStream(...args: any) {
let peer: FluencePeer;
let node_id: any;
let viaStr: any;
let config: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
node_id = args[1];
viaStr = args[2];
config = args[3];
} else {
peer = Fluence.getPeer();
node_id = args[0];
viaStr = args[1];
config = args[2];
}
let request: RequestFlow; let script = `
const promise = new Promise<ViaStreamResult>((resolve, reject) => { (xor
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
(xor
(seq (seq
(seq (seq
(seq (seq
@ -296,36 +229,40 @@ export function viaStream(...args: any) {
) )
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3]) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3])
) )
`, `
) return callFunction(
.configHandler((h) => { args,
h.on('getDataSrv', '-relay-', () => { {
return peer.getStatus().relayPeerId; "functionName" : "viaStream",
}); "returnType" : {
h.on('getDataSrv', 'node_id', () => {return node_id;}); "tag" : "primitive"
h.on('getDataSrv', 'viaStr', () => {return viaStr;}); },
h.onEvent('callbackSrv', 'response', (args) => { "argDefs" : [
const [res] = args; {
resolve(res); "name" : "node_id",
}); "argType" : {
h.onEvent('errorHandlingSrv', 'error', (args) => { "tag" : "primitive"
const [err] = args; }
reject(err); },
}); {
}) "name" : "viaStr",
.handleScriptError(reject) "argType" : {
.handleTimeout(() => { "tag" : "primitive"
reject('Request timed out for viaStream'); }
}) }
],
if (config && config.ttl) { "names" : {
r.withTTL(config.ttl) "relay" : "-relay-",
} "getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
request = r.build(); "responseSrv" : "callbackSrv",
}); "responseFnName" : "response",
peer.internals.initiateFlow(request!); "errorHandlingSrv" : "errorHandlingSrv",
return promise; "errorFnName" : "error"
}
},
script
)
} }
@ -333,31 +270,9 @@ export type ViaOptResult = { external_addresses: string[]; }
export function viaOpt(relay: string, node_id: string, viaOpt: string | null, config?: {ttl?: number}): Promise<ViaOptResult>; export function viaOpt(relay: string, node_id: string, viaOpt: string | null, config?: {ttl?: number}): Promise<ViaOptResult>;
export function viaOpt(peer: FluencePeer, relay: string, node_id: string, viaOpt: string | null, config?: {ttl?: number}): Promise<ViaOptResult>; export function viaOpt(peer: FluencePeer, relay: string, node_id: string, viaOpt: string | null, config?: {ttl?: number}): Promise<ViaOptResult>;
export function viaOpt(...args: any) { export function viaOpt(...args: any) {
let peer: FluencePeer;
let relay: any;
let node_id: any;
let viaOpt: any;
let config: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
relay = args[1];
node_id = args[2];
viaOpt = args[3];
config = args[4];
} else {
peer = Fluence.getPeer();
relay = args[0];
node_id = args[1];
viaOpt = args[2];
config = args[3];
}
let request: RequestFlow; let script = `
const promise = new Promise<ViaOptResult>((resolve, reject) => { (xor
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
(xor
(seq (seq
(seq (seq
(seq (seq
@ -418,35 +333,44 @@ export function viaOpt(...args: any) {
) )
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3]) (call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3])
) )
`, `
) return callFunction(
.configHandler((h) => { args,
h.on('getDataSrv', '-relay-', () => { {
return peer.getStatus().relayPeerId; "functionName" : "viaOpt",
}); "returnType" : {
h.on('getDataSrv', 'relay', () => {return relay;}); "tag" : "primitive"
h.on('getDataSrv', 'node_id', () => {return node_id;}); },
h.on('getDataSrv', 'viaOpt', () => {return viaOpt === null ? [] : [viaOpt];}); "argDefs" : [
h.onEvent('callbackSrv', 'response', (args) => { {
const [res] = args; "name" : "relay",
resolve(res); "argType" : {
}); "tag" : "primitive"
h.onEvent('errorHandlingSrv', 'error', (args) => { }
const [err] = args; },
reject(err); {
}); "name" : "node_id",
}) "argType" : {
.handleScriptError(reject) "tag" : "primitive"
.handleTimeout(() => { }
reject('Request timed out for viaOpt'); },
}) {
"name" : "viaOpt",
if (config && config.ttl) { "argType" : {
r.withTTL(config.ttl) "tag" : "optional"
} }
}
request = r.build(); ],
}); "names" : {
peer.internals.initiateFlow(request!); "relay" : "-relay-",
return promise; "getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
"responseFnName" : "response",
"errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
}
},
script
)
} }