openfga/sdk-generator

js-sdk: Batch check does not preserve output order

Opened this issue · 1 comments

a0js commented

Checklist

  • I have looked into the README and have not found a suitable solution or answer.
  • I have looked into the documentation and have not found a suitable solution or answer.
  • I have searched the issues and have not found a suitable solution or answer.
  • I have searched the Slack Community and have not found a suitable solution or answer.
  • I agree to the terms within the OpenFGA Code of Conduct.

Description

When using the batch check functionality in the js-sdk, the check results are not returned in the same order as the input. Based on what I've found in the python sdk, the order is preserved.

Expectation

I would expect when an array is provided as input, and the expected output is an array of equal length, order should be preserved.

Reproduction

Run the following:

const { OpenFgaClient } = require('@openfga/sdk');
const assert = require('assert');
const util = require('util');

const fgaClient = new OpenFgaClient({apiUrl: "https://api.playground.fga.dev", storeId: "01HVW8AJAT069Y9M1FZDKV6SP0", authorizationModelId: "01HVW8C9JP1XS2ZZG614S8KH47"});

async function test() {
	const checks = [
	{
		user: "user:1",
		relation: "test",
		object: "object:2"
	},
		{
		user: "user:1",
		relation: "test",
		object: "object:2",
		contextualTuples: [{
			user: "user:1",
			relation: "test",
			object: "object:2"
		}]
	},
		{
		user: "user:1",
		relation: "test",
		object: "object:1"
		}
	];


	const results = await fgaClient.batchCheck(checks);
	console.log(util.inspect(results, false, null, true));

	assert.deepEqual(results.responses[0]._request, checks[0]);
	assert.deepEqual(results.responses[1]._request, checks[1]);
	assert.deepEqual(results.responses[2]._request, checks[2]);
}

test();

This hits this model: https://play.fga.dev/sandbox/?store=js-sdk-batch-ordering

SDK Checklist

  • JS SDK
  • Go SDK
  • .NET SDK
  • Python SDK
  • Java SDK

OpenFGA SDK version

0.3.5

OpenFGA version

any

SDK Configuration

any

Logs

No response

References

This issue seems to be related to the cause rxaviers/async-pool#47

Hi @a0js - batch check is not intended to preserve the output order. While we can sort before returning the results, that would be offering a contract we are not certain we want to promise for the future.

Especially with the potential to offer a streaming variant of the API.

Each response has the request alongside it so that you can know what the result is for.