apibara 2.1.0-beta.5 → 2.1.0-beta.50

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 (119) hide show
  1. package/dist/chunks/add.mjs +16 -8
  2. package/dist/chunks/add.mjs.map +1 -0
  3. package/dist/chunks/build.mjs +4 -2
  4. package/dist/chunks/build.mjs.map +1 -0
  5. package/dist/chunks/dev.mjs +55 -21
  6. package/dist/chunks/dev.mjs.map +1 -0
  7. package/dist/chunks/init.mjs +11 -7
  8. package/dist/chunks/init.mjs.map +1 -0
  9. package/dist/chunks/prepare.mjs +4 -2
  10. package/dist/chunks/prepare.mjs.map +1 -0
  11. package/dist/chunks/start.mjs +16 -4
  12. package/dist/chunks/start.mjs.map +1 -0
  13. package/dist/chunks/write-project-info.mjs +51 -0
  14. package/dist/chunks/write-project-info.mjs.map +1 -0
  15. package/dist/cli/index.mjs +3 -1
  16. package/dist/cli/index.mjs.map +1 -0
  17. package/dist/common/index.d.mts +33 -0
  18. package/dist/common/index.d.ts +33 -0
  19. package/dist/common/index.mjs +91 -0
  20. package/dist/common/index.mjs.map +1 -0
  21. package/dist/config/index.mjs +1 -0
  22. package/dist/config/index.mjs.map +1 -0
  23. package/dist/core/index.mjs +134 -69
  24. package/dist/core/index.mjs.map +1 -0
  25. package/dist/create/index.d.mts +2 -1
  26. package/dist/create/index.d.ts +2 -1
  27. package/dist/create/index.mjs +80 -136
  28. package/dist/create/index.mjs.map +1 -0
  29. package/dist/hooks/index.mjs +6 -1
  30. package/dist/hooks/index.mjs.map +1 -0
  31. package/dist/indexer/index.d.ts +1 -0
  32. package/dist/indexer/index.mjs +1 -0
  33. package/dist/indexer/plugins.d.ts +1 -0
  34. package/dist/indexer/plugins.mjs +1 -0
  35. package/dist/indexer/testing.d.ts +1 -0
  36. package/dist/indexer/testing.mjs +1 -0
  37. package/dist/indexer/vcr.d.ts +1 -0
  38. package/dist/indexer/vcr.mjs +1 -0
  39. package/dist/rolldown/index.d.mts +7 -0
  40. package/dist/rolldown/index.d.ts +7 -0
  41. package/dist/rolldown/index.mjs +141 -0
  42. package/dist/rolldown/index.mjs.map +1 -0
  43. package/dist/runtime/dev.mjs +39 -17
  44. package/dist/runtime/internal/app.d.ts +14 -1
  45. package/dist/runtime/internal/app.mjs +26 -21
  46. package/dist/runtime/project-info.d.ts +3 -0
  47. package/dist/runtime/project-info.mjs +67 -0
  48. package/dist/runtime/start.mjs +78 -11
  49. package/dist/shared/apibara.730bb1e4.mjs +18 -0
  50. package/dist/shared/apibara.730bb1e4.mjs.map +1 -0
  51. package/dist/types/index.d.mts +24 -20
  52. package/dist/types/index.d.ts +24 -20
  53. package/dist/types/index.mjs +1 -0
  54. package/dist/types/index.mjs.map +1 -0
  55. package/package.json +34 -17
  56. package/src/cli/commands/add.ts +16 -7
  57. package/src/cli/commands/build.ts +5 -2
  58. package/src/cli/commands/dev.ts +64 -20
  59. package/src/cli/commands/init.ts +12 -7
  60. package/src/cli/commands/prepare.ts +4 -3
  61. package/src/cli/commands/start.ts +18 -3
  62. package/src/cli/commands/write-project-info.ts +56 -0
  63. package/src/cli/index.ts +2 -0
  64. package/src/common/cli.ts +40 -0
  65. package/src/common/constants.ts +6 -0
  66. package/src/common/helper.ts +86 -0
  67. package/src/common/index.ts +3 -0
  68. package/src/core/apibara.ts +7 -2
  69. package/src/core/build/build.ts +13 -5
  70. package/src/core/build/dev.ts +46 -23
  71. package/src/core/build/error.ts +9 -14
  72. package/src/core/build/prepare.ts +5 -3
  73. package/src/core/build/prod.ts +25 -16
  74. package/src/core/build/types.ts +11 -1
  75. package/src/core/config/defaults.ts +3 -0
  76. package/src/core/config/loader.ts +15 -7
  77. package/src/core/config/resolvers/runtime.resolver.ts +44 -0
  78. package/src/core/config/update.ts +6 -2
  79. package/src/core/scan.ts +1 -1
  80. package/src/create/add.ts +14 -20
  81. package/src/create/constants.ts +5 -7
  82. package/src/create/init.ts +2 -2
  83. package/src/create/templates.ts +43 -116
  84. package/src/create/types.ts +3 -0
  85. package/src/create/utils.ts +20 -7
  86. package/src/hooks/useRuntimeConfig.ts +4 -1
  87. package/src/indexer/index.ts +1 -0
  88. package/src/indexer/plugins.ts +1 -0
  89. package/src/indexer/testing.ts +1 -0
  90. package/src/indexer/vcr.ts +1 -0
  91. package/src/rolldown/config.ts +86 -0
  92. package/src/rolldown/index.ts +2 -0
  93. package/src/{rollup → rolldown}/plugins/indexers.ts +3 -3
  94. package/src/rolldown/plugins/instrumentation.ts +68 -0
  95. package/src/rolldown/plugins/static-config.ts +21 -0
  96. package/src/runtime/dev.ts +49 -19
  97. package/src/runtime/internal/app.ts +42 -29
  98. package/src/runtime/project-info.ts +90 -0
  99. package/src/runtime/start.ts +91 -11
  100. package/src/types/config.ts +27 -13
  101. package/src/types/hooks.ts +8 -5
  102. package/src/types/index.ts +1 -1
  103. package/src/types/rolldown.ts +5 -0
  104. package/src/types/virtual/indexers.d.ts +4 -1
  105. package/src/types/virtual/instrumentation.d.ts +4 -0
  106. package/src/types/virtual/static-config.d.ts +4 -0
  107. package/dist/rollup/index.d.mts +0 -6
  108. package/dist/rollup/index.d.ts +0 -6
  109. package/dist/rollup/index.mjs +0 -150
  110. package/dist/shared/apibara.1b515d04.mjs +0 -8
  111. package/src/cli/common.ts +0 -8
  112. package/src/core/config/resolvers/preset.resolver.ts +0 -9
  113. package/src/core/config/resolvers/runtime-config.resolver.ts +0 -6
  114. package/src/rollup/config.ts +0 -87
  115. package/src/rollup/index.ts +0 -2
  116. package/src/rollup/plugins/config.ts +0 -12
  117. package/src/rollup/plugins/esm-shim.ts +0 -69
  118. package/src/types/rollup.ts +0 -8
  119. package/src/types/virtual/config.d.ts +0 -3
@@ -1,5 +1,10 @@
1
+ import { ENV_INTERNAL_APIBARA_PROCESSED_RUNTIME } from 'apibara/common';
2
+
1
3
  function useRuntimeConfig() {
2
- return JSON.parse(process.env.APIBARA_RUNTIME_CONFIG || "{}");
4
+ return JSON.parse(
5
+ process.env[ENV_INTERNAL_APIBARA_PROCESSED_RUNTIME] || "{}"
6
+ );
3
7
  }
4
8
 
5
9
  export { useRuntimeConfig };
10
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":["../../src/hooks/useRuntimeConfig.ts"],"sourcesContent":["import { ENV_INTERNAL_APIBARA_PROCESSED_RUNTIME } from \"apibara/common\";\nimport type { ApibaraRuntimeConfig } from \"apibara/types\";\n\nexport function useRuntimeConfig(): ApibaraRuntimeConfig {\n return JSON.parse(\n process.env[ENV_INTERNAL_APIBARA_PROCESSED_RUNTIME] || \"{}\",\n );\n}\n"],"names":[],"mappings":";;AAGO,SAAS,gBAAyC,GAAA;AACvD,EAAA,OAAO,IAAK,CAAA,KAAA;AAAA,IACV,OAAA,CAAQ,GAAI,CAAA,sCAAsC,CAAK,IAAA,IAAA;AAAA,GACzD,CAAA;AACF;;;;"}
@@ -0,0 +1 @@
1
+ export * from "@apibara/indexer";
@@ -0,0 +1 @@
1
+ export * from "@apibara/indexer";
@@ -0,0 +1 @@
1
+ export * from "@apibara/indexer/plugins";
@@ -0,0 +1 @@
1
+ export * from "@apibara/indexer/plugins";
@@ -0,0 +1 @@
1
+ export * from "@apibara/indexer/testing";
@@ -0,0 +1 @@
1
+ export * from "@apibara/indexer/testing";
@@ -0,0 +1 @@
1
+ export * from "@apibara/indexer/vcr";
@@ -0,0 +1 @@
1
+ export * from "@apibara/indexer/vcr";
@@ -0,0 +1,7 @@
1
+ import { Apibara } from 'apibara/types';
2
+ import { RolldownOptions } from 'rolldown';
3
+ export { Plugin } from 'rolldown';
4
+
5
+ declare function getRolldownConfig(apibara: Apibara): RolldownOptions;
6
+
7
+ export { getRolldownConfig };
@@ -0,0 +1,7 @@
1
+ import { Apibara } from 'apibara/types';
2
+ import { RolldownOptions } from 'rolldown';
3
+ export { Plugin } from 'rolldown';
4
+
5
+ declare function getRolldownConfig(apibara: Apibara): RolldownOptions;
6
+
7
+ export { getRolldownConfig };
@@ -0,0 +1,141 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { builtinModules } from 'node:module';
3
+ import defu from 'defu';
4
+ import { join as join$1 } from 'pathe';
5
+ import virtual from '@rollup/plugin-virtual';
6
+ import { hash } from 'ohash';
7
+ import { join } from 'node:path';
8
+ import { USER_ENV_APIBARA_RUNTIME_CONFIG } from 'apibara/common';
9
+
10
+ function indexers(apibara) {
11
+ const indexers2 = [...new Set(apibara.indexers)];
12
+ return virtual({
13
+ "#apibara-internal-virtual/indexers": `
14
+ ${indexers2.map((i) => `import * as _${hash(i)} from '${i.indexer}';`).join("\n")}
15
+
16
+ export const indexers = [
17
+ ${indexers2.map((i) => `{ name: "${i.name}", indexer: _${hash(i)} }`).join(",\n")}
18
+ ];
19
+ `
20
+ });
21
+ }
22
+
23
+ function instrumentation(apibara) {
24
+ const instrumentationPath = join(
25
+ apibara.options._c12.cwd,
26
+ `instrumentation.${apibara.options._c12.configFile?.endsWith(".ts") ? "ts" : apibara.options._c12.configFile?.endsWith(".mjs") ? "mjs" : "js"}`
27
+ );
28
+ if (!existsSync(instrumentationPath)) {
29
+ return virtual({
30
+ "#apibara-internal-virtual/instrumentation": `
31
+ let register = undefined;
32
+ let logger = undefined;
33
+
34
+ export { register, logger };
35
+ `
36
+ });
37
+ }
38
+ return virtual({
39
+ "#apibara-internal-virtual/instrumentation": `
40
+ let register = undefined;
41
+ let logger = undefined;
42
+
43
+ try {
44
+ const instrumentation = require('${instrumentationPath}');
45
+
46
+ if (instrumentation?.register && typeof instrumentation.register === "function") {
47
+ register = instrumentation.register;
48
+ }
49
+
50
+ if (instrumentation?.logger && typeof instrumentation.logger === "function") {
51
+ logger = instrumentation.logger;
52
+ }
53
+ } catch {
54
+ // Silently handle any require errors
55
+ }
56
+
57
+ export { register, logger };
58
+ `
59
+ });
60
+ }
61
+
62
+ function staticConfig(apibara) {
63
+ const presetString = apibara.options.preset ?? "";
64
+ const presetsStringified = JSON.stringify(apibara.options.presets ?? {});
65
+ const runtimeConfigStringified = JSON.stringify(
66
+ apibara.options.runtimeConfig ?? {}
67
+ );
68
+ return virtual({
69
+ "#apibara-internal-virtual/static-config": `
70
+ export const preset = ${presetString ? `"${presetString}"` : "undefined"};
71
+ export const presets = ${presetsStringified};
72
+ export const runtimeConfig = ${runtimeConfigStringified};
73
+ export const userEnvRuntimeConfig = JSON.parse(process.env.${USER_ENV_APIBARA_RUNTIME_CONFIG} ?? "{}");
74
+ `
75
+ });
76
+ }
77
+
78
+ const runtimeDependencies = [
79
+ "better-sqlite3",
80
+ "@electric-sql/pglite",
81
+ "pg",
82
+ // https://socket.io/docs/v4/server-installation/#additional-packages
83
+ "utf-8-validate",
84
+ "bufferutil",
85
+ "fsevents",
86
+ // was giving unresolved import warnings from `node-fetch` library.
87
+ "encoding"
88
+ ];
89
+ function getRolldownConfig(apibara) {
90
+ const extensions = [
91
+ ".ts",
92
+ ".mjs",
93
+ ".js",
94
+ ".json",
95
+ ".node",
96
+ ".tsx",
97
+ ".jsx"
98
+ ];
99
+ const tsConfigExists = existsSync(
100
+ join$1(apibara.options.rootDir, "tsconfig.json")
101
+ );
102
+ const rolldownConfig = defu(
103
+ // biome-ignore lint/suspicious/noExplicitAny: apibara.options.rolldownConfig is typed
104
+ apibara.options.rolldownConfig,
105
+ {
106
+ platform: "node",
107
+ input: apibara.options.entry,
108
+ output: {
109
+ dir: join$1(apibara.options.outputDir || "./.apibara/build"),
110
+ format: "esm",
111
+ entryFileNames: "[name].mjs",
112
+ chunkFileNames: "chunks/[name]-[hash].mjs",
113
+ sourcemap: true
114
+ },
115
+ plugins: [],
116
+ onwarn(warning, rolldownWarn) {
117
+ if (!["CIRCULAR_DEPENDENCY", "EVAL", "THIS_IS_UNDEFINED"].includes(
118
+ warning.code || ""
119
+ ) && !warning.message.includes("Unsupported source map comment") && !warning.message.includes("@__PURE__") && !warning.message.includes("/*#__PURE__*/")) {
120
+ rolldownWarn(warning);
121
+ }
122
+ },
123
+ resolve: {
124
+ extensions,
125
+ preferBuiltins: !!apibara.options.node,
126
+ mainFields: ["main"],
127
+ exportConditions: apibara.options.exportConditions,
128
+ tsconfigFilename: tsConfigExists ? "tsconfig.json" : void 0
129
+ },
130
+ treeshake: true,
131
+ external: [...builtinModules, ...runtimeDependencies]
132
+ }
133
+ );
134
+ rolldownConfig.plugins?.push(staticConfig(apibara));
135
+ rolldownConfig.plugins?.push(instrumentation(apibara));
136
+ rolldownConfig.plugins?.push(indexers(apibara));
137
+ return rolldownConfig;
138
+ }
139
+
140
+ export { getRolldownConfig };
141
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":["../../src/rolldown/plugins/indexers.ts","../../src/rolldown/plugins/instrumentation.ts","../../src/rolldown/plugins/static-config.ts","../../src/rolldown/config.ts"],"sourcesContent":["import virtual from \"@rollup/plugin-virtual\";\nimport type { Apibara } from \"apibara/types\";\nimport { hash } from \"ohash\";\nimport type { RolldownPluginOption } from \"rolldown\";\n\nexport function indexers(apibara: Apibara) {\n const indexers = [...new Set(apibara.indexers)];\n return virtual({\n \"#apibara-internal-virtual/indexers\": `\n ${indexers.map((i) => `import * as _${hash(i)} from '${i.indexer}';`).join(\"\\n\")}\n\n export const indexers = [\n ${indexers.map((i) => `{ name: \"${i.name}\", indexer: _${hash(i)} }`).join(\",\\n\")}\n ];\n `,\n }) as RolldownPluginOption;\n}\n","import { existsSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport virtual from \"@rollup/plugin-virtual\";\nimport type { Apibara } from \"apibara/types\";\nimport type { RolldownPluginOption } from \"rolldown\";\n\nexport function instrumentation(apibara: Apibara) {\n const instrumentationPath = join(\n apibara.options._c12.cwd!,\n `instrumentation.${apibara.options._c12.configFile?.endsWith(\".ts\") ? \"ts\" : apibara.options._c12.configFile?.endsWith(\".mjs\") ? \"mjs\" : \"js\"}`,\n );\n\n if (!existsSync(instrumentationPath)) {\n return virtual({\n \"#apibara-internal-virtual/instrumentation\": `\n let register = undefined;\n let logger = undefined;\n \n export { register, logger };\n `,\n }) as RolldownPluginOption;\n }\n\n /**\n * We are importing the instrumentation file inline with \"require\" instead of \"import\" at the top of the file to avoid warnings from rolldown\n * when some methods are not defined in the instrumentation file.\n *\n * Example warning:\n * \n * [IMPORT_IS_UNDEFINED] Warning: Import `logger` will always be undefined because there is no matching export in 'instrumentation.ts'\n * ╭─[virtual:#apibara-internal-virtual/instrumentation:11:35]\n * │\n * 11 │ if (instrumentation && typeof instrumentation.logger === \"function\") {\n * │ ───────────┬────────── \n * │ ╰──────────── \n * ────╯\n\n * [IMPORT_IS_UNDEFINED] Warning: Import `logger` will always be undefined because there is no matching export in 'instrumentation.ts'\n * ╭─[virtual:#apibara-internal-virtual/instrumentation:12:16]\n * │\n * 12 │ logger = instrumentation.logger;\n * │ ───────────┬────────── \n * │ ╰──────────── \n * ────╯ \n */\n return virtual({\n \"#apibara-internal-virtual/instrumentation\": `\n let register = undefined;\n let logger = undefined;\n\n try {\n const instrumentation = require('${instrumentationPath}');\n \n if (instrumentation?.register && typeof instrumentation.register === \"function\") {\n register = instrumentation.register;\n }\n \n if (instrumentation?.logger && typeof instrumentation.logger === \"function\") {\n logger = instrumentation.logger;\n }\n } catch {\n // Silently handle any require errors\n }\n\n export { register, logger };\n `,\n }) as RolldownPluginOption;\n}\n","import virtual from \"@rollup/plugin-virtual\";\nimport { USER_ENV_APIBARA_RUNTIME_CONFIG } from \"apibara/common\";\nimport type { Apibara } from \"apibara/types\";\nimport type { RolldownPluginOption } from \"rolldown\";\n\nexport function staticConfig(apibara: Apibara) {\n const presetString = apibara.options.preset ?? \"\";\n const presetsStringified = JSON.stringify(apibara.options.presets ?? {});\n const runtimeConfigStringified = JSON.stringify(\n apibara.options.runtimeConfig ?? {},\n );\n\n return virtual({\n \"#apibara-internal-virtual/static-config\": `\n export const preset = ${presetString ? `\"${presetString}\"` : \"undefined\"};\n export const presets = ${presetsStringified};\n export const runtimeConfig = ${runtimeConfigStringified};\n export const userEnvRuntimeConfig = JSON.parse(process.env.${USER_ENV_APIBARA_RUNTIME_CONFIG} ?? \"{}\");\n `,\n }) as RolldownPluginOption;\n}\n","import { existsSync } from \"node:fs\";\nimport { builtinModules } from \"node:module\";\nimport type { Apibara } from \"apibara/types\";\nimport defu from \"defu\";\nimport { join } from \"pathe\";\nimport type {\n ConfigExport,\n RolldownOptions,\n RolldownPluginOption,\n} from \"rolldown\";\nimport { indexers } from \"./plugins/indexers\";\nimport { instrumentation } from \"./plugins/instrumentation\";\nimport { staticConfig } from \"./plugins/static-config\";\n\nconst runtimeDependencies = [\n \"better-sqlite3\",\n \"@electric-sql/pglite\",\n \"pg\",\n // https://socket.io/docs/v4/server-installation/#additional-packages\n \"utf-8-validate\",\n \"bufferutil\",\n \"fsevents\",\n // was giving unresolved import warnings from `node-fetch` library.\n \"encoding\",\n];\n\nexport function getRolldownConfig(apibara: Apibara): RolldownOptions {\n const extensions: string[] = [\n \".ts\",\n \".mjs\",\n \".js\",\n \".json\",\n \".node\",\n \".tsx\",\n \".jsx\",\n ];\n\n const tsConfigExists = existsSync(\n join(apibara.options.rootDir, \"tsconfig.json\"),\n );\n\n const rolldownConfig: RolldownOptions & {\n plugins: RolldownPluginOption[];\n } = defu(\n // biome-ignore lint/suspicious/noExplicitAny: apibara.options.rolldownConfig is typed\n apibara.options.rolldownConfig as any,\n <ConfigExport>{\n platform: \"node\",\n input: apibara.options.entry,\n output: {\n dir: join(apibara.options.outputDir || \"./.apibara/build\"),\n format: \"esm\",\n entryFileNames: \"[name].mjs\",\n chunkFileNames: \"chunks/[name]-[hash].mjs\",\n sourcemap: true,\n },\n plugins: [],\n onwarn(warning, rolldownWarn) {\n if (\n ![\"CIRCULAR_DEPENDENCY\", \"EVAL\", \"THIS_IS_UNDEFINED\"].includes(\n warning.code || \"\",\n ) &&\n !warning.message.includes(\"Unsupported source map comment\") &&\n !warning.message.includes(\"@__PURE__\") &&\n !warning.message.includes(\"/*#__PURE__*/\")\n ) {\n rolldownWarn(warning);\n }\n },\n resolve: {\n extensions,\n preferBuiltins: !!apibara.options.node,\n mainFields: [\"main\"],\n exportConditions: apibara.options.exportConditions,\n tsconfigFilename: tsConfigExists ? \"tsconfig.json\" : undefined,\n },\n treeshake: true,\n external: [...builtinModules, ...runtimeDependencies],\n },\n );\n\n rolldownConfig.plugins?.push(staticConfig(apibara));\n rolldownConfig.plugins?.push(instrumentation(apibara));\n rolldownConfig.plugins?.push(indexers(apibara));\n return rolldownConfig;\n}\n"],"names":["indexers","join"],"mappings":"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"}
@@ -1,7 +1,42 @@
1
- import { runWithReconnect } from "@apibara/indexer";
2
- import { createClient } from "@apibara/protocol";
1
+ import { ReloadIndexerRequest, runWithReconnect } from "@apibara/indexer";
2
+ import { createAuthenticatedClient } from "@apibara/protocol";
3
+ import { getRuntimeDataFromEnv } from "apibara/common";
3
4
  import { defineCommand, runMain } from "citty";
5
+ import { blueBright } from "picocolors";
4
6
  import { availableIndexers, createIndexer } from "./internal/app.mjs";
7
+ async function startIndexer(indexer) {
8
+ let _logger;
9
+ while (true) {
10
+ try {
11
+ const { processedRuntimeConfig, preset } = getRuntimeDataFromEnv();
12
+ const { indexer: indexerInstance, logger } = await createIndexer({
13
+ indexerName: indexer,
14
+ processedRuntimeConfig,
15
+ preset
16
+ }) ?? {};
17
+ _logger = logger;
18
+ if (!indexerInstance) {
19
+ return;
20
+ }
21
+ const client = createAuthenticatedClient(
22
+ indexerInstance.streamConfig,
23
+ indexerInstance.options.streamUrl,
24
+ indexerInstance.options.clientOptions
25
+ );
26
+ if (logger) {
27
+ logger.info(`Indexer ${blueBright(indexer)} started`);
28
+ }
29
+ await runWithReconnect(client, indexerInstance);
30
+ return;
31
+ } catch (error) {
32
+ if (error instanceof ReloadIndexerRequest) {
33
+ _logger?.info(`Indexer ${blueBright(indexer)} reloaded`);
34
+ continue;
35
+ }
36
+ throw error;
37
+ }
38
+ }
39
+ }
5
40
  const startCommand = defineCommand({
6
41
  meta: {
7
42
  name: "start",
@@ -11,14 +46,10 @@ const startCommand = defineCommand({
11
46
  indexers: {
12
47
  type: "string",
13
48
  description: "Which indexers to run"
14
- },
15
- preset: {
16
- type: "string",
17
- description: "Preset to use"
18
49
  }
19
50
  },
20
51
  async run({ args }) {
21
- const { indexers: indexersArgs, preset } = args;
52
+ const { indexers: indexersArgs } = args;
22
53
  let selectedIndexers = availableIndexers;
23
54
  if (indexersArgs) {
24
55
  selectedIndexers = indexersArgs.split(",");
@@ -30,16 +61,7 @@ const startCommand = defineCommand({
30
61
  );
31
62
  }
32
63
  }
33
- await Promise.all(
34
- selectedIndexers.map(async (indexer) => {
35
- const indexerInstance = createIndexer(indexer, preset);
36
- const client = createClient(
37
- indexerInstance.streamConfig,
38
- indexerInstance.options.streamUrl
39
- );
40
- await runWithReconnect(client, indexerInstance);
41
- })
42
- );
64
+ await Promise.all(selectedIndexers.map((indexer) => startIndexer(indexer)));
43
65
  }
44
66
  });
45
67
  export const mainCli = defineCommand({
@@ -1,2 +1,15 @@
1
1
  export declare const availableIndexers: any;
2
- export declare function createIndexer(indexerName: string, preset?: string): import("@apibara/indexer").Indexer<unknown, unknown>;
2
+ export declare function createIndexer({ indexerName, processedRuntimeConfig, preset, }: {
3
+ indexerName: string;
4
+ /**
5
+ * Final processed runtime config to be used by the indexer
6
+ */
7
+ processedRuntimeConfig: Record<string, unknown>;
8
+ /**
9
+ * Preset name which was used to generate the runtime config
10
+ */
11
+ preset?: string;
12
+ }): Promise<{
13
+ indexer: import("@apibara/indexer").Indexer<unknown, unknown>;
14
+ logger: any;
15
+ } | undefined>;
@@ -6,51 +6,56 @@ import {
6
6
  inMemoryPersistence,
7
7
  logger
8
8
  } from "@apibara/indexer/plugins";
9
- import { config } from "#apibara-internal-virtual/config";
9
+ import consola from "consola";
10
10
  import { indexers } from "#apibara-internal-virtual/indexers";
11
+ import { logger as instrumentationLogger } from "#apibara-internal-virtual/instrumentation";
11
12
  import { createLogger } from "./logger.mjs";
12
13
  export const availableIndexers = indexers.map((i) => i.name);
13
- export function createIndexer(indexerName, preset) {
14
- let runtimeConfig = { ...config.runtimeConfig };
15
- if (preset) {
16
- if (config.presets === void 0) {
17
- throw new Error(
18
- `Specified preset "${preset}" but no presets were defined`
19
- );
20
- }
21
- if (config.presets[preset] === void 0) {
22
- throw new Error(`Specified preset "${preset}" but it was not defined`);
23
- }
24
- const presetValue = config.presets[preset];
25
- runtimeConfig = { ...runtimeConfig, ...presetValue.runtimeConfig };
26
- }
14
+ export async function createIndexer({
15
+ indexerName,
16
+ processedRuntimeConfig,
17
+ preset
18
+ }) {
27
19
  const indexerDefinition = indexers.find((i) => i.name === indexerName);
28
20
  if (indexerDefinition === void 0) {
29
21
  throw new Error(
30
22
  `Specified indexer "${indexerName}" but it was not defined`
31
23
  );
32
24
  }
33
- const definition = typeof indexerDefinition.indexer === "function" ? indexerDefinition.indexer(runtimeConfig) : indexerDefinition.indexer;
25
+ const indexerModule = indexerDefinition.indexer?.default;
26
+ if (indexerModule === void 0) {
27
+ consola.warn(
28
+ `Specified indexer "${indexerName}" but it does not export a default. Ignoring.`
29
+ );
30
+ return;
31
+ }
32
+ const definition = typeof indexerModule === "function" ? await indexerModule(processedRuntimeConfig) : indexerModule;
34
33
  let reporter = createLogger({
35
34
  indexer: indexerName,
36
35
  preset,
37
36
  indexers: availableIndexers
38
37
  });
39
- if (config.logger) {
40
- reporter = config.logger({
38
+ if (instrumentationLogger) {
39
+ const _reporter = instrumentationLogger({
41
40
  indexer: indexerName,
42
41
  preset,
43
42
  indexers: availableIndexers
44
43
  });
44
+ if (_reporter && "log" in _reporter) {
45
+ reporter = _reporter;
46
+ }
45
47
  }
46
48
  definition.plugins = [
47
49
  internalContext({
48
50
  indexerName,
49
51
  availableIndexers
50
52
  }),
53
+ logger({ logger: reporter }),
51
54
  inMemoryPersistence(),
52
- ...definition.plugins ?? [],
53
- logger({ logger: reporter })
55
+ ...definition.plugins ?? []
54
56
  ];
55
- return _createIndexer(definition);
57
+ return {
58
+ indexer: _createIndexer(definition),
59
+ logger: consola.create({ reporters: [reporter] })
60
+ };
56
61
  }
@@ -0,0 +1,3 @@
1
+ export declare const mainCli: import("citty").CommandDef<import("citty").ArgsDef>;
2
+ declare const _default: {};
3
+ export default _default;
@@ -0,0 +1,67 @@
1
+ import { writeFileSync } from "node:fs";
2
+ import { resolve } from "node:path";
3
+ import {
4
+ getProcessedRuntimeConfig,
5
+ getRuntimeDataFromEnv
6
+ } from "apibara/common";
7
+ import { defineCommand, runMain } from "citty";
8
+ import { availableIndexers, createIndexer } from "./internal/app.mjs";
9
+ const startCommand = defineCommand({
10
+ meta: {
11
+ name: "write-project-info",
12
+ description: "Write json-encoded information about the project."
13
+ },
14
+ args: {
15
+ "build-dir": {
16
+ type: "string",
17
+ description: "project build directory"
18
+ }
19
+ },
20
+ async run({ args }) {
21
+ const projectInfo = {
22
+ indexers: {}
23
+ };
24
+ const { presets, runtimeConfig, userEnvRuntimeConfig } = getRuntimeDataFromEnv();
25
+ for (const preset of Object.keys(presets ?? {})) {
26
+ const processedRuntimeConfig = getProcessedRuntimeConfig({
27
+ preset,
28
+ presets,
29
+ runtimeConfig,
30
+ userEnvRuntimeConfig
31
+ });
32
+ for (const indexer of availableIndexers) {
33
+ const { indexer: indexerInstance } = await createIndexer({
34
+ indexerName: indexer,
35
+ processedRuntimeConfig,
36
+ preset
37
+ }) ?? {};
38
+ if (!indexerInstance) {
39
+ continue;
40
+ }
41
+ projectInfo.indexers[indexer] = {
42
+ ...projectInfo.indexers[indexer] ?? {},
43
+ [preset]: {
44
+ type: indexerInstance.streamConfig.name,
45
+ isFactory: indexerInstance.options.factory !== void 0
46
+ }
47
+ };
48
+ }
49
+ }
50
+ const projectInfoPath = resolve(
51
+ args["build-dir"] ?? ".apibara",
52
+ "project-info.json"
53
+ );
54
+ writeFileSync(projectInfoPath, JSON.stringify(projectInfo, null, 2));
55
+ }
56
+ });
57
+ export const mainCli = defineCommand({
58
+ meta: {
59
+ name: "write-project-info-runner",
60
+ description: "Write json-encoded information about the project."
61
+ },
62
+ subCommands: {
63
+ start: () => startCommand
64
+ }
65
+ });
66
+ runMain(mainCli);
67
+ export default {};
@@ -1,6 +1,20 @@
1
- import { runWithReconnect } from "@apibara/indexer";
2
- import { createClient } from "@apibara/protocol";
1
+ import { ReloadIndexerRequest, runWithReconnect } from "@apibara/indexer";
2
+ import { createAuthenticatedClient } from "@apibara/protocol";
3
+ import {
4
+ checkForUnknownArgs,
5
+ getProcessedRuntimeConfig,
6
+ getRuntimeDataFromEnv
7
+ } from "apibara/common";
3
8
  import { defineCommand, runMain } from "citty";
9
+ import consola from "consola";
10
+ import { blueBright } from "picocolors";
11
+ import { register } from "#apibara-internal-virtual/instrumentation";
12
+ import {
13
+ preset as originalPreset,
14
+ presets,
15
+ runtimeConfig,
16
+ userEnvRuntimeConfig
17
+ } from "#apibara-internal-virtual/static-config";
4
18
  import { createIndexer } from "./internal/app.mjs";
5
19
  const startCommand = defineCommand({
6
20
  meta: {
@@ -15,17 +29,70 @@ const startCommand = defineCommand({
15
29
  },
16
30
  preset: {
17
31
  type: "string",
18
- description: "Preset to use"
32
+ description: "Preset name"
33
+ },
34
+ standalone: {
35
+ type: "boolean",
36
+ default: true,
37
+ description: "--standalone: can run the indexer just with node and without apibara cli \n --no-standalone: must run the indexer with apibara cli"
19
38
  }
20
39
  },
21
- async run({ args }) {
22
- const { indexer, preset } = args;
23
- const indexerInstance = createIndexer(indexer, preset);
24
- const client = createClient(
25
- indexerInstance.streamConfig,
26
- indexerInstance.options.streamUrl
27
- );
28
- await runWithReconnect(client, indexerInstance);
40
+ async run({ args, cmd }) {
41
+ const { indexer, preset: argPreset, standalone } = args;
42
+ await checkForUnknownArgs(args, cmd);
43
+ let _logger;
44
+ while (true) {
45
+ try {
46
+ let preset;
47
+ let processedRuntimeConfig;
48
+ if (standalone) {
49
+ preset = argPreset ?? originalPreset;
50
+ processedRuntimeConfig = getProcessedRuntimeConfig({
51
+ preset,
52
+ presets,
53
+ runtimeConfig,
54
+ userEnvRuntimeConfig
55
+ });
56
+ } else {
57
+ const envResult = getRuntimeDataFromEnv();
58
+ preset = envResult.preset;
59
+ processedRuntimeConfig = envResult.processedRuntimeConfig;
60
+ }
61
+ const { indexer: indexerInstance, logger } = await createIndexer({
62
+ indexerName: indexer,
63
+ processedRuntimeConfig,
64
+ preset
65
+ }) ?? {};
66
+ _logger = logger;
67
+ if (!indexerInstance) {
68
+ consola.error(
69
+ `Specified indexer "${indexer}" but it was not defined`
70
+ );
71
+ process.exit(1);
72
+ }
73
+ const client = createAuthenticatedClient(
74
+ indexerInstance.streamConfig,
75
+ indexerInstance.options.streamUrl,
76
+ indexerInstance.options.clientOptions
77
+ );
78
+ if (register) {
79
+ consola.start("Registering from instrumentation");
80
+ await register();
81
+ consola.success("Registered from instrumentation");
82
+ }
83
+ if (logger) {
84
+ logger.info(`Indexer ${blueBright(indexer)} started`);
85
+ }
86
+ await runWithReconnect(client, indexerInstance);
87
+ return;
88
+ } catch (error) {
89
+ if (error instanceof ReloadIndexerRequest) {
90
+ _logger?.info(`Indexer ${blueBright(indexer)} reloaded`);
91
+ continue;
92
+ }
93
+ throw error;
94
+ }
95
+ }
29
96
  }
30
97
  });
31
98
  export const mainCli = defineCommand({
@@ -0,0 +1,18 @@
1
+ import colors from 'picocolors';
2
+
3
+ const {
4
+ blue,
5
+ blueBright,
6
+ cyan,
7
+ gray,
8
+ green,
9
+ greenBright,
10
+ magenta,
11
+ red,
12
+ redBright,
13
+ reset,
14
+ yellow
15
+ } = colors;
16
+
17
+ export { blue as a, blueBright as b, green as c, cyan as d, reset as e, gray as g, magenta as m, red as r, yellow as y };
18
+ //# sourceMappingURL=apibara.730bb1e4.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"apibara.730bb1e4.mjs","sources":["../../src/create/colors.ts"],"sourcesContent":["import colors from \"picocolors\";\n\nexport const {\n blue,\n blueBright,\n cyan,\n gray,\n green,\n greenBright,\n magenta,\n red,\n redBright,\n reset,\n yellow,\n} = colors;\n"],"names":[],"mappings":";;AAEa,MAAA;AAAA,EACX,IAAA;AAAA,EACA,UAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA;AAAA,EACA,OAAA;AAAA,EACA,GAAA;AAAA,EACA,SAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AACF,CAAI,GAAA;;;;"}