@superlayer/cli 1.0.67

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 (329) hide show
  1. package/LICENSE.md +202 -0
  2. package/NOTICE +4 -0
  3. package/README.md +67 -0
  4. package/bin/index.js +3 -0
  5. package/dist/auth/index.d.ts +4 -0
  6. package/dist/auth/index.d.ts.map +1 -0
  7. package/dist/auth/index.js +103 -0
  8. package/dist/auth/index.js.map +1 -0
  9. package/dist/commands/app/delete.d.ts +7 -0
  10. package/dist/commands/app/delete.d.ts.map +1 -0
  11. package/dist/commands/app/delete.js +57 -0
  12. package/dist/commands/app/delete.js.map +1 -0
  13. package/dist/commands/app/list.d.ts +6 -0
  14. package/dist/commands/app/list.d.ts.map +1 -0
  15. package/dist/commands/app/list.js +29 -0
  16. package/dist/commands/app/list.js.map +1 -0
  17. package/dist/commands/auth/client/add.d.ts +9 -0
  18. package/dist/commands/auth/client/add.d.ts.map +1 -0
  19. package/dist/commands/auth/client/add.js +409 -0
  20. package/dist/commands/auth/client/add.js.map +1 -0
  21. package/dist/commands/auth/client/delete.d.ts +11 -0
  22. package/dist/commands/auth/client/delete.d.ts.map +1 -0
  23. package/dist/commands/auth/client/delete.js +48 -0
  24. package/dist/commands/auth/client/delete.js.map +1 -0
  25. package/dist/commands/auth/client/list.d.ts +6 -0
  26. package/dist/commands/auth/client/list.d.ts.map +1 -0
  27. package/dist/commands/auth/client/list.js +38 -0
  28. package/dist/commands/auth/client/list.js.map +1 -0
  29. package/dist/commands/auth/client/shared.d.ts +70 -0
  30. package/dist/commands/auth/client/shared.d.ts.map +1 -0
  31. package/dist/commands/auth/client/shared.js +140 -0
  32. package/dist/commands/auth/client/shared.js.map +1 -0
  33. package/dist/commands/auth/client/update.d.ts +8 -0
  34. package/dist/commands/auth/client/update.d.ts.map +1 -0
  35. package/dist/commands/auth/client/update.js +445 -0
  36. package/dist/commands/auth/client/update.js.map +1 -0
  37. package/dist/commands/auth/email/pull.d.ts +24 -0
  38. package/dist/commands/auth/email/pull.d.ts.map +1 -0
  39. package/dist/commands/auth/email/pull.js +100 -0
  40. package/dist/commands/auth/email/pull.js.map +1 -0
  41. package/dist/commands/auth/email/push.d.ts +8 -0
  42. package/dist/commands/auth/email/push.d.ts.map +1 -0
  43. package/dist/commands/auth/email/push.js +58 -0
  44. package/dist/commands/auth/email/push.js.map +1 -0
  45. package/dist/commands/auth/email/resend.d.ts +3 -0
  46. package/dist/commands/auth/email/resend.d.ts.map +1 -0
  47. package/dist/commands/auth/email/resend.js +7 -0
  48. package/dist/commands/auth/email/resend.js.map +1 -0
  49. package/dist/commands/auth/email/reset.d.ts +5 -0
  50. package/dist/commands/auth/email/reset.d.ts.map +1 -0
  51. package/dist/commands/auth/email/reset.js +25 -0
  52. package/dist/commands/auth/email/reset.js.map +1 -0
  53. package/dist/commands/auth/email/status.d.ts +57 -0
  54. package/dist/commands/auth/email/status.d.ts.map +1 -0
  55. package/dist/commands/auth/email/status.js +96 -0
  56. package/dist/commands/auth/email/status.js.map +1 -0
  57. package/dist/commands/auth/email/verify.d.ts +5 -0
  58. package/dist/commands/auth/email/verify.d.ts.map +1 -0
  59. package/dist/commands/auth/email/verify.js +12 -0
  60. package/dist/commands/auth/email/verify.js.map +1 -0
  61. package/dist/commands/auth/origin/add.d.ts +12 -0
  62. package/dist/commands/auth/origin/add.d.ts.map +1 -0
  63. package/dist/commands/auth/origin/add.js +153 -0
  64. package/dist/commands/auth/origin/add.js.map +1 -0
  65. package/dist/commands/auth/origin/delete.d.ts +8 -0
  66. package/dist/commands/auth/origin/delete.d.ts.map +1 -0
  67. package/dist/commands/auth/origin/delete.js +38 -0
  68. package/dist/commands/auth/origin/delete.js.map +1 -0
  69. package/dist/commands/auth/origin/list.d.ts +9 -0
  70. package/dist/commands/auth/origin/list.d.ts.map +1 -0
  71. package/dist/commands/auth/origin/list.js +52 -0
  72. package/dist/commands/auth/origin/list.js.map +1 -0
  73. package/dist/commands/backup/download.d.ts +10 -0
  74. package/dist/commands/backup/download.d.ts.map +1 -0
  75. package/dist/commands/backup/download.js +174 -0
  76. package/dist/commands/backup/download.js.map +1 -0
  77. package/dist/commands/backup/list.d.ts +11 -0
  78. package/dist/commands/backup/list.d.ts.map +1 -0
  79. package/dist/commands/backup/list.js +74 -0
  80. package/dist/commands/backup/list.js.map +1 -0
  81. package/dist/commands/claim.d.ts +6 -0
  82. package/dist/commands/claim.d.ts.map +1 -0
  83. package/dist/commands/claim.js +22 -0
  84. package/dist/commands/claim.js.map +1 -0
  85. package/dist/commands/explorer.d.ts +6 -0
  86. package/dist/commands/explorer.d.ts.map +1 -0
  87. package/dist/commands/explorer.js +13 -0
  88. package/dist/commands/explorer.js.map +1 -0
  89. package/dist/commands/info.d.ts +9 -0
  90. package/dist/commands/info.d.ts.map +1 -0
  91. package/dist/commands/info.js +41 -0
  92. package/dist/commands/info.js.map +1 -0
  93. package/dist/commands/init.d.ts +5 -0
  94. package/dist/commands/init.d.ts.map +1 -0
  95. package/dist/commands/init.js +41 -0
  96. package/dist/commands/init.js.map +1 -0
  97. package/dist/commands/initWithoutFiles.d.ts +6 -0
  98. package/dist/commands/initWithoutFiles.d.ts.map +1 -0
  99. package/dist/commands/initWithoutFiles.js +64 -0
  100. package/dist/commands/initWithoutFiles.js.map +1 -0
  101. package/dist/commands/login.d.ts +9 -0
  102. package/dist/commands/login.d.ts.map +1 -0
  103. package/dist/commands/login.js +44 -0
  104. package/dist/commands/login.js.map +1 -0
  105. package/dist/commands/logout.d.ts +3 -0
  106. package/dist/commands/logout.d.ts.map +1 -0
  107. package/dist/commands/logout.js +14 -0
  108. package/dist/commands/logout.js.map +1 -0
  109. package/dist/commands/pull.d.ts +5 -0
  110. package/dist/commands/pull.d.ts.map +1 -0
  111. package/dist/commands/pull.js +15 -0
  112. package/dist/commands/pull.js.map +1 -0
  113. package/dist/commands/push.d.ts +6 -0
  114. package/dist/commands/push.d.ts.map +1 -0
  115. package/dist/commands/push.js +20 -0
  116. package/dist/commands/push.js.map +1 -0
  117. package/dist/commands/query.d.ts +7 -0
  118. package/dist/commands/query.d.ts.map +1 -0
  119. package/dist/commands/query.js +52 -0
  120. package/dist/commands/query.js.map +1 -0
  121. package/dist/commands/webhooks/add.d.ts +9 -0
  122. package/dist/commands/webhooks/add.d.ts.map +1 -0
  123. package/dist/commands/webhooks/add.js +75 -0
  124. package/dist/commands/webhooks/add.js.map +1 -0
  125. package/dist/commands/webhooks/delete.d.ts +6 -0
  126. package/dist/commands/webhooks/delete.d.ts.map +1 -0
  127. package/dist/commands/webhooks/delete.js +17 -0
  128. package/dist/commands/webhooks/delete.js.map +1 -0
  129. package/dist/commands/webhooks/disable.d.ts +7 -0
  130. package/dist/commands/webhooks/disable.d.ts.map +1 -0
  131. package/dist/commands/webhooks/disable.js +18 -0
  132. package/dist/commands/webhooks/disable.js.map +1 -0
  133. package/dist/commands/webhooks/enable.d.ts +6 -0
  134. package/dist/commands/webhooks/enable.d.ts.map +1 -0
  135. package/dist/commands/webhooks/enable.js +18 -0
  136. package/dist/commands/webhooks/enable.js.map +1 -0
  137. package/dist/commands/webhooks/events/list.d.ts +7 -0
  138. package/dist/commands/webhooks/events/list.d.ts.map +1 -0
  139. package/dist/commands/webhooks/events/list.js +31 -0
  140. package/dist/commands/webhooks/events/list.js.map +1 -0
  141. package/dist/commands/webhooks/events/payload.d.ts +8 -0
  142. package/dist/commands/webhooks/events/payload.d.ts.map +1 -0
  143. package/dist/commands/webhooks/events/payload.js +39 -0
  144. package/dist/commands/webhooks/events/payload.js.map +1 -0
  145. package/dist/commands/webhooks/events/resend.d.ts +8 -0
  146. package/dist/commands/webhooks/events/resend.d.ts.map +1 -0
  147. package/dist/commands/webhooks/events/resend.js +43 -0
  148. package/dist/commands/webhooks/events/resend.js.map +1 -0
  149. package/dist/commands/webhooks/list.d.ts +8 -0
  150. package/dist/commands/webhooks/list.d.ts.map +1 -0
  151. package/dist/commands/webhooks/list.js +29 -0
  152. package/dist/commands/webhooks/list.js.map +1 -0
  153. package/dist/commands/webhooks/shared.d.ts +40 -0
  154. package/dist/commands/webhooks/shared.d.ts.map +1 -0
  155. package/dist/commands/webhooks/shared.js +248 -0
  156. package/dist/commands/webhooks/shared.js.map +1 -0
  157. package/dist/commands/webhooks/update.d.ts +10 -0
  158. package/dist/commands/webhooks/update.d.ts.map +1 -0
  159. package/dist/commands/webhooks/update.js +189 -0
  160. package/dist/commands/webhooks/update.js.map +1 -0
  161. package/dist/context/authToken.d.ts +29 -0
  162. package/dist/context/authToken.d.ts.map +1 -0
  163. package/dist/context/authToken.js +73 -0
  164. package/dist/context/authToken.js.map +1 -0
  165. package/dist/context/currentApp.d.ts +38 -0
  166. package/dist/context/currentApp.d.ts.map +1 -0
  167. package/dist/context/currentApp.js +222 -0
  168. package/dist/context/currentApp.js.map +1 -0
  169. package/dist/context/globalOpts.d.ts +11 -0
  170. package/dist/context/globalOpts.d.ts.map +1 -0
  171. package/dist/context/globalOpts.js +13 -0
  172. package/dist/context/globalOpts.js.map +1 -0
  173. package/dist/context/platformApi.d.ts +19 -0
  174. package/dist/context/platformApi.d.ts.map +1 -0
  175. package/dist/context/platformApi.js +24 -0
  176. package/dist/context/platformApi.js.map +1 -0
  177. package/dist/context/projectInfo.d.ts +30 -0
  178. package/dist/context/projectInfo.d.ts.map +1 -0
  179. package/dist/context/projectInfo.js +152 -0
  180. package/dist/context/projectInfo.js.map +1 -0
  181. package/dist/errors.d.ts +10 -0
  182. package/dist/errors.d.ts.map +1 -0
  183. package/dist/errors.js +6 -0
  184. package/dist/errors.js.map +1 -0
  185. package/dist/index.d.ts +159 -0
  186. package/dist/index.d.ts.map +1 -0
  187. package/dist/index.js +714 -0
  188. package/dist/index.js.map +1 -0
  189. package/dist/layer.d.ts +25 -0
  190. package/dist/layer.d.ts.map +1 -0
  191. package/dist/layer.js +119 -0
  192. package/dist/layer.js.map +1 -0
  193. package/dist/lib/args.d.ts +212 -0
  194. package/dist/lib/args.d.ts.map +1 -0
  195. package/dist/lib/args.js +313 -0
  196. package/dist/lib/args.js.map +1 -0
  197. package/dist/lib/backupDownload.d.ts +21 -0
  198. package/dist/lib/backupDownload.d.ts.map +1 -0
  199. package/dist/lib/backupDownload.js +151 -0
  200. package/dist/lib/backupDownload.js.map +1 -0
  201. package/dist/lib/backups.d.ts +12 -0
  202. package/dist/lib/backups.d.ts.map +1 -0
  203. package/dist/lib/backups.js +26 -0
  204. package/dist/lib/backups.js.map +1 -0
  205. package/dist/lib/config.d.ts +6 -0
  206. package/dist/lib/config.d.ts.map +1 -0
  207. package/dist/lib/config.js +39 -0
  208. package/dist/lib/config.js.map +1 -0
  209. package/dist/lib/createApp.d.ts +12 -0
  210. package/dist/lib/createApp.d.ts.map +1 -0
  211. package/dist/lib/createApp.js +15 -0
  212. package/dist/lib/createApp.js.map +1 -0
  213. package/dist/lib/email.d.ts +47 -0
  214. package/dist/lib/email.d.ts.map +1 -0
  215. package/dist/lib/email.js +71 -0
  216. package/dist/lib/email.js.map +1 -0
  217. package/dist/lib/handleEnv.d.ts +7 -0
  218. package/dist/lib/handleEnv.d.ts.map +1 -0
  219. package/dist/lib/handleEnv.js +99 -0
  220. package/dist/lib/handleEnv.js.map +1 -0
  221. package/dist/lib/http.d.ts +30 -0
  222. package/dist/lib/http.d.ts.map +1 -0
  223. package/dist/lib/http.js +55 -0
  224. package/dist/lib/http.js.map +1 -0
  225. package/dist/lib/login.d.ts +12 -0
  226. package/dist/lib/login.d.ts.map +1 -0
  227. package/dist/lib/login.js +38 -0
  228. package/dist/lib/login.js.map +1 -0
  229. package/dist/lib/oauth.d.ts +306 -0
  230. package/dist/lib/oauth.d.ts.map +1 -0
  231. package/dist/lib/oauth.js +195 -0
  232. package/dist/lib/oauth.js.map +1 -0
  233. package/dist/lib/platformApi.d.ts +5 -0
  234. package/dist/lib/platformApi.d.ts.map +1 -0
  235. package/dist/lib/platformApi.js +11 -0
  236. package/dist/lib/platformApi.js.map +1 -0
  237. package/dist/lib/pullPerms.d.ts +7 -0
  238. package/dist/lib/pullPerms.d.ts.map +1 -0
  239. package/dist/lib/pullPerms.js +41 -0
  240. package/dist/lib/pullPerms.js.map +1 -0
  241. package/dist/lib/pullSchema.d.ts +12 -0
  242. package/dist/lib/pullSchema.d.ts.map +1 -0
  243. package/dist/lib/pullSchema.js +62 -0
  244. package/dist/lib/pullSchema.js.map +1 -0
  245. package/dist/lib/pushPerms.d.ts +13 -0
  246. package/dist/lib/pushPerms.d.ts.map +1 -0
  247. package/dist/lib/pushPerms.js +54 -0
  248. package/dist/lib/pushPerms.js.map +1 -0
  249. package/dist/lib/pushSchema.d.ts +53 -0
  250. package/dist/lib/pushSchema.d.ts.map +1 -0
  251. package/dist/lib/pushSchema.js +165 -0
  252. package/dist/lib/pushSchema.js.map +1 -0
  253. package/dist/lib/ui.d.ts +18 -0
  254. package/dist/lib/ui.d.ts.map +1 -0
  255. package/dist/lib/ui.js +32 -0
  256. package/dist/lib/ui.js.map +1 -0
  257. package/dist/lib/webhooks.d.ts +27 -0
  258. package/dist/lib/webhooks.d.ts.map +1 -0
  259. package/dist/lib/webhooks.js +95 -0
  260. package/dist/lib/webhooks.js.map +1 -0
  261. package/dist/logging.d.ts +5 -0
  262. package/dist/logging.d.ts.map +1 -0
  263. package/dist/logging.js +25 -0
  264. package/dist/logging.js.map +1 -0
  265. package/dist/old.d.ts +17 -0
  266. package/dist/old.d.ts.map +1 -0
  267. package/dist/old.js +410 -0
  268. package/dist/old.js.map +1 -0
  269. package/dist/program.d.ts +3 -0
  270. package/dist/program.d.ts.map +1 -0
  271. package/dist/program.js +3 -0
  272. package/dist/program.js.map +1 -0
  273. package/dist/renderSchemaPlan.d.ts +19 -0
  274. package/dist/renderSchemaPlan.d.ts.map +1 -0
  275. package/dist/renderSchemaPlan.js +220 -0
  276. package/dist/renderSchemaPlan.js.map +1 -0
  277. package/dist/ui/index.d.ts +292 -0
  278. package/dist/ui/index.d.ts.map +1 -0
  279. package/dist/ui/index.js +1296 -0
  280. package/dist/ui/index.js.map +1 -0
  281. package/dist/ui/lib.d.ts +124 -0
  282. package/dist/ui/lib.d.ts.map +1 -0
  283. package/dist/ui/lib.js +333 -0
  284. package/dist/ui/lib.js.map +1 -0
  285. package/dist/util/findConfigCandidates.d.ts +13 -0
  286. package/dist/util/findConfigCandidates.d.ts.map +1 -0
  287. package/dist/util/findConfigCandidates.js +211 -0
  288. package/dist/util/findConfigCandidates.js.map +1 -0
  289. package/dist/util/fs.d.ts +4 -0
  290. package/dist/util/fs.d.ts.map +1 -0
  291. package/dist/util/fs.js +22 -0
  292. package/dist/util/fs.js.map +1 -0
  293. package/dist/util/getAppName.d.ts +5 -0
  294. package/dist/util/getAppName.d.ts.map +1 -0
  295. package/dist/util/getAppName.js +14 -0
  296. package/dist/util/getAppName.js.map +1 -0
  297. package/dist/util/instantConfig.d.ts +9 -0
  298. package/dist/util/instantConfig.d.ts.map +1 -0
  299. package/dist/util/instantConfig.js +13 -0
  300. package/dist/util/instantConfig.js.map +1 -0
  301. package/dist/util/isHeadlessEnvironment.d.ts +4 -0
  302. package/dist/util/isHeadlessEnvironment.d.ts.map +1 -0
  303. package/dist/util/isHeadlessEnvironment.js +11 -0
  304. package/dist/util/isHeadlessEnvironment.js.map +1 -0
  305. package/dist/util/loadConfig.d.ts +3 -0
  306. package/dist/util/loadConfig.d.ts.map +1 -0
  307. package/dist/util/loadConfig.js +72 -0
  308. package/dist/util/loadConfig.js.map +1 -0
  309. package/dist/util/loadEnv.d.ts +2 -0
  310. package/dist/util/loadEnv.d.ts.map +1 -0
  311. package/dist/util/loadEnv.js +10 -0
  312. package/dist/util/loadEnv.js.map +1 -0
  313. package/dist/util/mergeSchema.d.ts +10 -0
  314. package/dist/util/mergeSchema.d.ts.map +1 -0
  315. package/dist/util/mergeSchema.js +338 -0
  316. package/dist/util/mergeSchema.js.map +1 -0
  317. package/dist/util/projectDir.d.ts +7 -0
  318. package/dist/util/projectDir.d.ts.map +1 -0
  319. package/dist/util/projectDir.js +43 -0
  320. package/dist/util/projectDir.js.map +1 -0
  321. package/dist/util/renamePrompt.d.ts +15 -0
  322. package/dist/util/renamePrompt.d.ts.map +1 -0
  323. package/dist/util/renamePrompt.js +57 -0
  324. package/dist/util/renamePrompt.js.map +1 -0
  325. package/dist/version.d.ts +3 -0
  326. package/dist/version.d.ts.map +1 -0
  327. package/dist/version.js +3 -0
  328. package/dist/version.js.map +1 -0
  329. package/package.json +96 -0
@@ -0,0 +1,95 @@
1
+ import { Effect } from 'effect';
2
+ import {} from '@superlayer/platform';
3
+ import { CurrentApp } from "../context/currentApp.js";
4
+ import { PlatformApiError } from "../context/platformApi.js";
5
+ import { BadArgsError } from "../errors.js";
6
+ import { getAuthedPlatformApi } from "./platformApi.js";
7
+ export const WEBHOOK_ACTIONS = [
8
+ 'create',
9
+ 'update',
10
+ 'delete',
11
+ ];
12
+ export const useWebhooksManager = (fun, errorMessage) => Effect.gen(function* () {
13
+ const api = yield* getAuthedPlatformApi;
14
+ const { appId } = yield* CurrentApp;
15
+ return yield* Effect.tryPromise({
16
+ try: () => fun(api.webhooks(appId).manager),
17
+ catch: (e) => new PlatformApiError({
18
+ message: errorMessage ?? 'Error using webhooks api',
19
+ cause: e,
20
+ }),
21
+ });
22
+ });
23
+ /**
24
+ * Yields a `WebhooksManager` instance scoped to the current app. Use when you
25
+ * need to hold on to the manager outside an Effect (e.g. to call from inside
26
+ * an async UI callback).
27
+ */
28
+ export const buildWebhooksManager = Effect.gen(function* () {
29
+ const api = yield* getAuthedPlatformApi;
30
+ const { appId } = yield* CurrentApp;
31
+ return api.webhooks(appId).manager;
32
+ });
33
+ /**
34
+ * Fetches the app's schema and returns the sorted list of namespace names. Returns
35
+ * `null` if the schema can't be fetched (network, auth, missing app, etc.) so
36
+ * callers can fall back to a plain text prompt.
37
+ */
38
+ export const getRemoteNamespaces = Effect.gen(function* () {
39
+ const api = yield* getAuthedPlatformApi;
40
+ const { appId } = yield* CurrentApp;
41
+ const result = yield* Effect.tryPromise(() => api.getSchema(appId)).pipe(Effect.orElseSucceed(() => null));
42
+ if (!result)
43
+ return null;
44
+ const entities = result.schema?.entities ?? {};
45
+ return Object.keys(entities).sort();
46
+ });
47
+ /**
48
+ * Pages through `manager.listEvents` until we have `limit` events or the server
49
+ * runs out. Returns the events in their natural (newest-first) order.
50
+ */
51
+ export const fetchRecentEvents = (webhookId, limit) => Effect.gen(function* () {
52
+ const collected = [];
53
+ let after;
54
+ while (collected.length < limit) {
55
+ const page = yield* useWebhooksManager((m) => m.listEvents(webhookId, after ? { after } : undefined), 'Error listing webhook events');
56
+ collected.push(...page.events);
57
+ if (!page.pageInfo.hasNextPage || !page.pageInfo.endCursor)
58
+ break;
59
+ after = page.pageInfo.endCursor;
60
+ }
61
+ return collected.slice(0, limit);
62
+ });
63
+ const splitCsv = (s) => s
64
+ .split(',')
65
+ .map((t) => t.trim())
66
+ .filter((t) => t.length > 0);
67
+ export const parseNamespaces = (raw) => Effect.gen(function* () {
68
+ if (raw === undefined)
69
+ return undefined;
70
+ const namespaces = splitCsv(raw);
71
+ if (namespaces.length === 0) {
72
+ return yield* BadArgsError.make({
73
+ message: '--namespaces must include at least one namespace',
74
+ });
75
+ }
76
+ return namespaces;
77
+ });
78
+ export const parseActions = (raw) => Effect.gen(function* () {
79
+ if (raw === undefined)
80
+ return undefined;
81
+ const tokens = splitCsv(raw);
82
+ if (tokens.length === 0) {
83
+ return yield* BadArgsError.make({
84
+ message: '--actions must include at least one action',
85
+ });
86
+ }
87
+ const invalid = tokens.filter((t) => !WEBHOOK_ACTIONS.includes(t));
88
+ if (invalid.length > 0) {
89
+ return yield* BadArgsError.make({
90
+ message: `Invalid action${invalid.length === 1 ? '' : 's'}: ${invalid.join(', ')}. Must be one of: ${WEBHOOK_ACTIONS.join(', ')}`,
91
+ });
92
+ }
93
+ return tokens;
94
+ });
95
+ //# sourceMappingURL=webhooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhooks.js","sourceRoot":"","sources":["../../src/lib/webhooks.ts"],"names":[],"mappings":"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","sourcesContent":["import { Effect } from 'effect';\nimport {\n type WebhookAction,\n type WebhookEventInfo,\n type WebhooksManager,\n} from '@superlayer/platform';\nimport { CurrentApp } from '../context/currentApp.ts';\nimport { PlatformApiError } from '../context/platformApi.ts';\nimport { BadArgsError } from '../errors.ts';\nimport { getAuthedPlatformApi } from './platformApi.ts';\n\nexport const WEBHOOK_ACTIONS: readonly WebhookAction[] = [\n 'create',\n 'update',\n 'delete',\n] as const;\n\nexport const useWebhooksManager = <R>(\n fun: (manager: WebhooksManager<any>) => Promise<R>,\n errorMessage?: string,\n) =>\n Effect.gen(function* () {\n const api = yield* getAuthedPlatformApi;\n const { appId } = yield* CurrentApp;\n return yield* Effect.tryPromise({\n try: () => fun(api.webhooks(appId).manager),\n catch: (e) =>\n new PlatformApiError({\n message: errorMessage ?? 'Error using webhooks api',\n cause: e,\n }),\n });\n });\n\n/**\n * Yields a `WebhooksManager` instance scoped to the current app. Use when you\n * need to hold on to the manager outside an Effect (e.g. to call from inside\n * an async UI callback).\n */\nexport const buildWebhooksManager = Effect.gen(function* () {\n const api = yield* getAuthedPlatformApi;\n const { appId } = yield* CurrentApp;\n return api.webhooks(appId).manager;\n});\n\n/**\n * Fetches the app's schema and returns the sorted list of namespace names. Returns\n * `null` if the schema can't be fetched (network, auth, missing app, etc.) so\n * callers can fall back to a plain text prompt.\n */\nexport const getRemoteNamespaces = Effect.gen(function* () {\n const api = yield* getAuthedPlatformApi;\n const { appId } = yield* CurrentApp;\n const result = yield* Effect.tryPromise(() => api.getSchema(appId)).pipe(\n Effect.orElseSucceed(() => null),\n );\n if (!result) return null;\n const entities = result.schema?.entities ?? {};\n return Object.keys(entities).sort();\n});\n\n/**\n * Pages through `manager.listEvents` until we have `limit` events or the server\n * runs out. Returns the events in their natural (newest-first) order.\n */\nexport const fetchRecentEvents = (webhookId: string, limit: number) =>\n Effect.gen(function* () {\n const collected: WebhookEventInfo[] = [];\n let after: string | undefined;\n while (collected.length < limit) {\n const page = yield* useWebhooksManager(\n (m) => m.listEvents(webhookId, after ? { after } : undefined),\n 'Error listing webhook events',\n );\n collected.push(...page.events);\n if (!page.pageInfo.hasNextPage || !page.pageInfo.endCursor) break;\n after = page.pageInfo.endCursor;\n }\n return collected.slice(0, limit);\n });\n\nconst splitCsv = (s: string) =>\n s\n .split(',')\n .map((t) => t.trim())\n .filter((t) => t.length > 0);\n\nexport const parseNamespaces = (raw: string | undefined) =>\n Effect.gen(function* () {\n if (raw === undefined) return undefined;\n const namespaces = splitCsv(raw);\n if (namespaces.length === 0) {\n return yield* BadArgsError.make({\n message: '--namespaces must include at least one namespace',\n });\n }\n return namespaces;\n });\n\nexport const parseActions = (raw: string | undefined) =>\n Effect.gen(function* () {\n if (raw === undefined) return undefined;\n const tokens = splitCsv(raw);\n if (tokens.length === 0) {\n return yield* BadArgsError.make({\n message: '--actions must include at least one action',\n });\n }\n const invalid = tokens.filter(\n (t): t is string => !WEBHOOK_ACTIONS.includes(t as WebhookAction),\n );\n if (invalid.length > 0) {\n return yield* BadArgsError.make({\n message: `Invalid action${invalid.length === 1 ? '' : 's'}: ${invalid.join(', ')}. Must be one of: ${WEBHOOK_ACTIONS.join(', ')}`,\n });\n }\n return tokens as WebhookAction[];\n });\n"]}
@@ -0,0 +1,5 @@
1
+ export declare function warn(firstArg: string, ...rest: any[]): void;
2
+ export declare function error(firstArg: string, ...rest: any[]): void;
3
+ export declare const SimpleLogLayer: import("effect/Layer").Layer<never, never, never>;
4
+ export declare const link: (url: string, text?: string) => string;
5
+ //# sourceMappingURL=logging.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logging.d.ts","sourceRoot":"","sources":["../src/logging.ts"],"names":[],"mappings":"AAKA,wBAAgB,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,QAEpD;AAED,wBAAgB,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,EAAE,QAErD;AAmBD,eAAO,MAAM,cAAc,mDAG1B,CAAC;AAEF,eAAO,MAAM,IAAI,GAAI,KAAK,MAAM,EAAE,OAAO,MAAM,KAAG,MAKjD,CAAC"}
@@ -0,0 +1,25 @@
1
+ import chalk from 'chalk';
2
+ import ansiEscapes from 'ansi-escapes';
3
+ import { HashMap, Logger, Match, Option } from 'effect';
4
+ import supportsHyperlinks from 'supports-hyperlinks';
5
+ export function warn(firstArg, ...rest) {
6
+ console.warn(chalk.yellow('[warning]') + ' ' + firstArg, ...rest);
7
+ }
8
+ export function error(firstArg, ...rest) {
9
+ console.error(chalk.red('[error]') + ' ' + firstArg, ...rest);
10
+ }
11
+ const simpleLogger = Logger.make(({ logLevel, message, annotations }) => {
12
+ const isSilent = HashMap.get(annotations, 'silent').pipe(Option.getOrNull);
13
+ if (isSilent)
14
+ return;
15
+ const formattedMessage = Array.isArray(message) ? message : [message];
16
+ Match.value(logLevel).pipe(Match.tag('Info', () => console.log(...formattedMessage)), Match.tag('Warning', () => console.warn(...formattedMessage)), Match.tag('Error', () => console.error(chalk.red('[error]'), ...formattedMessage)), Match.tag('Debug', () => console.debug(...formattedMessage)), Match.tag('Fatal', () => console.error(chalk.red('[error]'), ...formattedMessage)));
17
+ });
18
+ export const SimpleLogLayer = Logger.replace(Logger.defaultLogger, simpleLogger);
19
+ export const link = (url, text) => {
20
+ if (supportsHyperlinks.stdout) {
21
+ return ansiEscapes.link(text ?? url, url);
22
+ }
23
+ return text ?? url;
24
+ };
25
+ //# sourceMappingURL=logging.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logging.js","sourceRoot":"","sources":["../src/logging.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,WAAW,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxD,OAAO,kBAAkB,MAAM,qBAAqB,CAAC;AAErD,MAAM,UAAU,IAAI,CAAC,QAAgB,EAAE,GAAG,IAAW;IACnD,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,GAAG,GAAG,QAAQ,EAAE,GAAG,IAAI,CAAC,CAAC;AACpE,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,QAAgB,EAAE,GAAG,IAAW;IACpD,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,GAAG,GAAG,QAAQ,EAAE,GAAG,IAAI,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE;IACtE,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC3E,IAAI,QAAQ;QAAE,OAAO;IACrB,MAAM,gBAAgB,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IACtE,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CACxB,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,gBAAgB,CAAC,CAAC,EACzD,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,CAAC,EAC7D,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,CACtB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,GAAG,gBAAgB,CAAC,CACzD,EACD,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,gBAAgB,CAAC,CAAC,EAC5D,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,CACtB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,GAAG,gBAAgB,CAAC,CACzD,CACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,CAC1C,MAAM,CAAC,aAAa,EACpB,YAAY,CACb,CAAC;AAEF,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,GAAW,EAAE,IAAa,EAAU,EAAE;IACzD,IAAI,kBAAkB,CAAC,MAAM,EAAE,CAAC;QAC9B,OAAO,WAAW,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,EAAE,GAAG,CAAC,CAAC;IAC5C,CAAC;IACD,OAAO,IAAI,IAAI,GAAG,CAAC;AACrB,CAAC,CAAC","sourcesContent":["import chalk from 'chalk';\nimport ansiEscapes from 'ansi-escapes';\nimport { HashMap, Logger, Match, Option } from 'effect';\nimport supportsHyperlinks from 'supports-hyperlinks';\n\nexport function warn(firstArg: string, ...rest: any[]) {\n console.warn(chalk.yellow('[warning]') + ' ' + firstArg, ...rest);\n}\n\nexport function error(firstArg: string, ...rest: any[]) {\n console.error(chalk.red('[error]') + ' ' + firstArg, ...rest);\n}\n\nconst simpleLogger = Logger.make(({ logLevel, message, annotations }) => {\n const isSilent = HashMap.get(annotations, 'silent').pipe(Option.getOrNull);\n if (isSilent) return;\n const formattedMessage = Array.isArray(message) ? message : [message];\n Match.value(logLevel).pipe(\n Match.tag('Info', () => console.log(...formattedMessage)),\n Match.tag('Warning', () => console.warn(...formattedMessage)),\n Match.tag('Error', () =>\n console.error(chalk.red('[error]'), ...formattedMessage),\n ),\n Match.tag('Debug', () => console.debug(...formattedMessage)),\n Match.tag('Fatal', () =>\n console.error(chalk.red('[error]'), ...formattedMessage),\n ),\n );\n});\n\nexport const SimpleLogLayer = Logger.replace(\n Logger.defaultLogger,\n simpleLogger,\n);\n\nexport const link = (url: string, text?: string): string => {\n if (supportsHyperlinks.stdout) {\n return ansiEscapes.link(text ?? url, url);\n }\n return text ?? url;\n};\n"]}
package/dist/old.d.ts ADDED
@@ -0,0 +1,17 @@
1
+ export function waitForIndexingJobsToFinish(appId: any, data: any, authToken: any, apiURI: any): Promise<void>;
2
+ export function readLocalPermsFile(): Promise<{
3
+ path: string;
4
+ perms: any;
5
+ } | undefined>;
6
+ export function readLocalSchemaFile(): Promise<{
7
+ path: string;
8
+ schema: any;
9
+ } | undefined>;
10
+ export function readLocalEmailFile(emailPath: any): Promise<{
11
+ path: string;
12
+ email: any;
13
+ } | undefined>;
14
+ export function readConfigAuthTokenWithErrorLogging(apiURI: any): Promise<any>;
15
+ export function countEntities(o: any): number;
16
+ export function resolveRenames(created: any, promptData: any, extraInfo: any): Promise<string | import("./util/renamePrompt.ts").RenamePromptItem<string>>;
17
+ //# sourceMappingURL=old.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"old.d.ts","sourceRoot":"","sources":["../src/old.js"],"names":[],"mappings":"AAsLA,+GA2FC;AAmID;;;eASC;AAED;;;eASC;AAED;;;eASC;AAiCD,+EAQC;AAQD,8CAEC;AAnNM,2JAoBN"}
package/dist/old.js ADDED
@@ -0,0 +1,410 @@
1
+ import boxen from 'boxen';
2
+ import chalk from 'chalk';
3
+ import { program } from '@commander-js/extra-typings';
4
+ import path from 'node:path';
5
+ import { readAuthToken } from "./auth/index.js";
6
+ import { UI } from "./ui/index.js";
7
+ import { deferred, renderUnwrap } from "./ui/lib.js";
8
+ import { getEmailReadCandidates, getPermsReadCandidates, getSchemaReadCandidates, } from "./util/findConfigCandidates.js";
9
+ import { loadConfig } from "./util/loadConfig.js";
10
+ import { ResolveRenamePrompt } from "./util/renamePrompt.js";
11
+ import version from './version.js';
12
+ import { link } from "./logging.js";
13
+ const dev = Boolean(process.env.INSTANT_CLI_DEV);
14
+ const verbose = Boolean(process.env.INSTANT_CLI_VERBOSE);
15
+ function error(firstArg, ...rest) {
16
+ console.error(chalk.red('[error]') + ' ' + firstArg, ...rest);
17
+ }
18
+ const potentialAdminTokenEnvs = {
19
+ default: 'INSTANT_APP_ADMIN_TOKEN',
20
+ short: 'INSTANT_ADMIN_TOKEN',
21
+ };
22
+ const instantDashOrigin = dev
23
+ ? 'http://localhost:3000'
24
+ : 'https://interfacedb.com';
25
+ function indexingJobCompletedActionMessage(job) {
26
+ if (job.job_type === 'check-data-type') {
27
+ return `setting type of ${job.attr_name} to ${job.checked_data_type}`;
28
+ }
29
+ if (job.job_type === 'remove-data-type') {
30
+ return `removing type from ${job.attr_name}`;
31
+ }
32
+ if (job.job_type === 'index') {
33
+ return `adding index to ${job.attr_name}`;
34
+ }
35
+ if (job.job_type === 'remove-index') {
36
+ return `removing index from ${job.attr_name}`;
37
+ }
38
+ if (job.job_type === 'unique') {
39
+ return `adding uniqueness constraint to ${job.attr_name}`;
40
+ }
41
+ if (job.job_type === 'remove-unique') {
42
+ return `removing uniqueness constraint from ${job.attr_name}`;
43
+ }
44
+ if (job.job_type === 'required') {
45
+ return `adding required constraint to ${job.attr_name}`;
46
+ }
47
+ if (job.job_type === 'remove-required') {
48
+ return `removing required constraint from ${job.attr_name}`;
49
+ }
50
+ return `unexpected job type ${job.job_type} - please ping us on discord with this job id (${job.id})`;
51
+ }
52
+ function truncate(s, maxLen) {
53
+ if (s.length > maxLen) {
54
+ return `${s.substr(0, maxLen - 3)}...`;
55
+ }
56
+ return s;
57
+ }
58
+ function formatSamples(triples_samples) {
59
+ return triples_samples.slice(0, 3).map((t) => {
60
+ return { ...t, value: truncate(JSON.stringify(t.value), 32) };
61
+ });
62
+ }
63
+ function createUrl(triple, job) {
64
+ const urlParams = new URLSearchParams({
65
+ s: 'main',
66
+ app: job.app_id,
67
+ t: 'explorer',
68
+ ns: job.attr_name.split('.')[0],
69
+ where: JSON.stringify(['id', triple.entity_id]),
70
+ });
71
+ const url = new URL(instantDashOrigin);
72
+ url.pathname = '/dash';
73
+ url.search = urlParams.toString();
74
+ return url;
75
+ }
76
+ function padCell(value, width) {
77
+ const trimmed = value.length > width ? value.substring(0, width) : value;
78
+ return trimmed + ' '.repeat(width - trimmed.length);
79
+ }
80
+ function indexingJobCompletedMessage(job) {
81
+ const actionMessage = indexingJobCompletedActionMessage(job);
82
+ if (job.job_status === 'canceled') {
83
+ return `Canceled ${actionMessage} before it could finish.`;
84
+ }
85
+ if (job.job_status === 'completed') {
86
+ return `Finished ${actionMessage}.`;
87
+ }
88
+ if (job.job_status === 'errored') {
89
+ if (job.invalid_triples_sample?.length) {
90
+ const [etype, label] = job.attr_name.split('.');
91
+ const samples = formatSamples(job.invalid_triples_sample);
92
+ const longestValue = samples.reduce((acc, { value }) => Math.max(acc, value.length), label.length);
93
+ const columns = [
94
+ { header: 'namespace', width: 15, getValue: () => etype },
95
+ {
96
+ header: 'id',
97
+ width: 37,
98
+ getValue: (triple) => link(createUrl(triple, job).toString(), triple.entity_id),
99
+ },
100
+ {
101
+ header: label,
102
+ width: longestValue + 2,
103
+ getValue: (triple) => triple.value,
104
+ },
105
+ { header: 'type', width: 8, getValue: (triple) => triple.json_type },
106
+ ];
107
+ let msg = `${chalk.red('INVALID DATA')} ${actionMessage}.\n`;
108
+ if (job.invalid_unique_value) {
109
+ msg += ` Found multiple entities with value ${truncate(JSON.stringify(job.invalid_unique_value), 64)}.\n`;
110
+ }
111
+ if (job.error === 'triple-too-large-error') {
112
+ msg += ` Some of the existing data is too large to index.\n`;
113
+ }
114
+ msg += ` First few examples:\n`;
115
+ msg += ` ${columns.map((col) => chalk.bold(padCell(col.header, col.width))).join(' | ')}\n`;
116
+ msg += ` ${columns.map((col) => '-'.repeat(col.width)).join('-|-')}\n`;
117
+ for (const triple of samples) {
118
+ const cells = columns.map((col) => padCell(col.getValue(triple), col.width));
119
+ msg += ` ${cells.join(' | ')}\n`;
120
+ }
121
+ return msg;
122
+ }
123
+ return `Error ${actionMessage}.`;
124
+ }
125
+ }
126
+ function joinInSentence(items) {
127
+ if (items.length === 0) {
128
+ return '';
129
+ }
130
+ if (items.length === 1) {
131
+ return items[0];
132
+ }
133
+ if (items.length === 2) {
134
+ return `${items[0]} and ${items[1]}`;
135
+ }
136
+ return `${items.slice(0, -1).join(', ')}, and ${items[items.length - 1]}`;
137
+ }
138
+ function jobGroupDescription(jobs) {
139
+ const actions = new Set();
140
+ const jobActions = {
141
+ 'check-data-type': 'updating types',
142
+ 'remove-data-type': 'updating types',
143
+ index: 'updating indexes',
144
+ 'remove-index': 'updating indexes',
145
+ unique: 'updating uniqueness constraints',
146
+ 'remove-unique': 'updating uniqueness constraints',
147
+ required: 'making attributes required',
148
+ 'remove-required': 'making attributes optional',
149
+ };
150
+ for (const job of jobs) {
151
+ actions.add(jobActions[job.job_type]);
152
+ }
153
+ return joinInSentence([...actions].sort()) || 'updating schema';
154
+ }
155
+ // TODO: rewrite in effect
156
+ export async function waitForIndexingJobsToFinish(appId, data, authToken, apiURI) {
157
+ const spinnerDefferedPromise = deferred();
158
+ const spinner = new UI.Spinner({
159
+ promise: spinnerDefferedPromise.promise,
160
+ });
161
+ const spinnerRenderPromise = renderUnwrap(spinner);
162
+ const groupId = data['group-id'];
163
+ let jobs = data.jobs;
164
+ let waitMs = 20;
165
+ let lastUpdatedAt = new Date(0);
166
+ const completedIds = new Set();
167
+ const errorMessages = [];
168
+ while (true) {
169
+ let stillRunning = false;
170
+ let updated = false;
171
+ let workEstimateTotal = 0;
172
+ let workCompletedTotal = 0;
173
+ for (const job of jobs) {
174
+ const updatedAt = new Date(job.updated_at);
175
+ if (updatedAt > lastUpdatedAt) {
176
+ updated = true;
177
+ lastUpdatedAt = updatedAt;
178
+ }
179
+ if (job.job_status === 'waiting' || job.job_status === 'processing') {
180
+ stillRunning = true;
181
+ // Default estimate to high value to prevent % from jumping around
182
+ workEstimateTotal += job.work_estimate ?? 50000;
183
+ workCompletedTotal += job.work_completed ?? 0;
184
+ }
185
+ else {
186
+ if (!completedIds.has(job.id)) {
187
+ completedIds.add(job.id);
188
+ const msg = indexingJobCompletedMessage(job);
189
+ if (msg) {
190
+ if (job.job_status === 'errored') {
191
+ spinner.addMessage(msg);
192
+ errorMessages.push(msg);
193
+ }
194
+ else {
195
+ spinner.addMessage(msg);
196
+ }
197
+ }
198
+ }
199
+ }
200
+ }
201
+ if (!stillRunning) {
202
+ break;
203
+ }
204
+ if (workEstimateTotal) {
205
+ const percent = Math.floor((workCompletedTotal / workEstimateTotal) * 100);
206
+ spinner.updateText(`${jobGroupDescription(jobs)} ${percent}%`);
207
+ }
208
+ waitMs = updated ? 1 : Math.min(10000, waitMs * 2);
209
+ await sleep(waitMs);
210
+ const res = await fetchJson({
211
+ debugName: 'Check indexing status',
212
+ method: 'GET',
213
+ authToken,
214
+ apiURI,
215
+ path: `/dash/apps/${appId}/indexing-jobs/group/${groupId}`,
216
+ errorMessage: 'Failed to check indexing status.',
217
+ command: 'push',
218
+ });
219
+ if (!res.ok) {
220
+ break;
221
+ }
222
+ jobs = res.data.jobs;
223
+ }
224
+ spinnerDefferedPromise.resolve(null);
225
+ await spinnerRenderPromise;
226
+ // Log errors at the end so that they're easier to see.
227
+ if (errorMessages.length) {
228
+ for (const msg of errorMessages) {
229
+ console.log(msg);
230
+ }
231
+ console.log(chalk.red('Some steps failed while updating schema.'));
232
+ process.exit(1);
233
+ }
234
+ }
235
+ export const resolveRenames = async (created, promptData, extraInfo) => {
236
+ const answer = await renderUnwrap(new ResolveRenamePrompt(created, promptData, extraInfo, UI.modifiers.piped([
237
+ (out) => boxen(out, {
238
+ dimBorder: true,
239
+ padding: {
240
+ left: 1,
241
+ right: 1,
242
+ },
243
+ }),
244
+ UI.modifiers.vanishOnComplete,
245
+ ])));
246
+ return answer;
247
+ };
248
+ /**
249
+ * Fetches JSON data from a specified path using the POST method.
250
+ *
251
+ * @param {Object} options
252
+ * @param {string} options.debugName
253
+ * @param {string} options.errorMessage
254
+ * @param {string} options.path
255
+ * @param {'POST' | 'GET'} [options.method]
256
+ * @param {Object} [options.body=undefined]
257
+ * @param {boolean} [options.noAuth]
258
+ * @param {boolean} [options.noLogError]
259
+ * @param {string} [options.command] - The CLI command being executed (e.g., 'push', 'pull', 'login')
260
+ * @param {string} [options.authToken] - Optional auth token to use instead of reading from config
261
+ * @param {string} options.apiURI - Backend API origin
262
+ * @param {Record<string, string>} [options.headers] - Extra headers to include in the request
263
+ * @returns {Promise<{ ok: boolean; data: any }>}
264
+ */
265
+ async function fetchJson({ debugName, errorMessage, path, body, method, noAuth, noLogError, command, authToken: providedAuthToken, apiURI, headers: extraHeaders, }) {
266
+ const withAuth = !noAuth;
267
+ const withErrorLogging = !noLogError;
268
+ let authToken = null;
269
+ if (withAuth) {
270
+ authToken =
271
+ providedAuthToken ?? (await readConfigAuthTokenWithErrorLogging(apiURI));
272
+ if (!authToken) {
273
+ return { ok: false, data: undefined };
274
+ }
275
+ }
276
+ const timeoutMs = 1000 * 60 * 5; // 5 minutes
277
+ try {
278
+ const res = await fetch(`${apiURI}${path}`, {
279
+ method: method ?? 'GET',
280
+ headers: {
281
+ ...(withAuth ? { Authorization: `Bearer ${authToken}` } : {}),
282
+ 'Content-Type': 'application/json',
283
+ 'X-Instant-Source': '@superlayer/cli',
284
+ 'X-Instant-Version': version,
285
+ ...(command ? { 'X-Instant-Command': command } : {}),
286
+ ...extraHeaders,
287
+ },
288
+ body: body ? JSON.stringify(body) : undefined,
289
+ signal: AbortSignal.timeout(timeoutMs),
290
+ });
291
+ if (verbose) {
292
+ console.log(debugName, 'response:', res.status, res.statusText);
293
+ }
294
+ let data;
295
+ try {
296
+ data = await res.json();
297
+ }
298
+ catch {
299
+ data = null;
300
+ }
301
+ if (verbose && data) {
302
+ console.log(debugName, 'json:', JSON.stringify(data, null, 2));
303
+ }
304
+ if (!res.ok) {
305
+ if (withErrorLogging) {
306
+ error(errorMessage);
307
+ prettyPrintJSONErr(data);
308
+ }
309
+ return { ok: false, data };
310
+ }
311
+ return { ok: true, data };
312
+ }
313
+ catch (err) {
314
+ if (withErrorLogging) {
315
+ if (err.name === 'AbortError') {
316
+ error(`Timeout: It took more than ${timeoutMs / 60000} minutes to get the result.`);
317
+ }
318
+ else {
319
+ error(`Error: type: ${err.name}, message: ${err.message}`);
320
+ }
321
+ }
322
+ return { ok: false, data: null };
323
+ }
324
+ }
325
+ function prettyPrintJSONErr(data) {
326
+ if (data?.message) {
327
+ error(data.message);
328
+ }
329
+ if (Array.isArray(data?.hint?.errors)) {
330
+ for (const err of data.hint.errors) {
331
+ error(`${err.in ? err.in.join('->') + ': ' : ''}${err.message}`);
332
+ }
333
+ }
334
+ if (!data) {
335
+ error('Failed to parse error response');
336
+ }
337
+ }
338
+ export async function readLocalPermsFile() {
339
+ const readCandidates = getPermsReadCandidates();
340
+ const res = await loadConfig({
341
+ sources: readCandidates,
342
+ merge: false,
343
+ });
344
+ if (!res.config)
345
+ return;
346
+ const relativePath = path.relative(process.cwd(), res.sources[0]);
347
+ return { path: relativePath, perms: res.config };
348
+ }
349
+ export async function readLocalSchemaFile() {
350
+ const readCandidates = getSchemaReadCandidates();
351
+ const res = await loadConfig({
352
+ sources: readCandidates,
353
+ merge: false,
354
+ });
355
+ if (!res.config)
356
+ return;
357
+ const relativePath = path.relative(process.cwd(), res.sources[0]);
358
+ return { path: relativePath, schema: res.config };
359
+ }
360
+ export async function readLocalEmailFile(emailPath) {
361
+ const readCandidates = getEmailReadCandidates(emailPath);
362
+ const res = await loadConfig({
363
+ sources: readCandidates,
364
+ merge: false,
365
+ });
366
+ if (!res.config)
367
+ return;
368
+ const relativePath = path.relative(process.cwd(), res.sources[0]);
369
+ return { path: relativePath, email: res.config };
370
+ }
371
+ async function readConfigAuthToken(apiURI, allowAdminToken = true) {
372
+ const options = program.opts();
373
+ // @ts-expect-error command opts type is unknown
374
+ if (typeof options.token === 'string') {
375
+ // @ts-expect-error command opts type is unknown
376
+ return options.token;
377
+ }
378
+ if (process.env.INSTANT_CLI_AUTH_TOKEN) {
379
+ return process.env.INSTANT_CLI_AUTH_TOKEN;
380
+ }
381
+ if (allowAdminToken) {
382
+ const adminTokenNames = Object.values(potentialAdminTokenEnvs);
383
+ for (const envName of adminTokenNames) {
384
+ const token = process.env[envName];
385
+ if (token) {
386
+ return token;
387
+ }
388
+ }
389
+ }
390
+ const authToken = await readAuthToken(apiURI).catch(() => null);
391
+ if (authToken) {
392
+ return authToken;
393
+ }
394
+ return null;
395
+ }
396
+ export async function readConfigAuthTokenWithErrorLogging(apiURI) {
397
+ const token = await readConfigAuthToken(apiURI);
398
+ if (!token) {
399
+ error(`Looks like you are not logged in. Please log in with ${chalk.green('`instant-cli login`')}`);
400
+ }
401
+ return token;
402
+ }
403
+ // utils
404
+ function sleep(ms) {
405
+ return new Promise((resolve) => setTimeout(resolve, ms));
406
+ }
407
+ export function countEntities(o) {
408
+ return Object.keys(o).length;
409
+ }
410
+ //# sourceMappingURL=old.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"old.js","sourceRoot":"","sources":["../src/old.js"],"names":[],"mappings":"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","sourcesContent":["import boxen from 'boxen';\nimport chalk from 'chalk';\nimport { program } from '@commander-js/extra-typings';\nimport path from 'node:path';\nimport { readAuthToken } from './auth/index.ts';\nimport { UI } from './ui/index.ts';\nimport { deferred, renderUnwrap } from './ui/lib.ts';\nimport {\n getEmailReadCandidates,\n getPermsReadCandidates,\n getSchemaReadCandidates,\n} from './util/findConfigCandidates.ts';\nimport { loadConfig } from './util/loadConfig.ts';\nimport { ResolveRenamePrompt } from './util/renamePrompt.ts';\nimport version from './version.js';\nimport { link } from './logging.ts';\n\nconst dev = Boolean(process.env.INSTANT_CLI_DEV);\nconst verbose = Boolean(process.env.INSTANT_CLI_VERBOSE);\n\nfunction error(firstArg, ...rest) {\n console.error(chalk.red('[error]') + ' ' + firstArg, ...rest);\n}\n\nconst potentialAdminTokenEnvs = {\n default: 'INSTANT_APP_ADMIN_TOKEN',\n short: 'INSTANT_ADMIN_TOKEN',\n};\n\nconst instantDashOrigin = dev\n ? 'http://localhost:3000'\n : 'https://interfacedb.com';\n\nfunction indexingJobCompletedActionMessage(job) {\n if (job.job_type === 'check-data-type') {\n return `setting type of ${job.attr_name} to ${job.checked_data_type}`;\n }\n if (job.job_type === 'remove-data-type') {\n return `removing type from ${job.attr_name}`;\n }\n if (job.job_type === 'index') {\n return `adding index to ${job.attr_name}`;\n }\n if (job.job_type === 'remove-index') {\n return `removing index from ${job.attr_name}`;\n }\n if (job.job_type === 'unique') {\n return `adding uniqueness constraint to ${job.attr_name}`;\n }\n if (job.job_type === 'remove-unique') {\n return `removing uniqueness constraint from ${job.attr_name}`;\n }\n if (job.job_type === 'required') {\n return `adding required constraint to ${job.attr_name}`;\n }\n if (job.job_type === 'remove-required') {\n return `removing required constraint from ${job.attr_name}`;\n }\n return `unexpected job type ${job.job_type} - please ping us on discord with this job id (${job.id})`;\n}\n\nfunction truncate(s, maxLen) {\n if (s.length > maxLen) {\n return `${s.substr(0, maxLen - 3)}...`;\n }\n return s;\n}\n\nfunction formatSamples(triples_samples) {\n return triples_samples.slice(0, 3).map((t) => {\n return { ...t, value: truncate(JSON.stringify(t.value), 32) };\n });\n}\n\nfunction createUrl(triple, job) {\n const urlParams = new URLSearchParams({\n s: 'main',\n app: job.app_id,\n t: 'explorer',\n ns: job.attr_name.split('.')[0],\n where: JSON.stringify(['id', triple.entity_id]),\n });\n const url = new URL(instantDashOrigin);\n url.pathname = '/dash';\n url.search = urlParams.toString();\n return url;\n}\n\nfunction padCell(value, width) {\n const trimmed = value.length > width ? value.substring(0, width) : value;\n return trimmed + ' '.repeat(width - trimmed.length);\n}\n\nfunction indexingJobCompletedMessage(job) {\n const actionMessage = indexingJobCompletedActionMessage(job);\n if (job.job_status === 'canceled') {\n return `Canceled ${actionMessage} before it could finish.`;\n }\n if (job.job_status === 'completed') {\n return `Finished ${actionMessage}.`;\n }\n if (job.job_status === 'errored') {\n if (job.invalid_triples_sample?.length) {\n const [etype, label] = job.attr_name.split('.');\n const samples = formatSamples(job.invalid_triples_sample);\n const longestValue = samples.reduce(\n (acc, { value }) => Math.max(acc, value.length),\n label.length,\n );\n\n const columns = [\n { header: 'namespace', width: 15, getValue: () => etype },\n {\n header: 'id',\n width: 37,\n getValue: (triple) =>\n link(createUrl(triple, job).toString(), triple.entity_id),\n },\n {\n header: label,\n width: longestValue + 2,\n getValue: (triple) => triple.value,\n },\n { header: 'type', width: 8, getValue: (triple) => triple.json_type },\n ];\n\n let msg = `${chalk.red('INVALID DATA')} ${actionMessage}.\\n`;\n if (job.invalid_unique_value) {\n msg += ` Found multiple entities with value ${truncate(JSON.stringify(job.invalid_unique_value), 64)}.\\n`;\n }\n if (job.error === 'triple-too-large-error') {\n msg += ` Some of the existing data is too large to index.\\n`;\n }\n\n msg += ` First few examples:\\n`;\n msg += ` ${columns.map((col) => chalk.bold(padCell(col.header, col.width))).join(' | ')}\\n`;\n msg += ` ${columns.map((col) => '-'.repeat(col.width)).join('-|-')}\\n`;\n\n for (const triple of samples) {\n const cells = columns.map((col) =>\n padCell(col.getValue(triple), col.width),\n );\n msg += ` ${cells.join(' | ')}\\n`;\n }\n return msg;\n }\n return `Error ${actionMessage}.`;\n }\n}\n\nfunction joinInSentence(items) {\n if (items.length === 0) {\n return '';\n }\n if (items.length === 1) {\n return items[0];\n }\n if (items.length === 2) {\n return `${items[0]} and ${items[1]}`;\n }\n return `${items.slice(0, -1).join(', ')}, and ${items[items.length - 1]}`;\n}\n\nfunction jobGroupDescription(jobs) {\n const actions = new Set();\n const jobActions = {\n 'check-data-type': 'updating types',\n 'remove-data-type': 'updating types',\n index: 'updating indexes',\n 'remove-index': 'updating indexes',\n unique: 'updating uniqueness constraints',\n 'remove-unique': 'updating uniqueness constraints',\n required: 'making attributes required',\n 'remove-required': 'making attributes optional',\n };\n for (const job of jobs) {\n actions.add(jobActions[job.job_type]);\n }\n return joinInSentence([...actions].sort()) || 'updating schema';\n}\n\n// TODO: rewrite in effect\nexport async function waitForIndexingJobsToFinish(\n appId,\n data,\n authToken,\n apiURI,\n) {\n const spinnerDefferedPromise = deferred();\n const spinner = new UI.Spinner({\n promise: spinnerDefferedPromise.promise,\n });\n const spinnerRenderPromise = renderUnwrap(spinner);\n\n const groupId = data['group-id'];\n let jobs = data.jobs;\n let waitMs = 20;\n let lastUpdatedAt = new Date(0);\n\n const completedIds = new Set();\n\n const errorMessages = [];\n\n while (true) {\n let stillRunning = false;\n let updated = false;\n let workEstimateTotal = 0;\n let workCompletedTotal = 0;\n\n for (const job of jobs) {\n const updatedAt = new Date(job.updated_at);\n if (updatedAt > lastUpdatedAt) {\n updated = true;\n lastUpdatedAt = updatedAt;\n }\n if (job.job_status === 'waiting' || job.job_status === 'processing') {\n stillRunning = true;\n // Default estimate to high value to prevent % from jumping around\n workEstimateTotal += job.work_estimate ?? 50000;\n workCompletedTotal += job.work_completed ?? 0;\n } else {\n if (!completedIds.has(job.id)) {\n completedIds.add(job.id);\n const msg = indexingJobCompletedMessage(job);\n if (msg) {\n if (job.job_status === 'errored') {\n spinner.addMessage(msg);\n errorMessages.push(msg);\n } else {\n spinner.addMessage(msg);\n }\n }\n }\n }\n }\n if (!stillRunning) {\n break;\n }\n if (workEstimateTotal) {\n const percent = Math.floor(\n (workCompletedTotal / workEstimateTotal) * 100,\n );\n spinner.updateText(`${jobGroupDescription(jobs)} ${percent}%`);\n }\n waitMs = updated ? 1 : Math.min(10000, waitMs * 2);\n await sleep(waitMs);\n const res = await fetchJson({\n debugName: 'Check indexing status',\n method: 'GET',\n authToken,\n apiURI,\n path: `/dash/apps/${appId}/indexing-jobs/group/${groupId}`,\n errorMessage: 'Failed to check indexing status.',\n command: 'push',\n });\n if (!res.ok) {\n break;\n }\n jobs = res.data.jobs;\n }\n\n spinnerDefferedPromise.resolve(null);\n\n await spinnerRenderPromise;\n\n // Log errors at the end so that they're easier to see.\n if (errorMessages.length) {\n for (const msg of errorMessages) {\n console.log(msg);\n }\n console.log(chalk.red('Some steps failed while updating schema.'));\n process.exit(1);\n }\n}\n\nexport const resolveRenames = async (created, promptData, extraInfo) => {\n const answer = await renderUnwrap(\n new ResolveRenamePrompt(\n created,\n promptData,\n extraInfo,\n UI.modifiers.piped([\n (out) =>\n boxen(out, {\n dimBorder: true,\n padding: {\n left: 1,\n right: 1,\n },\n }),\n UI.modifiers.vanishOnComplete,\n ]),\n ),\n );\n return answer;\n};\n\n/**\n * Fetches JSON data from a specified path using the POST method.\n *\n * @param {Object} options\n * @param {string} options.debugName\n * @param {string} options.errorMessage\n * @param {string} options.path\n * @param {'POST' | 'GET'} [options.method]\n * @param {Object} [options.body=undefined]\n * @param {boolean} [options.noAuth]\n * @param {boolean} [options.noLogError]\n * @param {string} [options.command] - The CLI command being executed (e.g., 'push', 'pull', 'login')\n * @param {string} [options.authToken] - Optional auth token to use instead of reading from config\n * @param {string} options.apiURI - Backend API origin\n * @param {Record<string, string>} [options.headers] - Extra headers to include in the request\n * @returns {Promise<{ ok: boolean; data: any }>}\n */\nasync function fetchJson({\n debugName,\n errorMessage,\n path,\n body,\n method,\n noAuth,\n noLogError,\n command,\n authToken: providedAuthToken,\n apiURI,\n headers: extraHeaders,\n}) {\n const withAuth = !noAuth;\n const withErrorLogging = !noLogError;\n let authToken = null;\n if (withAuth) {\n authToken =\n providedAuthToken ?? (await readConfigAuthTokenWithErrorLogging(apiURI));\n if (!authToken) {\n return { ok: false, data: undefined };\n }\n }\n const timeoutMs = 1000 * 60 * 5; // 5 minutes\n\n try {\n const res = await fetch(`${apiURI}${path}`, {\n method: method ?? 'GET',\n headers: {\n ...(withAuth ? { Authorization: `Bearer ${authToken}` } : {}),\n 'Content-Type': 'application/json',\n 'X-Instant-Source': '@superlayer/cli',\n 'X-Instant-Version': version,\n ...(command ? { 'X-Instant-Command': command } : {}),\n ...extraHeaders,\n },\n body: body ? JSON.stringify(body) : undefined,\n signal: AbortSignal.timeout(timeoutMs),\n });\n\n if (verbose) {\n console.log(debugName, 'response:', res.status, res.statusText);\n }\n\n let data;\n try {\n data = await res.json();\n } catch {\n data = null;\n }\n if (verbose && data) {\n console.log(debugName, 'json:', JSON.stringify(data, null, 2));\n }\n if (!res.ok) {\n if (withErrorLogging) {\n error(errorMessage);\n prettyPrintJSONErr(data);\n }\n return { ok: false, data };\n }\n\n return { ok: true, data };\n } catch (err) {\n if (withErrorLogging) {\n if (err.name === 'AbortError') {\n error(\n `Timeout: It took more than ${timeoutMs / 60000} minutes to get the result.`,\n );\n } else {\n error(`Error: type: ${err.name}, message: ${err.message}`);\n }\n }\n return { ok: false, data: null };\n }\n}\n\nfunction prettyPrintJSONErr(data) {\n if (data?.message) {\n error(data.message);\n }\n if (Array.isArray(data?.hint?.errors)) {\n for (const err of data.hint.errors) {\n error(`${err.in ? err.in.join('->') + ': ' : ''}${err.message}`);\n }\n }\n if (!data) {\n error('Failed to parse error response');\n }\n}\n\nexport async function readLocalPermsFile() {\n const readCandidates = getPermsReadCandidates();\n const res = await loadConfig({\n sources: readCandidates,\n merge: false,\n });\n if (!res.config) return;\n const relativePath = path.relative(process.cwd(), res.sources[0]);\n return { path: relativePath, perms: res.config };\n}\n\nexport async function readLocalSchemaFile() {\n const readCandidates = getSchemaReadCandidates();\n const res = await loadConfig({\n sources: readCandidates,\n merge: false,\n });\n if (!res.config) return;\n const relativePath = path.relative(process.cwd(), res.sources[0]);\n return { path: relativePath, schema: res.config };\n}\n\nexport async function readLocalEmailFile(emailPath) {\n const readCandidates = getEmailReadCandidates(emailPath);\n const res = await loadConfig({\n sources: readCandidates,\n merge: false,\n });\n if (!res.config) return;\n const relativePath = path.relative(process.cwd(), res.sources[0]);\n return { path: relativePath, email: res.config };\n}\n\nasync function readConfigAuthToken(apiURI, allowAdminToken = true) {\n const options = program.opts();\n // @ts-expect-error command opts type is unknown\n if (typeof options.token === 'string') {\n // @ts-expect-error command opts type is unknown\n return options.token;\n }\n\n if (process.env.INSTANT_CLI_AUTH_TOKEN) {\n return process.env.INSTANT_CLI_AUTH_TOKEN;\n }\n\n if (allowAdminToken) {\n const adminTokenNames = Object.values(potentialAdminTokenEnvs);\n for (const envName of adminTokenNames) {\n const token = process.env[envName];\n if (token) {\n return token;\n }\n }\n }\n\n const authToken = await readAuthToken(apiURI).catch(() => null);\n\n if (authToken) {\n return authToken;\n }\n\n return null;\n}\n\nexport async function readConfigAuthTokenWithErrorLogging(apiURI) {\n const token = await readConfigAuthToken(apiURI);\n if (!token) {\n error(\n `Looks like you are not logged in. Please log in with ${chalk.green('`instant-cli login`')}`,\n );\n }\n return token;\n}\n\n// utils\n\nfunction sleep(ms) {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nexport function countEntities(o) {\n return Object.keys(o).length;\n}\n"]}
@@ -0,0 +1,3 @@
1
+ import { Command } from '@commander-js/extra-typings';
2
+ export declare const program: Command<[], {}, {}>;
3
+ //# sourceMappingURL=program.d.ts.map