@decocms/apps-algolia 8.1.0-next.1 → 8.1.0-next.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +44 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +48 -0
- package/dist/index.js.map +1 -0
- package/package.json +13 -9
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
export interface AlgoliaClientConfig {
|
|
2
|
+
applicationId: string;
|
|
3
|
+
/** A search-only key is enough for search; never send an admin key to the browser. */
|
|
4
|
+
apiKey: string;
|
|
5
|
+
}
|
|
6
|
+
/** One query: the index plus search parameters as the REST API names them (`query`, `hitsPerPage`, `filters`, ...). */
|
|
7
|
+
export interface AlgoliaSearchRequest {
|
|
8
|
+
indexName: string;
|
|
9
|
+
query?: string;
|
|
10
|
+
[param: string]: unknown;
|
|
11
|
+
}
|
|
12
|
+
export type AlgoliaHit<T> = T & {
|
|
13
|
+
objectID: string;
|
|
14
|
+
[field: string]: unknown;
|
|
15
|
+
};
|
|
16
|
+
export interface AlgoliaSearchResponse<T = Record<string, unknown>> {
|
|
17
|
+
hits: AlgoliaHit<T>[];
|
|
18
|
+
nbHits: number;
|
|
19
|
+
page: number;
|
|
20
|
+
nbPages: number;
|
|
21
|
+
hitsPerPage: number;
|
|
22
|
+
processingTimeMS: number;
|
|
23
|
+
query: string;
|
|
24
|
+
params: string;
|
|
25
|
+
index?: string;
|
|
26
|
+
queryID?: string;
|
|
27
|
+
facets?: Record<string, Record<string, number>>;
|
|
28
|
+
[field: string]: unknown;
|
|
29
|
+
}
|
|
30
|
+
export declare class AlgoliaError extends Error {
|
|
31
|
+
readonly operation: string;
|
|
32
|
+
readonly status: number;
|
|
33
|
+
constructor(operation: string, status: number);
|
|
34
|
+
}
|
|
35
|
+
export declare function createAlgoliaClient(config: AlgoliaClientConfig, options?: {
|
|
36
|
+
fetch?: typeof globalThis.fetch;
|
|
37
|
+
}): {
|
|
38
|
+
/** Runs several queries, on one or more indices, in one request. */
|
|
39
|
+
search<T = Record<string, unknown>>(requests: AlgoliaSearchRequest[]): Promise<{
|
|
40
|
+
results: AlgoliaSearchResponse<T>[];
|
|
41
|
+
}>;
|
|
42
|
+
};
|
|
43
|
+
export type AlgoliaClient = ReturnType<typeof createAlgoliaClient>;
|
|
44
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,mBAAmB;IAClC,aAAa,EAAE,MAAM,CAAC;IACtB,sFAAsF;IACtF,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,uHAAuH;AACvH,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1B;AAED,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI,CAAC,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,CAAC;AAE/E,MAAM,WAAW,qBAAqB,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAChE,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAChD,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1B;AAED,qBAAa,YAAa,SAAQ,KAAK;IAEnC,QAAQ,CAAC,SAAS,EAAE,MAAM;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM;IAFzB,YACW,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EAGxB;CACF;AAED,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,mBAAmB,EAC3B,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAA;CAAO;IAwB/C,oEAAoE;IACpE,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,YACtB,oBAAoB,EAAE,GAC/B,OAAO,CAAC;QAAE,OAAO,EAAE,qBAAqB,CAAC,CAAC,CAAC,EAAE,CAAA;KAAE,CAAC;EAItD;AAED,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `@decocms/apps-algolia`: a thin client for the Algolia Search REST API.
|
|
3
|
+
* See /next/upstream-clients.
|
|
4
|
+
*
|
|
5
|
+
* It calls the REST API directly rather than through the `algoliasearch`
|
|
6
|
+
* SDK, so every request goes through `createInstrumentedFetch` (provider
|
|
7
|
+
* `algolia`) like every other client. No retries or circuit breaker, and no
|
|
8
|
+
* response cache: caching upstream data is the site's job.
|
|
9
|
+
*/
|
|
10
|
+
import { createInstrumentedFetch } from "@decocms/blocks/fetch";
|
|
11
|
+
export class AlgoliaError extends Error {
|
|
12
|
+
operation;
|
|
13
|
+
status;
|
|
14
|
+
constructor(operation, status) {
|
|
15
|
+
super(`algolia ${operation} failed with HTTP ${status}`);
|
|
16
|
+
this.operation = operation;
|
|
17
|
+
this.status = status;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
export function createAlgoliaClient(config, options = {}) {
|
|
21
|
+
// The id becomes part of the host; reject anything that could redirect the API key elsewhere.
|
|
22
|
+
if (!/^[A-Za-z0-9]+$/.test(config.applicationId))
|
|
23
|
+
throw new Error("algolia: invalid applicationId");
|
|
24
|
+
const request = createInstrumentedFetch({ provider: "algolia", fetch: options.fetch });
|
|
25
|
+
const host = `https://${config.applicationId}-dsn.algolia.net`;
|
|
26
|
+
async function post(operation, path, body) {
|
|
27
|
+
const response = await request(`${host}${path}`, {
|
|
28
|
+
operation,
|
|
29
|
+
method: "POST",
|
|
30
|
+
headers: {
|
|
31
|
+
"content-type": "application/json",
|
|
32
|
+
"x-algolia-application-id": config.applicationId,
|
|
33
|
+
"x-algolia-api-key": config.apiKey,
|
|
34
|
+
},
|
|
35
|
+
body: JSON.stringify(body),
|
|
36
|
+
});
|
|
37
|
+
if (!response.ok)
|
|
38
|
+
throw new AlgoliaError(operation, response.status);
|
|
39
|
+
return (await response.json());
|
|
40
|
+
}
|
|
41
|
+
return {
|
|
42
|
+
/** Runs several queries, on one or more indices, in one request. */
|
|
43
|
+
search(requests) {
|
|
44
|
+
return post("search", "/1/indexes/*/queries", { requests });
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAgChE,MAAM,OAAO,YAAa,SAAQ,KAAK;IAE1B,SAAS;IACT,MAAM;IAFjB,YACW,SAAiB,EACjB,MAAc;QAEvB,KAAK,CAAC,WAAW,SAAS,qBAAqB,MAAM,EAAE,CAAC,CAAC;yBAHhD,SAAS;sBACT,MAAM;IAGjB,CAAC;CACF;AAED,MAAM,UAAU,mBAAmB,CACjC,MAA2B,EAC3B,OAAO,GAAwC,EAAE;IAEjD,8FAA8F;IAC9F,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC;QAC9C,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;IACpD,MAAM,OAAO,GAAG,uBAAuB,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IACvF,MAAM,IAAI,GAAG,WAAW,MAAM,CAAC,aAAa,kBAAkB,CAAC;IAE/D,KAAK,UAAU,IAAI,CAAI,SAAiB,EAAE,IAAY,EAAE,IAAa;QACnE,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,IAAI,GAAG,IAAI,EAAE,EAAE;YAC/C,SAAS;YACT,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,0BAA0B,EAAE,MAAM,CAAC,aAAa;gBAChD,mBAAmB,EAAE,MAAM,CAAC,MAAM;aACnC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;SAC3B,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,MAAM,IAAI,YAAY,CAAC,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;QACrE,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAM,CAAC;IACtC,CAAC;IAED,OAAO;QACL,oEAAoE;QACpE,MAAM,CACJ,QAAgC;YAEhC,OAAO,IAAI,CAAC,QAAQ,EAAE,sBAAsB,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC9D,CAAC;KACF,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@decocms/apps-algolia",
|
|
3
|
-
"version": "8.1.0-next.
|
|
3
|
+
"version": "8.1.0-next.3",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Thin client for the Algolia Search REST API",
|
|
6
6
|
"repository": {
|
|
@@ -9,24 +9,28 @@
|
|
|
9
9
|
"directory": "packages/apps-algolia"
|
|
10
10
|
},
|
|
11
11
|
"files": [
|
|
12
|
+
"dist",
|
|
12
13
|
"src",
|
|
13
14
|
"!src/**/*.test.ts",
|
|
14
15
|
"!src/**/__tests__"
|
|
15
16
|
],
|
|
16
|
-
"main": "./
|
|
17
|
+
"main": "./dist/index.js",
|
|
18
|
+
"types": "./dist/index.d.ts",
|
|
17
19
|
"exports": {
|
|
18
|
-
".":
|
|
20
|
+
".": {
|
|
21
|
+
"types": "./dist/index.d.ts",
|
|
22
|
+
"source": "./src/index.ts",
|
|
23
|
+
"default": "./dist/index.js"
|
|
24
|
+
}
|
|
19
25
|
},
|
|
20
26
|
"scripts": {
|
|
21
|
-
"build": "tsc",
|
|
27
|
+
"build": "node ../../scripts/tsc.mjs --clean dist -p tsconfig.build.json",
|
|
28
|
+
"prepack": "npm run build",
|
|
22
29
|
"test": "vitest run --root ../.. packages/apps-algolia/",
|
|
23
|
-
"typecheck": "tsc
|
|
30
|
+
"typecheck": "node ../../scripts/tsc.mjs -p tsconfig.json"
|
|
24
31
|
},
|
|
25
32
|
"dependencies": {
|
|
26
|
-
"@decocms/blocks": "8.1.0-next.
|
|
27
|
-
},
|
|
28
|
-
"devDependencies": {
|
|
29
|
-
"typescript": "^5.9.0"
|
|
33
|
+
"@decocms/blocks": "8.1.0-next.3"
|
|
30
34
|
},
|
|
31
35
|
"publishConfig": {
|
|
32
36
|
"registry": "https://registry.npmjs.org",
|