Skip to content

feat(javascript): create ingestion client #1101

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 14 commits into from
Dec 13, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/.cache_version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
0.0.14
0.0.16
Original file line number Diff line number Diff line change
Expand Up @@ -110,12 +110,15 @@ export function createTransporter({
: {};

const queryParameters: QueryParameters = {
'x-algolia-agent': algoliaAgent.value,
...baseQueryParameters,
...request.queryParameters,
...dataQueryParameters,
};

if (algoliaAgent.value) {
queryParameters['x-algolia-agent'] = algoliaAgent.value;
}

if (requestOptions && requestOptions.queryParameters) {
for (const key of Object.keys(requestOptions.queryParameters)) {
// We want to keep `undefined` and `null` values,
Expand Down
6 changes: 6 additions & 0 deletions config/openapitools.json
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,12 @@
"packageVersion": "1.0.0-alpha.27"
}
},
"javascript-ingestion": {
"output": "#{cwd}/clients/algoliasearch-client-javascript/packages/ingestion",
"additionalProperties": {
"packageVersion": "1.0.0-alpha.1"
}
},
"java-search": {
"output": "#{cwd}/clients/algoliasearch-client-java-2"
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,7 @@ private void setDefaultGeneratorOptions() {
additionalProperties.put("algoliaAgent", Utils.capitalize(CLIENT));
additionalProperties.put("gitRepoId", "algoliasearch-client-javascript");
additionalProperties.put("isSearchClient", CLIENT.equals("search"));
additionalProperties.put("useAlgoliaUA", !CLIENT.equals("ingestion"));
additionalProperties.put("isAlgoliasearchClient", isAlgoliasearchClient);

if (isAlgoliasearchClient) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -169,6 +169,9 @@ public static void propagateGenericsToModels(Map<String, ModelsMap> modelsMap) {
public static void propagateGenericsToOperations(OperationsMap operations, List<ModelMap> allModels) {
Map<String, CodegenModel> models = convertToMap(allModels);
for (CodegenOperation ope : operations.getOperations().getOperation()) {
if (ope.returnType == null) {
continue;
}
CodegenModel returnType = models.get(ope.returnType);
if (returnType != null && hasGeneric(returnType)) {
ope.vendorExtensions.put("x-is-generic", true);
Expand Down
29 changes: 29 additions & 0 deletions playground/javascript/node/ingestion.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
import { ingestionClient } from '@algolia/ingestion';
import { ApiError } from '@algolia/client-common';
import dotenv from 'dotenv';

dotenv.config({ path: '../../.env' });

const appId = process.env.ALGOLIA_APPLICATION_ID || '**** APP_ID *****';
const apiKey =
process.env.ALGOLIA_ADMIN_KEY ||
'**** ADMIN_KEY *****';

// Init client with appId and apiKey
const client = ingestionClient(appId, apiKey, 'us', {authMode: 'WithinHeaders', hosts: [{url: 'staging-data.us.algolia.com', accept: 'readWrite', protocol: 'https'}]});

async function testIngestion() {
try {
const res = await client.getAuthentications();

console.log(`[OK]`, res);
} catch (e) {
if (e instanceof ApiError) {
return console.log(`[${e.status}] ${e.message}`, e.stackTrace, e);
}

console.log('[ERROR]', e);
}
}

testIngestion();
2 changes: 1 addition & 1 deletion playground/javascript/node/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
"private": true,
"scripts": {
"start:algoliasearch": "ts-node algoliasearch.ts",
"start:abtesting": "ts-node analytics.ts",
"start:abtesting": "ts-node abtesting.ts",
"start:analytics": "ts-node analytics.ts",
"start:insights": "ts-node insights.ts",
"start:personalization": "ts-node personalization.ts",
Expand Down
4 changes: 4 additions & 0 deletions scripts/cts/generate.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,10 @@ export async function ctsGenerateMany(
if (!getTestOutputFolder(gen.language)) {
continue;
}
// Remove this once we have CTS for ingestion
if (gen.key === 'javascript-ingestion') {
continue;
}
await ctsGenerate(gen, verbose);
}

Expand Down
22 changes: 16 additions & 6 deletions templates/javascript/clients/api-single.mustache
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,21 @@ export function create{{capitalizedApiName}}({
const transporter = createTransporter({
hosts: getDefaultHosts({{^hasRegionalHost}}appIdOption{{/hasRegionalHost}}{{#hasRegionalHost}}regionOption{{/hasRegionalHost}}),
...options,
algoliaAgent: getAlgoliaAgent({
algoliaAgents,
client: '{{{algoliaAgent}}}',
version: apiClientVersion,
}),
algoliaAgent:
{{^useAlgoliaUA}}
{...getAlgoliaAgent({
algoliaAgents,
client: '{{{algoliaAgent}}}',
version: apiClientVersion,
}), value: ''},
{{/useAlgoliaUA}}
{{#useAlgoliaUA}}
getAlgoliaAgent({
algoliaAgents,
client: '{{{algoliaAgent}}}',
version: apiClientVersion,
}),
{{/useAlgoliaUA}}
baseHeaders: {
'content-type': 'text/plain',
...auth.headers(),
Expand Down Expand Up @@ -75,7 +85,7 @@ export function create{{capitalizedApiName}}({
{{/isSearchClient}}
{{#operation}}
{{> client/api/operation/jsdoc}}
{{nickname}}{{#vendorExtensions.x-is-generic}}<T>{{/vendorExtensions.x-is-generic}}( {{> client/api/operation/parameters}} ) : Promise<{{{returnType}}}{{#vendorExtensions.x-is-generic}}<T>{{/vendorExtensions.x-is-generic}}> {
{{nickname}}{{#vendorExtensions.x-is-generic}}<T>{{/vendorExtensions.x-is-generic}}( {{> client/api/operation/parameters}} ) : Promise<{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}void{{/returnType}}{{#vendorExtensions.x-is-generic}}<T>{{/vendorExtensions.x-is-generic}}> {
{{#vendorExtensions.x-legacy-signature}}
{{> client/api/operation/legacySearchCompatible/implementation}}
{{/vendorExtensions.x-legacy-signature}}
Expand Down