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",
"dependencies": {
"@fluencelabs/aqua-dht-ts": "0.1.36",
"@fluencelabs/fluence": "0.13.0",
"@fluencelabs/fluence": "0.14.1",
"@fluencelabs/fluence-network-environment": "^1.0.10",
"deep-equal": "^2.0.5"
},
@ -1531,12 +1531,12 @@
}
},
"node_modules/@fluencelabs/fluence": {
"version": "0.13.0",
"resolved": "https://registry.npmjs.org/@fluencelabs/fluence/-/fluence-0.13.0.tgz",
"integrity": "sha512-Dqhr7CAYeAO8Z5jR+mbGu0cVZjkE06cM2L8n9bQWe4T4y2B83ZxUmrs/OTWlYnsLd1Sr2YdDlnyZeUvWLEEmrQ==",
"version": "0.14.1",
"resolved": "https://registry.npmjs.org/@fluencelabs/fluence/-/fluence-0.14.1.tgz",
"integrity": "sha512-Yqg5Hw2XO/X28ZU2iOt9znx9MXUOfTIIlJO5JLaoQfRY6k/5deLkJILsxaDbaTWg2iFnURydyP3cUSqBkitFwg==",
"dependencies": {
"@chainsafe/libp2p-noise": "4.0.0",
"@fluencelabs/avm": "0.14.4",
"@fluencelabs/avm": "0.15.4",
"async": "3.2.0",
"base64-js": "1.5.1",
"bs58": "4.0.1",
@ -1550,6 +1550,8 @@
"loglevel": "1.7.0",
"multiaddr": "10.0.0",
"peer-id": "0.15.3",
"rxjs": "^7.3.0",
"ts-pattern": "^3.3.3",
"uuid": "8.3.0"
}
},
@ -1559,9 +1561,9 @@
"integrity": "sha512-aaWZDDFIIasSTgdFdw1KEz+boZMSn7pXffUENZNLX4DrP11rC3AEX4c8GnIJQbWqGsouOFZOPna2DSG6o2rLNQ=="
},
"node_modules/@fluencelabs/fluence/node_modules/@fluencelabs/avm": {
"version": "0.14.4",
"resolved": "https://registry.npmjs.org/@fluencelabs/avm/-/avm-0.14.4.tgz",
"integrity": "sha512-XyR+1H5k0CAc+mDHOkl81viX8XeW1Yqbw793xbsfUfju5bUb/hqk+gHv3q8lAFdbrCG5P45gdOT08a5RNODZaQ==",
"version": "0.15.4",
"resolved": "https://registry.npmjs.org/@fluencelabs/avm/-/avm-0.15.4.tgz",
"integrity": "sha512-NLZDq83ocJ1Helm0D8kPMSSkjxH0y+Tujg0px773zjIShbh3jgiJOjAW1xCYgTt9K0LqepjP0bWX4/8nUZfr7g==",
"dependencies": {
"base64-js": "1.5.1"
}
@ -7631,6 +7633,14 @@
"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": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
@ -8173,6 +8183,16 @@
"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": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
@ -9973,12 +9993,12 @@
}
},
"@fluencelabs/fluence": {
"version": "0.13.0",
"resolved": "https://registry.npmjs.org/@fluencelabs/fluence/-/fluence-0.13.0.tgz",
"integrity": "sha512-Dqhr7CAYeAO8Z5jR+mbGu0cVZjkE06cM2L8n9bQWe4T4y2B83ZxUmrs/OTWlYnsLd1Sr2YdDlnyZeUvWLEEmrQ==",
"version": "0.14.1",
"resolved": "https://registry.npmjs.org/@fluencelabs/fluence/-/fluence-0.14.1.tgz",
"integrity": "sha512-Yqg5Hw2XO/X28ZU2iOt9znx9MXUOfTIIlJO5JLaoQfRY6k/5deLkJILsxaDbaTWg2iFnURydyP3cUSqBkitFwg==",
"requires": {
"@chainsafe/libp2p-noise": "4.0.0",
"@fluencelabs/avm": "0.14.4",
"@fluencelabs/avm": "0.15.4",
"async": "3.2.0",
"base64-js": "1.5.1",
"bs58": "4.0.1",
@ -9992,13 +10012,15 @@
"loglevel": "1.7.0",
"multiaddr": "10.0.0",
"peer-id": "0.15.3",
"rxjs": "^7.3.0",
"ts-pattern": "^3.3.3",
"uuid": "8.3.0"
},
"dependencies": {
"@fluencelabs/avm": {
"version": "0.14.4",
"resolved": "https://registry.npmjs.org/@fluencelabs/avm/-/avm-0.14.4.tgz",
"integrity": "sha512-XyR+1H5k0CAc+mDHOkl81viX8XeW1Yqbw793xbsfUfju5bUb/hqk+gHv3q8lAFdbrCG5P45gdOT08a5RNODZaQ==",
"version": "0.15.4",
"resolved": "https://registry.npmjs.org/@fluencelabs/avm/-/avm-0.15.4.tgz",
"integrity": "sha512-NLZDq83ocJ1Helm0D8kPMSSkjxH0y+Tujg0px773zjIShbh3jgiJOjAW1xCYgTt9K0LqepjP0bWX4/8nUZfr7g==",
"requires": {
"base64-js": "1.5.1"
}
@ -14823,6 +14845,14 @@
"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": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
@ -15219,6 +15249,16 @@
"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": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",

View File

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

View File

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

View File

@ -8,11 +8,10 @@
*/
import { Fluence, FluencePeer } from '@fluencelabs/fluence';
import {
ResultCodes,
RequestFlow,
RequestFlowBuilder,
CallParams
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
CallParams,
callFunction,
registerService,
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
function missingFields(obj: any, fields: string[]): string[] {
@ -32,71 +31,42 @@ export function registerComplexService(peer: FluencePeer, serviceId: string, ser
export function registerComplexService(...args: any) {
let peer: FluencePeer;
let serviceId: any;
let service: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
} else {
peer = Fluence.getPeer();
registerService(
args,
{
"defaultServiceId" : "op-ha",
"functions" : [
{
"functionName" : "call",
"argDefs" : [
{
"name" : "d",
"argType" : {
"tag" : "primitive"
}
if (typeof args[0] === 'string') {
serviceId = args[0];
} else if (typeof args[1] === 'string') {
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;
resp.result = service.call(req.args[0], req.args[1], callParams)
{
"name" : "sd",
"argType" : {
"tag" : "primitive"
}
}
],
"returnType" : {
"tag" : "primitive"
}
if (req.fnName === 'identity') {
const callParams = {
...req.particleContext,
tetraplets: {
},
};
resp.retCode = ResultCodes.success;
resp.result = service.identity(callParams)
{
"functionName" : "identity",
"argDefs" : [
],
"returnType" : {
"tag" : "primitive"
}
next();
});
}
]
}
);
}
// Functions
@ -107,33 +77,8 @@ 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(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) {
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;
const promise = new Promise<DoSmthResult>((resolve, reject) => {
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
let script = `
(xor
(seq
(seq
@ -162,49 +107,69 @@ export function doSmth(...args: any) {
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3])
)
`,
)
.configHandler((h) => {
h.on('getDataSrv', '-relay-', () => {
return peer.getStatus().relayPeerId;
});
h.on('getDataSrv', 'd', () => {return d;});
h.on('getDataSrv', 'd2', () => {return d2;});
h.on('getDataSrv', 'sd', () => {return sd;});
h.use((req, resp, next) => {
if(req.serviceId === 'callbackSrv' && req.fnName === 'c') {
const callParams = {
...req.particleContext,
tetraplets: {
arg0: req.tetraplets[0],arg1: req.tetraplets[1]
`
return callFunction(
args,
{
"functionName" : "doSmth",
"returnType" : {
"tag" : "primitive"
},
};
resp.retCode = ResultCodes.success;
resp.result = c(req.args[0], req.args[1], callParams)
"argDefs" : [
{
"name" : "d",
"argType" : {
"tag" : "primitive"
}
next();
});
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)
},
{
"name" : "d2",
"argType" : {
"tag" : "primitive"
}
request = r.build();
});
peer.internals.initiateFlow(request!);
return promise;
},
{
"name" : "sd",
"argType" : {
"tag" : "primitive"
}
},
{
"name" : "c",
"argType" : {
"tag" : "callback",
"callback" : {
"argDefs" : [
{
"name" : "arg0",
"argType" : {
"tag" : "primitive"
}
},
{
"name" : "arg1",
"argType" : {
"tag" : "primitive"
}
}
],
"returnType" : {
"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 {
ResultCodes,
RequestFlow,
RequestFlowBuilder,
CallParams
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
CallParams,
callFunction,
registerService,
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
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) {
let peer: FluencePeer;
let serviceId: any;
let service: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
} else {
peer = Fluence.getPeer();
registerService(
args,
{
"defaultServiceId" : "op",
"functions" : [
{
"functionName" : "array",
"argDefs" : [
{
"name" : "a",
"argType" : {
"tag" : "primitive"
}
if (typeof args[0] === 'string') {
serviceId = args[0];
} 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, ['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;
resp.result = service.array(req.args[0], req.args[1], callParams)
{
"name" : "b",
"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)
{
"functionName" : "identity",
"argDefs" : [
{
"name" : "a",
"argType" : {
"tag" : "primitive"
}
next();
});
}
],
"returnType" : {
"tag" : "primitive"
}
}
]
}
);
}
// Functions
@ -105,24 +81,8 @@ export type DoSmthArgArg = { value: 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(...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;
const promise = new Promise<string[]>((resolve, reject) => {
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
let script = `
(xor
(seq
(seq
@ -142,33 +102,32 @@ export function doSmth(...args: any) {
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
)
`,
`
return callFunction(
args,
{
"functionName" : "doSmth",
"returnType" : {
"tag" : "primitive"
},
"argDefs" : [
{
"name" : "arg",
"argType" : {
"tag" : "primitive"
}
}
],
"names" : {
"relay" : "-relay-",
"getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
"responseFnName" : "response",
"errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
}
},
script
)
.configHandler((h) => {
h.on('getDataSrv', '-relay-', () => {
return peer.getStatus().relayPeerId;
});
h.on('getDataSrv', 'arg', () => {return arg;});
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!);
return promise;
}

View File

@ -8,11 +8,10 @@
*/
import { Fluence, FluencePeer } from '@fluencelabs/fluence';
import {
ResultCodes,
RequestFlow,
RequestFlowBuilder,
CallParams
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
CallParams,
callFunction,
registerService,
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
function missingFields(obj: any, fields: string[]): string[] {
@ -27,30 +26,8 @@ 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(peer: FluencePeer, node: string, str: string, c: (arg0: string, callParams: CallParams<'arg0'>) => string, config?: {ttl?: number}): Promise<void>;
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;
const promise = new Promise<void>((resolve, reject) => {
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
let script = `
(xor
(seq
(seq
@ -94,47 +71,57 @@ export function passFunctionAsArg(...args: any) {
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3])
)
`,
)
.configHandler((h) => {
h.on('getDataSrv', '-relay-', () => {
return peer.getStatus().relayPeerId;
});
h.on('getDataSrv', 'node', () => {return node;});
h.on('getDataSrv', 'str', () => {return str;});
h.use((req, resp, next) => {
if(req.serviceId === 'callbackSrv' && req.fnName === 'c') {
const callParams = {
...req.particleContext,
tetraplets: {
arg0: req.tetraplets[0]
`
return callFunction(
args,
{
"functionName" : "passFunctionAsArg",
"returnType" : {
"tag" : "void"
},
};
resp.retCode = ResultCodes.success;
resp.result = c(req.args[0], callParams)
"argDefs" : [
{
"name" : "node",
"argType" : {
"tag" : "primitive"
}
next();
});
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)
},
{
"name" : "str",
"argType" : {
"tag" : "primitive"
}
request = r.build();
});
peer.internals.initiateFlow(request!);
return Promise.race([promise, Promise.resolve()]);
},
{
"name" : "c",
"argType" : {
"tag" : "callback",
"callback" : {
"argDefs" : [
{
"name" : "arg0",
"argType" : {
"tag" : "primitive"
}
}
],
"returnType" : {
"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 {
ResultCodes,
RequestFlow,
RequestFlowBuilder,
CallParams
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
CallParams,
callFunction,
registerService,
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
function missingFields(obj: any, fields: string[]): string[] {
@ -31,60 +30,22 @@ export function registerCoService(peer: FluencePeer, serviceId: string, service:
export function registerCoService(...args: any) {
let peer: FluencePeer;
let serviceId: any;
let service: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
} else {
peer = Fluence.getPeer();
registerService(
args,
{
"defaultServiceId" : "coservice-id",
"functions" : [
{
"functionName" : "call",
"argDefs" : [
],
"returnType" : {
"tag" : "primitive"
}
if (typeof args[0] === 'string') {
serviceId = args[0];
} 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
@ -93,27 +54,8 @@ 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(peer: FluencePeer, node: string, c: (arg0: { external_addresses: string[]; }, callParams: CallParams<'arg0'>) => void, config?: {ttl?: number}): Promise<void>;
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;
const promise = new Promise<void>((resolve, reject) => {
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
let script = `
(xor
(seq
(seq
@ -148,46 +90,51 @@ export function coFunc(...args: any) {
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3])
)
`,
)
.configHandler((h) => {
h.on('getDataSrv', '-relay-', () => {
return peer.getStatus().relayPeerId;
});
h.on('getDataSrv', 'node', () => {return node;});
h.use((req, resp, next) => {
if(req.serviceId === 'callbackSrv' && req.fnName === 'c') {
const callParams = {
...req.particleContext,
tetraplets: {
arg0: req.tetraplets[0]
`
return callFunction(
args,
{
"functionName" : "coFunc",
"returnType" : {
"tag" : "void"
},
};
resp.retCode = ResultCodes.success;
c(req.args[0], callParams); resp.result = {}
"argDefs" : [
{
"name" : "node",
"argType" : {
"tag" : "primitive"
}
next();
});
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)
},
{
"name" : "c",
"argType" : {
"tag" : "callback",
"callback" : {
"argDefs" : [
{
"name" : "arg0",
"argType" : {
"tag" : "primitive"
}
request = r.build();
});
peer.internals.initiateFlow(request!);
return Promise.race([promise, Promise.resolve()]);
}
],
"returnType" : {
"tag" : "void"
}
}
}
}
],
"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 {
ResultCodes,
RequestFlow,
RequestFlowBuilder,
CallParams
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
CallParams,
callFunction,
registerService,
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
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) {
let peer: FluencePeer;
let serviceId: any;
let service: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
} else {
peer = Fluence.getPeer();
registerService(
args,
{
"defaultServiceId" : "some-id",
"functions" : [
{
"functionName" : "multiline",
"argDefs" : [
{
"name" : "a",
"argType" : {
"tag" : "primitive"
}
if (typeof args[0] === 'string') {
serviceId = args[0];
} else if (typeof args[1] === 'string') {
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;
resp.result = service.multiline(req.args[0], req.args[1], req.args[2], callParams)
{
"name" : "b",
"argType" : {
"tag" : "primitive"
}
if (req.fnName === 't') {
const callParams = {
...req.particleContext,
tetraplets: {
arg0: req.tetraplets[0]
},
};
resp.retCode = ResultCodes.success;
resp.result = service.t(req.args[0], callParams)
{
"name" : "c",
"argType" : {
"tag" : "primitive"
}
next();
});
}
],
"returnType" : {
"tag" : "primitive"
}
},
{
"functionName" : "t",
"argDefs" : [
{
"name" : "arg0",
"argType" : {
"tag" : "primitive"
}
}
],
"returnType" : {
"tag" : "primitive"
}
}
]
}
);
}
// Functions
@ -105,42 +87,8 @@ 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(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) {
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;
const promise = new Promise<string[]>((resolve, reject) => {
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
let script = `
(xor
(seq
(seq
@ -252,39 +200,68 @@ export function doStuff(...args: any) {
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 5])
)
`,
`
return callFunction(
args,
{
"functionName" : "doStuff",
"returnType" : {
"tag" : "primitive"
},
"argDefs" : [
{
"name" : "a",
"argType" : {
"tag" : "primitive"
}
},
{
"name" : "b",
"argType" : {
"tag" : "primitive"
}
},
{
"name" : "c",
"argType" : {
"tag" : "primitive"
}
},
{
"name" : "d",
"argType" : {
"tag" : "primitive"
}
},
{
"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
)
.configHandler((h) => {
h.on('getDataSrv', '-relay-', () => {
return peer.getStatus().relayPeerId;
});
h.on('getDataSrv', 'a', () => {return a;});
h.on('getDataSrv', 'b', () => {return b;});
h.on('getDataSrv', 'c', () => {return c;});
h.on('getDataSrv', 'd', () => {return d;});
h.on('getDataSrv', 'e', () => {return e;});
h.on('getDataSrv', 'g', () => {return g;});
h.on('getDataSrv', 'str', () => {return str;});
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 doStuff');
})
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 {
ResultCodes,
RequestFlow,
RequestFlowBuilder,
CallParams
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
CallParams,
callFunction,
registerService,
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
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) {
let peer: FluencePeer;
let serviceId: any;
let service: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
} else {
peer = Fluence.getPeer();
registerService(
args,
{
"defaultServiceId" : "test",
"functions" : [
{
"functionName" : "createStr",
"argDefs" : [
{
"name" : "arg0",
"argType" : {
"tag" : "primitive"
}
if (typeof args[0] === 'string') {
serviceId = args[0];
} else if (typeof args[1] === 'string') {
serviceId = args[1];
} else {
serviceId = "test"
}
// 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];
],
"returnType" : {
"tag" : "primitive"
}
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) {
let peer: FluencePeer;
let serviceId: any;
let service: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
} else {
peer = Fluence.getPeer();
registerService(
args,
{
"defaultServiceId" : "op",
"functions" : [
{
"functionName" : "identity",
"argDefs" : [
{
"name" : "arg0",
"argType" : {
"tag" : "primitive"
}
if (typeof args[0] === 'string') {
serviceId = args[0];
} 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];
],
"returnType" : {
"tag" : "primitive"
}
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
@ -161,22 +96,8 @@ export function registerOpO(...args: any) {
export function callConstant(config?: {ttl?: number}): Promise<string[]>;
export function callConstant(peer: FluencePeer, config?: {ttl?: number}): Promise<string[]>;
export function callConstant(...args: any) {
let peer: FluencePeer;
let config: any;
if (FluencePeer.isInstance(args[0])) {
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(`
let script = `
(xor
(seq
(seq
@ -193,33 +114,26 @@ export function callConstant(...args: any) {
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
)
`,
`
return callFunction(
args,
{
"functionName" : "callConstant",
"returnType" : {
"tag" : "primitive"
},
"argDefs" : [
],
"names" : {
"relay" : "-relay-",
"getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
"responseFnName" : "response",
"errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
}
},
script
)
.configHandler((h) => {
h.on('getDataSrv', '-relay-', () => {
return peer.getStatus().relayPeerId;
});
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 callConstant');
})
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 {
ResultCodes,
RequestFlow,
RequestFlowBuilder,
CallParams
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
CallParams,
callFunction,
registerService,
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
function missingFields(obj: any, fields: string[]): string[] {
@ -31,60 +30,22 @@ export function registerNodeIdGetter(peer: FluencePeer, serviceId: string, servi
export function registerNodeIdGetter(...args: any) {
let peer: FluencePeer;
let serviceId: any;
let service: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
} else {
peer = Fluence.getPeer();
registerService(
args,
{
"defaultServiceId" : "somesrv",
"functions" : [
{
"functionName" : "get",
"argDefs" : [
],
"returnType" : {
"tag" : "primitive"
}
if (typeof args[0] === 'string') {
serviceId = args[0];
} 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
@ -93,22 +54,8 @@ export function registerNodeIdGetter(...args: any) {
export function getAliasedData(config?: {ttl?: number}): Promise<string>;
export function getAliasedData(peer: FluencePeer, config?: {ttl?: number}): Promise<string>;
export function getAliasedData(...args: any) {
let peer: FluencePeer;
let config: any;
if (FluencePeer.isInstance(args[0])) {
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(`
let script = `
(xor
(seq
(seq
@ -122,33 +69,26 @@ export function getAliasedData(...args: any) {
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
)
`,
`
return callFunction(
args,
{
"functionName" : "getAliasedData",
"returnType" : {
"tag" : "primitive"
},
"argDefs" : [
],
"names" : {
"relay" : "-relay-",
"getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
"responseFnName" : "response",
"errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
}
},
script
)
.configHandler((h) => {
h.on('getDataSrv', '-relay-', () => {
return peer.getStatus().relayPeerId;
});
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 getAliasedData');
})
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 {
ResultCodes,
RequestFlow,
RequestFlowBuilder,
CallParams
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
CallParams,
callFunction,
registerService,
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
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) {
let peer: FluencePeer;
let serviceId: any;
let service: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
} else {
peer = Fluence.getPeer();
registerService(
args,
{
"defaultServiceId" : "peer",
"functions" : [
{
"functionName" : "is_connected",
"argDefs" : [
{
"name" : "arg0",
"argType" : {
"tag" : "primitive"
}
if (typeof args[0] === 'string') {
serviceId = args[0];
} else if (typeof args[1] === 'string') {
serviceId = args[1];
} else {
serviceId = "peer"
}
// 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];
],
"returnType" : {
"tag" : "primitive"
}
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) {
let peer: FluencePeer;
let serviceId: any;
let service: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
} else {
peer = Fluence.getPeer();
registerService(
args,
{
"defaultServiceId" : "op",
"functions" : [
{
"functionName" : "identity",
"argDefs" : [
],
"returnType" : {
"tag" : "void"
}
if (typeof args[0] === 'string') {
serviceId = args[0];
} 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) {
let peer: FluencePeer;
let serviceId: any;
let service: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
} else {
peer = Fluence.getPeer();
registerService(
args,
{
"defaultServiceId" : "test",
"functions" : [
{
"functionName" : "doSomething",
"argDefs" : [
],
"returnType" : {
"tag" : "primitive"
}
if (typeof args[0] === 'string') {
serviceId = args[0];
} else if (typeof args[1] === 'string') {
serviceId = args[1];
} else {
serviceId = "test"
}
// 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, ['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)
{
"functionName" : "getUserList",
"argDefs" : [
],
"returnType" : {
"tag" : "primitive"
}
if (req.fnName === 'getUserList') {
const callParams = {
...req.particleContext,
tetraplets: {
},
};
resp.retCode = ResultCodes.success;
resp.result = service.getUserList(callParams)
}
next();
});
]
}
);
}
// Functions
@ -241,24 +129,8 @@ if (req.fnName === 'getUserList') {
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(...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;
const promise = new Promise<void>((resolve, reject) => {
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
let script = `
(xor
(seq
(seq
@ -292,32 +164,32 @@ export function betterMessage(...args: any) {
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3])
)
`,
`
return callFunction(
args,
{
"functionName" : "betterMessage",
"returnType" : {
"tag" : "void"
},
"argDefs" : [
{
"name" : "relay",
"argType" : {
"tag" : "primitive"
}
}
],
"names" : {
"relay" : "-relay-",
"getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
"responseFnName" : "response",
"errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
}
},
script
)
.configHandler((h) => {
h.on('getDataSrv', '-relay-', () => {
return peer.getStatus().relayPeerId;
});
h.on('getDataSrv', 'relay', () => {return relay;});
h.onEvent('callbackSrv', 'response', (args) => {
});
h.onEvent('errorHandlingSrv', 'error', (args) => {
const [err] = args;
reject(err);
});
})
.handleScriptError(reject)
.handleTimeout(() => {
reject('Request timed out for betterMessage');
})
if (config && config.ttl) {
r.withTTL(config.ttl)
}
request = r.build();
});
peer.internals.initiateFlow(request!);
return Promise.race([promise, Promise.resolve()]);
}

View File

@ -8,11 +8,10 @@
*/
import { Fluence, FluencePeer } from '@fluencelabs/fluence';
import {
ResultCodes,
RequestFlow,
RequestFlowBuilder,
CallParams
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
CallParams,
callFunction,
registerService,
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
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) {
let peer: FluencePeer;
let serviceId: any;
let service: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
} else {
peer = Fluence.getPeer();
registerService(
args,
{
"defaultServiceId" : "returnService",
"functions" : [
{
"functionName" : "run",
"argDefs" : [
{
"name" : "arg0",
"argType" : {
"tag" : "primitive"
}
if (typeof args[0] === 'string') {
serviceId = args[0];
} else if (typeof args[1] === 'string') {
serviceId = args[1];
} else {
serviceId = "returnService"
}
// 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];
],
"returnType" : {
"tag" : "void"
}
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
@ -93,24 +60,8 @@ export function registerReturn(...args: any) {
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(...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;
const promise = new Promise<void>((resolve, reject) => {
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
let script = `
(xor
(seq
(seq
@ -136,32 +87,32 @@ export function test(...args: any) {
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
)
`,
`
return callFunction(
args,
{
"functionName" : "test",
"returnType" : {
"tag" : "void"
},
"argDefs" : [
{
"name" : "node",
"argType" : {
"tag" : "primitive"
}
}
],
"names" : {
"relay" : "-relay-",
"getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
"responseFnName" : "response",
"errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
}
},
script
)
.configHandler((h) => {
h.on('getDataSrv', '-relay-', () => {
return peer.getStatus().relayPeerId;
});
h.on('getDataSrv', 'node', () => {return node;});
h.onEvent('callbackSrv', 'response', (args) => {
});
h.onEvent('errorHandlingSrv', 'error', (args) => {
const [err] = args;
reject(err);
});
})
.handleScriptError(reject)
.handleTimeout(() => {
reject('Request timed out for test');
})
if (config && config.ttl) {
r.withTTL(config.ttl)
}
request = r.build();
});
peer.internals.initiateFlow(request!);
return Promise.race([promise, Promise.resolve()]);
}

View File

@ -8,11 +8,10 @@
*/
import { Fluence, FluencePeer } from '@fluencelabs/fluence';
import {
ResultCodes,
RequestFlow,
RequestFlowBuilder,
CallParams
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
CallParams,
callFunction,
registerService,
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
function missingFields(obj: any, fields: string[]): string[] {
@ -27,24 +26,8 @@ function missingFields(obj: any, fields: string[]): string[] {
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(...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;
const promise = new Promise<void>((resolve, reject) => {
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
let script = `
(xor
(seq
(seq
@ -60,34 +43,34 @@ export function iterateAndPrint(...args: any) {
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1])
)
`,
)
.configHandler((h) => {
h.on('getDataSrv', '-relay-', () => {
return peer.getStatus().relayPeerId;
});
h.on('getDataSrv', 'strings', () => {return strings;});
h.onEvent('callbackSrv', 'response', (args) => {
});
h.onEvent('errorHandlingSrv', 'error', (args) => {
const [err] = args;
reject(err);
});
})
.handleScriptError(reject)
.handleTimeout(() => {
reject('Request timed out for iterateAndPrint');
})
if (config && config.ttl) {
r.withTTL(config.ttl)
`
return callFunction(
args,
{
"functionName" : "iterateAndPrint",
"returnType" : {
"tag" : "void"
},
"argDefs" : [
{
"name" : "strings",
"argType" : {
"tag" : "primitive"
}
request = r.build();
});
peer.internals.initiateFlow(request!);
return Promise.race([promise, Promise.resolve()]);
}
],
"names" : {
"relay" : "-relay-",
"getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
"responseFnName" : "response",
"errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
}
},
script
)
}
@ -95,27 +78,8 @@ 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(peer: FluencePeer, nodes: string[], c: (arg0: { external_addresses: string[]; }, callParams: CallParams<'arg0'>) => void, config?: {ttl?: number}): Promise<void>;
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;
const promise = new Promise<void>((resolve, reject) => {
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
let script = `
(xor
(seq
(seq
@ -146,46 +110,51 @@ export function iterateAndPrintParallel(...args: any) {
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3])
)
`,
)
.configHandler((h) => {
h.on('getDataSrv', '-relay-', () => {
return peer.getStatus().relayPeerId;
});
h.on('getDataSrv', 'nodes', () => {return nodes;});
h.use((req, resp, next) => {
if(req.serviceId === 'callbackSrv' && req.fnName === 'c') {
const callParams = {
...req.particleContext,
tetraplets: {
arg0: req.tetraplets[0]
`
return callFunction(
args,
{
"functionName" : "iterateAndPrintParallel",
"returnType" : {
"tag" : "void"
},
};
resp.retCode = ResultCodes.success;
c(req.args[0], callParams); resp.result = {}
"argDefs" : [
{
"name" : "nodes",
"argType" : {
"tag" : "primitive"
}
next();
});
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)
},
{
"name" : "c",
"argType" : {
"tag" : "callback",
"callback" : {
"argDefs" : [
{
"name" : "arg0",
"argType" : {
"tag" : "primitive"
}
request = r.build();
});
peer.internals.initiateFlow(request!);
return Promise.race([promise, Promise.resolve()]);
}
],
"returnType" : {
"tag" : "void"
}
}
}
}
],
"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 {
ResultCodes,
RequestFlow,
RequestFlowBuilder,
CallParams
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
CallParams,
callFunction,
registerService,
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
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) {
let peer: FluencePeer;
let serviceId: any;
let service: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
} else {
peer = Fluence.getPeer();
registerService(
args,
{
"defaultServiceId" : "op",
"functions" : [
{
"functionName" : "identity",
"argDefs" : [
{
"name" : "s",
"argType" : {
"tag" : "primitive"
}
if (typeof args[0] === 'string') {
serviceId = args[0];
} 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];
],
"returnType" : {
"tag" : "void"
}
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
@ -93,24 +60,8 @@ export function registerOp2(...args: any) {
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(...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;
const promise = new Promise<number[]>((resolve, reject) => {
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
let script = `
(xor
(seq
(seq
@ -165,33 +116,32 @@ export function getTwoResults(...args: any) {
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3])
)
`,
`
return callFunction(
args,
{
"functionName" : "getTwoResults",
"returnType" : {
"tag" : "primitive"
},
"argDefs" : [
{
"name" : "relay",
"argType" : {
"tag" : "primitive"
}
}
],
"names" : {
"relay" : "-relay-",
"getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
"responseFnName" : "response",
"errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
}
},
script
)
.configHandler((h) => {
h.on('getDataSrv', '-relay-', () => {
return peer.getStatus().relayPeerId;
});
h.on('getDataSrv', 'relay', () => {return relay;});
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 getTwoResults');
})
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 {
ResultCodes,
RequestFlow,
RequestFlowBuilder,
CallParams
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
CallParams,
callFunction,
registerService,
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
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) {
let peer: FluencePeer;
let serviceId: any;
let service: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
} else {
peer = Fluence.getPeer();
registerService(
args,
{
"defaultServiceId" : "test-service-id",
"functions" : [
{
"functionName" : "str",
"argDefs" : [
],
"returnType" : {
"tag" : "primitive"
}
if (typeof args[0] === 'string') {
serviceId = args[0];
} 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
@ -93,22 +54,8 @@ export function registerTestSrv(...args: any) {
export function testFunc(config?: {ttl?: number}): Promise<string>;
export function testFunc(peer: FluencePeer, config?: {ttl?: number}): Promise<string>;
export function testFunc(...args: any) {
let peer: FluencePeer;
let config: any;
if (FluencePeer.isInstance(args[0])) {
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(`
let script = `
(xor
(seq
(seq
@ -122,33 +69,26 @@ export function testFunc(...args: any) {
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
)
`,
`
return callFunction(
args,
{
"functionName" : "testFunc",
"returnType" : {
"tag" : "primitive"
},
"argDefs" : [
],
"names" : {
"relay" : "-relay-",
"getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
"responseFnName" : "response",
"errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
}
},
script
)
.configHandler((h) => {
h.on('getDataSrv', '-relay-', () => {
return peer.getStatus().relayPeerId;
});
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 testFunc');
})
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 {
ResultCodes,
RequestFlow,
RequestFlowBuilder,
CallParams
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
CallParams,
callFunction,
registerService,
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
function missingFields(obj: any, fields: string[]): string[] {
@ -31,60 +30,28 @@ export function registerStringExtra(peer: FluencePeer, serviceId: string, servic
export function registerStringExtra(...args: any) {
let peer: FluencePeer;
let serviceId: any;
let service: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
} else {
peer = Fluence.getPeer();
registerService(
args,
{
"defaultServiceId" : "service-id",
"functions" : [
{
"functionName" : "addNameToHello",
"argDefs" : [
{
"name" : "arg0",
"argType" : {
"tag" : "primitive"
}
if (typeof args[0] === 'string') {
serviceId = args[0];
} else if (typeof args[1] === 'string') {
serviceId = args[1];
} else {
serviceId = "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];
],
"returnType" : {
"tag" : "primitive"
}
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
@ -93,24 +60,8 @@ export function registerStringExtra(...args: any) {
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(...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;
const promise = new Promise<string>((resolve, reject) => {
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
let script = `
(xor
(seq
(seq
@ -127,33 +78,32 @@ export function helloWorld(...args: any) {
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
)
`,
`
return callFunction(
args,
{
"functionName" : "helloWorld",
"returnType" : {
"tag" : "primitive"
},
"argDefs" : [
{
"name" : "name",
"argType" : {
"tag" : "primitive"
}
}
],
"names" : {
"relay" : "-relay-",
"getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
"responseFnName" : "response",
"errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
}
},
script
)
.configHandler((h) => {
h.on('getDataSrv', '-relay-', () => {
return peer.getStatus().relayPeerId;
});
h.on('getDataSrv', 'name', () => {return name;});
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 helloWorld');
})
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 {
ResultCodes,
RequestFlow,
RequestFlowBuilder,
CallParams
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
CallParams,
callFunction,
registerService,
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
function missingFields(obj: any, fields: string[]): string[] {
@ -27,24 +26,8 @@ function missingFields(obj: any, fields: string[]): string[] {
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(...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;
const promise = new Promise<void>((resolve, reject) => {
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
let script = `
(xor
(seq
(seq
@ -63,34 +46,34 @@ export function ifElseCall(...args: any) {
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
)
`,
)
.configHandler((h) => {
h.on('getDataSrv', '-relay-', () => {
return peer.getStatus().relayPeerId;
});
h.on('getDataSrv', 'condition', () => {return condition;});
h.onEvent('callbackSrv', 'response', (args) => {
});
h.onEvent('errorHandlingSrv', 'error', (args) => {
const [err] = args;
reject(err);
});
})
.handleScriptError(reject)
.handleTimeout(() => {
reject('Request timed out for ifElseCall');
})
if (config && config.ttl) {
r.withTTL(config.ttl)
`
return callFunction(
args,
{
"functionName" : "ifElseCall",
"returnType" : {
"tag" : "void"
},
"argDefs" : [
{
"name" : "condition",
"argType" : {
"tag" : "primitive"
}
request = r.build();
});
peer.internals.initiateFlow(request!);
return Promise.race([promise, Promise.resolve()]);
}
],
"names" : {
"relay" : "-relay-",
"getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
"responseFnName" : "response",
"errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
}
},
script
)
}
@ -98,24 +81,8 @@ export function ifElseCall(...args: any) {
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(...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;
const promise = new Promise<void>((resolve, reject) => {
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
let script = `
(xor
(seq
(seq
@ -134,32 +101,32 @@ export function ifElseNumCall(...args: any) {
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
)
`,
`
return callFunction(
args,
{
"functionName" : "ifElseNumCall",
"returnType" : {
"tag" : "void"
},
"argDefs" : [
{
"name" : "condition",
"argType" : {
"tag" : "primitive"
}
}
],
"names" : {
"relay" : "-relay-",
"getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
"responseFnName" : "response",
"errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
}
},
script
)
.configHandler((h) => {
h.on('getDataSrv', '-relay-', () => {
return peer.getStatus().relayPeerId;
});
h.on('getDataSrv', 'condition', () => {return condition;});
h.onEvent('callbackSrv', 'response', (args) => {
});
h.onEvent('errorHandlingSrv', 'error', (args) => {
const [err] = args;
reject(err);
});
})
.handleScriptError(reject)
.handleTimeout(() => {
reject('Request timed out for ifElseNumCall');
})
if (config && config.ttl) {
r.withTTL(config.ttl)
}
request = r.build();
});
peer.internals.initiateFlow(request!);
return Promise.race([promise, Promise.resolve()]);
}

View File

@ -8,11 +8,10 @@
*/
import { Fluence, FluencePeer } from '@fluencelabs/fluence';
import {
ResultCodes,
RequestFlow,
RequestFlowBuilder,
CallParams
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
CallParams,
callFunction,
registerService,
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
function missingFields(obj: any, fields: string[]): string[] {
@ -31,60 +30,22 @@ export function registerSuperFoo(peer: FluencePeer, serviceId: string, service:
export function registerSuperFoo(...args: any) {
let peer: FluencePeer;
let serviceId: any;
let service: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
} else {
peer = Fluence.getPeer();
registerService(
args,
{
"defaultServiceId" : "super_foo",
"functions" : [
{
"functionName" : "small_foo",
"argDefs" : [
],
"returnType" : {
"tag" : "primitive"
}
if (typeof args[0] === 'string') {
serviceId = args[0];
} 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

View File

@ -8,11 +8,10 @@
*/
import { Fluence, FluencePeer } from '@fluencelabs/fluence';
import {
ResultCodes,
RequestFlow,
RequestFlowBuilder,
CallParams
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
CallParams,
callFunction,
registerService,
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
function missingFields(obj: any, fields: string[]): string[] {
@ -31,60 +30,22 @@ export function registerMyExportSrv(peer: FluencePeer, serviceId: string, servic
export function registerMyExportSrv(...args: any) {
let peer: FluencePeer;
let serviceId: any;
let service: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
} else {
peer = Fluence.getPeer();
registerService(
args,
{
"defaultServiceId" : "my_export_srv",
"functions" : [
{
"functionName" : "another_str",
"argDefs" : [
],
"returnType" : {
"tag" : "primitive"
}
if (typeof args[0] === 'string') {
serviceId = args[0];
} 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
@ -93,22 +54,8 @@ export function registerMyExportSrv(...args: any) {
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(...args: any) {
let peer: FluencePeer;
let config: any;
if (FluencePeer.isInstance(args[0])) {
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(`
let script = `
(xor
(seq
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
@ -119,33 +66,26 @@ export function string_from_lib(...args: any) {
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
)
`,
`
return callFunction(
args,
{
"functionName" : "string_from_lib",
"returnType" : {
"tag" : "primitive"
},
"argDefs" : [
],
"names" : {
"relay" : "-relay-",
"getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
"responseFnName" : "response",
"errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
}
},
script
)
.configHandler((h) => {
h.on('getDataSrv', '-relay-', () => {
return peer.getStatus().relayPeerId;
});
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 string_from_lib');
})
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 {
ResultCodes,
RequestFlow,
RequestFlowBuilder,
CallParams
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
CallParams,
callFunction,
registerService,
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
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) {
let peer: FluencePeer;
let serviceId: any;
let service: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
} else {
peer = Fluence.getPeer();
registerService(
args,
{
"defaultServiceId" : null,
"functions" : [
{
"functionName" : "more_call",
"argDefs" : [
],
"returnType" : {
"tag" : "void"
}
if (typeof args[0] === 'string') {
serviceId = args[0];
} 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

View File

@ -8,11 +8,10 @@
*/
import { Fluence, FluencePeer } from '@fluencelabs/fluence';
import {
ResultCodes,
RequestFlow,
RequestFlowBuilder,
CallParams
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
CallParams,
callFunction,
registerService,
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
function missingFields(obj: any, fields: string[]): string[] {
@ -27,22 +26,8 @@ function missingFields(obj: any, fields: string[]): string[] {
export function wrap(config?: {ttl?: number}): Promise<string>;
export function wrap(peer: FluencePeer, config?: {ttl?: number}): Promise<string>;
export function wrap(...args: any) {
let peer: FluencePeer;
let config: any;
if (FluencePeer.isInstance(args[0])) {
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(`
let script = `
(xor
(seq
(seq
@ -59,35 +44,28 @@ export function wrap(...args: any) {
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
)
`,
)
.configHandler((h) => {
h.on('getDataSrv', '-relay-', () => {
return peer.getStatus().relayPeerId;
});
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 wrap');
})
if (config && config.ttl) {
r.withTTL(config.ttl)
`
return callFunction(
args,
{
"functionName" : "wrap",
"returnType" : {
"tag" : "primitive"
},
"argDefs" : [
],
"names" : {
"relay" : "-relay-",
"getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
"responseFnName" : "response",
"errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
}
request = r.build();
});
peer.internals.initiateFlow(request!);
return promise;
},
script
)
}
@ -95,22 +73,8 @@ export function wrap(...args: any) {
export function barfoo(config?: {ttl?: number}): Promise<string[]>;
export function barfoo(peer: FluencePeer, config?: {ttl?: number}): Promise<string[]>;
export function barfoo(...args: any) {
let peer: FluencePeer;
let config: any;
if (FluencePeer.isInstance(args[0])) {
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(`
let script = `
(xor
(seq
(seq
@ -127,33 +91,26 @@ export function barfoo(...args: any) {
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
)
`,
`
return callFunction(
args,
{
"functionName" : "barfoo",
"returnType" : {
"tag" : "primitive"
},
"argDefs" : [
],
"names" : {
"relay" : "-relay-",
"getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
"responseFnName" : "response",
"errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
}
},
script
)
.configHandler((h) => {
h.on('getDataSrv', '-relay-', () => {
return peer.getStatus().relayPeerId;
});
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 barfoo');
})
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 {
ResultCodes,
RequestFlow,
RequestFlowBuilder,
CallParams
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
CallParams,
callFunction,
registerService,
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
function missingFields(obj: any, fields: string[]): string[] {
@ -27,22 +26,8 @@ function missingFields(obj: any, fields: string[]): 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(...args: any) {
let peer: FluencePeer;
let config: any;
if (FluencePeer.isInstance(args[0])) {
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(`
let script = `
(xor
(seq
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
@ -53,33 +38,26 @@ export function foo_wrapper(...args: any) {
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
)
`,
`
return callFunction(
args,
{
"functionName" : "foo_wrapper",
"returnType" : {
"tag" : "primitive"
},
"argDefs" : [
],
"names" : {
"relay" : "-relay-",
"getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
"responseFnName" : "response",
"errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
}
},
script
)
.configHandler((h) => {
h.on('getDataSrv', '-relay-', () => {
return peer.getStatus().relayPeerId;
});
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 foo_wrapper');
})
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 {
ResultCodes,
RequestFlow,
RequestFlowBuilder,
CallParams
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
CallParams,
callFunction,
registerService,
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
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) {
let peer: FluencePeer;
let serviceId: any;
let service: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
} else {
peer = Fluence.getPeer();
registerService(
args,
{
"defaultServiceId" : "op",
"functions" : [
{
"functionName" : "array",
"argDefs" : [
{
"name" : "a",
"argType" : {
"tag" : "primitive"
}
if (typeof args[0] === 'string') {
serviceId = args[0];
} 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, ['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;
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)
{
"name" : "b",
"argType" : {
"tag" : "optional"
}
if (req.fnName === 'array_length') {
const callParams = {
...req.particleContext,
tetraplets: {
array: req.tetraplets[0]
},
};
resp.retCode = ResultCodes.success;
resp.result = service.array_length(req.args[0], callParams)
{
"name" : "c",
"argType" : {
"tag" : "optional"
}
if (req.fnName === 'bytes_from_b58') {
const callParams = {
...req.particleContext,
tetraplets: {
b: req.tetraplets[0]
},
};
resp.retCode = ResultCodes.success;
resp.result = service.bytes_from_b58(req.args[0], callParams)
{
"name" : "d",
"argType" : {
"tag" : "optional"
}
}
],
"returnType" : {
"tag" : "primitive"
}
if (req.fnName === 'bytes_to_b58') {
const callParams = {
...req.particleContext,
tetraplets: {
bs: req.tetraplets[0]
},
};
resp.retCode = ResultCodes.success;
resp.result = service.bytes_to_b58(req.args[0], callParams)
{
"functionName" : "array_length",
"argDefs" : [
{
"name" : "array",
"argType" : {
"tag" : "primitive"
}
}
],
"returnType" : {
"tag" : "primitive"
}
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;
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)
{
"functionName" : "bytes_from_b58",
"argDefs" : [
{
"name" : "b",
"argType" : {
"tag" : "primitive"
}
}
],
"returnType" : {
"tag" : "primitive"
}
if (req.fnName === 'concat_strings') {
const callParams = {
...req.particleContext,
tetraplets: {
a: req.tetraplets[0],b: req.tetraplets[1]
},
};
resp.retCode = ResultCodes.success;
resp.result = service.concat_strings(req.args[0], req.args[1], callParams)
{
"functionName" : "bytes_to_b58",
"argDefs" : [
{
"name" : "bs",
"argType" : {
"tag" : "primitive"
}
}
],
"returnType" : {
"tag" : "primitive"
}
if (req.fnName === 'identity') {
const callParams = {
...req.particleContext,
tetraplets: {
s: req.tetraplets[0]
},
};
resp.retCode = ResultCodes.success;
var respResult = service.identity(req.args[0].length === 0 ? null : req.args[0][0], callParams);
resp.result = respResult === null ? [] : [respResult]
{
"functionName" : "concat",
"argDefs" : [
{
"name" : "a",
"argType" : {
"tag" : "primitive"
}
if (req.fnName === 'noop') {
const callParams = {
...req.particleContext,
tetraplets: {
},
};
resp.retCode = ResultCodes.success;
service.noop(callParams); resp.result = {}
{
"name" : "b",
"argType" : {
"tag" : "optional"
}
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)
{
"name" : "c",
"argType" : {
"tag" : "optional"
}
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)
{
"name" : "d",
"argType" : {
"tag" : "optional"
}
}
],
"returnType" : {
"tag" : "primitive"
}
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)
{
"functionName" : "concat_strings",
"argDefs" : [
{
"name" : "a",
"argType" : {
"tag" : "primitive"
}
next();
});
},
{
"name" : "b",
"argType" : {
"tag" : "primitive"
}
}
],
"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"
}
}
]
}
);
}
@ -222,60 +252,22 @@ export function registerMyExportSrv(peer: FluencePeer, serviceId: string, servic
export function registerMyExportSrv(...args: any) {
let peer: FluencePeer;
let serviceId: any;
let service: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
} else {
peer = Fluence.getPeer();
registerService(
args,
{
"defaultServiceId" : "my_export_srv",
"functions" : [
{
"functionName" : "another_str",
"argDefs" : [
],
"returnType" : {
"tag" : "primitive"
}
if (typeof args[0] === 'string') {
serviceId = args[0];
} 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
@ -284,22 +276,8 @@ export function registerMyExportSrv(...args: any) {
export function some_str(config?: {ttl?: number}): Promise<string>;
export function some_str(peer: FluencePeer, config?: {ttl?: number}): Promise<string>;
export function some_str(...args: any) {
let peer: FluencePeer;
let config: any;
if (FluencePeer.isInstance(args[0])) {
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(`
let script = `
(xor
(seq
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
@ -310,35 +288,28 @@ export function some_str(...args: any) {
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
)
`,
)
.configHandler((h) => {
h.on('getDataSrv', '-relay-', () => {
return peer.getStatus().relayPeerId;
});
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 some_str');
})
if (config && config.ttl) {
r.withTTL(config.ttl)
`
return callFunction(
args,
{
"functionName" : "some_str",
"returnType" : {
"tag" : "primitive"
},
"argDefs" : [
],
"names" : {
"relay" : "-relay-",
"getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
"responseFnName" : "response",
"errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
}
request = r.build();
});
peer.internals.initiateFlow(request!);
return promise;
},
script
)
}
@ -346,22 +317,8 @@ export function some_str(...args: any) {
export function some_string(config?: {ttl?: number}): Promise<string>;
export function some_string(peer: FluencePeer, config?: {ttl?: number}): Promise<string>;
export function some_string(...args: any) {
let peer: FluencePeer;
let config: any;
if (FluencePeer.isInstance(args[0])) {
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(`
let script = `
(xor
(seq
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
@ -372,35 +329,28 @@ export function some_string(...args: any) {
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
)
`,
)
.configHandler((h) => {
h.on('getDataSrv', '-relay-', () => {
return peer.getStatus().relayPeerId;
});
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 some_string');
})
if (config && config.ttl) {
r.withTTL(config.ttl)
`
return callFunction(
args,
{
"functionName" : "some_string",
"returnType" : {
"tag" : "primitive"
},
"argDefs" : [
],
"names" : {
"relay" : "-relay-",
"getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
"responseFnName" : "response",
"errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
}
request = r.build();
});
peer.internals.initiateFlow(request!);
return promise;
},
script
)
}
@ -408,22 +358,8 @@ export function some_string(...args: any) {
export function decl_foo(config?: {ttl?: number}): Promise<string>;
export function decl_foo(peer: FluencePeer, config?: {ttl?: number}): Promise<string>;
export function decl_foo(...args: any) {
let peer: FluencePeer;
let config: any;
if (FluencePeer.isInstance(args[0])) {
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(`
let script = `
(xor
(seq
(seq
@ -437,35 +373,28 @@ export function decl_foo(...args: any) {
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
)
`,
)
.configHandler((h) => {
h.on('getDataSrv', '-relay-', () => {
return peer.getStatus().relayPeerId;
});
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 decl_foo');
})
if (config && config.ttl) {
r.withTTL(config.ttl)
`
return callFunction(
args,
{
"functionName" : "decl_foo",
"returnType" : {
"tag" : "primitive"
},
"argDefs" : [
],
"names" : {
"relay" : "-relay-",
"getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
"responseFnName" : "response",
"errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
}
request = r.build();
});
peer.internals.initiateFlow(request!);
return promise;
},
script
)
}
@ -473,22 +402,8 @@ export function decl_foo(...args: any) {
export function decl_bar(config?: {ttl?: number}): Promise<string>;
export function decl_bar(peer: FluencePeer, config?: {ttl?: number}): Promise<string>;
export function decl_bar(...args: any) {
let peer: FluencePeer;
let config: any;
if (FluencePeer.isInstance(args[0])) {
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(`
let script = `
(xor
(seq
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
@ -499,35 +414,28 @@ export function decl_bar(...args: any) {
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
)
`,
)
.configHandler((h) => {
h.on('getDataSrv', '-relay-', () => {
return peer.getStatus().relayPeerId;
});
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 decl_bar');
})
if (config && config.ttl) {
r.withTTL(config.ttl)
`
return callFunction(
args,
{
"functionName" : "decl_bar",
"returnType" : {
"tag" : "primitive"
},
"argDefs" : [
],
"names" : {
"relay" : "-relay-",
"getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
"responseFnName" : "response",
"errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
}
request = r.build();
});
peer.internals.initiateFlow(request!);
return promise;
},
script
)
}
@ -535,22 +443,8 @@ export function decl_bar(...args: any) {
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(...args: any) {
let peer: FluencePeer;
let config: any;
if (FluencePeer.isInstance(args[0])) {
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(`
let script = `
(xor
(seq
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
@ -561,33 +455,26 @@ export function some_random_func(...args: any) {
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
)
`,
`
return callFunction(
args,
{
"functionName" : "some_random_func",
"returnType" : {
"tag" : "primitive"
},
"argDefs" : [
],
"names" : {
"relay" : "-relay-",
"getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
"responseFnName" : "response",
"errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
}
},
script
)
.configHandler((h) => {
h.on('getDataSrv', '-relay-', () => {
return peer.getStatus().relayPeerId;
});
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 some_random_func');
})
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 {
ResultCodes,
RequestFlow,
RequestFlowBuilder,
CallParams
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
CallParams,
callFunction,
registerService,
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
function missingFields(obj: any, fields: string[]): string[] {
@ -31,60 +30,34 @@ export function registerStringService(peer: FluencePeer, serviceId: string, serv
export function registerStringService(...args: any) {
let peer: FluencePeer;
let serviceId: any;
let service: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
} else {
peer = Fluence.getPeer();
registerService(
args,
{
"defaultServiceId" : "string_service",
"functions" : [
{
"functionName" : "concat",
"argDefs" : [
{
"name" : "a",
"argType" : {
"tag" : "primitive"
}
if (typeof args[0] === 'string') {
serviceId = args[0];
} else if (typeof args[1] === 'string') {
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;
resp.result = service.concat(req.args[0], req.args[1], callParams)
{
"name" : "b",
"argType" : {
"tag" : "primitive"
}
next();
});
}
],
"returnType" : {
"tag" : "primitive"
}
}
]
}
);
}
// Functions
@ -93,22 +66,8 @@ export function registerStringService(...args: any) {
export function concat_foobars(config?: {ttl?: number}): Promise<string>;
export function concat_foobars(peer: FluencePeer, config?: {ttl?: number}): Promise<string>;
export function concat_foobars(...args: any) {
let peer: FluencePeer;
let config: any;
if (FluencePeer.isInstance(args[0])) {
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(`
let script = `
(xor
(seq
(seq
@ -140,33 +99,26 @@ export function concat_foobars(...args: any) {
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
)
`,
`
return callFunction(
args,
{
"functionName" : "concat_foobars",
"returnType" : {
"tag" : "primitive"
},
"argDefs" : [
],
"names" : {
"relay" : "-relay-",
"getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
"responseFnName" : "response",
"errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
}
},
script
)
.configHandler((h) => {
h.on('getDataSrv', '-relay-', () => {
return peer.getStatus().relayPeerId;
});
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 concat_foobars');
})
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 {
ResultCodes,
RequestFlow,
RequestFlowBuilder,
CallParams
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
CallParams,
callFunction,
registerService,
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
function missingFields(obj: any, fields: string[]): string[] {
@ -31,60 +30,28 @@ export function registerSubService(peer: FluencePeer, serviceId: string, service
export function registerSubService(...args: any) {
let peer: FluencePeer;
let serviceId: any;
let service: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
} else {
peer = Fluence.getPeer();
registerService(
args,
{
"defaultServiceId" : "sub_service",
"functions" : [
{
"functionName" : "sub",
"argDefs" : [
{
"name" : "s",
"argType" : {
"tag" : "primitive"
}
if (typeof args[0] === 'string') {
serviceId = args[0];
} else if (typeof args[1] === 'string') {
serviceId = args[1];
} else {
serviceId = "sub_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];
],
"returnType" : {
"tag" : "primitive"
}
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
@ -93,22 +60,8 @@ export type SubImportResult = { one: string; two: number; }
export function subImport(config?: {ttl?: number}): Promise<SubImportResult>;
export function subImport(peer: FluencePeer, config?: {ttl?: number}): Promise<SubImportResult>;
export function subImport(...args: any) {
let peer: FluencePeer;
let config: any;
if (FluencePeer.isInstance(args[0])) {
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(`
let script = `
(xor
(seq
(seq
@ -122,33 +75,26 @@ export function subImport(...args: any) {
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
)
`,
`
return callFunction(
args,
{
"functionName" : "subImport",
"returnType" : {
"tag" : "primitive"
},
"argDefs" : [
],
"names" : {
"relay" : "-relay-",
"getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
"responseFnName" : "response",
"errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
}
},
script
)
.configHandler((h) => {
h.on('getDataSrv', '-relay-', () => {
return peer.getStatus().relayPeerId;
});
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 subImport');
})
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 {
ResultCodes,
RequestFlow,
RequestFlowBuilder,
CallParams
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
CallParams,
callFunction,
registerService,
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
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) {
let peer: FluencePeer;
let serviceId: any;
let service: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
} else {
peer = Fluence.getPeer();
registerService(
args,
{
"defaultServiceId" : "multiret-test",
"functions" : [
{
"functionName" : "retStr",
"argDefs" : [
{
"name" : "arg0",
"argType" : {
"tag" : "primitive"
}
if (typeof args[0] === 'string') {
serviceId = args[0];
} else if (typeof args[1] === 'string') {
serviceId = args[1];
} else {
serviceId = "multiret-test"
}
// 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];
],
"returnType" : {
"tag" : "primitive"
}
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) {
let peer: FluencePeer;
let serviceId: any;
let service: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
} else {
peer = Fluence.getPeer();
registerService(
args,
{
"defaultServiceId" : "multiret-num",
"functions" : [
{
"functionName" : "retNum",
"argDefs" : [
],
"returnType" : {
"tag" : "primitive"
}
if (typeof args[0] === 'string') {
serviceId = args[0];
} 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
@ -161,22 +90,8 @@ export type TupleFuncResult = [string, number]
export function tupleFunc(config?: {ttl?: number}): Promise<TupleFuncResult>;
export function tupleFunc(peer: FluencePeer, config?: {ttl?: number}): Promise<TupleFuncResult>;
export function tupleFunc(...args: any) {
let peer: FluencePeer;
let config: any;
if (FluencePeer.isInstance(args[0])) {
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(`
let script = `
(xor
(seq
(seq
@ -193,36 +108,36 @@ export function tupleFunc(...args: any) {
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
)
`,
)
.configHandler((h) => {
h.on('getDataSrv', '-relay-', () => {
return peer.getStatus().relayPeerId;
});
h.onEvent('callbackSrv', 'response', (args) => {
let opt: any = args;
return resolve(opt);
});
h.onEvent('errorHandlingSrv', 'error', (args) => {
const [err] = args;
reject(err);
});
})
.handleScriptError(reject)
.handleTimeout(() => {
reject('Request timed out for tupleFunc');
})
if (config && config.ttl) {
r.withTTL(config.ttl)
`
return callFunction(
args,
{
"functionName" : "tupleFunc",
"returnType" : {
"tag" : "multiReturn",
"returnItems" : [
{
"tag" : "primitive"
},
{
"tag" : "primitive"
}
request = r.build();
});
peer.internals.initiateFlow(request!);
return promise;
]
},
"argDefs" : [
],
"names" : {
"relay" : "-relay-",
"getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
"responseFnName" : "response",
"errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
}
},
script
)
}
@ -230,27 +145,8 @@ export type MultiReturnFuncResult = [string[], number, string, number[], string
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(...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;
const promise = new Promise<MultiReturnFuncResult>((resolve, reject) => {
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
let script = `
(xor
(seq
(seq
@ -282,38 +178,58 @@ export function multiReturnFunc(...args: any) {
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
)
`,
`
return callFunction(
args,
{
"functionName" : "multiReturnFunc",
"returnType" : {
"tag" : "multiReturn",
"returnItems" : [
{
"tag" : "primitive"
},
{
"tag" : "primitive"
},
{
"tag" : "primitive"
},
{
"tag" : "primitive"
},
{
"tag" : "optional"
},
{
"tag" : "primitive"
}
]
},
"argDefs" : [
{
"name" : "somethingToReturn",
"argType" : {
"tag" : "primitive"
}
},
{
"name" : "smthOption",
"argType" : {
"tag" : "optional"
}
}
],
"names" : {
"relay" : "-relay-",
"getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
"responseFnName" : "response",
"errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
}
},
script
)
.configHandler((h) => {
h.on('getDataSrv', '-relay-', () => {
return peer.getStatus().relayPeerId;
});
h.on('getDataSrv', 'somethingToReturn', () => {return somethingToReturn;});
h.on('getDataSrv', 'smthOption', () => {return smthOption === null ? [] : [smthOption];});
h.onEvent('callbackSrv', 'response', (args) => {
let opt: any = args;
if( Array.isArray(opt[4])) {
if (opt[4].length === 0) { opt[4] = null; }
else {opt[4] = opt[4][0]; }
}
return resolve(opt);
});
h.onEvent('errorHandlingSrv', 'error', (args) => {
const [err] = args;
reject(err);
});
})
.handleScriptError(reject)
.handleTimeout(() => {
reject('Request timed out for multiReturnFunc');
})
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 {
ResultCodes,
RequestFlow,
RequestFlowBuilder,
CallParams
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
CallParams,
callFunction,
registerService,
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
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) {
let peer: FluencePeer;
let serviceId: any;
let service: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
} else {
peer = Fluence.getPeer();
registerService(
args,
{
"defaultServiceId" : "opa",
"functions" : [
{
"functionName" : "identity",
"argDefs" : [
{
"name" : "s",
"argType" : {
"tag" : "primitive"
}
if (typeof args[0] === 'string') {
serviceId = args[0];
} else if (typeof args[1] === 'string') {
serviceId = args[1];
} else {
serviceId = "opa"
}
// 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];
],
"returnType" : {
"tag" : "primitive"
}
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
@ -93,24 +60,8 @@ export function registerOpH(...args: any) {
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(...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;
const promise = new Promise<string>((resolve, reject) => {
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
let script = `
(xor
(seq
(seq
@ -127,35 +78,34 @@ export function a(...args: any) {
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
)
`,
)
.configHandler((h) => {
h.on('getDataSrv', '-relay-', () => {
return peer.getStatus().relayPeerId;
});
h.on('getDataSrv', 'b', () => {return b;});
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 a');
})
if (config && config.ttl) {
r.withTTL(config.ttl)
`
return callFunction(
args,
{
"functionName" : "a",
"returnType" : {
"tag" : "primitive"
},
"argDefs" : [
{
"name" : "b",
"argType" : {
"tag" : "primitive"
}
request = r.build();
});
peer.internals.initiateFlow(request!);
return promise;
}
],
"names" : {
"relay" : "-relay-",
"getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
"responseFnName" : "response",
"errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
}
},
script
)
}
@ -163,24 +113,8 @@ export function a(...args: any) {
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(...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;
const promise = new Promise<string>((resolve, reject) => {
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
let script = `
(xor
(seq
(seq
@ -197,33 +131,32 @@ export function d(...args: any) {
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
)
`,
`
return callFunction(
args,
{
"functionName" : "d",
"returnType" : {
"tag" : "primitive"
},
"argDefs" : [
{
"name" : "e",
"argType" : {
"tag" : "primitive"
}
}
],
"names" : {
"relay" : "-relay-",
"getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
"responseFnName" : "response",
"errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
}
},
script
)
.configHandler((h) => {
h.on('getDataSrv', '-relay-', () => {
return peer.getStatus().relayPeerId;
});
h.on('getDataSrv', 'e', () => {return e;});
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 d');
})
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 {
ResultCodes,
RequestFlow,
RequestFlowBuilder,
CallParams
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
CallParams,
callFunction,
registerService,
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
function missingFields(obj: any, fields: string[]): string[] {
@ -31,60 +30,28 @@ export function registerServiceWithDefaultId(peer: FluencePeer, serviceId: strin
export function registerServiceWithDefaultId(...args: any) {
let peer: FluencePeer;
let serviceId: any;
let service: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
} else {
peer = Fluence.getPeer();
registerService(
args,
{
"defaultServiceId" : "defaultId",
"functions" : [
{
"functionName" : "hello",
"argDefs" : [
{
"name" : "s",
"argType" : {
"tag" : "primitive"
}
if (typeof args[0] === 'string') {
serviceId = args[0];
} else if (typeof args[1] === 'string') {
serviceId = args[1];
} else {
serviceId = "defaultId"
}
// 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];
],
"returnType" : {
"tag" : "void"
}
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) {
let peer: FluencePeer;
let serviceId: any;
let service: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
} else {
peer = Fluence.getPeer();
registerService(
args,
{
"defaultServiceId" : null,
"functions" : [
{
"functionName" : "hello",
"argDefs" : [
{
"name" : "s",
"argType" : {
"tag" : "primitive"
}
if (typeof args[0] === 'string') {
serviceId = args[0];
} 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];
],
"returnType" : {
"tag" : "void"
}
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) {
let peer: FluencePeer;
let serviceId: any;
let service: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
} else {
peer = Fluence.getPeer();
registerService(
args,
{
"defaultServiceId" : null,
"functions" : [
{
"functionName" : "member1",
"argDefs" : [
],
"returnType" : {
"tag" : "void"
}
if (typeof args[0] === 'string') {
serviceId = args[0];
} 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, ['member1', 'member2', 'member3', 'member4', 'member5']);
if (!!incorrectServiceDefinitions.length) {
throw new Error("Error registering service MoreMembers: missing functions: " + incorrectServiceDefinitions.map((d) => "'" + d + "'").join(", "))
}
peer.internals.callServiceHandler.use((req, resp, next) => {
if (req.serviceId !== serviceId) {
next();
return;
}
if (req.fnName === 'member1') {
const callParams = {
...req.particleContext,
tetraplets: {
},
};
resp.retCode = ResultCodes.success;
service.member1(callParams); resp.result = {}
{
"functionName" : "member2",
"argDefs" : [
{
"name" : "s1",
"argType" : {
"tag" : "primitive"
}
}
],
"returnType" : {
"tag" : "void"
}
if (req.fnName === 'member2') {
const callParams = {
...req.particleContext,
tetraplets: {
s1: req.tetraplets[0]
},
};
resp.retCode = ResultCodes.success;
service.member2(req.args[0], callParams); resp.result = {}
{
"functionName" : "member3",
"argDefs" : [
{
"name" : "s1",
"argType" : {
"tag" : "primitive"
}
if (req.fnName === 'member3') {
const callParams = {
...req.particleContext,
tetraplets: {
s1: req.tetraplets[0],s2: req.tetraplets[1]
},
};
resp.retCode = ResultCodes.success;
service.member3(req.args[0], req.args[1], callParams); resp.result = {}
{
"name" : "s2",
"argType" : {
"tag" : "primitive"
}
}
],
"returnType" : {
"tag" : "void"
}
if (req.fnName === 'member4') {
const callParams = {
...req.particleContext,
tetraplets: {
s1: req.tetraplets[0],s2: req.tetraplets[1],i: req.tetraplets[2]
},
};
resp.retCode = ResultCodes.success;
resp.result = service.member4(req.args[0], req.args[1], req.args[2], callParams)
{
"functionName" : "member4",
"argDefs" : [
{
"name" : "s1",
"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;
resp.result = service.member5(req.args[0], req.args[1], req.args[2], callParams)
{
"name" : "s2",
"argType" : {
"tag" : "primitive"
}
next();
});
},
{
"name" : "i",
"argType" : {
"tag" : "primitive"
}
}
],
"returnType" : {
"tag" : "primitive"
}
},
{
"functionName" : "member5",
"argDefs" : [
{
"name" : "s1",
"argType" : {
"tag" : "primitive"
}
},
{
"name" : "s2",
"argType" : {
"tag" : "primitive"
}
},
{
"name" : "i",
"argType" : {
"tag" : "primitive"
}
}
],
"returnType" : {
"tag" : "primitive"
}
}
]
}
);
}
// Functions
@ -269,24 +212,8 @@ 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(peer: FluencePeer, callback: (arg0: string, arg1: number, callParams: CallParams<'arg0' | 'arg1'>) => void, config?: {ttl?: number}): Promise<void>;
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;
const promise = new Promise<void>((resolve, reject) => {
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
let script = `
(xor
(seq
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
@ -297,47 +224,53 @@ export function f1(...args: any) {
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
)
`,
)
.configHandler((h) => {
h.on('getDataSrv', '-relay-', () => {
return peer.getStatus().relayPeerId;
});
h.use((req, resp, next) => {
if(req.serviceId === 'callbackSrv' && req.fnName === 'callback') {
const callParams = {
...req.particleContext,
tetraplets: {
arg0: req.tetraplets[0],arg1: req.tetraplets[1]
`
return callFunction(
args,
{
"functionName" : "f1",
"returnType" : {
"tag" : "void"
},
};
resp.retCode = ResultCodes.success;
callback(req.args[0], req.args[1], callParams); resp.result = {}
"argDefs" : [
{
"name" : "callback",
"argType" : {
"tag" : "callback",
"callback" : {
"argDefs" : [
{
"name" : "arg0",
"argType" : {
"tag" : "primitive"
}
next();
});
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)
},
{
"name" : "arg1",
"argType" : {
"tag" : "primitive"
}
request = r.build();
});
peer.internals.initiateFlow(request!);
return Promise.race([promise, Promise.resolve()]);
}
],
"returnType" : {
"tag" : "void"
}
}
}
}
],
"names" : {
"relay" : "-relay-",
"getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
"responseFnName" : "response",
"errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
}
},
script
)
}
@ -345,27 +278,8 @@ 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(peer: FluencePeer, num: number, callback: (arg0: string, arg1: number, callParams: CallParams<'arg0' | 'arg1'>) => void, config?: {ttl?: number}): Promise<void>;
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;
const promise = new Promise<void>((resolve, reject) => {
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
let script = `
(xor
(seq
(seq
@ -379,48 +293,59 @@ export function f2(...args: any) {
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
)
`,
)
.configHandler((h) => {
h.on('getDataSrv', '-relay-', () => {
return peer.getStatus().relayPeerId;
});
h.on('getDataSrv', 'num', () => {return num;});
h.use((req, resp, next) => {
if(req.serviceId === 'callbackSrv' && req.fnName === 'callback') {
const callParams = {
...req.particleContext,
tetraplets: {
arg0: req.tetraplets[0],arg1: req.tetraplets[1]
`
return callFunction(
args,
{
"functionName" : "f2",
"returnType" : {
"tag" : "void"
},
};
resp.retCode = ResultCodes.success;
callback(req.args[0], req.args[1], callParams); resp.result = {}
"argDefs" : [
{
"name" : "num",
"argType" : {
"tag" : "primitive"
}
next();
});
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)
},
{
"name" : "callback",
"argType" : {
"tag" : "callback",
"callback" : {
"argDefs" : [
{
"name" : "arg0",
"argType" : {
"tag" : "primitive"
}
request = r.build();
});
peer.internals.initiateFlow(request!);
return Promise.race([promise, Promise.resolve()]);
},
{
"name" : "arg1",
"argType" : {
"tag" : "primitive"
}
}
],
"returnType" : {
"tag" : "void"
}
}
}
}
],
"names" : {
"relay" : "-relay-",
"getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
"responseFnName" : "response",
"errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
}
},
script
)
}
@ -428,27 +353,8 @@ 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(peer: FluencePeer, num: number, callback: (arg0: string, arg1: number, callParams: CallParams<'arg0' | 'arg1'>) => void, config?: {ttl?: number}): Promise<string>;
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;
const promise = new Promise<string>((resolve, reject) => {
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
let script = `
(xor
(seq
(seq
@ -468,49 +374,59 @@ export function f3(...args: any) {
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3])
)
`,
)
.configHandler((h) => {
h.on('getDataSrv', '-relay-', () => {
return peer.getStatus().relayPeerId;
});
h.on('getDataSrv', 'num', () => {return num;});
h.use((req, resp, next) => {
if(req.serviceId === 'callbackSrv' && req.fnName === 'callback') {
const callParams = {
...req.particleContext,
tetraplets: {
arg0: req.tetraplets[0],arg1: req.tetraplets[1]
`
return callFunction(
args,
{
"functionName" : "f3",
"returnType" : {
"tag" : "primitive"
},
};
resp.retCode = ResultCodes.success;
callback(req.args[0], req.args[1], callParams); resp.result = {}
"argDefs" : [
{
"name" : "num",
"argType" : {
"tag" : "primitive"
}
next();
});
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)
},
{
"name" : "callback",
"argType" : {
"tag" : "callback",
"callback" : {
"argDefs" : [
{
"name" : "arg0",
"argType" : {
"tag" : "primitive"
}
request = r.build();
});
peer.internals.initiateFlow(request!);
return promise;
},
{
"name" : "arg1",
"argType" : {
"tag" : "primitive"
}
}
],
"returnType" : {
"tag" : "void"
}
}
}
}
],
"names" : {
"relay" : "-relay-",
"getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
"responseFnName" : "response",
"errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
}
},
script
)
}
@ -518,24 +434,8 @@ export function f3(...args: any) {
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(...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;
const promise = new Promise<void>((resolve, reject) => {
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
let script = `
(xor
(seq
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
@ -546,45 +446,39 @@ export function callBackZeroArgs(...args: any) {
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
)
`,
)
.configHandler((h) => {
h.on('getDataSrv', '-relay-', () => {
return peer.getStatus().relayPeerId;
});
h.use((req, resp, next) => {
if(req.serviceId === 'callbackSrv' && req.fnName === 'callback') {
const callParams = {
...req.particleContext,
tetraplets: {
`
return callFunction(
args,
{
"functionName" : "callBackZeroArgs",
"returnType" : {
"tag" : "void"
},
};
resp.retCode = ResultCodes.success;
callback(callParams); resp.result = {}
"argDefs" : [
{
"name" : "callback",
"argType" : {
"tag" : "callback",
"callback" : {
"argDefs" : [
],
"returnType" : {
"tag" : "void"
}
next();
});
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!);
return Promise.race([promise, Promise.resolve()]);
}
}
],
"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 {
ResultCodes,
RequestFlow,
RequestFlowBuilder,
CallParams
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
CallParams,
callFunction,
registerService,
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
function missingFields(obj: any, fields: string[]): string[] {
@ -32,71 +31,36 @@ export function registerHelloWorld(peer: FluencePeer, serviceId: string, service
export function registerHelloWorld(...args: any) {
let peer: FluencePeer;
let serviceId: any;
let service: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
} else {
peer = Fluence.getPeer();
registerService(
args,
{
"defaultServiceId" : "default",
"functions" : [
{
"functionName" : "getNumber",
"argDefs" : [
],
"returnType" : {
"tag" : "primitive"
}
if (typeof args[0] === 'string') {
serviceId = args[0];
} else if (typeof args[1] === 'string') {
serviceId = args[1];
} else {
serviceId = "default"
}
// 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, ['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)
{
"functionName" : "sayHello",
"argDefs" : [
{
"name" : "s",
"argType" : {
"tag" : "primitive"
}
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();
});
],
"returnType" : {
"tag" : "void"
}
}
]
}
);
}
// Functions
@ -105,24 +69,8 @@ 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(peer: FluencePeer, callback: (arg0: string, arg1: number, callParams: CallParams<'arg0' | 'arg1'>) => void, config?: {ttl?: number}): Promise<void>;
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;
const promise = new Promise<void>((resolve, reject) => {
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
let script = `
(xor
(seq
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
@ -133,45 +81,51 @@ export function callMeBack(...args: any) {
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
)
`,
)
.configHandler((h) => {
h.on('getDataSrv', '-relay-', () => {
return peer.getStatus().relayPeerId;
});
h.use((req, resp, next) => {
if(req.serviceId === 'callbackSrv' && req.fnName === 'callback') {
const callParams = {
...req.particleContext,
tetraplets: {
arg0: req.tetraplets[0],arg1: req.tetraplets[1]
`
return callFunction(
args,
{
"functionName" : "callMeBack",
"returnType" : {
"tag" : "void"
},
};
resp.retCode = ResultCodes.success;
callback(req.args[0], req.args[1], callParams); resp.result = {}
"argDefs" : [
{
"name" : "callback",
"argType" : {
"tag" : "callback",
"callback" : {
"argDefs" : [
{
"name" : "arg0",
"argType" : {
"tag" : "primitive"
}
next();
});
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)
},
{
"name" : "arg1",
"argType" : {
"tag" : "primitive"
}
request = r.build();
});
peer.internals.initiateFlow(request!);
return Promise.race([promise, Promise.resolve()]);
}
],
"returnType" : {
"tag" : "void"
}
}
}
}
],
"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 {
ResultCodes,
RequestFlow,
RequestFlowBuilder,
CallParams
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
CallParams,
callFunction,
registerService,
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
function missingFields(obj: any, fields: string[]): string[] {
@ -27,24 +26,8 @@ function missingFields(obj: any, fields: string[]): 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(...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;
const promise = new Promise<string[]>((resolve, reject) => {
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
let script = `
(xor
(seq
(seq
@ -73,35 +56,34 @@ export function getPeerExternalAddresses(...args: any) {
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3])
)
`,
)
.configHandler((h) => {
h.on('getDataSrv', '-relay-', () => {
return peer.getStatus().relayPeerId;
});
h.on('getDataSrv', 'otherNodePeerId', () => {return otherNodePeerId;});
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 getPeerExternalAddresses');
})
if (config && config.ttl) {
r.withTTL(config.ttl)
`
return callFunction(
args,
{
"functionName" : "getPeerExternalAddresses",
"returnType" : {
"tag" : "primitive"
},
"argDefs" : [
{
"name" : "otherNodePeerId",
"argType" : {
"tag" : "primitive"
}
request = r.build();
});
peer.internals.initiateFlow(request!);
return promise;
}
],
"names" : {
"relay" : "-relay-",
"getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
"responseFnName" : "response",
"errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
}
},
script
)
}
@ -109,27 +91,8 @@ export function getPeerExternalAddresses(...args: any) {
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(...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;
const promise = new Promise<string[]>((resolve, reject) => {
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
let script = `
(xor
(seq
(seq
@ -173,34 +136,38 @@ export function getDistantAddresses(...args: any) {
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3])
)
`,
`
return callFunction(
args,
{
"functionName" : "getDistantAddresses",
"returnType" : {
"tag" : "primitive"
},
"argDefs" : [
{
"name" : "target",
"argType" : {
"tag" : "primitive"
}
},
{
"name" : "viaNode",
"argType" : {
"tag" : "primitive"
}
}
],
"names" : {
"relay" : "-relay-",
"getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
"responseFnName" : "response",
"errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
}
},
script
)
.configHandler((h) => {
h.on('getDataSrv', '-relay-', () => {
return peer.getStatus().relayPeerId;
});
h.on('getDataSrv', 'target', () => {return target;});
h.on('getDataSrv', 'viaNode', () => {return viaNode;});
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 getDistantAddresses');
})
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 {
ResultCodes,
RequestFlow,
RequestFlowBuilder,
CallParams
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
CallParams,
callFunction,
registerService,
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
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) {
let peer: FluencePeer;
let serviceId: any;
let service: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
} else {
peer = Fluence.getPeer();
registerService(
args,
{
"defaultServiceId" : "test2",
"functions" : [
{
"functionName" : "getStr",
"argDefs" : [
{
"name" : "arg0",
"argType" : {
"tag" : "optional"
}
if (typeof args[0] === 'string') {
serviceId = args[0];
} else if (typeof args[1] === 'string') {
serviceId = args[1];
} else {
serviceId = "test2"
}
// 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];
],
"returnType" : {
"tag" : "optional"
}
const incorrectServiceDefinitions = missingFields(service, ['getStr', 'getStr1', 'getStr2']);
if (!!incorrectServiceDefinitions.length) {
throw new Error("Error registering service SomeS: 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: {
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]
{
"functionName" : "getStr1",
"argDefs" : [
],
"returnType" : {
"tag" : "optional"
}
if (req.fnName === 'getStr1') {
const callParams = {
...req.particleContext,
tetraplets: {
},
};
resp.retCode = ResultCodes.success;
var respResult = service.getStr1(callParams);
resp.result = respResult === null ? [] : [respResult]
{
"functionName" : "getStr2",
"argDefs" : [
{
"name" : "arg0",
"argType" : {
"tag" : "primitive"
}
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();
});
],
"returnType" : {
"tag" : "primitive"
}
}
]
}
);
}
// Functions
@ -123,24 +84,8 @@ if (req.fnName === 'getStr2') {
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(...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;
const promise = new Promise<string>((resolve, reject) => {
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
let script = `
(xor
(seq
(seq
@ -165,35 +110,34 @@ export function useOptional(...args: any) {
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
)
`,
)
.configHandler((h) => {
h.on('getDataSrv', '-relay-', () => {
return peer.getStatus().relayPeerId;
});
h.on('getDataSrv', 'opt', () => {return opt === null ? [] : [opt];});
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 useOptional');
})
if (config && config.ttl) {
r.withTTL(config.ttl)
`
return callFunction(
args,
{
"functionName" : "useOptional",
"returnType" : {
"tag" : "primitive"
},
"argDefs" : [
{
"name" : "opt",
"argType" : {
"tag" : "optional"
}
request = r.build();
});
peer.internals.initiateFlow(request!);
return promise;
}
],
"names" : {
"relay" : "-relay-",
"getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
"responseFnName" : "response",
"errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
}
},
script
)
}
@ -201,22 +145,8 @@ export function useOptional(...args: any) {
export function returnOptional(config?: {ttl?: number}): Promise<string | null>;
export function returnOptional(peer: FluencePeer, config?: {ttl?: number}): Promise<string | null>;
export function returnOptional(...args: any) {
let peer: FluencePeer;
let config: any;
if (FluencePeer.isInstance(args[0])) {
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(`
let script = `
(xor
(seq
(seq
@ -230,39 +160,28 @@ export function returnOptional(...args: any) {
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
)
`,
`
return callFunction(
args,
{
"functionName" : "returnOptional",
"returnType" : {
"tag" : "optional"
},
"argDefs" : [
],
"names" : {
"relay" : "-relay-",
"getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
"responseFnName" : "response",
"errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
}
},
script
)
.configHandler((h) => {
h.on('getDataSrv', '-relay-', () => {
return peer.getStatus().relayPeerId;
});
h.onEvent('callbackSrv', 'response', (args) => {
let [opt] = args;
if (Array.isArray(opt)) {
if (opt.length === 0) { resolve(null); }
opt = opt[0];
}
return resolve(opt);
});
h.onEvent('errorHandlingSrv', 'error', (args) => {
const [err] = args;
reject(err);
});
})
.handleScriptError(reject)
.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,22 +189,8 @@ export function returnOptional(...args: any) {
export function returnNone(config?: {ttl?: number}): Promise<string | null>;
export function returnNone(peer: FluencePeer, config?: {ttl?: number}): Promise<string | null>;
export function returnNone(...args: any) {
let peer: FluencePeer;
let config: any;
if (FluencePeer.isInstance(args[0])) {
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(`
let script = `
(xor
(seq
(seq
@ -299,37 +204,26 @@ export function returnNone(...args: any) {
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
)
`,
`
return callFunction(
args,
{
"functionName" : "returnNone",
"returnType" : {
"tag" : "optional"
},
"argDefs" : [
],
"names" : {
"relay" : "-relay-",
"getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
"responseFnName" : "response",
"errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
}
},
script
)
.configHandler((h) => {
h.on('getDataSrv', '-relay-', () => {
return peer.getStatus().relayPeerId;
});
h.onEvent('callbackSrv', 'response', (args) => {
let [opt] = args;
if (Array.isArray(opt)) {
if (opt.length === 0) { resolve(null); }
opt = opt[0];
}
return resolve(opt);
});
h.onEvent('errorHandlingSrv', 'error', (args) => {
const [err] = args;
reject(err);
});
})
.handleScriptError(reject)
.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 {
ResultCodes,
RequestFlow,
RequestFlowBuilder,
CallParams
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
CallParams,
callFunction,
registerService,
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
function missingFields(obj: any, fields: string[]): string[] {
@ -31,60 +30,28 @@ export function registerOptionString(peer: FluencePeer, serviceId: string, servi
export function registerOptionString(...args: any) {
let peer: FluencePeer;
let serviceId: any;
let service: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
} else {
peer = Fluence.getPeer();
registerService(
args,
{
"defaultServiceId" : "opt_str",
"functions" : [
{
"functionName" : "checkOption",
"argDefs" : [
{
"name" : "str",
"argType" : {
"tag" : "optional"
}
if (typeof args[0] === 'string') {
serviceId = args[0];
} else if (typeof args[1] === 'string') {
serviceId = args[1];
} else {
serviceId = "opt_str"
}
// 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];
],
"returnType" : {
"tag" : "primitive"
}
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
@ -93,22 +60,8 @@ export function registerOptionString(...args: any) {
export function emptyString(config?: {ttl?: number}): Promise<string | null>;
export function emptyString(peer: FluencePeer, config?: {ttl?: number}): Promise<string | null>;
export function emptyString(...args: any) {
let peer: FluencePeer;
let config: any;
if (FluencePeer.isInstance(args[0])) {
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(`
let script = `
(xor
(seq
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
@ -119,39 +72,28 @@ export function emptyString(...args: any) {
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
)
`,
`
return callFunction(
args,
{
"functionName" : "emptyString",
"returnType" : {
"tag" : "optional"
},
"argDefs" : [
],
"names" : {
"relay" : "-relay-",
"getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
"responseFnName" : "response",
"errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
}
},
script
)
.configHandler((h) => {
h.on('getDataSrv', '-relay-', () => {
return peer.getStatus().relayPeerId;
});
h.onEvent('callbackSrv', 'response', (args) => {
let [opt] = args;
if (Array.isArray(opt)) {
if (opt.length === 0) { resolve(null); }
opt = opt[0];
}
return resolve(opt);
});
h.onEvent('errorHandlingSrv', 'error', (args) => {
const [err] = args;
reject(err);
});
})
.handleScriptError(reject)
.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,22 +101,8 @@ export function emptyString(...args: any) {
export function checkEmpty(config?: {ttl?: number}): Promise<string>;
export function checkEmpty(peer: FluencePeer, config?: {ttl?: number}): Promise<string>;
export function checkEmpty(...args: any) {
let peer: FluencePeer;
let config: any;
if (FluencePeer.isInstance(args[0])) {
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(`
let script = `
(xor
(seq
(seq
@ -188,35 +116,28 @@ export function checkEmpty(...args: any) {
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
)
`,
)
.configHandler((h) => {
h.on('getDataSrv', '-relay-', () => {
return peer.getStatus().relayPeerId;
});
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 checkEmpty');
})
if (config && config.ttl) {
r.withTTL(config.ttl)
`
return callFunction(
args,
{
"functionName" : "checkEmpty",
"returnType" : {
"tag" : "primitive"
},
"argDefs" : [
],
"names" : {
"relay" : "-relay-",
"getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
"responseFnName" : "response",
"errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
}
request = r.build();
});
peer.internals.initiateFlow(request!);
return promise;
},
script
)
}
@ -224,24 +145,8 @@ export function checkEmpty(...args: any) {
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(...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;
const promise = new Promise<string | null>((resolve, reject) => {
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
let script = `
(xor
(seq
(seq
@ -258,39 +163,34 @@ export function stringAsOption(...args: any) {
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
)
`,
`
return callFunction(
args,
{
"functionName" : "stringAsOption",
"returnType" : {
"tag" : "optional"
},
"argDefs" : [
{
"name" : "str",
"argType" : {
"tag" : "primitive"
}
}
],
"names" : {
"relay" : "-relay-",
"getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
"responseFnName" : "response",
"errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
}
},
script
)
.configHandler((h) => {
h.on('getDataSrv', '-relay-', () => {
return peer.getStatus().relayPeerId;
});
h.on('getDataSrv', 'str', () => {return str;});
h.onEvent('callbackSrv', 'response', (args) => {
let [opt] = args;
if (Array.isArray(opt)) {
if (opt.length === 0) { resolve(null); }
opt = opt[0];
}
return resolve(opt);
});
h.onEvent('errorHandlingSrv', 'error', (args) => {
const [err] = args;
reject(err);
});
})
.handleScriptError(reject)
.handleTimeout(() => {
reject('Request timed out for stringAsOption');
})
if (config && config.ttl) {
r.withTTL(config.ttl)
}
request = r.build();
});
peer.internals.initiateFlow(request!);
return promise;
}
@ -298,24 +198,8 @@ export function stringAsOption(...args: any) {
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(...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;
const promise = new Promise<string>((resolve, reject) => {
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
let script = `
(xor
(seq
(seq
@ -335,33 +219,32 @@ export function checkNoneEmpty(...args: any) {
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
)
`,
`
return callFunction(
args,
{
"functionName" : "checkNoneEmpty",
"returnType" : {
"tag" : "primitive"
},
"argDefs" : [
{
"name" : "str",
"argType" : {
"tag" : "primitive"
}
}
],
"names" : {
"relay" : "-relay-",
"getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
"responseFnName" : "response",
"errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
}
},
script
)
.configHandler((h) => {
h.on('getDataSrv', '-relay-', () => {
return peer.getStatus().relayPeerId;
});
h.on('getDataSrv', 'str', () => {return str;});
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 checkNoneEmpty');
})
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 {
ResultCodes,
RequestFlow,
RequestFlowBuilder,
CallParams
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
CallParams,
callFunction,
registerService,
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
function missingFields(obj: any, fields: string[]): string[] {
@ -31,60 +30,22 @@ export function registerParService(peer: FluencePeer, serviceId: string, service
export function registerParService(...args: any) {
let peer: FluencePeer;
let serviceId: any;
let service: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
} else {
peer = Fluence.getPeer();
registerService(
args,
{
"defaultServiceId" : "parservice-id",
"functions" : [
{
"functionName" : "call",
"argDefs" : [
],
"returnType" : {
"tag" : "primitive"
}
if (typeof args[0] === 'string') {
serviceId = args[0];
} 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
@ -93,27 +54,8 @@ 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(peer: FluencePeer, node: string, c: (arg0: { external_addresses: string[]; }, callParams: CallParams<'arg0'>) => void, config?: {ttl?: number}): Promise<void>;
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;
const promise = new Promise<void>((resolve, reject) => {
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
let script = `
(xor
(seq
(seq
@ -145,46 +87,51 @@ export function parFunc(...args: any) {
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3])
)
`,
)
.configHandler((h) => {
h.on('getDataSrv', '-relay-', () => {
return peer.getStatus().relayPeerId;
});
h.on('getDataSrv', 'node', () => {return node;});
h.use((req, resp, next) => {
if(req.serviceId === 'callbackSrv' && req.fnName === 'c') {
const callParams = {
...req.particleContext,
tetraplets: {
arg0: req.tetraplets[0]
`
return callFunction(
args,
{
"functionName" : "parFunc",
"returnType" : {
"tag" : "void"
},
};
resp.retCode = ResultCodes.success;
c(req.args[0], callParams); resp.result = {}
"argDefs" : [
{
"name" : "node",
"argType" : {
"tag" : "primitive"
}
next();
});
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)
},
{
"name" : "c",
"argType" : {
"tag" : "callback",
"callback" : {
"argDefs" : [
{
"name" : "arg0",
"argType" : {
"tag" : "primitive"
}
request = r.build();
});
peer.internals.initiateFlow(request!);
return Promise.race([promise, Promise.resolve()]);
}
],
"returnType" : {
"tag" : "void"
}
}
}
}
],
"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 {
ResultCodes,
RequestFlow,
RequestFlowBuilder,
CallParams
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
CallParams,
callFunction,
registerService,
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
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) {
let peer: FluencePeer;
let serviceId: any;
let service: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
} else {
peer = Fluence.getPeer();
registerService(
args,
{
"defaultServiceId" : "test-dht",
"functions" : [
{
"functionName" : "put_host_value",
"argDefs" : [
{
"name" : "key",
"argType" : {
"tag" : "primitive"
}
if (typeof args[0] === 'string') {
serviceId = args[0];
} else if (typeof args[1] === 'string') {
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;
resp.result = service.put_host_value(req.args[0], req.args[1], req.args[2], callParams)
{
"name" : "value",
"argType" : {
"tag" : "primitive"
}
next();
});
},
{
"name" : "service_id",
"argType" : {
"tag" : "primitive"
}
}
],
"returnType" : {
"tag" : "primitive"
}
}
]
}
);
}
// Functions
@ -93,30 +72,8 @@ export function registerAquaDHT(...args: any) {
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(...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;
const promise = new Promise<string>((resolve, reject) => {
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
let script = `
(xor
(seq
(seq
@ -139,37 +96,46 @@ export function putHostValue(...args: any) {
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
)
`,
)
.configHandler((h) => {
h.on('getDataSrv', '-relay-', () => {
return peer.getStatus().relayPeerId;
});
h.on('getDataSrv', 'key', () => {return key;});
h.on('getDataSrv', 'value', () => {return value;});
h.on('getDataSrv', 'service_id', () => {return service_id === null ? [] : [service_id];});
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 putHostValue');
})
if (config && config.ttl) {
r.withTTL(config.ttl)
`
return callFunction(
args,
{
"functionName" : "putHostValue",
"returnType" : {
"tag" : "primitive"
},
"argDefs" : [
{
"name" : "key",
"argType" : {
"tag" : "primitive"
}
request = r.build();
});
peer.internals.initiateFlow(request!);
return promise;
},
{
"name" : "value",
"argType" : {
"tag" : "primitive"
}
},
{
"name" : "service_id",
"argType" : {
"tag" : "optional"
}
}
],
"names" : {
"relay" : "-relay-",
"getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
"responseFnName" : "response",
"errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
}
},
script
)
}
@ -177,24 +143,8 @@ export function putHostValue(...args: any) {
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(...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;
const promise = new Promise<string>((resolve, reject) => {
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
let script = `
(xor
(seq
(seq
@ -211,33 +161,32 @@ export function create_client_util(...args: any) {
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
)
`,
`
return callFunction(
args,
{
"functionName" : "create_client_util",
"returnType" : {
"tag" : "primitive"
},
"argDefs" : [
{
"name" : "service_id",
"argType" : {
"tag" : "primitive"
}
}
],
"names" : {
"relay" : "-relay-",
"getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
"responseFnName" : "response",
"errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
}
},
script
)
.configHandler((h) => {
h.on('getDataSrv', '-relay-', () => {
return peer.getStatus().relayPeerId;
});
h.on('getDataSrv', 'service_id', () => {return service_id;});
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 create_client_util');
})
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 {
ResultCodes,
RequestFlow,
RequestFlowBuilder,
CallParams
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
CallParams,
callFunction,
registerService,
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
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) {
let peer: FluencePeer;
let serviceId: any;
let service: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
} else {
peer = Fluence.getPeer();
registerService(
args,
{
"defaultServiceId" : "println-service-id",
"functions" : [
{
"functionName" : "print",
"argDefs" : [
{
"name" : "arg0",
"argType" : {
"tag" : "primitive"
}
if (typeof args[0] === 'string') {
serviceId = args[0];
} else if (typeof args[1] === 'string') {
serviceId = args[1];
} else {
serviceId = "println-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];
],
"returnType" : {
"tag" : "void"
}
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
@ -93,24 +60,8 @@ export function registerPrintln(...args: any) {
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(...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;
const promise = new Promise<void>((resolve, reject) => {
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
let script = `
(xor
(seq
(seq
@ -121,32 +72,32 @@ export function print(...args: any) {
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1])
)
`,
`
return callFunction(
args,
{
"functionName" : "print",
"returnType" : {
"tag" : "void"
},
"argDefs" : [
{
"name" : "str",
"argType" : {
"tag" : "primitive"
}
}
],
"names" : {
"relay" : "-relay-",
"getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
"responseFnName" : "response",
"errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
}
},
script
)
.configHandler((h) => {
h.on('getDataSrv', '-relay-', () => {
return peer.getStatus().relayPeerId;
});
h.on('getDataSrv', 'str', () => {return str;});
h.onEvent('callbackSrv', 'response', (args) => {
});
h.onEvent('errorHandlingSrv', 'error', (args) => {
const [err] = args;
reject(err);
});
})
.handleScriptError(reject)
.handleTimeout(() => {
reject('Request timed out for print');
})
if (config && config.ttl) {
r.withTTL(config.ttl)
}
request = r.build();
});
peer.internals.initiateFlow(request!);
return Promise.race([promise, Promise.resolve()]);
}

View File

@ -8,11 +8,10 @@
*/
import { Fluence, FluencePeer } from '@fluencelabs/fluence';
import {
ResultCodes,
RequestFlow,
RequestFlowBuilder,
CallParams
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
CallParams,
callFunction,
registerService,
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
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) {
let peer: FluencePeer;
let serviceId: any;
let service: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
} else {
peer = Fluence.getPeer();
registerService(
args,
{
"defaultServiceId" : "pop",
"functions" : [
{
"functionName" : "get_str",
"argDefs" : [
],
"returnType" : {
"tag" : "primitive"
}
if (typeof args[0] === 'string') {
serviceId = args[0];
} 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
@ -93,22 +54,8 @@ export function registerOpA(...args: any) {
export function get_results(config?: {ttl?: number}): Promise<string[]>;
export function get_results(peer: FluencePeer, config?: {ttl?: number}): Promise<string[]>;
export function get_results(...args: any) {
let peer: FluencePeer;
let config: any;
if (FluencePeer.isInstance(args[0])) {
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(`
let script = `
(xor
(seq
(seq
@ -128,33 +75,26 @@ export function get_results(...args: any) {
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
)
`,
`
return callFunction(
args,
{
"functionName" : "get_results",
"returnType" : {
"tag" : "primitive"
},
"argDefs" : [
],
"names" : {
"relay" : "-relay-",
"getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
"responseFnName" : "response",
"errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
}
},
script
)
.configHandler((h) => {
h.on('getDataSrv', '-relay-', () => {
return peer.getStatus().relayPeerId;
});
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 get_results');
})
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 {
ResultCodes,
RequestFlow,
RequestFlowBuilder,
CallParams
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
CallParams,
callFunction,
registerService,
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
function missingFields(obj: any, fields: string[]): string[] {
@ -27,22 +26,8 @@ function missingFields(obj: any, fields: string[]): string[] {
export function returnLiteral(config?: {ttl?: number}): Promise<string>;
export function returnLiteral(peer: FluencePeer, config?: {ttl?: number}): Promise<string>;
export function returnLiteral(...args: any) {
let peer: FluencePeer;
let config: any;
if (FluencePeer.isInstance(args[0])) {
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(`
let script = `
(xor
(seq
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
@ -53,33 +38,26 @@ export function returnLiteral(...args: any) {
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
)
`,
`
return callFunction(
args,
{
"functionName" : "returnLiteral",
"returnType" : {
"tag" : "primitive"
},
"argDefs" : [
],
"names" : {
"relay" : "-relay-",
"getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
"responseFnName" : "response",
"errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
}
},
script
)
.configHandler((h) => {
h.on('getDataSrv', '-relay-', () => {
return peer.getStatus().relayPeerId;
});
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 returnLiteral');
})
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 {
ResultCodes,
RequestFlow,
RequestFlowBuilder,
CallParams
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
CallParams,
callFunction,
registerService,
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
function missingFields(obj: any, fields: string[]): string[] {
@ -31,60 +30,28 @@ export function registerStringer(peer: FluencePeer, serviceId: string, service:
export function registerStringer(...args: any) {
let peer: FluencePeer;
let serviceId: any;
let service: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
} else {
peer = Fluence.getPeer();
registerService(
args,
{
"defaultServiceId" : "stringer-id",
"functions" : [
{
"functionName" : "returnString",
"argDefs" : [
{
"name" : "arg0",
"argType" : {
"tag" : "primitive"
}
if (typeof args[0] === 'string') {
serviceId = args[0];
} else if (typeof args[1] === 'string') {
serviceId = args[1];
} else {
serviceId = "stringer-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];
],
"returnType" : {
"tag" : "primitive"
}
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
@ -93,22 +60,8 @@ export function registerStringer(...args: any) {
export function returnNone(config?: {ttl?: number}): Promise<string | null>;
export function returnNone(peer: FluencePeer, config?: {ttl?: number}): Promise<string | null>;
export function returnNone(...args: any) {
let peer: FluencePeer;
let config: any;
if (FluencePeer.isInstance(args[0])) {
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(`
let script = `
(xor
(seq
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
@ -119,39 +72,28 @@ export function returnNone(...args: any) {
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
)
`,
`
return callFunction(
args,
{
"functionName" : "returnNone",
"returnType" : {
"tag" : "optional"
},
"argDefs" : [
],
"names" : {
"relay" : "-relay-",
"getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
"responseFnName" : "response",
"errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
}
},
script
)
.configHandler((h) => {
h.on('getDataSrv', '-relay-', () => {
return peer.getStatus().relayPeerId;
});
h.onEvent('callbackSrv', 'response', (args) => {
let [opt] = args;
if (Array.isArray(opt)) {
if (opt.length === 0) { resolve(null); }
opt = opt[0];
}
return resolve(opt);
});
h.onEvent('errorHandlingSrv', 'error', (args) => {
const [err] = args;
reject(err);
});
})
.handleScriptError(reject)
.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,22 +101,8 @@ export function returnNone(...args: any) {
export function stringNone(config?: {ttl?: number}): Promise<string | null>;
export function stringNone(peer: FluencePeer, config?: {ttl?: number}): Promise<string | null>;
export function stringNone(...args: any) {
let peer: FluencePeer;
let config: any;
if (FluencePeer.isInstance(args[0])) {
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(`
let script = `
(xor
(seq
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
@ -185,39 +113,28 @@ export function stringNone(...args: any) {
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
)
`,
`
return callFunction(
args,
{
"functionName" : "stringNone",
"returnType" : {
"tag" : "optional"
},
"argDefs" : [
],
"names" : {
"relay" : "-relay-",
"getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
"responseFnName" : "response",
"errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
}
},
script
)
.configHandler((h) => {
h.on('getDataSrv', '-relay-', () => {
return peer.getStatus().relayPeerId;
});
h.onEvent('callbackSrv', 'response', (args) => {
let [opt] = args;
if (Array.isArray(opt)) {
if (opt.length === 0) { resolve(null); }
opt = opt[0];
}
return resolve(opt);
});
h.onEvent('errorHandlingSrv', 'error', (args) => {
const [err] = args;
reject(err);
});
})
.handleScriptError(reject)
.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,22 +142,8 @@ export function stringNone(...args: any) {
export function returnNil(config?: {ttl?: number}): Promise<string[]>;
export function returnNil(peer: FluencePeer, config?: {ttl?: number}): Promise<string[]>;
export function returnNil(...args: any) {
let peer: FluencePeer;
let config: any;
if (FluencePeer.isInstance(args[0])) {
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(`
let script = `
(xor
(seq
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
@ -251,35 +154,28 @@ export function returnNil(...args: any) {
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
)
`,
)
.configHandler((h) => {
h.on('getDataSrv', '-relay-', () => {
return peer.getStatus().relayPeerId;
});
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 returnNil');
})
if (config && config.ttl) {
r.withTTL(config.ttl)
`
return callFunction(
args,
{
"functionName" : "returnNil",
"returnType" : {
"tag" : "primitive"
},
"argDefs" : [
],
"names" : {
"relay" : "-relay-",
"getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
"responseFnName" : "response",
"errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
}
request = r.build();
});
peer.internals.initiateFlow(request!);
return promise;
},
script
)
}
@ -287,22 +183,8 @@ export function returnNil(...args: any) {
export function stringNil(config?: {ttl?: number}): Promise<string[]>;
export function stringNil(peer: FluencePeer, config?: {ttl?: number}): Promise<string[]>;
export function stringNil(...args: any) {
let peer: FluencePeer;
let config: any;
if (FluencePeer.isInstance(args[0])) {
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(`
let script = `
(xor
(seq
(call %init_peer_id% ("getDataSrv" "-relay-") [] -relay-)
@ -313,35 +195,28 @@ export function stringNil(...args: any) {
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
)
`,
)
.configHandler((h) => {
h.on('getDataSrv', '-relay-', () => {
return peer.getStatus().relayPeerId;
});
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 stringNil');
})
if (config && config.ttl) {
r.withTTL(config.ttl)
`
return callFunction(
args,
{
"functionName" : "stringNil",
"returnType" : {
"tag" : "primitive"
},
"argDefs" : [
],
"names" : {
"relay" : "-relay-",
"getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
"responseFnName" : "response",
"errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
}
request = r.build();
});
peer.internals.initiateFlow(request!);
return promise;
},
script
)
}
@ -349,24 +224,8 @@ export function stringNil(...args: any) {
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(...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;
const promise = new Promise<string[]>((resolve, reject) => {
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
let script = `
(xor
(seq
(seq
@ -394,33 +253,32 @@ export function checkStreams(...args: any) {
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
)
`,
`
return callFunction(
args,
{
"functionName" : "checkStreams",
"returnType" : {
"tag" : "primitive"
},
"argDefs" : [
{
"name" : "ch",
"argType" : {
"tag" : "primitive"
}
}
],
"names" : {
"relay" : "-relay-",
"getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
"responseFnName" : "response",
"errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
}
},
script
)
.configHandler((h) => {
h.on('getDataSrv', '-relay-', () => {
return peer.getStatus().relayPeerId;
});
h.on('getDataSrv', 'ch', () => {return ch;});
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 checkStreams');
})
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 {
ResultCodes,
RequestFlow,
RequestFlowBuilder,
CallParams
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
CallParams,
callFunction,
registerService,
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
function missingFields(obj: any, fields: string[]): string[] {
@ -31,60 +30,28 @@ export function registerTestService(peer: FluencePeer, serviceId: string, servic
export function registerTestService(...args: any) {
let peer: FluencePeer;
let serviceId: any;
let service: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
} else {
peer = Fluence.getPeer();
registerService(
args,
{
"defaultServiceId" : "test-service",
"functions" : [
{
"functionName" : "get_records",
"argDefs" : [
{
"name" : "key",
"argType" : {
"tag" : "primitive"
}
if (typeof args[0] === 'string') {
serviceId = args[0];
} else if (typeof args[1] === 'string') {
serviceId = args[1];
} else {
serviceId = "test-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];
],
"returnType" : {
"tag" : "primitive"
}
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
@ -93,27 +60,8 @@ export function registerTestService(...args: any) {
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(...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;
const promise = new Promise<void>((resolve, reject) => {
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
let script = `
(xor
(seq
(seq
@ -135,35 +83,40 @@ export function append_records(...args: any) {
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 1])
)
`,
)
.configHandler((h) => {
h.on('getDataSrv', '-relay-', () => {
return peer.getStatus().relayPeerId;
});
h.on('getDataSrv', 'peer', () => {return peer_;});
h.on('getDataSrv', 'srum', () => {return srum;});
h.onEvent('callbackSrv', 'response', (args) => {
});
h.onEvent('errorHandlingSrv', 'error', (args) => {
const [err] = args;
reject(err);
});
})
.handleScriptError(reject)
.handleTimeout(() => {
reject('Request timed out for append_records');
})
if (config && config.ttl) {
r.withTTL(config.ttl)
`
return callFunction(
args,
{
"functionName" : "append_records",
"returnType" : {
"tag" : "void"
},
"argDefs" : [
{
"name" : "peer",
"argType" : {
"tag" : "primitive"
}
request = r.build();
});
peer.internals.initiateFlow(request!);
return Promise.race([promise, Promise.resolve()]);
},
{
"name" : "srum",
"argType" : {
"tag" : "primitive"
}
}
],
"names" : {
"relay" : "-relay-",
"getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
"responseFnName" : "response",
"errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
}
},
script
)
}
@ -171,24 +124,8 @@ export function append_records(...args: any) {
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(...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;
const promise = new Promise<string[][]>((resolve, reject) => {
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
let script = `
(xor
(seq
(seq
@ -205,33 +142,32 @@ export function retrieve_records(...args: any) {
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
)
`,
`
return callFunction(
args,
{
"functionName" : "retrieve_records",
"returnType" : {
"tag" : "primitive"
},
"argDefs" : [
{
"name" : "peer",
"argType" : {
"tag" : "primitive"
}
}
],
"names" : {
"relay" : "-relay-",
"getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
"responseFnName" : "response",
"errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
}
},
script
)
.configHandler((h) => {
h.on('getDataSrv', '-relay-', () => {
return peer.getStatus().relayPeerId;
});
h.on('getDataSrv', 'peer', () => {return peer_;});
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 retrieve_records');
})
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 {
ResultCodes,
RequestFlow,
RequestFlowBuilder,
CallParams
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
CallParams,
callFunction,
registerService,
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
function missingFields(obj: any, fields: string[]): string[] {
@ -31,60 +30,28 @@ export function registerDTGetter(peer: FluencePeer, serviceId: string, service:
export function registerDTGetter(...args: any) {
let peer: FluencePeer;
let serviceId: any;
let service: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
} else {
peer = Fluence.getPeer();
registerService(
args,
{
"defaultServiceId" : "get-dt",
"functions" : [
{
"functionName" : "get_dt",
"argDefs" : [
{
"name" : "s",
"argType" : {
"tag" : "primitive"
}
if (typeof args[0] === 'string') {
serviceId = args[0];
} else if (typeof args[1] === 'string') {
serviceId = args[1];
} else {
serviceId = "get-dt"
}
// 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];
],
"returnType" : {
"tag" : "primitive"
}
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
@ -93,24 +60,8 @@ export function registerDTGetter(...args: any) {
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(...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;
const promise = new Promise<string>((resolve, reject) => {
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
let script = `
(xor
(seq
(seq
@ -127,35 +78,34 @@ export function use_name1(...args: any) {
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
)
`,
)
.configHandler((h) => {
h.on('getDataSrv', '-relay-', () => {
return peer.getStatus().relayPeerId;
});
h.on('getDataSrv', 'name', () => {return name;});
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 use_name1');
})
if (config && config.ttl) {
r.withTTL(config.ttl)
`
return callFunction(
args,
{
"functionName" : "use_name1",
"returnType" : {
"tag" : "primitive"
},
"argDefs" : [
{
"name" : "name",
"argType" : {
"tag" : "primitive"
}
request = r.build();
});
peer.internals.initiateFlow(request!);
return promise;
}
],
"names" : {
"relay" : "-relay-",
"getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
"responseFnName" : "response",
"errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
}
},
script
)
}
@ -163,24 +113,8 @@ export function use_name1(...args: any) {
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(...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;
const promise = new Promise<string[]>((resolve, reject) => {
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
let script = `
(xor
(seq
(seq
@ -212,33 +146,32 @@ export function use_name2(...args: any) {
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
)
`,
`
return callFunction(
args,
{
"functionName" : "use_name2",
"returnType" : {
"tag" : "primitive"
},
"argDefs" : [
{
"name" : "name",
"argType" : {
"tag" : "primitive"
}
}
],
"names" : {
"relay" : "-relay-",
"getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
"responseFnName" : "response",
"errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
}
},
script
)
.configHandler((h) => {
h.on('getDataSrv', '-relay-', () => {
return peer.getStatus().relayPeerId;
});
h.on('getDataSrv', 'name', () => {return name;});
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 use_name2');
})
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 {
ResultCodes,
RequestFlow,
RequestFlowBuilder,
CallParams
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
CallParams,
callFunction,
registerService,
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
function missingFields(obj: any, fields: string[]): string[] {
@ -31,60 +30,34 @@ export function registerConcatSubs(peer: FluencePeer, serviceId: string, service
export function registerConcatSubs(...args: any) {
let peer: FluencePeer;
let serviceId: any;
let service: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
} else {
peer = Fluence.getPeer();
registerService(
args,
{
"defaultServiceId" : "concat_subs",
"functions" : [
{
"functionName" : "get_some",
"argDefs" : [
{
"name" : "s",
"argType" : {
"tag" : "primitive"
}
if (typeof args[0] === 'string') {
serviceId = args[0];
} else if (typeof args[1] === 'string') {
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;
resp.result = service.get_some(req.args[0], req.args[1], callParams)
{
"name" : "sr",
"argType" : {
"tag" : "primitive"
}
next();
});
}
],
"returnType" : {
"tag" : "primitive"
}
}
]
}
);
}
// Functions
@ -93,24 +66,8 @@ export type SubImportUsageResult = { one: string; two: number; }
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(...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;
const promise = new Promise<SubImportUsageResult>((resolve, reject) => {
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
let script = `
(xor
(seq
(seq
@ -133,33 +90,32 @@ export function subImportUsage(...args: any) {
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 2])
)
`,
`
return callFunction(
args,
{
"functionName" : "subImportUsage",
"returnType" : {
"tag" : "primitive"
},
"argDefs" : [
{
"name" : "s",
"argType" : {
"tag" : "primitive"
}
}
],
"names" : {
"relay" : "-relay-",
"getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
"responseFnName" : "response",
"errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
}
},
script
)
.configHandler((h) => {
h.on('getDataSrv', '-relay-', () => {
return peer.getStatus().relayPeerId;
});
h.on('getDataSrv', 's', () => {return s;});
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 subImportUsage');
})
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 {
ResultCodes,
RequestFlow,
RequestFlowBuilder,
CallParams
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
CallParams,
callFunction,
registerService,
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
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) {
let peer: FluencePeer;
let serviceId: any;
let service: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
} else {
peer = Fluence.getPeer();
registerService(
args,
{
"defaultServiceId" : "testo",
"functions" : [
{
"functionName" : "getString",
"argDefs" : [
{
"name" : "arg0",
"argType" : {
"tag" : "primitive"
}
if (typeof args[0] === 'string') {
serviceId = args[0];
} else if (typeof args[1] === 'string') {
serviceId = args[1];
} else {
serviceId = "testo"
}
// 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];
],
"returnType" : {
"tag" : "primitive"
}
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) {
let peer: FluencePeer;
let serviceId: any;
let service: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
} else {
peer = Fluence.getPeer();
registerService(
args,
{
"defaultServiceId" : "lp",
"functions" : [
{
"functionName" : "print",
"argDefs" : [
{
"name" : "arg0",
"argType" : {
"tag" : "primitive"
}
if (typeof args[0] === 'string') {
serviceId = args[0];
} else if (typeof args[1] === 'string') {
serviceId = args[1];
} else {
serviceId = "lp"
}
// 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];
],
"returnType" : {
"tag" : "void"
}
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
@ -161,33 +96,8 @@ export function registerLocalPrint(...args: any) {
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(...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;
const promise = new Promise<string>((resolve, reject) => {
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
let script = `
(xor
(seq
(seq
@ -243,36 +153,50 @@ export function topologyTest(...args: any) {
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3])
)
`,
`
return callFunction(
args,
{
"functionName" : "topologyTest",
"returnType" : {
"tag" : "primitive"
},
"argDefs" : [
{
"name" : "me",
"argType" : {
"tag" : "primitive"
}
},
{
"name" : "myRelay",
"argType" : {
"tag" : "primitive"
}
},
{
"name" : "friend",
"argType" : {
"tag" : "primitive"
}
},
{
"name" : "friendRelay",
"argType" : {
"tag" : "primitive"
}
}
],
"names" : {
"relay" : "-relay-",
"getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
"responseFnName" : "response",
"errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
}
},
script
)
.configHandler((h) => {
h.on('getDataSrv', '-relay-', () => {
return peer.getStatus().relayPeerId;
});
h.on('getDataSrv', 'me', () => {return me;});
h.on('getDataSrv', 'myRelay', () => {return myRelay;});
h.on('getDataSrv', 'friend', () => {return friend;});
h.on('getDataSrv', 'friendRelay', () => {return friendRelay;});
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 topologyTest');
})
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 {
ResultCodes,
RequestFlow,
RequestFlowBuilder,
CallParams
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
CallParams,
callFunction,
registerService,
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
function missingFields(obj: any, fields: string[]): string[] {
@ -31,60 +30,22 @@ export function registerUnexisted(peer: FluencePeer, serviceId: string, service:
export function registerUnexisted(...args: any) {
let peer: FluencePeer;
let serviceId: any;
let service: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
} else {
peer = Fluence.getPeer();
registerService(
args,
{
"defaultServiceId" : "unex",
"functions" : [
{
"functionName" : "getStr",
"argDefs" : [
],
"returnType" : {
"tag" : "primitive"
}
if (typeof args[0] === 'string') {
serviceId = args[0];
} 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) {
let peer: FluencePeer;
let serviceId: any;
let service: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
} else {
peer = Fluence.getPeer();
registerService(
args,
{
"defaultServiceId" : "op",
"functions" : [
{
"functionName" : "identity",
"argDefs" : [
{
"name" : "s",
"argType" : {
"tag" : "primitive"
}
if (typeof args[0] === 'string') {
serviceId = args[0];
} 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];
],
"returnType" : {
"tag" : "primitive"
}
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
@ -161,24 +90,8 @@ export function registerOpA(...args: any) {
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(...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;
const promise = new Promise<string[]>((resolve, reject) => {
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
let script = `
(xor
(seq
(seq
@ -216,33 +129,32 @@ export function tryCatchTest(...args: any) {
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3])
)
`,
`
return callFunction(
args,
{
"functionName" : "tryCatchTest",
"returnType" : {
"tag" : "primitive"
},
"argDefs" : [
{
"name" : "node_id",
"argType" : {
"tag" : "primitive"
}
}
],
"names" : {
"relay" : "-relay-",
"getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
"responseFnName" : "response",
"errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
}
},
script
)
.configHandler((h) => {
h.on('getDataSrv', '-relay-', () => {
return peer.getStatus().relayPeerId;
});
h.on('getDataSrv', 'node_id', () => {return node_id;});
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 tryCatchTest');
})
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 {
ResultCodes,
RequestFlow,
RequestFlowBuilder,
CallParams
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
CallParams,
callFunction,
registerService,
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
function missingFields(obj: any, fields: string[]): string[] {
@ -31,60 +30,22 @@ export function registerUnexisted(peer: FluencePeer, serviceId: string, service:
export function registerUnexisted(...args: any) {
let peer: FluencePeer;
let serviceId: any;
let service: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
} else {
peer = Fluence.getPeer();
registerService(
args,
{
"defaultServiceId" : "unex",
"functions" : [
{
"functionName" : "getStr",
"argDefs" : [
],
"returnType" : {
"tag" : "primitive"
}
if (typeof args[0] === 'string') {
serviceId = args[0];
} 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) {
let peer: FluencePeer;
let serviceId: any;
let service: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
} else {
peer = Fluence.getPeer();
registerService(
args,
{
"defaultServiceId" : "op",
"functions" : [
{
"functionName" : "identity",
"argDefs" : [
{
"name" : "s",
"argType" : {
"tag" : "primitive"
}
if (typeof args[0] === 'string') {
serviceId = args[0];
} 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];
],
"returnType" : {
"tag" : "primitive"
}
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
@ -161,24 +90,8 @@ export function registerOpE(...args: any) {
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(...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;
const promise = new Promise<string>((resolve, reject) => {
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
let script = `
(xor
(seq
(seq
@ -210,33 +123,32 @@ export function tryOtherwiseTest(...args: any) {
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3])
)
`,
`
return callFunction(
args,
{
"functionName" : "tryOtherwiseTest",
"returnType" : {
"tag" : "primitive"
},
"argDefs" : [
{
"name" : "node_id",
"argType" : {
"tag" : "primitive"
}
}
],
"names" : {
"relay" : "-relay-",
"getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
"responseFnName" : "response",
"errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
}
},
script
)
.configHandler((h) => {
h.on('getDataSrv', '-relay-', () => {
return peer.getStatus().relayPeerId;
});
h.on('getDataSrv', 'node_id', () => {return node_id;});
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 tryOtherwiseTest');
})
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 {
ResultCodes,
RequestFlow,
RequestFlowBuilder,
CallParams
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v1';
CallParams,
callFunction,
registerService,
} from '@fluencelabs/fluence/dist/internal/compilerSupport/v2';
function missingFields(obj: any, fields: string[]): string[] {
@ -31,60 +30,28 @@ export function registerCustomId(peer: FluencePeer, serviceId: string, service:
export function registerCustomId(...args: any) {
let peer: FluencePeer;
let serviceId: any;
let service: any;
if (FluencePeer.isInstance(args[0])) {
peer = args[0];
} else {
peer = Fluence.getPeer();
registerService(
args,
{
"defaultServiceId" : "cid",
"functions" : [
{
"functionName" : "id",
"argDefs" : [
{
"name" : "s",
"argType" : {
"tag" : "primitive"
}
if (typeof args[0] === 'string') {
serviceId = args[0];
} else if (typeof args[1] === 'string') {
serviceId = args[1];
} else {
serviceId = "cid"
}
// 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];
],
"returnType" : {
"tag" : "primitive"
}
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
@ -93,27 +60,8 @@ export type ViaArrResult = { external_addresses: string[]; }
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(...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;
const promise = new Promise<ViaArrResult>((resolve, reject) => {
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
let script = `
(xor
(seq
(seq
@ -172,36 +120,40 @@ export function viaArr(...args: any) {
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3])
)
`,
)
.configHandler((h) => {
h.on('getDataSrv', '-relay-', () => {
return peer.getStatus().relayPeerId;
});
h.on('getDataSrv', 'node_id', () => {return node_id;});
h.on('getDataSrv', 'viaAr', () => {return viaAr;});
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 viaArr');
})
if (config && config.ttl) {
r.withTTL(config.ttl)
`
return callFunction(
args,
{
"functionName" : "viaArr",
"returnType" : {
"tag" : "primitive"
},
"argDefs" : [
{
"name" : "node_id",
"argType" : {
"tag" : "primitive"
}
request = r.build();
});
peer.internals.initiateFlow(request!);
return promise;
},
{
"name" : "viaAr",
"argType" : {
"tag" : "primitive"
}
}
],
"names" : {
"relay" : "-relay-",
"getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
"responseFnName" : "response",
"errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
}
},
script
)
}
@ -209,27 +161,8 @@ export type ViaStreamResult = { external_addresses: string[]; }
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(...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;
const promise = new Promise<ViaStreamResult>((resolve, reject) => {
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
let script = `
(xor
(seq
(seq
@ -296,36 +229,40 @@ export function viaStream(...args: any) {
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3])
)
`,
)
.configHandler((h) => {
h.on('getDataSrv', '-relay-', () => {
return peer.getStatus().relayPeerId;
});
h.on('getDataSrv', 'node_id', () => {return node_id;});
h.on('getDataSrv', 'viaStr', () => {return viaStr;});
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 viaStream');
})
if (config && config.ttl) {
r.withTTL(config.ttl)
`
return callFunction(
args,
{
"functionName" : "viaStream",
"returnType" : {
"tag" : "primitive"
},
"argDefs" : [
{
"name" : "node_id",
"argType" : {
"tag" : "primitive"
}
request = r.build();
});
peer.internals.initiateFlow(request!);
return promise;
},
{
"name" : "viaStr",
"argType" : {
"tag" : "primitive"
}
}
],
"names" : {
"relay" : "-relay-",
"getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
"responseFnName" : "response",
"errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
}
},
script
)
}
@ -333,30 +270,8 @@ 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(peer: FluencePeer, relay: string, node_id: string, viaOpt: string | null, config?: {ttl?: number}): Promise<ViaOptResult>;
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;
const promise = new Promise<ViaOptResult>((resolve, reject) => {
const r = new RequestFlowBuilder()
.disableInjections()
.withRawScript(`
let script = `
(xor
(seq
(seq
@ -418,35 +333,44 @@ export function viaOpt(...args: any) {
)
(call %init_peer_id% ("errorHandlingSrv" "error") [%last_error% 3])
)
`,
`
return callFunction(
args,
{
"functionName" : "viaOpt",
"returnType" : {
"tag" : "primitive"
},
"argDefs" : [
{
"name" : "relay",
"argType" : {
"tag" : "primitive"
}
},
{
"name" : "node_id",
"argType" : {
"tag" : "primitive"
}
},
{
"name" : "viaOpt",
"argType" : {
"tag" : "optional"
}
}
],
"names" : {
"relay" : "-relay-",
"getDataSrv" : "getDataSrv",
"callbackSrv" : "callbackSrv",
"responseSrv" : "callbackSrv",
"responseFnName" : "response",
"errorHandlingSrv" : "errorHandlingSrv",
"errorFnName" : "error"
}
},
script
)
.configHandler((h) => {
h.on('getDataSrv', '-relay-', () => {
return peer.getStatus().relayPeerId;
});
h.on('getDataSrv', 'relay', () => {return relay;});
h.on('getDataSrv', 'node_id', () => {return node_id;});
h.on('getDataSrv', 'viaOpt', () => {return viaOpt === null ? [] : [viaOpt];});
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 viaOpt');
})
if (config && config.ttl) {
r.withTTL(config.ttl)
}
request = r.build();
});
peer.internals.initiateFlow(request!);
return promise;
}