@meilisearch/cli 0.0.0-stage → 0.1.0

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.
Files changed (165) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +97 -2
  3. package/bin/run.js +15 -0
  4. package/dist/commands/add/documents.js +54 -0
  5. package/dist/commands/add/documents.js.map +1 -0
  6. package/dist/commands/add/indexes.js +39 -0
  7. package/dist/commands/add/indexes.js.map +1 -0
  8. package/dist/commands/add/keys.js +63 -0
  9. package/dist/commands/add/keys.js.map +1 -0
  10. package/dist/commands/add/projects.js +96 -0
  11. package/dist/commands/add/projects.js.map +1 -0
  12. package/dist/commands/auth/login.js +26 -0
  13. package/dist/commands/auth/login.js.map +1 -0
  14. package/dist/commands/auth/logout.js +33 -0
  15. package/dist/commands/auth/logout.js.map +1 -0
  16. package/dist/commands/auth/refresh.js +22 -0
  17. package/dist/commands/auth/refresh.js.map +1 -0
  18. package/dist/commands/auth/status.js +34 -0
  19. package/dist/commands/auth/status.js.map +1 -0
  20. package/dist/commands/cancel/tasks.js +24 -0
  21. package/dist/commands/cancel/tasks.js.map +1 -0
  22. package/dist/commands/config/list.js +18 -0
  23. package/dist/commands/config/list.js.map +1 -0
  24. package/dist/commands/config/set.js +48 -0
  25. package/dist/commands/config/set.js.map +1 -0
  26. package/dist/commands/config/sync-with-cloud.js +144 -0
  27. package/dist/commands/config/sync-with-cloud.js.map +1 -0
  28. package/dist/commands/config/unset.js +28 -0
  29. package/dist/commands/config/unset.js.map +1 -0
  30. package/dist/commands/config/update.js +53 -0
  31. package/dist/commands/config/update.js.map +1 -0
  32. package/dist/commands/delete/documents.js +81 -0
  33. package/dist/commands/delete/documents.js.map +1 -0
  34. package/dist/commands/delete/indexes.js +28 -0
  35. package/dist/commands/delete/indexes.js.map +1 -0
  36. package/dist/commands/delete/keys.js +28 -0
  37. package/dist/commands/delete/keys.js.map +1 -0
  38. package/dist/commands/delete/projects.js +40 -0
  39. package/dist/commands/delete/projects.js.map +1 -0
  40. package/dist/commands/delete/settings.js +28 -0
  41. package/dist/commands/delete/settings.js.map +1 -0
  42. package/dist/commands/delete/tasks.js +34 -0
  43. package/dist/commands/delete/tasks.js.map +1 -0
  44. package/dist/commands/export.js +67 -0
  45. package/dist/commands/export.js.map +1 -0
  46. package/dist/commands/facet-search.js +87 -0
  47. package/dist/commands/facet-search.js.map +1 -0
  48. package/dist/commands/get/batches.js +35 -0
  49. package/dist/commands/get/batches.js.map +1 -0
  50. package/dist/commands/get/documents.js +74 -0
  51. package/dist/commands/get/documents.js.map +1 -0
  52. package/dist/commands/get/health.js +17 -0
  53. package/dist/commands/get/health.js.map +1 -0
  54. package/dist/commands/get/indexes.js +33 -0
  55. package/dist/commands/get/indexes.js.map +1 -0
  56. package/dist/commands/get/keys.js +36 -0
  57. package/dist/commands/get/keys.js.map +1 -0
  58. package/dist/commands/get/projects.js +40 -0
  59. package/dist/commands/get/projects.js.map +1 -0
  60. package/dist/commands/get/settings.js +25 -0
  61. package/dist/commands/get/settings.js.map +1 -0
  62. package/dist/commands/get/stats.js +37 -0
  63. package/dist/commands/get/stats.js.map +1 -0
  64. package/dist/commands/get/tasks.js +35 -0
  65. package/dist/commands/get/tasks.js.map +1 -0
  66. package/dist/commands/get/version.js +16 -0
  67. package/dist/commands/get/version.js.map +1 -0
  68. package/dist/commands/multi-search.js +39 -0
  69. package/dist/commands/multi-search.js.map +1 -0
  70. package/dist/commands/schema.js +95 -0
  71. package/dist/commands/schema.js.map +1 -0
  72. package/dist/commands/search.js +164 -0
  73. package/dist/commands/search.js.map +1 -0
  74. package/dist/commands/similar.js +86 -0
  75. package/dist/commands/similar.js.map +1 -0
  76. package/dist/commands/teleport.js +472 -0
  77. package/dist/commands/teleport.js.map +1 -0
  78. package/dist/commands/update/documents.js +56 -0
  79. package/dist/commands/update/documents.js.map +1 -0
  80. package/dist/commands/update/indexes.js +44 -0
  81. package/dist/commands/update/indexes.js.map +1 -0
  82. package/dist/commands/update/keys.js +42 -0
  83. package/dist/commands/update/keys.js.map +1 -0
  84. package/dist/commands/update/projects.js +62 -0
  85. package/dist/commands/update/projects.js.map +1 -0
  86. package/dist/commands/update/settings.js +145 -0
  87. package/dist/commands/update/settings.js.map +1 -0
  88. package/dist/lib/analytics.js +135 -0
  89. package/dist/lib/analytics.js.map +1 -0
  90. package/dist/lib/api-naming.js +435 -0
  91. package/dist/lib/api-naming.js.map +1 -0
  92. package/dist/lib/base-command.js +318 -0
  93. package/dist/lib/base-command.js.map +1 -0
  94. package/dist/lib/clients/analytics.js +24 -0
  95. package/dist/lib/clients/analytics.js.map +1 -0
  96. package/dist/lib/clients/management/generated/client/client.gen.js +217 -0
  97. package/dist/lib/clients/management/generated/client/client.gen.js.map +1 -0
  98. package/dist/lib/clients/management/generated/client/index.js +7 -0
  99. package/dist/lib/clients/management/generated/client/index.js.map +1 -0
  100. package/dist/lib/clients/management/generated/client/types.gen.js +3 -0
  101. package/dist/lib/clients/management/generated/client/types.gen.js.map +1 -0
  102. package/dist/lib/clients/management/generated/client/utils.gen.js +229 -0
  103. package/dist/lib/clients/management/generated/client/utils.gen.js.map +1 -0
  104. package/dist/lib/clients/management/generated/client.gen.js +4 -0
  105. package/dist/lib/clients/management/generated/client.gen.js.map +1 -0
  106. package/dist/lib/clients/management/generated/core/auth.gen.js +15 -0
  107. package/dist/lib/clients/management/generated/core/auth.gen.js.map +1 -0
  108. package/dist/lib/clients/management/generated/core/bodySerializer.gen.js +58 -0
  109. package/dist/lib/clients/management/generated/core/bodySerializer.gen.js.map +1 -0
  110. package/dist/lib/clients/management/generated/core/params.gen.js +110 -0
  111. package/dist/lib/clients/management/generated/core/params.gen.js.map +1 -0
  112. package/dist/lib/clients/management/generated/core/pathSerializer.gen.js +107 -0
  113. package/dist/lib/clients/management/generated/core/pathSerializer.gen.js.map +1 -0
  114. package/dist/lib/clients/management/generated/core/queryKeySerializer.gen.js +93 -0
  115. package/dist/lib/clients/management/generated/core/queryKeySerializer.gen.js.map +1 -0
  116. package/dist/lib/clients/management/generated/core/serverSentEvents.gen.js +133 -0
  117. package/dist/lib/clients/management/generated/core/serverSentEvents.gen.js.map +1 -0
  118. package/dist/lib/clients/management/generated/core/types.gen.js +3 -0
  119. package/dist/lib/clients/management/generated/core/types.gen.js.map +1 -0
  120. package/dist/lib/clients/management/generated/core/utils.gen.js +88 -0
  121. package/dist/lib/clients/management/generated/core/utils.gen.js.map +1 -0
  122. package/dist/lib/clients/management/generated/index.js +3 -0
  123. package/dist/lib/clients/management/generated/index.js.map +1 -0
  124. package/dist/lib/clients/management/generated/sdk.gen.js +398 -0
  125. package/dist/lib/clients/management/generated/sdk.gen.js.map +1 -0
  126. package/dist/lib/clients/management/generated/types.gen.js +3 -0
  127. package/dist/lib/clients/management/generated/types.gen.js.map +1 -0
  128. package/dist/lib/clients/management.js +21 -0
  129. package/dist/lib/clients/management.js.map +1 -0
  130. package/dist/lib/clients/meilisearch.js +69 -0
  131. package/dist/lib/clients/meilisearch.js.map +1 -0
  132. package/dist/lib/clients/oauth.js +225 -0
  133. package/dist/lib/clients/oauth.js.map +1 -0
  134. package/dist/lib/clients/ping.js +26 -0
  135. package/dist/lib/clients/ping.js.map +1 -0
  136. package/dist/lib/clients/trace.js +69 -0
  137. package/dist/lib/clients/trace.js.map +1 -0
  138. package/dist/lib/cloud-sync.js +113 -0
  139. package/dist/lib/cloud-sync.js.map +1 -0
  140. package/dist/lib/config.js +322 -0
  141. package/dist/lib/config.js.map +1 -0
  142. package/dist/lib/errors.js +302 -0
  143. package/dist/lib/errors.js.map +1 -0
  144. package/dist/lib/help.js +37 -0
  145. package/dist/lib/help.js.map +1 -0
  146. package/dist/lib/input.js +76 -0
  147. package/dist/lib/input.js.map +1 -0
  148. package/dist/lib/login.js +57 -0
  149. package/dist/lib/login.js.map +1 -0
  150. package/dist/lib/output.js +39 -0
  151. package/dist/lib/output.js.map +1 -0
  152. package/dist/lib/pagination.js +52 -0
  153. package/dist/lib/pagination.js.map +1 -0
  154. package/dist/lib/session.js +149 -0
  155. package/dist/lib/session.js.map +1 -0
  156. package/dist/lib/task-filters.js +118 -0
  157. package/dist/lib/task-filters.js.map +1 -0
  158. package/dist/lib/tasks.js +64 -0
  159. package/dist/lib/tasks.js.map +1 -0
  160. package/dist/lib/terminal.js +168 -0
  161. package/dist/lib/terminal.js.map +1 -0
  162. package/dist/lib/values.js +48 -0
  163. package/dist/lib/values.js.map +1 -0
  164. package/oclif.manifest.json +10470 -0
  165. package/package.json +81 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sdk.gen.js","sourceRoot":"","sources":["../../../../../src/lib/clients/management/generated/sdk.gen.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ // This file is auto-generated by @hey-api/openapi-ts
2
+ export {};
3
+ //# sourceMappingURL=types.gen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.gen.js","sourceRoot":"","sources":["../../../../../src/lib/clients/management/generated/types.gen.ts"],"names":[],"mappings":"AAAA,qDAAqD"}
@@ -0,0 +1,21 @@
1
+ /** Builds the generated Management API client from resolved credentials. */
2
+ import { cannotConnectMessage, ManagementApiError, MeiliCliError } from "../errors.js";
3
+ import { createClient } from "./management/generated/client/index.js";
4
+ /**
5
+ * A non-2xx answer becomes a ManagementApiError carrying the error body the
6
+ * API sent, which the contract passes through (output.md, "Errors"); no answer
7
+ * at all is `cli_network`. The SDK functions then return the body.
8
+ */
9
+ export function createManagementClient(options) {
10
+ const client = createClient({
11
+ baseUrl: options.url,
12
+ auth: options.token,
13
+ headers: { "User-Agent": options.userAgent },
14
+ throwOnError: true,
15
+ });
16
+ client.interceptors.error.use((error, response, request, requestOptions) => response === undefined
17
+ ? new MeiliCliError("cli_network", cannotConnectMessage(options.url, error), { cause: error })
18
+ : new ManagementApiError(response.status, error, request?.url ?? requestOptions.url));
19
+ return client;
20
+ }
21
+ //# sourceMappingURL=management.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"management.js","sourceRoot":"","sources":["../../../src/lib/clients/management.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACvF,OAAO,EAAe,YAAY,EAAE,MAAM,wCAAwC,CAAC;AAWnF;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CAAC,OAAgC;IACrE,MAAM,MAAM,GAAG,YAAY,CAAC;QAC1B,OAAO,EAAE,OAAO,CAAC,GAAG;QACpB,IAAI,EAAE,OAAO,CAAC,KAAK;QACnB,OAAO,EAAE,EAAE,YAAY,EAAE,OAAO,CAAC,SAAS,EAAE;QAC5C,YAAY,EAAE,IAAI;KACnB,CAAC,CAAC;IACH,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,EAAE,CACzE,QAAQ,KAAK,SAAS;QACpB,CAAC,CAAC,IAAI,aAAa,CAAC,aAAa,EAAE,oBAAoB,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QAC9F,CAAC,CAAC,IAAI,kBAAkB,CAAC,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,IAAI,cAAc,CAAC,GAAG,CAAC,CACvF,CAAC;IACF,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,69 @@
1
+ /** Builds the meilisearch-js client from a resolved project connection. */
2
+ import { Meilisearch, MeilisearchApiError, } from "meilisearch";
3
+ export function createMeilisearchClient(options) {
4
+ return new Meilisearch({
5
+ host: options.url,
6
+ apiKey: options.apiKey,
7
+ clientAgents: [options.userAgent],
8
+ });
9
+ }
10
+ /**
11
+ * `POST /indexes/{index}/documents/fetch`, the one route `get documents`
12
+ * covers. `getDocuments` of meilisearch-js takes it only when the query carries
13
+ * a filter and falls back to the GET twin otherwise, which the CLI does not
14
+ * implement (docs/contract/commands.md, exceptions).
15
+ */
16
+ export function fetchDocuments(client, index, query) {
17
+ return client.httpRequest.post({ path: `indexes/${index}/documents/fetch`, body: query });
18
+ }
19
+ /**
20
+ * `GET /stats` and `GET /indexes/{index}/stats` with the query parameters of
21
+ * the routes. `getStats` of meilisearch-js sends none, so it cannot carry
22
+ * `showInternalDatabaseSizes` or `sizeFormat`: ADR 0003 allows
23
+ * `client.httpRequest` until the SDK takes them. The body is returned as it
24
+ * comes, untyped, because `sizeFormat=human` answers strings where the types
25
+ * of the SDK declare numbers.
26
+ */
27
+ export function fetchStats(client, index, query) {
28
+ return client.httpRequest.get({
29
+ path: index === undefined ? "stats" : `indexes/${index}/stats`,
30
+ params: query,
31
+ });
32
+ }
33
+ /**
34
+ * `GET /keys`, the list route of `get keys`. `getKeys` of meilisearch-js
35
+ * rewrites `createdAt` and `updatedAt` into `Date` objects, which JSON writes
36
+ * back with milliseconds where the API answered nanoseconds: the agent would
37
+ * read a value the API never sent, against the pass-through of
38
+ * docs/contract/output.md. ADR 0003 allows `client.httpRequest` until the SDK
39
+ * leaves the body alone, as `fetchStats` does. The other four routes of the
40
+ * resource return the body as it comes, so they call the SDK.
41
+ */
42
+ export function fetchKeys(client, query) {
43
+ return client.httpRequest.get({ path: "keys", params: query });
44
+ }
45
+ /**
46
+ * `POST /export`, the one route of `export`. meilisearch-js has no method for
47
+ * it (meilisearch/meilisearch-js#1989), so ADR 0003 allows `client.httpRequest`
48
+ * until it has one, as `fetchStats` and `fetchKeys` do above.
49
+ */
50
+ export function triggerExport(client, body) {
51
+ return client.httpRequest.post({ path: "export", body });
52
+ }
53
+ /**
54
+ * `POST /export` with no body, which tells whether the instance has the route
55
+ * and the key may call it, and exports nothing: the instance checks the key,
56
+ * then answers 400 `missing_payload` without enqueuing a task. A 404, 401 or
57
+ * 403 is thrown, as is any other error.
58
+ */
59
+ export async function probeExport(client) {
60
+ try {
61
+ await client.httpRequest.post({ path: "export" });
62
+ }
63
+ catch (error) {
64
+ if (error instanceof MeilisearchApiError && error.cause?.code === "missing_payload")
65
+ return;
66
+ throw error;
67
+ }
68
+ }
69
+ //# sourceMappingURL=meilisearch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meilisearch.js","sourceRoot":"","sources":["../../../src/lib/clients/meilisearch.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,OAAO,EAGL,WAAW,EACX,mBAAmB,GACpB,MAAM,aAAa,CAAC;AAUrB,MAAM,UAAU,uBAAuB,CAAC,OAAiC;IACvE,OAAO,IAAI,WAAW,CAAC;QACrB,IAAI,EAAE,OAAO,CAAC,GAAG;QACjB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,YAAY,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC;KAClC,CAAC,CAAC;AACL,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAC5B,MAAmB,EACnB,KAAa,EACb,KAAqB;IAErB,OAAO,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,KAAK,kBAAkB,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AAC5F,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,UAAU,CACxB,MAAmB,EACnB,KAAyB,EACzB,KAA4E;IAE5E,OAAO,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC;QAC5B,IAAI,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,KAAK,QAAQ;QAC9D,MAAM,EAAE,KAAK;KACd,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,SAAS,CACvB,MAAmB,EACnB,KAAkE;IAElE,OAAO,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;AACjE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAC3B,MAAmB,EACnB,IAA6B;IAE7B,OAAO,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;AAC3D,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,MAAmB;IACnD,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;IACpD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,mBAAmB,IAAI,KAAK,CAAC,KAAK,EAAE,IAAI,KAAK,iBAAiB;YAAE,OAAO;QAC5F,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -0,0 +1,225 @@
1
+ /**
2
+ * The OAuth2 authorization code flow with PKCE of `meili auth login`, as
3
+ * RFC 8252 describes it for a native application: the human approves on the
4
+ * consent page of the dashboard, the authorization server sends the code back
5
+ * to a loopback server this process owns, and the code is exchanged for the
6
+ * tokens of the Management API. See ADR 0009.
7
+ *
8
+ * With `meilisearch.ts` and `ping.ts`, the only files of `src/` that speak HTTP.
9
+ */
10
+ import { createHash, randomBytes } from "node:crypto";
11
+ import { createServer } from "node:http";
12
+ import { deepestCauseMessage, MeiliCliError } from "../errors.js";
13
+ /** The scopes the CLI asks for: `read` for the GET routes of the API, `write` for the others. */
14
+ export const SCOPES = "read write";
15
+ const CALLBACK_PATH = "/callback";
16
+ /**
17
+ * Runs the whole flow and returns the tokens. The caller opens the browser, or
18
+ * leaves that to the human: this function only hands out the URL.
19
+ */
20
+ export async function logIn(client, options) {
21
+ const verifier = randomBytes(32).toString("base64url");
22
+ const challenge = createHash("sha256").update(verifier).digest("base64url");
23
+ const state = randomBytes(16).toString("base64url");
24
+ const callback = await listenForCode(state, options.timeoutMs);
25
+ try {
26
+ options.onAuthorizationUrl(authorizationUrl(client, callback.redirectUri, state, challenge));
27
+ const code = await callback.code;
28
+ return await postToken(client, {
29
+ grant_type: "authorization_code",
30
+ code,
31
+ redirect_uri: callback.redirectUri,
32
+ code_verifier: verifier,
33
+ });
34
+ }
35
+ finally {
36
+ callback.close();
37
+ }
38
+ }
39
+ /** Trades the refresh token for a new pair, which replaces the stored one. */
40
+ export function refreshAccessToken(client, refreshToken) {
41
+ return postToken(client, { grant_type: "refresh_token", refresh_token: refreshToken });
42
+ }
43
+ /**
44
+ * Revokes both tokens of a session, each with its `token_type_hint` (RFC 7009).
45
+ * The refresh token goes first: a server that cascades revokes the access token
46
+ * with it, and the second call then answers 200 on a token it no longer knows.
47
+ * Throws `cli_network` when the server cannot be reached and `cli_auth_failed`
48
+ * when it refuses, so that the exit code says which one happened.
49
+ */
50
+ export async function revokeSession(session) {
51
+ if (session.refreshToken !== undefined) {
52
+ await revokeToken(session, session.refreshToken, "refresh_token");
53
+ }
54
+ await revokeToken(session, session.accessToken, "access_token");
55
+ }
56
+ async function revokeToken(client, token, hint) {
57
+ const response = await postForm(client, "/oauth/revoke", { token, token_type_hint: hint });
58
+ if (!response.ok) {
59
+ throw new MeiliCliError("cli_auth_failed", await errorMessage(response));
60
+ }
61
+ }
62
+ /**
63
+ * `GET /oauth/token/info`: what the authorization server still knows about the
64
+ * access token of this session, or undefined once it no longer accepts it.
65
+ */
66
+ export async function tokenInfo(session) {
67
+ const response = await send(new URL("/oauth/token/info", session.managementUrl).href, {
68
+ headers: { authorization: `Bearer ${session.accessToken}`, accept: "application/json" },
69
+ });
70
+ if (response.status === 401)
71
+ return undefined;
72
+ if (!response.ok)
73
+ throw new MeiliCliError("cli_auth_failed", await errorMessage(response));
74
+ const body = (await response.json().catch(() => ({})));
75
+ return {
76
+ // The token endpoint spells the scopes in one string, this one in an array.
77
+ scope: Array.isArray(body.scope) ? body.scope.join(" ") : undefined,
78
+ expiresAt: typeof body.expires_in === "number"
79
+ ? new Date(Date.now() + body.expires_in * 1000).toISOString()
80
+ : undefined,
81
+ };
82
+ }
83
+ /** The URL of the consent page, which lives on the dashboard and not on the API. */
84
+ function authorizationUrl(client, redirectUri, state, challenge) {
85
+ const url = new URL("/oauth/authorize", client.dashboardUrl);
86
+ url.search = new URLSearchParams({
87
+ client_id: client.clientId,
88
+ redirect_uri: redirectUri,
89
+ response_type: "code",
90
+ scope: SCOPES,
91
+ state,
92
+ code_challenge: challenge,
93
+ code_challenge_method: "S256",
94
+ // Sends a human without a session to the sign-up page instead of the login
95
+ // page (OpenID Connect `prompt=create`). A human who already has an account
96
+ // still logs in from there: GitHub and Google log in an existing account, and
97
+ // the page links to the login page.
98
+ prompt: "create",
99
+ }).toString();
100
+ return url.href;
101
+ }
102
+ /**
103
+ * Starts the loopback server and resolves once it listens, so that the URL the
104
+ * caller shows already carries its port. Only `127.0.0.1` is bound: nothing on
105
+ * the network can reach it, and the code never leaves the machine.
106
+ */
107
+ async function listenForCode(state, timeoutMs) {
108
+ let succeed = () => { };
109
+ let fail = () => { };
110
+ const code = new Promise((resolve, reject) => {
111
+ succeed = resolve;
112
+ fail = reject;
113
+ });
114
+ const server = createServer((request, response) => {
115
+ const url = new URL(request.url ?? "/", "http://127.0.0.1");
116
+ if (url.pathname !== CALLBACK_PATH) {
117
+ response.writeHead(404).end();
118
+ return;
119
+ }
120
+ // The state first, on an error response too (RFC 6749, section 10.12): anything
121
+ // else on this machine can reach this port and would otherwise end the login.
122
+ if (url.searchParams.get("state") !== state) {
123
+ reply(response, "Unexpected request. Go back to your terminal.");
124
+ return;
125
+ }
126
+ const error = url.searchParams.get("error");
127
+ if (error !== null) {
128
+ reply(response, "Authorization refused. Go back to your terminal.");
129
+ fail(new MeiliCliError("cli_auth_failed", `The authorization server refused: ${url.searchParams.get("error_description") ?? error}.`));
130
+ return;
131
+ }
132
+ const received = url.searchParams.get("code");
133
+ if (received === null) {
134
+ reply(response, "Something went wrong. Go back to your terminal.");
135
+ fail(new MeiliCliError("cli_auth_failed", "The authorization server came back without an authorization code."));
136
+ return;
137
+ }
138
+ reply(response, "You are logged in. Go back to your terminal.");
139
+ succeed(received);
140
+ });
141
+ await new Promise((resolve, reject) => {
142
+ server.once("error", (error) => {
143
+ reject(new MeiliCliError("cli_network", `Cannot listen on 127.0.0.1: ${error.message}`, {
144
+ hint: "The login needs a loopback port to receive its authorization code.",
145
+ }));
146
+ });
147
+ server.listen(0, "127.0.0.1", resolve);
148
+ });
149
+ const timer = setTimeout(() => {
150
+ fail(new MeiliCliError("cli_timeout", `Nobody approved the login within ${Math.round(timeoutMs / 1000)}s.`, { hint: "Run `meili auth login` again." }));
151
+ }, timeoutMs);
152
+ timer.unref();
153
+ const close = () => {
154
+ clearTimeout(timer);
155
+ server.closeAllConnections();
156
+ server.close();
157
+ };
158
+ return {
159
+ redirectUri: `http://127.0.0.1:${server.address().port}${CALLBACK_PATH}`,
160
+ code,
161
+ close,
162
+ };
163
+ }
164
+ function reply(response, message) {
165
+ response
166
+ .writeHead(200, {
167
+ "content-type": "text/html; charset=utf-8",
168
+ // The URL of this page carries the code (RFC 8252, section 8.10).
169
+ "referrer-policy": "no-referrer",
170
+ "cache-control": "no-store",
171
+ })
172
+ .end(`<!doctype html><meta charset="utf-8"><title>Meili CLI</title><p>${message}</p>`);
173
+ }
174
+ async function postToken(client, form) {
175
+ const response = await postForm(client, "/oauth/token", form);
176
+ if (!response.ok) {
177
+ throw new MeiliCliError("cli_auth_failed", await errorMessage(response), {
178
+ hint: "Run `meili auth login` to start a new login.",
179
+ });
180
+ }
181
+ const body = (await response.json().catch(() => ({})));
182
+ const accessToken = body.access_token;
183
+ if (typeof accessToken !== "string") {
184
+ throw new MeiliCliError("cli_auth_failed", "The authorization server answered without an access token.");
185
+ }
186
+ const expiresIn = typeof body.expires_in === "number" ? body.expires_in : 0;
187
+ return {
188
+ accessToken,
189
+ refreshToken: typeof body.refresh_token === "string" ? body.refresh_token : undefined,
190
+ expiresAt: new Date(Date.now() + expiresIn * 1000).toISOString(),
191
+ scope: typeof body.scope === "string" ? body.scope : SCOPES,
192
+ };
193
+ }
194
+ /** The client id travels in the body: a public client authenticates with it alone. */
195
+ function postForm(client, path, form) {
196
+ return send(new URL(path, client.managementUrl).href, {
197
+ method: "POST",
198
+ headers: { "content-type": "application/x-www-form-urlencoded", accept: "application/json" },
199
+ body: new URLSearchParams({ ...form, client_id: client.clientId }).toString(),
200
+ });
201
+ }
202
+ /** How long a request of this file waits for an answer before giving up. */
203
+ const REQUEST_TIMEOUT_MS = 30_000;
204
+ /** Every request of this file, with the two failures they share. */
205
+ async function send(url, init) {
206
+ try {
207
+ return await fetch(url, { ...init, signal: AbortSignal.timeout(REQUEST_TIMEOUT_MS) });
208
+ }
209
+ catch (error) {
210
+ if (error instanceof Error && error.name === "TimeoutError") {
211
+ throw new MeiliCliError("cli_timeout", `The authorization server at ${url} did not answer within ${REQUEST_TIMEOUT_MS / 1000}s.`);
212
+ }
213
+ const reason = deepestCauseMessage(error) ?? String(error);
214
+ throw new MeiliCliError("cli_network", `Cannot reach the authorization server at ${url}: ${reason}`);
215
+ }
216
+ }
217
+ /** The `error_description` of RFC 6749, or the status when the body has none. */
218
+ async function errorMessage(response) {
219
+ const body = (await response.json().catch(() => ({})));
220
+ const description = body.error_description ?? body.error;
221
+ return typeof description === "string"
222
+ ? `The authorization server refused: ${description}.`
223
+ : `The authorization server answered HTTP ${response.status}.`;
224
+ }
225
+ //# sourceMappingURL=oauth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../../src/lib/clients/oauth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * The latency of a Meilisearch Cloud region, measured as the dashboard does:
3
+ * three `HEAD https://ping.<regionUrl>` in a row, and their median. No OpenAPI
4
+ * document describes these hosts: they only answer, and the answer is not read.
5
+ */
6
+ /** How long one ping may take before the region counts as unreachable. */
7
+ const PING_TIMEOUT_MS = 3000;
8
+ /** The median of three pings in milliseconds, or undefined when the region does not answer. */
9
+ export async function regionLatency(regionUrl) {
10
+ const pings = [];
11
+ try {
12
+ for (let i = 0; i < 3; i++) {
13
+ const start = performance.now();
14
+ await fetch(`https://ping.${regionUrl}`, {
15
+ method: "HEAD",
16
+ signal: AbortSignal.timeout(PING_TIMEOUT_MS),
17
+ });
18
+ pings.push(performance.now() - start);
19
+ }
20
+ }
21
+ catch {
22
+ return undefined;
23
+ }
24
+ return Math.round(pings.sort((a, b) => a - b)[1]);
25
+ }
26
+ //# sourceMappingURL=ping.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ping.js","sourceRoot":"","sources":["../../../src/lib/clients/ping.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,0EAA0E;AAC1E,MAAM,eAAe,GAAG,IAAI,CAAC;AAE7B,+FAA+F;AAC/F,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,SAAiB;IACnD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,CAAC;QACH,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;YAChC,MAAM,KAAK,CAAC,gBAAgB,SAAS,EAAE,EAAE;gBACvC,MAAM,EAAE,MAAM;gBACd,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,eAAe,CAAC;aAC7C,CAAC,CAAC;YACH,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAW,CAAC,CAAC;AAC9D,CAAC"}
@@ -0,0 +1,69 @@
1
+ /**
2
+ * The `--debug` trace: every HTTP request and response of the process on
3
+ * stderr, secrets redacted (docs/contract/config.md, "Secrets"). It belongs to
4
+ * no client in particular, since `meili auth login` traces calls it makes
5
+ * without building one.
6
+ */
7
+ import { redactBody, redactHeaders } from "../config.js";
8
+ /**
9
+ * Wraps the global fetch for the rest of the process and writes a redacted
10
+ * trace of every request and response on stderr.
11
+ *
12
+ * meilisearch-js offers an `httpClient` option, but it replaces the response
13
+ * parsing and error mapping of the SDK, so tracing there would change the
14
+ * behavior of the CLI in debug mode. Wrapping fetch keeps the SDK untouched.
15
+ */
16
+ export function installHttpTrace(write = (line) => process.stderr.write(line)) {
17
+ const original = globalThis.fetch;
18
+ globalThis.fetch = async (input, init) => {
19
+ await traceRequest(write, input, init);
20
+ const started = performance.now();
21
+ let response;
22
+ try {
23
+ response = await original(input, init);
24
+ }
25
+ catch (error) {
26
+ write(`< network error: ${error instanceof Error ? error.message : String(error)}\n`);
27
+ throw error;
28
+ }
29
+ const elapsed = Math.round(performance.now() - started);
30
+ write(`< HTTP ${response.status} ${response.statusText} (${elapsed} ms)\n`);
31
+ writeHeaders(write, "< ", response.headers);
32
+ writeBody(write, "< ", await response.clone().text());
33
+ return response;
34
+ };
35
+ }
36
+ /**
37
+ * meilisearch-js calls `fetch(url, init)`; the generated Management API client
38
+ * builds a `Request` and calls `fetch(request)`. Both shapes are traced.
39
+ */
40
+ async function traceRequest(write, input, init) {
41
+ const request = input instanceof Request ? input : undefined;
42
+ const url = typeof input === "string" ? input : input instanceof URL ? input.href : input.url;
43
+ const method = init?.method ?? request?.method ?? "GET";
44
+ write(`> ${method.toUpperCase()} ${url}\n`);
45
+ writeHeaders(write, "> ", new Headers(init?.headers ?? request?.headers));
46
+ const body = init?.body ?? (await request?.clone().text());
47
+ if (typeof body === "string")
48
+ writeBody(write, "> ", body);
49
+ else if (body !== undefined && body !== null)
50
+ write("> [body not shown: not text]\n");
51
+ }
52
+ function writeHeaders(write, prefix, headers) {
53
+ for (const [name, value] of Object.entries(redactHeaders(headers))) {
54
+ write(`${prefix}${name}: ${value}\n`);
55
+ }
56
+ }
57
+ function writeBody(write, prefix, text) {
58
+ if (text === "")
59
+ return;
60
+ let rendered;
61
+ try {
62
+ rendered = JSON.stringify(redactBody(JSON.parse(text)));
63
+ }
64
+ catch {
65
+ rendered = "[body not shown: not JSON]";
66
+ }
67
+ write(`${prefix}${rendered}\n`);
68
+ }
69
+ //# sourceMappingURL=trace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trace.js","sourceRoot":"","sources":["../../../src/lib/clients/trace.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,113 @@
1
+ /**
2
+ * What the config file reads from Meilisearch Cloud on request: a project's
3
+ * entry, its cloud identifiers and its master key. See docs/contract/config.md,
4
+ * "Cloud projects", and ADR 0011.
5
+ */
6
+ import { getApiV2Projects, getApiV2ProjectsById, getApiV2ProjectsByProjectIdMasterKey, getApiV2Teams, } from "./clients/management/generated/sdk.gen.js";
7
+ import { parseUrl } from "./config.js";
8
+ import { ManagementApiError, MeiliCliError, toRenderedError, writeWarning } from "./errors.js";
9
+ import { iteratePages, nextPageQuery } from "./pagination.js";
10
+ import { formatDuration, pollUntil } from "./tasks.js";
11
+ /** Every item of a list route of the Management API, page after page. */
12
+ export async function everyPage(fetchPage, query) {
13
+ const items = [];
14
+ for await (const page of iteratePages(fetchPage, query, nextPageQuery)) {
15
+ items.push(...page.results);
16
+ }
17
+ return items;
18
+ }
19
+ /** The projects the token sees, or the ones of a team. */
20
+ export function listCloudProjects(client, teamId) {
21
+ return everyPage((query) => getApiV2Projects({ client, query }), { page: 1, teamId });
22
+ }
23
+ /** The Cloud project whose URL has the scheme and host of `url`, or `cli_config`. */
24
+ export async function findProjectByUrl(client, url) {
25
+ const project = (await listCloudProjects(client)).find((each) => each.url != null && sameOrigin(each.url, url));
26
+ if (project === undefined) {
27
+ throw new MeiliCliError("cli_config", `No Meilisearch Cloud project has the URL ${url}: nothing was written.`);
28
+ }
29
+ return project;
30
+ }
31
+ /** An API error the command goes on through, as a warning that keeps the API's code. */
32
+ function warnApiError(error, message, hint) {
33
+ const { hint: _credentialHint, ...body } = toRenderedError(error).body;
34
+ writeWarning({ ...body, message, ...(hint === undefined ? {} : { hint }) });
35
+ }
36
+ /**
37
+ * The name of every team the token sees, by id. When the API does not give
38
+ * them, a warning says so and the entries are written without `teamName`.
39
+ */
40
+ export async function readTeamNames(client) {
41
+ try {
42
+ const teams = await everyPage((query) => getApiV2Teams({ client, query }), { page: 1 });
43
+ return new Map(teams.map((team) => [team.id, team.name]));
44
+ }
45
+ catch (error) {
46
+ if (!(error instanceof ManagementApiError))
47
+ throw error;
48
+ warnApiError(error, `The team names could not be read, the entries are written without teamName: ${error.message}`);
49
+ return new Map();
50
+ }
51
+ }
52
+ export function cloudOf(project, teams) {
53
+ const teamName = teams.get(project.teamId);
54
+ return {
55
+ id: project.id,
56
+ teamId: project.teamId,
57
+ ...(teamName === undefined ? {} : { teamName }),
58
+ };
59
+ }
60
+ /**
61
+ * The project's master key, which the API gives to the owners of its team or
62
+ * organization only. A 403 is a warning naming the entry left without a key;
63
+ * any other error stops the command.
64
+ */
65
+ export async function readMasterKey(client, project, entry) {
66
+ try {
67
+ const answer = await getApiV2ProjectsByProjectIdMasterKey({
68
+ client,
69
+ path: { projectId: project.id },
70
+ });
71
+ return answer.masterKey;
72
+ }
73
+ catch (error) {
74
+ if (!(error instanceof ManagementApiError) || error.status !== 403)
75
+ throw error;
76
+ warnApiError(error, `No master key for project ${project.id} (${project.name}): only an owner of its team or organization can read it.`, `Ask an owner of the team for a key, then run \`meili config update --project ${entry} --project-api-key -\`.`);
77
+ return undefined;
78
+ }
79
+ }
80
+ /**
81
+ * The entry `config set` and `config update` write with `--sync-with-cloud`:
82
+ * the key given or already there, else the master key, and the project's
83
+ * cloud identifiers.
84
+ */
85
+ export async function cloudEntry(client, project, name, url, apiKey) {
86
+ return {
87
+ url,
88
+ apiKey: apiKey ?? (await readMasterKey(client, project, name)),
89
+ cloud: cloudOf(project, await readTeamNames(client)),
90
+ };
91
+ }
92
+ /** Same scheme, host and port. */
93
+ export function sameOrigin(a, b) {
94
+ const origin = parseUrl(a)?.origin;
95
+ return origin !== undefined && origin === parseUrl(b)?.origin;
96
+ }
97
+ /** An entry whose URL is not its project's is an anomaly, reported and not corrected. */
98
+ export function warnUrlAnomaly(name, url, project) {
99
+ if (project.url == null || sameOrigin(url, project.url))
100
+ return;
101
+ writeWarning(new MeiliCliError("cli_config", `The URL of \`${name}\`, ${url}, is not the URL Meilisearch Cloud gives for project ${project.id}, ${project.url}. The entry keeps its URL.`));
102
+ }
103
+ /** The statuses a project creation stops at: the project serves, or its creation failed. */
104
+ const FINAL_PROJECT_STATUSES = new Set(["running", "failed"]);
105
+ /**
106
+ * Polls `GET /api/v2/projects/{id}` until `running` or `failed`, 1 s apart
107
+ * growing to 5 s: creating a project takes minutes. The project comes back
108
+ * without its master key. Throws `cli_timeout` when the deadline passes.
109
+ */
110
+ export function waitForProject(client, id, options) {
111
+ return pollUntil(() => getApiV2ProjectsById({ client, path: { id } }), (current) => FINAL_PROJECT_STATUSES.has(current.status), () => new MeiliCliError("cli_timeout", `Project ${id} did not reach status running or failed within ${formatDuration(options.timeoutMs)}. Its creation goes on on the server.`, { hint: `Run \`meili get projects --id ${id}\` to check its status.` }), { ...options, initialIntervalMs: 1000, maxIntervalMs: 5000 });
112
+ }
113
+ //# sourceMappingURL=cloud-sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloud-sync.js","sourceRoot":"","sources":["../../src/lib/cloud-sync.ts"],"names":[],"mappings":"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"}