Merge pull request #23095 from backstage/camilaibs/search-new-auth-services-migration

[Search] Use credentials on the authorized search engine
This commit is contained in:
Patrik Oldsberg
2024-02-27 17:08:05 +01:00
committed by GitHub
31 changed files with 289 additions and 97 deletions
@@ -7,7 +7,7 @@ import { DocumentTypeInfo } from '@backstage/plugin-search-common';
import { ExtensionPoint } from '@backstage/backend-plugin-api';
import { RegisterCollatorParameters } from '@backstage/plugin-search-backend-node';
import { RegisterDecoratorParameters } from '@backstage/plugin-search-backend-node';
import { SearchEngine } from '@backstage/plugin-search-common';
import { SearchEngine } from '@backstage/plugin-search-backend-node';
import { ServiceRef } from '@backstage/backend-plugin-api';
// @alpha
+23 -2
View File
@@ -5,6 +5,7 @@
```ts
/// <reference types="node" />
import { BackstageCredentials } from '@backstage/backend-plugin-api';
import { Config } from '@backstage/config';
import { DocumentCollatorFactory } from '@backstage/plugin-search-common';
import { DocumentDecoratorFactory } from '@backstage/plugin-search-common';
@@ -14,9 +15,7 @@ import { IndexableResultSet } from '@backstage/plugin-search-common';
import { Logger } from 'winston';
import { default as lunr_2 } from 'lunr';
import { Permission } from '@backstage/plugin-permission-common';
import { QueryTranslator } from '@backstage/plugin-search-common';
import { Readable } from 'stream';
import { SearchEngine } from '@backstage/plugin-search-common';
import { SearchQuery } from '@backstage/plugin-search-common';
import { TaskFunction } from '@backstage/backend-tasks';
import { TaskRunner } from '@backstage/backend-tasks';
@@ -144,6 +143,18 @@ export type NewlineDelimitedJsonCollatorFactoryOptions = {
visibilityPermission?: Permission;
};
// @public
export type QueryRequestOptions =
| {
token?: string;
}
| {
credentials: BackstageCredentials;
};
// @public
export type QueryTranslator = (query: SearchQuery) => unknown;
// @public
export interface RegisterCollatorParameters {
factory: DocumentCollatorFactory;
@@ -170,6 +181,16 @@ export type ScheduleTaskParameters = {
scheduledRunner: TaskRunner;
};
// @public
export interface SearchEngine {
getIndexer(type: string): Promise<Writable>;
query(
query: SearchQuery,
options?: QueryRequestOptions,
): Promise<IndexableResultSet>;
setTranslator(translator: QueryTranslator): void;
}
// @public
export class TestPipeline {
execute(): Promise<TestPipelineResult>;
@@ -19,11 +19,10 @@ import { TaskInvocationDefinition, TaskRunner } from '@backstage/backend-tasks';
import {
DocumentCollatorFactory,
DocumentDecoratorFactory,
SearchEngine,
} from '@backstage/plugin-search-common';
import { Readable, Transform } from 'stream';
import { IndexBuilder } from './IndexBuilder';
import { LunrSearchEngine } from './index';
import { LunrSearchEngine, SearchEngine } from './index';
class TestDocumentCollatorFactory implements DocumentCollatorFactory {
readonly type: string = 'anything';
@@ -17,12 +17,12 @@
import {
DocumentDecoratorFactory,
DocumentTypeInfo,
SearchEngine,
} from '@backstage/plugin-search-common';
import { Transform, pipeline } from 'stream';
import { Logger } from 'winston';
import { Scheduler } from './Scheduler';
import {
SearchEngine,
IndexBuilderOptions,
RegisterCollatorParameters,
RegisterDecoratorParameters,
+5 -5
View File
@@ -22,10 +22,7 @@ import {
coreServices,
} from '@backstage/backend-plugin-api';
import { loggerToWinstonLogger } from '@backstage/backend-common';
import {
DocumentTypeInfo,
SearchEngine,
} from '@backstage/plugin-search-common';
import { DocumentTypeInfo } from '@backstage/plugin-search-common';
import { createExtensionPoint } from '@backstage/backend-plugin-api';
import {
@@ -33,7 +30,10 @@ import {
RegisterDecoratorParameters,
} from '@backstage/plugin-search-backend-node';
import { IndexBuilder } from './IndexBuilder';
import {
SearchEngine,
IndexBuilder,
} from '@backstage/plugin-search-backend-node';
/**
* @alpha
@@ -16,10 +16,7 @@
import { getVoidLogger } from '@backstage/backend-common';
import lunr from 'lunr';
import {
IndexableDocument,
SearchEngine,
} from '@backstage/plugin-search-common';
import { IndexableDocument } from '@backstage/plugin-search-common';
import {
ConcreteLunrQuery,
LunrSearchEngine,
@@ -28,6 +25,7 @@ import {
parseHighlightFields,
} from './LunrSearchEngine';
import { LunrSearchEngineIndexer } from './LunrSearchEngineIndexer';
import { SearchEngine } from '../types';
import { TestPipeline } from '../test-utils';
/**
@@ -18,9 +18,8 @@ import {
IndexableDocument,
IndexableResultSet,
SearchQuery,
QueryTranslator,
SearchEngine,
} from '@backstage/plugin-search-common';
import { SearchEngine, QueryTranslator } from '../types';
import { MissingIndexError } from '../errors';
import lunr from 'lunr';
import { v4 as uuid } from 'uuid';
+3
View File
@@ -33,6 +33,9 @@ export type {
IndexBuilderOptions,
RegisterCollatorParameters,
RegisterDecoratorParameters,
SearchEngine,
QueryRequestOptions,
QueryTranslator,
} from './types';
export * from './errors';
export * from './indexing';
+56 -1
View File
@@ -14,12 +14,15 @@
* limitations under the License.
*/
import { BackstageCredentials } from '@backstage/backend-plugin-api';
import { TaskRunner } from '@backstage/backend-tasks';
import {
DocumentCollatorFactory,
DocumentDecoratorFactory,
SearchEngine,
IndexableResultSet,
SearchQuery,
} from '@backstage/plugin-search-common';
import { Writable } from 'stream';
import { Logger } from 'winston';
/**
@@ -57,3 +60,55 @@ export interface RegisterDecoratorParameters {
*/
factory: DocumentDecoratorFactory;
}
/**
* A type of function responsible for translating an abstract search query into
* a concrete query relevant to a particular search engine.
* @public
*/
export type QueryTranslator = (query: SearchQuery) => unknown;
/**
* Options when querying a search engine.
* @public
*/
export type QueryRequestOptions =
| {
/** @deprecated use the `credentials` option instead. */
token?: string;
}
| {
credentials: BackstageCredentials;
};
/**
* Interface that must be implemented by specific search engines, responsible
* for performing indexing and querying and translating abstract queries into
* concrete, search engine-specific queries.
* @public
*/
export interface SearchEngine {
/**
* Override the default translator provided by the SearchEngine.
*/
setTranslator(translator: QueryTranslator): void;
/**
* Factory method for getting a search engine indexer for a given document
* type.
*
* @param type - The type or name of the document set for which an indexer
* should be retrieved. This corresponds to the `type` property on the
* document collator/decorator factories and will most often be used to
* identify an index or group to which documents should be written.
*/
getIndexer(type: string): Promise<Writable>;
/**
* Perform a search query against the SearchEngine.
*/
query(
query: SearchQuery,
options?: QueryRequestOptions,
): Promise<IndexableResultSet>;
}