-
Notifications
You must be signed in to change notification settings - Fork 50
Expand file tree
/
Copy pathgenerate_key.js
More file actions
85 lines (70 loc) · 2.87 KB
/
Copy pathgenerate_key.js
File metadata and controls
85 lines (70 loc) · 2.87 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
/*
API Key Generator
This script will generate an API key for an Algolia application.
The generated key will be valid for Search operations, and will be limited to 100 queries per hour.
*/
// Install the API client: https://www.algolia.com/doc/libraries/sdk/install#javascript
import { algoliasearch } from "algoliasearch";
import "dotenv/config";
// Get your Algolia Application ID and (admin) API key from the dashboard: https://www.algolia.com/account/api-keys
// and choose a name for your index. Add these environment variables to a `.env` file:
const ALGOLIA_APP_ID = process.env.ALGOLIA_APP_ID;
const ALGOLIA_API_KEY = process.env.ALGOLIA_API_KEY;
const ALGOLIA_INDEX_NAME = process.env.ALGOLIA_INDEX_NAME;
// Start the API client
// https://www.algolia.com/doc/libraries/sdk/install#test-your-installation
const client = algoliasearch(ALGOLIA_APP_ID, ALGOLIA_API_KEY);
// Create an index name (or connect to it, if an index with the name `ALGOLIA_INDEX_NAME` already exists)
// https://www.algolia.com/doc/libraries/sdk/install#test-your-installation
const indexName = ALGOLIA_INDEX_NAME || "new_index_name";
// Set permissions for API key
// https://www.algolia.com/doc/api-reference/api-methods/add-api-key/#method-param-acl
const acl = ["search"];
// Set the rate limited parameters for API key
// https://www.algolia.com/doc/api-reference/api-methods/add-api-key/#method-param-maxqueriesperipperhour
const params = {
description: "Restricted search-only API key for algolia.com",
// Rate-limit to 100 requests per hour per IP address
maxQueriesPerIPPerHour: 100,
};
// Create a new restricted search-only API key
(async () => {
console.log("Creating key...");
const response = await client.addApiKey({ acl: acl, ...params });
const NEW_API_KEY = response["key"];
console.log(`Key generated successfully: ${NEW_API_KEY}`);
console.log(`---------`);
console.log("Testing the key...");
// Loop to wait until the key is created
while (true) {
try {
await client.getApiKey({ key: NEW_API_KEY });
console.log("API key is active!");
break;
} catch (err) {
if (err.status !== 404) throw err;
await new Promise((r) => setTimeout(r, 500));
}
}
// Start the API client
const newClient = algoliasearch(ALGOLIA_APP_ID, NEW_API_KEY);
// Implement an empty search query
const newResponse = await newClient.search({
requests: [{ indexName: indexName, query: "", hitsPerPage: 50 }],
});
// const newResponse = await index.search("", { hitsPerPage: 50 });
console.log(newResponse);
// Checking connection of new API key to index
try {
!Object.keys(newResponse).length
? console.log(`Error connecting new key to index`)
: console.log(`New key connected to index successfully`);
} catch (error) {
console.log(error);
}
})();
// client
// .addApiKey(acl, params)
// .wait()
// .then((response) => {
// });