@bunworks/inngest-realtime 0.1.0 → 0.1.5

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 (101) hide show
  1. package/CHANGELOG.md +6 -6
  2. package/README.md +1 -1
  3. package/_virtual/_rolldown/runtime.cjs +29 -0
  4. package/api.cjs +45 -0
  5. package/api.cjs.map +1 -0
  6. package/api.mjs +44 -0
  7. package/api.mjs.map +1 -0
  8. package/channel.cjs +67 -0
  9. package/channel.cjs.map +1 -0
  10. package/channel.d.cts +19 -0
  11. package/channel.d.cts.map +1 -0
  12. package/channel.d.mts +19 -0
  13. package/channel.d.mts.map +1 -0
  14. package/channel.mjs +66 -0
  15. package/channel.mjs.map +1 -0
  16. package/env.cjs +72 -0
  17. package/env.cjs.map +1 -0
  18. package/env.mjs +71 -0
  19. package/env.mjs.map +1 -0
  20. package/hooks.cjs +147 -0
  21. package/hooks.cjs.map +1 -0
  22. package/hooks.d.cts +70 -0
  23. package/hooks.d.cts.map +1 -0
  24. package/hooks.d.mts +70 -0
  25. package/hooks.d.mts.map +1 -0
  26. package/hooks.mjs +144 -0
  27. package/hooks.mjs.map +1 -0
  28. package/index.cjs +19 -0
  29. package/index.d.cts +5 -0
  30. package/index.d.mts +6 -0
  31. package/index.mjs +7 -0
  32. package/middleware.cjs +41 -0
  33. package/middleware.cjs.map +1 -0
  34. package/middleware.d.cts +29 -0
  35. package/middleware.d.cts.map +1 -0
  36. package/middleware.d.mts +29 -0
  37. package/middleware.d.mts.map +1 -0
  38. package/middleware.mjs +34 -0
  39. package/middleware.mjs.map +1 -0
  40. package/package.json +6 -5
  41. package/subscribe/StreamFanout.cjs +47 -0
  42. package/subscribe/StreamFanout.cjs.map +1 -0
  43. package/subscribe/StreamFanout.mjs +46 -0
  44. package/subscribe/StreamFanout.mjs.map +1 -0
  45. package/subscribe/TokenSubscription.cjs +438 -0
  46. package/subscribe/TokenSubscription.cjs.map +1 -0
  47. package/subscribe/TokenSubscription.mjs +436 -0
  48. package/subscribe/TokenSubscription.mjs.map +1 -0
  49. package/subscribe/helpers.cjs +41 -0
  50. package/subscribe/helpers.cjs.map +1 -0
  51. package/subscribe/helpers.d.cts +64 -0
  52. package/subscribe/helpers.d.cts.map +1 -0
  53. package/subscribe/helpers.d.mts +64 -0
  54. package/subscribe/helpers.d.mts.map +1 -0
  55. package/subscribe/helpers.mjs +40 -0
  56. package/subscribe/helpers.mjs.map +1 -0
  57. package/subscribe/index.cjs +1 -0
  58. package/subscribe/index.d.mts +1 -0
  59. package/subscribe/index.mjs +3 -0
  60. package/topic.cjs +30 -0
  61. package/topic.cjs.map +1 -0
  62. package/topic.d.cts +19 -0
  63. package/topic.d.cts.map +1 -0
  64. package/topic.d.mts +19 -0
  65. package/topic.d.mts.map +1 -0
  66. package/topic.mjs +28 -0
  67. package/topic.mjs.map +1 -0
  68. package/types.cjs +45 -0
  69. package/types.cjs.map +1 -0
  70. package/types.d.cts +241 -0
  71. package/types.d.cts.map +1 -0
  72. package/types.d.mts +241 -0
  73. package/types.d.mts.map +1 -0
  74. package/types.mjs +39 -0
  75. package/types.mjs.map +1 -0
  76. package/util.cjs +72 -0
  77. package/util.cjs.map +1 -0
  78. package/util.mjs +69 -0
  79. package/util.mjs.map +1 -0
  80. package/CLAUDE.md +0 -69
  81. package/bun.lock +0 -527
  82. package/eslint.config.mjs +0 -19
  83. package/src/api.ts +0 -83
  84. package/src/channel.ts +0 -122
  85. package/src/env.d.ts +0 -15
  86. package/src/env.ts +0 -152
  87. package/src/hooks.ts +0 -256
  88. package/src/index.test.ts +0 -840
  89. package/src/index.ts +0 -4
  90. package/src/middleware.ts +0 -68
  91. package/src/subscribe/StreamFanout.ts +0 -82
  92. package/src/subscribe/TokenSubscription.ts +0 -524
  93. package/src/subscribe/helpers.ts +0 -153
  94. package/src/subscribe/index.ts +0 -1
  95. package/src/topic.ts +0 -51
  96. package/src/types.ts +0 -499
  97. package/src/util.ts +0 -104
  98. package/tsconfig.build.json +0 -7
  99. package/tsconfig.json +0 -114
  100. package/tsdown.config.ts +0 -18
  101. package/vitest.config.ts +0 -22
package/CHANGELOG.md CHANGED
@@ -1,4 +1,4 @@
1
- # @inngest/realtime
1
+ # @bunworks/inngest-realtime
2
2
 
3
3
  ## 0.4.5
4
4
 
@@ -8,7 +8,7 @@
8
8
 
9
9
  - [#1166](https://github.com/inngest/inngest-js/pull/1166) [`1d08b13b`](https://github.com/inngest/inngest-js/commit/1d08b13b589fd17eab55241cb1c34e826776a00f) Thanks [@jpwilliams](https://github.com/jpwilliams)! - Re-export realtime types from `middleware` entrypoint
10
10
 
11
- - [#1159](https://github.com/inngest/inngest-js/pull/1159) [`a79b55af`](https://github.com/inngest/inngest-js/commit/a79b55af4a759b933c2c101798b21f3a14df58b2) Thanks [@jpwilliams](https://github.com/jpwilliams)! - Fix `@inngest/realtime` attempting to nest steps with `inngest@3.45.0`
11
+ - [#1159](https://github.com/inngest/inngest-js/pull/1159) [`a79b55af`](https://github.com/inngest/inngest-js/commit/a79b55af4a759b933c2c101798b21f3a14df58b2) Thanks [@jpwilliams](https://github.com/jpwilliams)! - Fix `@bunworks/inngest-realtime` attempting to nest steps with `inngest@3.45.0`
12
12
 
13
13
  - Updated dependencies [[`9fa34d12`](https://github.com/inngest/inngest-js/commit/9fa34d1250e25256ddb69606d7932419f131e998), [`ab446473`](https://github.com/inngest/inngest-js/commit/ab4464730ffea7d85de7db603fbda9fb3ac645fe), [`b5139f04`](https://github.com/inngest/inngest-js/commit/b5139f041cfef8a78d75bf9d0254d892e40060fe)]:
14
14
  - inngest@3.45.1
@@ -53,7 +53,7 @@
53
53
 
54
54
  ### Patch Changes
55
55
 
56
- - [#1068](https://github.com/inngest/inngest-js/pull/1068) [`b43bc02`](https://github.com/inngest/inngest-js/commit/b43bc0273d16b5f0fd3ab69d31bcd373245bb27f) Thanks [@jpwilliams](https://github.com/jpwilliams)! - Add `@inngest/realtime/browser` entrypoint to bypass some import issues
56
+ - [#1068](https://github.com/inngest/inngest-js/pull/1068) [`b43bc02`](https://github.com/inngest/inngest-js/commit/b43bc0273d16b5f0fd3ab69d31bcd373245bb27f) Thanks [@jpwilliams](https://github.com/jpwilliams)! - Add `@bunworks/inngest-realtime/browser` entrypoint to bypass some import issues
57
57
 
58
58
  - Updated dependencies [[`8ba5486`](https://github.com/inngest/inngest-js/commit/8ba548647ab17b91b750eea997c016dedee9f1c2)]:
59
59
  - inngest@3.40.3
@@ -71,7 +71,7 @@
71
71
 
72
72
  ### Patch Changes
73
73
 
74
- - [#960](https://github.com/inngest/inngest-js/pull/960) [`fc966ca`](https://github.com/inngest/inngest-js/commit/fc966ca94f699d6534f2fc5c85bbcf5be3c6795a) Thanks [@jpwilliams](https://github.com/jpwilliams)! - Fix requiring signing key for dev in `@inngest/realtime`
74
+ - [#960](https://github.com/inngest/inngest-js/pull/960) [`fc966ca`](https://github.com/inngest/inngest-js/commit/fc966ca94f699d6534f2fc5c85bbcf5be3c6795a) Thanks [@jpwilliams](https://github.com/jpwilliams)! - Fix requiring signing key for dev in `@bunworks/inngest-realtime`
75
75
 
76
76
  - [#965](https://github.com/inngest/inngest-js/pull/965) [`e55d93e`](https://github.com/inngest/inngest-js/commit/e55d93ef481010e677623978ec89e918fcdd606e) Thanks [@jpwilliams](https://github.com/jpwilliams)! - Fix throw of `TypeError: Failed to execute 'cancel' on 'ReadableStream': Cannot cancel a locked stream` when unmounting or cancelling a stream utilizing the callback feature
77
77
 
@@ -155,7 +155,7 @@
155
155
 
156
156
  ### Patch Changes
157
157
 
158
- - [#902](https://github.com/inngest/inngest-js/pull/902) [`9546be7`](https://github.com/inngest/inngest-js/commit/9546be72b03a01c0f9d8efcf8ca5bb2639e23473) Thanks [@jpwilliams](https://github.com/jpwilliams)! - Allow connecting to cloud/dev in `@inngest/realtime`
158
+ - [#902](https://github.com/inngest/inngest-js/pull/902) [`9546be7`](https://github.com/inngest/inngest-js/commit/9546be72b03a01c0f9d8efcf8ca5bb2639e23473) Thanks [@jpwilliams](https://github.com/jpwilliams)! - Allow connecting to cloud/dev in `@bunworks/inngest-realtime`
159
159
 
160
160
  ## 0.0.2
161
161
 
@@ -169,4 +169,4 @@
169
169
 
170
170
  ### Patch Changes
171
171
 
172
- - [#866](https://github.com/inngest/inngest-js/pull/866) [`98efeb4`](https://github.com/inngest/inngest-js/commit/98efeb4eb6f80f418251a22377f428b42b9fff37) Thanks [@jpwilliams](https://github.com/jpwilliams)! - Initial release of `@inngest/realtime` v0
172
+ - [#866](https://github.com/inngest/inngest-js/pull/866) [`98efeb4`](https://github.com/inngest/inngest-js/commit/98efeb4eb6f80f418251a22377f428b42b9fff37) Thanks [@jpwilliams](https://github.com/jpwilliams)! - Initial release of `@bunworks/inngest-realtime` v0
package/README.md CHANGED
@@ -1 +1 @@
1
- # @inngest/realtime
1
+ # @bunworks/inngest-realtime
@@ -0,0 +1,29 @@
1
+ //#region \0rolldown/runtime.js
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __copyProps = (to, from, except, desc) => {
9
+ if (from && typeof from === "object" || typeof from === "function") {
10
+ for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
11
+ key = keys[i];
12
+ if (!__hasOwnProp.call(to, key) && key !== except) {
13
+ __defProp(to, key, {
14
+ get: ((k) => from[k]).bind(null, key),
15
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
16
+ });
17
+ }
18
+ }
19
+ }
20
+ return to;
21
+ };
22
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
23
+ value: mod,
24
+ enumerable: true
25
+ }) : target, mod));
26
+
27
+ //#endregion
28
+
29
+ exports.__toESM = __toESM;
package/api.cjs ADDED
@@ -0,0 +1,45 @@
1
+ const require_runtime = require('./_virtual/_rolldown/runtime.cjs');
2
+ const require_env = require('./env.cjs');
3
+ const require_util = require('./util.cjs');
4
+ let zod = require("zod");
5
+
6
+ //#region src/api.ts
7
+ const tokenSchema = zod.z.object({ jwt: zod.z.string() });
8
+ const api = { async getSubscriptionToken({ channel, topics, signingKey, signingKeyFallback, apiBaseUrl }) {
9
+ let url;
10
+ const path = "/v1/realtime/token";
11
+ const inputBaseUrl = apiBaseUrl || require_env.getEnvVar("INNGEST_BASE_URL") || require_env.getEnvVar("INNGEST_API_BASE_URL");
12
+ const devEnvVar = require_env.getEnvVar("INNGEST_DEV");
13
+ if (inputBaseUrl) url = new URL(path, inputBaseUrl);
14
+ else if (devEnvVar) try {
15
+ const devUrl = new URL(devEnvVar);
16
+ url = new URL(path, devUrl);
17
+ } catch {
18
+ if (require_util.parseAsBoolean(devEnvVar)) url = new URL(path, "http://localhost:8288/");
19
+ else url = new URL(path, "https://api.inngest.com/");
20
+ }
21
+ else url = new URL(path, require_env.getEnvVar("NODE_ENV") === "production" ? "https://api.inngest.com/" : "http://localhost:8288/");
22
+ const body = topics.map((topic) => ({
23
+ channel,
24
+ name: topic,
25
+ kind: "run"
26
+ }));
27
+ const res = await require_util.fetchWithAuthFallback({
28
+ authToken: signingKey,
29
+ authTokenFallback: signingKeyFallback,
30
+ fetch,
31
+ url,
32
+ options: {
33
+ method: "POST",
34
+ body: JSON.stringify(body),
35
+ headers: { "Content-Type": "application/json" }
36
+ }
37
+ });
38
+ if (!res.ok) throw new Error(`Failed to get subscription token: ${res.status} ${res.statusText} - ${await res.text()}`);
39
+ const data = await res.json();
40
+ return tokenSchema.parse(data).jwt;
41
+ } };
42
+
43
+ //#endregion
44
+ exports.api = api;
45
+ //# sourceMappingURL=api.cjs.map
package/api.cjs.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.cjs","names":["z","getEnvVar","parseAsBoolean","fetchWithAuthFallback"],"sources":["../src/api.ts"],"sourcesContent":["import { z } from \"zod\";\r\nimport { getEnvVar } from \"./env\";\r\nimport { fetchWithAuthFallback, parseAsBoolean } from \"./util\";\r\n\r\nconst tokenSchema = z.object({ jwt: z.string() });\r\n\r\nexport const api = {\r\n async getSubscriptionToken({\r\n channel,\r\n topics,\r\n signingKey,\r\n signingKeyFallback,\r\n apiBaseUrl,\r\n }: {\r\n channel: string;\r\n topics: string[];\r\n signingKey: string | undefined;\r\n signingKeyFallback: string | undefined;\r\n apiBaseUrl: string | undefined;\r\n }): Promise<string> {\r\n let url: URL;\r\n const path = \"/v1/realtime/token\";\r\n const inputBaseUrl =\r\n apiBaseUrl ||\r\n getEnvVar(\"INNGEST_BASE_URL\") ||\r\n getEnvVar(\"INNGEST_API_BASE_URL\");\r\n\r\n const devEnvVar = getEnvVar(\"INNGEST_DEV\");\r\n\r\n if (inputBaseUrl) {\r\n url = new URL(path, inputBaseUrl);\r\n } else if (devEnvVar) {\r\n try {\r\n const devUrl = new URL(devEnvVar);\r\n url = new URL(path, devUrl);\r\n } catch {\r\n if (parseAsBoolean(devEnvVar)) {\r\n url = new URL(path, \"http://localhost:8288/\");\r\n } else {\r\n url = new URL(path, \"https://api.inngest.com/\");\r\n }\r\n }\r\n } else {\r\n url = new URL(\r\n path,\r\n getEnvVar(\"NODE_ENV\") === \"production\"\r\n ? \"https://api.inngest.com/\"\r\n : \"http://localhost:8288/\",\r\n );\r\n }\r\n\r\n const body = topics.map((topic) => ({\r\n channel,\r\n name: topic,\r\n kind: \"run\",\r\n }));\r\n\r\n const res = await fetchWithAuthFallback({\r\n authToken: signingKey,\r\n authTokenFallback: signingKeyFallback,\r\n fetch,\r\n url,\r\n options: {\r\n method: \"POST\",\r\n body: JSON.stringify(body),\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n },\r\n });\r\n\r\n if (!res.ok) {\r\n throw new Error(\r\n `Failed to get subscription token: ${res.status} ${\r\n res.statusText\r\n } - ${await res.text()}`,\r\n );\r\n }\r\n\r\n const data = await res.json();\r\n return tokenSchema.parse(data).jwt;\r\n },\r\n};\r\n"],"mappings":";;;;;;AAIA,MAAM,cAAcA,MAAE,OAAO,EAAE,KAAKA,MAAE,QAAQ,EAAE,CAAC;AAEjD,MAAa,MAAM,EACjB,MAAM,qBAAqB,EACzB,SACA,QACA,YACA,oBACA,cAOkB;CAClB,IAAI;CACJ,MAAM,OAAO;CACb,MAAM,eACJ,cACAC,sBAAU,mBAAmB,IAC7BA,sBAAU,uBAAuB;CAEnC,MAAM,YAAYA,sBAAU,cAAc;AAE1C,KAAI,aACF,OAAM,IAAI,IAAI,MAAM,aAAa;UACxB,UACT,KAAI;EACF,MAAM,SAAS,IAAI,IAAI,UAAU;AACjC,QAAM,IAAI,IAAI,MAAM,OAAO;SACrB;AACN,MAAIC,4BAAe,UAAU,CAC3B,OAAM,IAAI,IAAI,MAAM,yBAAyB;MAE7C,OAAM,IAAI,IAAI,MAAM,2BAA2B;;KAInD,OAAM,IAAI,IACR,MACAD,sBAAU,WAAW,KAAK,eACtB,6BACA,yBACL;CAGH,MAAM,OAAO,OAAO,KAAK,WAAW;EAClC;EACA,MAAM;EACN,MAAM;EACP,EAAE;CAEH,MAAM,MAAM,MAAME,mCAAsB;EACtC,WAAW;EACX,mBAAmB;EACnB;EACA;EACA,SAAS;GACP,QAAQ;GACR,MAAM,KAAK,UAAU,KAAK;GAC1B,SAAS,EACP,gBAAgB,oBACjB;GACF;EACF,CAAC;AAEF,KAAI,CAAC,IAAI,GACP,OAAM,IAAI,MACR,qCAAqC,IAAI,OAAO,GAC9C,IAAI,WACL,KAAK,MAAM,IAAI,MAAM,GACvB;CAGH,MAAM,OAAO,MAAM,IAAI,MAAM;AAC7B,QAAO,YAAY,MAAM,KAAK,CAAC;GAElC"}
package/api.mjs ADDED
@@ -0,0 +1,44 @@
1
+ import { getEnvVar } from "./env.mjs";
2
+ import { fetchWithAuthFallback, parseAsBoolean } from "./util.mjs";
3
+ import { z } from "zod";
4
+
5
+ //#region src/api.ts
6
+ const tokenSchema = z.object({ jwt: z.string() });
7
+ const api = { async getSubscriptionToken({ channel, topics, signingKey, signingKeyFallback, apiBaseUrl }) {
8
+ let url;
9
+ const path = "/v1/realtime/token";
10
+ const inputBaseUrl = apiBaseUrl || getEnvVar("INNGEST_BASE_URL") || getEnvVar("INNGEST_API_BASE_URL");
11
+ const devEnvVar = getEnvVar("INNGEST_DEV");
12
+ if (inputBaseUrl) url = new URL(path, inputBaseUrl);
13
+ else if (devEnvVar) try {
14
+ const devUrl = new URL(devEnvVar);
15
+ url = new URL(path, devUrl);
16
+ } catch {
17
+ if (parseAsBoolean(devEnvVar)) url = new URL(path, "http://localhost:8288/");
18
+ else url = new URL(path, "https://api.inngest.com/");
19
+ }
20
+ else url = new URL(path, getEnvVar("NODE_ENV") === "production" ? "https://api.inngest.com/" : "http://localhost:8288/");
21
+ const body = topics.map((topic) => ({
22
+ channel,
23
+ name: topic,
24
+ kind: "run"
25
+ }));
26
+ const res = await fetchWithAuthFallback({
27
+ authToken: signingKey,
28
+ authTokenFallback: signingKeyFallback,
29
+ fetch,
30
+ url,
31
+ options: {
32
+ method: "POST",
33
+ body: JSON.stringify(body),
34
+ headers: { "Content-Type": "application/json" }
35
+ }
36
+ });
37
+ if (!res.ok) throw new Error(`Failed to get subscription token: ${res.status} ${res.statusText} - ${await res.text()}`);
38
+ const data = await res.json();
39
+ return tokenSchema.parse(data).jwt;
40
+ } };
41
+
42
+ //#endregion
43
+ export { api };
44
+ //# sourceMappingURL=api.mjs.map
package/api.mjs.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.mjs","names":[],"sources":["../src/api.ts"],"sourcesContent":["import { z } from \"zod\";\r\nimport { getEnvVar } from \"./env\";\r\nimport { fetchWithAuthFallback, parseAsBoolean } from \"./util\";\r\n\r\nconst tokenSchema = z.object({ jwt: z.string() });\r\n\r\nexport const api = {\r\n async getSubscriptionToken({\r\n channel,\r\n topics,\r\n signingKey,\r\n signingKeyFallback,\r\n apiBaseUrl,\r\n }: {\r\n channel: string;\r\n topics: string[];\r\n signingKey: string | undefined;\r\n signingKeyFallback: string | undefined;\r\n apiBaseUrl: string | undefined;\r\n }): Promise<string> {\r\n let url: URL;\r\n const path = \"/v1/realtime/token\";\r\n const inputBaseUrl =\r\n apiBaseUrl ||\r\n getEnvVar(\"INNGEST_BASE_URL\") ||\r\n getEnvVar(\"INNGEST_API_BASE_URL\");\r\n\r\n const devEnvVar = getEnvVar(\"INNGEST_DEV\");\r\n\r\n if (inputBaseUrl) {\r\n url = new URL(path, inputBaseUrl);\r\n } else if (devEnvVar) {\r\n try {\r\n const devUrl = new URL(devEnvVar);\r\n url = new URL(path, devUrl);\r\n } catch {\r\n if (parseAsBoolean(devEnvVar)) {\r\n url = new URL(path, \"http://localhost:8288/\");\r\n } else {\r\n url = new URL(path, \"https://api.inngest.com/\");\r\n }\r\n }\r\n } else {\r\n url = new URL(\r\n path,\r\n getEnvVar(\"NODE_ENV\") === \"production\"\r\n ? \"https://api.inngest.com/\"\r\n : \"http://localhost:8288/\",\r\n );\r\n }\r\n\r\n const body = topics.map((topic) => ({\r\n channel,\r\n name: topic,\r\n kind: \"run\",\r\n }));\r\n\r\n const res = await fetchWithAuthFallback({\r\n authToken: signingKey,\r\n authTokenFallback: signingKeyFallback,\r\n fetch,\r\n url,\r\n options: {\r\n method: \"POST\",\r\n body: JSON.stringify(body),\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n },\r\n });\r\n\r\n if (!res.ok) {\r\n throw new Error(\r\n `Failed to get subscription token: ${res.status} ${\r\n res.statusText\r\n } - ${await res.text()}`,\r\n );\r\n }\r\n\r\n const data = await res.json();\r\n return tokenSchema.parse(data).jwt;\r\n },\r\n};\r\n"],"mappings":";;;;;AAIA,MAAM,cAAc,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;AAEjD,MAAa,MAAM,EACjB,MAAM,qBAAqB,EACzB,SACA,QACA,YACA,oBACA,cAOkB;CAClB,IAAI;CACJ,MAAM,OAAO;CACb,MAAM,eACJ,cACA,UAAU,mBAAmB,IAC7B,UAAU,uBAAuB;CAEnC,MAAM,YAAY,UAAU,cAAc;AAE1C,KAAI,aACF,OAAM,IAAI,IAAI,MAAM,aAAa;UACxB,UACT,KAAI;EACF,MAAM,SAAS,IAAI,IAAI,UAAU;AACjC,QAAM,IAAI,IAAI,MAAM,OAAO;SACrB;AACN,MAAI,eAAe,UAAU,CAC3B,OAAM,IAAI,IAAI,MAAM,yBAAyB;MAE7C,OAAM,IAAI,IAAI,MAAM,2BAA2B;;KAInD,OAAM,IAAI,IACR,MACA,UAAU,WAAW,KAAK,eACtB,6BACA,yBACL;CAGH,MAAM,OAAO,OAAO,KAAK,WAAW;EAClC;EACA,MAAM;EACN,MAAM;EACP,EAAE;CAEH,MAAM,MAAM,MAAM,sBAAsB;EACtC,WAAW;EACX,mBAAmB;EACnB;EACA;EACA,SAAS;GACP,QAAQ;GACR,MAAM,KAAK,UAAU,KAAK;GAC1B,SAAS,EACP,gBAAgB,oBACjB;GACF;EACF,CAAC;AAEF,KAAI,CAAC,IAAI,GACP,OAAM,IAAI,MACR,qCAAqC,IAAI,OAAO,GAC9C,IAAI,WACL,KAAK,MAAM,IAAI,MAAM,GACvB;CAGH,MAAM,OAAO,MAAM,IAAI,MAAM;AAC7B,QAAO,YAAY,MAAM,KAAK,CAAC;GAElC"}
package/channel.cjs ADDED
@@ -0,0 +1,67 @@
1
+ const require_topic = require('./topic.cjs');
2
+
3
+ //#region src/channel.ts
4
+ /**
5
+ * Create a channel builder
6
+ */
7
+ const channel = (id) => {
8
+ let channelDefinition;
9
+ const topics = {};
10
+ const builder = (...args) => {
11
+ const finalId = typeof id === "string" ? id : id(...args);
12
+ return {
13
+ name: finalId,
14
+ topics,
15
+ ...Object.entries(topics).reduce((acc, [name, topic]) => {
16
+ acc[name] = createTopicFn(finalId, topic);
17
+ return acc;
18
+ }, {})
19
+ };
20
+ };
21
+ const extras = {
22
+ topics,
23
+ addTopic: (topic) => {
24
+ topics[topic.name] = topic;
25
+ return channelDefinition;
26
+ }
27
+ };
28
+ channelDefinition = Object.assign(builder, extras);
29
+ return channelDefinition;
30
+ };
31
+ /**
32
+ * Create a type-only channel with proxy-based topic access
33
+ */
34
+ const typeOnlyChannel = (id) => {
35
+ const blankChannel = {
36
+ ...channel(id),
37
+ topics: new Proxy({}, { get: (target, prop) => {
38
+ if (prop in target) return target[prop];
39
+ if (typeof prop === "string") return require_topic.topic(prop);
40
+ } })
41
+ };
42
+ return new Proxy(blankChannel, { get: (target, prop) => {
43
+ if (prop in target) return target[prop];
44
+ if (typeof prop === "string") return createTopicFn(id, require_topic.topic(prop));
45
+ } });
46
+ };
47
+ const createTopicFn = (channelId, topic) => {
48
+ return async (data) => {
49
+ const schema = topic.getSchema();
50
+ if (schema) try {
51
+ await schema["~standard"].validate(data);
52
+ } catch (err) {
53
+ console.error(`Failed schema validation for channel "${channelId}" topic "${topic.name}":`, err);
54
+ throw new Error("Failed schema validation");
55
+ }
56
+ return {
57
+ channel: channelId,
58
+ topic: topic.name,
59
+ data
60
+ };
61
+ };
62
+ };
63
+
64
+ //#endregion
65
+ exports.channel = channel;
66
+ exports.typeOnlyChannel = typeOnlyChannel;
67
+ //# sourceMappingURL=channel.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channel.cjs","names":["topic"],"sources":["../src/channel.ts"],"sourcesContent":["import { topic } from \"./topic\";\r\nimport { type Realtime } from \"./types\";\r\n\r\n/**\r\n * Create a channel builder\r\n */\r\nexport const channel: Realtime.Channel.Builder = (\r\n /**\r\n * Channel ID or builder function\r\n */\r\n id,\r\n) => {\r\n // eslint-disable-next-line prefer-const, @typescript-eslint/no-explicit-any\r\n let channelDefinition: any;\r\n const topics: Record<string, Realtime.Topic.Definition> = {};\r\n\r\n const builder = (...args: unknown[]) => {\r\n const finalId: string = typeof id === \"string\" ? id : id(...args);\r\n\r\n const topicsFns = Object.entries(topics).reduce<\r\n Record<string, (data: unknown) => Promise<Realtime.Message.Input>>\r\n >((acc, [name, topic]) => {\r\n acc[name] = createTopicFn(finalId, topic);\r\n\r\n return acc;\r\n }, {});\r\n\r\n const channel: Realtime.Channel = {\r\n name: finalId,\r\n topics,\r\n ...topicsFns,\r\n };\r\n\r\n return channel;\r\n };\r\n\r\n const extras: Record<string, unknown> = {\r\n topics,\r\n addTopic: (topic: Realtime.Topic.Definition) => {\r\n topics[topic.name] = topic;\r\n\r\n return channelDefinition;\r\n },\r\n };\r\n\r\n channelDefinition = Object.assign(builder, extras);\r\n\r\n return channelDefinition;\r\n};\r\n\r\n/**\r\n * Create a type-only channel with proxy-based topic access\r\n */\r\nexport const typeOnlyChannel = <\r\n TChannelDef extends Realtime.Channel.Definition,\r\n TId extends string = Realtime.Channel.Definition.InferId<TChannelDef>,\r\n TTopics extends Record<string, Realtime.Topic.Definition> =\r\n Realtime.Channel.Definition.InferTopics<TChannelDef>,\r\n TOutput extends Realtime.Channel = Realtime.Channel<TId, TTopics>,\r\n>(\r\n /**\r\n * Channel ID\r\n */\r\n id: TId,\r\n) => {\r\n const blankChannel = {\r\n ...channel(id),\r\n topics: new Proxy(\r\n {},\r\n {\r\n get: (target, prop) => {\r\n if (prop in target) {\r\n return target[prop as keyof typeof target];\r\n }\r\n\r\n if (typeof prop === \"string\") {\r\n return topic(prop);\r\n }\r\n },\r\n },\r\n ),\r\n };\r\n\r\n const ch = new Proxy(blankChannel, {\r\n get: (target, prop) => {\r\n if (prop in target) {\r\n return target[prop as keyof typeof target];\r\n }\r\n\r\n if (typeof prop === \"string\") {\r\n return createTopicFn(id, topic(prop));\r\n }\r\n },\r\n });\r\n\r\n return ch as unknown as TOutput;\r\n};\r\n\r\nconst createTopicFn = (channelId: string, topic: Realtime.Topic.Definition) => {\r\n return async (data: unknown) => {\r\n const schema = topic.getSchema();\r\n if (schema) {\r\n try {\r\n await schema[\"~standard\"].validate(data);\r\n } catch (err) {\r\n console.error(\r\n `Failed schema validation for channel \"${channelId}\" topic \"${topic.name}\":`,\r\n err,\r\n );\r\n throw new Error(\"Failed schema validation\");\r\n }\r\n }\r\n\r\n return {\r\n channel: channelId,\r\n topic: topic.name,\r\n data,\r\n };\r\n };\r\n};\r\n"],"mappings":";;;;;;AAMA,MAAa,WAIX,OACG;CAEH,IAAI;CACJ,MAAM,SAAoD,EAAE;CAE5D,MAAM,WAAW,GAAG,SAAoB;EACtC,MAAM,UAAkB,OAAO,OAAO,WAAW,KAAK,GAAG,GAAG,KAAK;AAgBjE,SANkC;GAChC,MAAM;GACN;GACA,GAXgB,OAAO,QAAQ,OAAO,CAAC,QAEtC,KAAK,CAAC,MAAM,WAAW;AACxB,QAAI,QAAQ,cAAc,SAAS,MAAM;AAEzC,WAAO;MACN,EAAE,CAAC;GAML;;CAKH,MAAM,SAAkC;EACtC;EACA,WAAW,UAAqC;AAC9C,UAAO,MAAM,QAAQ;AAErB,UAAO;;EAEV;AAED,qBAAoB,OAAO,OAAO,SAAS,OAAO;AAElD,QAAO;;;;;AAMT,MAAa,mBAUX,OACG;CACH,MAAM,eAAe;EACnB,GAAG,QAAQ,GAAG;EACd,QAAQ,IAAI,MACV,EAAE,EACF,EACE,MAAM,QAAQ,SAAS;AACrB,OAAI,QAAQ,OACV,QAAO,OAAO;AAGhB,OAAI,OAAO,SAAS,SAClB,QAAOA,oBAAM,KAAK;KAGvB,CACF;EACF;AAcD,QAZW,IAAI,MAAM,cAAc,EACjC,MAAM,QAAQ,SAAS;AACrB,MAAI,QAAQ,OACV,QAAO,OAAO;AAGhB,MAAI,OAAO,SAAS,SAClB,QAAO,cAAc,IAAIA,oBAAM,KAAK,CAAC;IAG1C,CAAC;;AAKJ,MAAM,iBAAiB,WAAmB,UAAqC;AAC7E,QAAO,OAAO,SAAkB;EAC9B,MAAM,SAAS,MAAM,WAAW;AAChC,MAAI,OACF,KAAI;AACF,SAAM,OAAO,aAAa,SAAS,KAAK;WACjC,KAAK;AACZ,WAAQ,MACN,yCAAyC,UAAU,WAAW,MAAM,KAAK,KACzE,IACD;AACD,SAAM,IAAI,MAAM,2BAA2B;;AAI/C,SAAO;GACL,SAAS;GACT,OAAO,MAAM;GACb;GACD"}
package/channel.d.cts ADDED
@@ -0,0 +1,19 @@
1
+ import { Realtime } from "./types.cjs";
2
+
3
+ //#region src/channel.d.ts
4
+ /**
5
+ * Create a channel builder
6
+ */
7
+ declare const channel: Realtime.Channel.Builder;
8
+ /**
9
+ * Create a type-only channel with proxy-based topic access
10
+ */
11
+ declare const typeOnlyChannel: <TChannelDef extends Realtime.Channel.Definition, TId extends string = Realtime.Channel.Definition.InferId<TChannelDef>, TTopics extends Record<string, Realtime.Topic.Definition> = Realtime.Channel.Definition.InferTopics<TChannelDef>, TOutput extends Realtime.Channel = Realtime.Channel<TId, TTopics>>(
12
+ /**
13
+ * Channel ID
14
+ */
15
+
16
+ id: TId) => TOutput;
17
+ //#endregion
18
+ export { channel, typeOnlyChannel };
19
+ //# sourceMappingURL=channel.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channel.d.cts","names":[],"sources":["../src/channel.ts"],"mappings":";;;;;AAMA;cAAa,OAAA,EAAS,QAAA,CAAS,OAAA,CAAQ,OAAA;;;;cA+C1B,eAAA,uBACS,QAAA,CAAS,OAAA,CAAQ,UAAA,uBAChB,QAAA,CAAS,OAAA,CAAQ,UAAA,CAAW,OAAA,CAAQ,WAAA,mBACzC,MAAA,SAAe,QAAA,CAAS,KAAA,CAAM,UAAA,IAC5C,QAAA,CAAS,OAAA,CAAQ,UAAA,CAAW,WAAA,CAAY,WAAA,mBAC1B,QAAA,CAAS,OAAA,GAAU,QAAA,CAAS,OAAA,CAAQ,GAAA,EAAK,OAAA;;;;;AAKzD,EAAA,EAAI,GAAA,KAgCoB,OAAA"}
package/channel.d.mts ADDED
@@ -0,0 +1,19 @@
1
+ import { Realtime } from "./types.mjs";
2
+
3
+ //#region src/channel.d.ts
4
+ /**
5
+ * Create a channel builder
6
+ */
7
+ declare const channel: Realtime.Channel.Builder;
8
+ /**
9
+ * Create a type-only channel with proxy-based topic access
10
+ */
11
+ declare const typeOnlyChannel: <TChannelDef extends Realtime.Channel.Definition, TId extends string = Realtime.Channel.Definition.InferId<TChannelDef>, TTopics extends Record<string, Realtime.Topic.Definition> = Realtime.Channel.Definition.InferTopics<TChannelDef>, TOutput extends Realtime.Channel = Realtime.Channel<TId, TTopics>>(
12
+ /**
13
+ * Channel ID
14
+ */
15
+
16
+ id: TId) => TOutput;
17
+ //#endregion
18
+ export { channel, typeOnlyChannel };
19
+ //# sourceMappingURL=channel.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channel.d.mts","names":[],"sources":["../src/channel.ts"],"mappings":";;;;;AAMA;cAAa,OAAA,EAAS,QAAA,CAAS,OAAA,CAAQ,OAAA;;;;cA+C1B,eAAA,uBACS,QAAA,CAAS,OAAA,CAAQ,UAAA,uBAChB,QAAA,CAAS,OAAA,CAAQ,UAAA,CAAW,OAAA,CAAQ,WAAA,mBACzC,MAAA,SAAe,QAAA,CAAS,KAAA,CAAM,UAAA,IAC5C,QAAA,CAAS,OAAA,CAAQ,UAAA,CAAW,WAAA,CAAY,WAAA,mBAC1B,QAAA,CAAS,OAAA,GAAU,QAAA,CAAS,OAAA,CAAQ,GAAA,EAAK,OAAA;;;;;AAKzD,EAAA,EAAI,GAAA,KAgCoB,OAAA"}
package/channel.mjs ADDED
@@ -0,0 +1,66 @@
1
+ import { topic } from "./topic.mjs";
2
+
3
+ //#region src/channel.ts
4
+ /**
5
+ * Create a channel builder
6
+ */
7
+ const channel = (id) => {
8
+ let channelDefinition;
9
+ const topics = {};
10
+ const builder = (...args) => {
11
+ const finalId = typeof id === "string" ? id : id(...args);
12
+ return {
13
+ name: finalId,
14
+ topics,
15
+ ...Object.entries(topics).reduce((acc, [name, topic]) => {
16
+ acc[name] = createTopicFn(finalId, topic);
17
+ return acc;
18
+ }, {})
19
+ };
20
+ };
21
+ const extras = {
22
+ topics,
23
+ addTopic: (topic) => {
24
+ topics[topic.name] = topic;
25
+ return channelDefinition;
26
+ }
27
+ };
28
+ channelDefinition = Object.assign(builder, extras);
29
+ return channelDefinition;
30
+ };
31
+ /**
32
+ * Create a type-only channel with proxy-based topic access
33
+ */
34
+ const typeOnlyChannel = (id) => {
35
+ const blankChannel = {
36
+ ...channel(id),
37
+ topics: new Proxy({}, { get: (target, prop) => {
38
+ if (prop in target) return target[prop];
39
+ if (typeof prop === "string") return topic(prop);
40
+ } })
41
+ };
42
+ return new Proxy(blankChannel, { get: (target, prop) => {
43
+ if (prop in target) return target[prop];
44
+ if (typeof prop === "string") return createTopicFn(id, topic(prop));
45
+ } });
46
+ };
47
+ const createTopicFn = (channelId, topic) => {
48
+ return async (data) => {
49
+ const schema = topic.getSchema();
50
+ if (schema) try {
51
+ await schema["~standard"].validate(data);
52
+ } catch (err) {
53
+ console.error(`Failed schema validation for channel "${channelId}" topic "${topic.name}":`, err);
54
+ throw new Error("Failed schema validation");
55
+ }
56
+ return {
57
+ channel: channelId,
58
+ topic: topic.name,
59
+ data
60
+ };
61
+ };
62
+ };
63
+
64
+ //#endregion
65
+ export { channel, typeOnlyChannel };
66
+ //# sourceMappingURL=channel.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channel.mjs","names":[],"sources":["../src/channel.ts"],"sourcesContent":["import { topic } from \"./topic\";\r\nimport { type Realtime } from \"./types\";\r\n\r\n/**\r\n * Create a channel builder\r\n */\r\nexport const channel: Realtime.Channel.Builder = (\r\n /**\r\n * Channel ID or builder function\r\n */\r\n id,\r\n) => {\r\n // eslint-disable-next-line prefer-const, @typescript-eslint/no-explicit-any\r\n let channelDefinition: any;\r\n const topics: Record<string, Realtime.Topic.Definition> = {};\r\n\r\n const builder = (...args: unknown[]) => {\r\n const finalId: string = typeof id === \"string\" ? id : id(...args);\r\n\r\n const topicsFns = Object.entries(topics).reduce<\r\n Record<string, (data: unknown) => Promise<Realtime.Message.Input>>\r\n >((acc, [name, topic]) => {\r\n acc[name] = createTopicFn(finalId, topic);\r\n\r\n return acc;\r\n }, {});\r\n\r\n const channel: Realtime.Channel = {\r\n name: finalId,\r\n topics,\r\n ...topicsFns,\r\n };\r\n\r\n return channel;\r\n };\r\n\r\n const extras: Record<string, unknown> = {\r\n topics,\r\n addTopic: (topic: Realtime.Topic.Definition) => {\r\n topics[topic.name] = topic;\r\n\r\n return channelDefinition;\r\n },\r\n };\r\n\r\n channelDefinition = Object.assign(builder, extras);\r\n\r\n return channelDefinition;\r\n};\r\n\r\n/**\r\n * Create a type-only channel with proxy-based topic access\r\n */\r\nexport const typeOnlyChannel = <\r\n TChannelDef extends Realtime.Channel.Definition,\r\n TId extends string = Realtime.Channel.Definition.InferId<TChannelDef>,\r\n TTopics extends Record<string, Realtime.Topic.Definition> =\r\n Realtime.Channel.Definition.InferTopics<TChannelDef>,\r\n TOutput extends Realtime.Channel = Realtime.Channel<TId, TTopics>,\r\n>(\r\n /**\r\n * Channel ID\r\n */\r\n id: TId,\r\n) => {\r\n const blankChannel = {\r\n ...channel(id),\r\n topics: new Proxy(\r\n {},\r\n {\r\n get: (target, prop) => {\r\n if (prop in target) {\r\n return target[prop as keyof typeof target];\r\n }\r\n\r\n if (typeof prop === \"string\") {\r\n return topic(prop);\r\n }\r\n },\r\n },\r\n ),\r\n };\r\n\r\n const ch = new Proxy(blankChannel, {\r\n get: (target, prop) => {\r\n if (prop in target) {\r\n return target[prop as keyof typeof target];\r\n }\r\n\r\n if (typeof prop === \"string\") {\r\n return createTopicFn(id, topic(prop));\r\n }\r\n },\r\n });\r\n\r\n return ch as unknown as TOutput;\r\n};\r\n\r\nconst createTopicFn = (channelId: string, topic: Realtime.Topic.Definition) => {\r\n return async (data: unknown) => {\r\n const schema = topic.getSchema();\r\n if (schema) {\r\n try {\r\n await schema[\"~standard\"].validate(data);\r\n } catch (err) {\r\n console.error(\r\n `Failed schema validation for channel \"${channelId}\" topic \"${topic.name}\":`,\r\n err,\r\n );\r\n throw new Error(\"Failed schema validation\");\r\n }\r\n }\r\n\r\n return {\r\n channel: channelId,\r\n topic: topic.name,\r\n data,\r\n };\r\n };\r\n};\r\n"],"mappings":";;;;;;AAMA,MAAa,WAIX,OACG;CAEH,IAAI;CACJ,MAAM,SAAoD,EAAE;CAE5D,MAAM,WAAW,GAAG,SAAoB;EACtC,MAAM,UAAkB,OAAO,OAAO,WAAW,KAAK,GAAG,GAAG,KAAK;AAgBjE,SANkC;GAChC,MAAM;GACN;GACA,GAXgB,OAAO,QAAQ,OAAO,CAAC,QAEtC,KAAK,CAAC,MAAM,WAAW;AACxB,QAAI,QAAQ,cAAc,SAAS,MAAM;AAEzC,WAAO;MACN,EAAE,CAAC;GAML;;CAKH,MAAM,SAAkC;EACtC;EACA,WAAW,UAAqC;AAC9C,UAAO,MAAM,QAAQ;AAErB,UAAO;;EAEV;AAED,qBAAoB,OAAO,OAAO,SAAS,OAAO;AAElD,QAAO;;;;;AAMT,MAAa,mBAUX,OACG;CACH,MAAM,eAAe;EACnB,GAAG,QAAQ,GAAG;EACd,QAAQ,IAAI,MACV,EAAE,EACF,EACE,MAAM,QAAQ,SAAS;AACrB,OAAI,QAAQ,OACV,QAAO,OAAO;AAGhB,OAAI,OAAO,SAAS,SAClB,QAAO,MAAM,KAAK;KAGvB,CACF;EACF;AAcD,QAZW,IAAI,MAAM,cAAc,EACjC,MAAM,QAAQ,SAAS;AACrB,MAAI,QAAQ,OACV,QAAO,OAAO;AAGhB,MAAI,OAAO,SAAS,SAClB,QAAO,cAAc,IAAI,MAAM,KAAK,CAAC;IAG1C,CAAC;;AAKJ,MAAM,iBAAiB,WAAmB,UAAqC;AAC7E,QAAO,OAAO,SAAkB;EAC9B,MAAM,SAAS,MAAM,WAAW;AAChC,MAAI,OACF,KAAI;AACF,SAAM,OAAO,aAAa,SAAS,KAAK;WACjC,KAAK;AACZ,WAAQ,MACN,yCAAyC,UAAU,WAAW,MAAM,KAAK,KACzE,IACD;AACD,SAAM,IAAI,MAAM,2BAA2B;;AAI/C,SAAO;GACL,SAAS;GACT,OAAO,MAAM;GACb;GACD"}
package/env.cjs ADDED
@@ -0,0 +1,72 @@
1
+
2
+ //#region src/env.ts
3
+ /**
4
+ * The environment variables that we wish to access in the environment.
5
+ *
6
+ * Due to the way that some environment variables are exposed across different
7
+ * runtimes and bundling tools, we need to be careful about how we access them.
8
+ *
9
+ * The most basic annoyance is that environment variables are exposed in
10
+ * different locations (e.g. `process.env`, `Deno.env`, `Netlify.env`,
11
+ * `import.meta.env`).
12
+ *
13
+ * Bundling can be more disruptive though, where some will literally
14
+ * find/replace `process.env.MY_VAR` with the value of `MY_VAR` at build time,
15
+ * which requires us to ensure that the full env var is used in code instead of
16
+ * dynamically building it.
17
+ */
18
+ const env = (() => {
19
+ try {
20
+ const viteEnv = {}.env;
21
+ if (viteEnv) return {
22
+ INNGEST_DEV: viteEnv.INNGEST_DEV ?? viteEnv.VITE_INNGEST_DEV,
23
+ NODE_ENV: viteEnv.NODE_ENV,
24
+ INNGEST_BASE_URL: viteEnv.INNGEST_BASE_URL ?? viteEnv.VITE_INNGEST_BASE_URL,
25
+ INNGEST_API_BASE_URL: viteEnv.INNGEST_API_BASE_URL ?? viteEnv.VITE_INNGEST_API_BASE_URL,
26
+ INNGEST_SIGNING_KEY: viteEnv.INNGEST_SIGNING_KEY,
27
+ INNGEST_SIGNING_KEY_FALLBACK: viteEnv.INNGEST_SIGNING_KEY_FALLBACK
28
+ };
29
+ } catch {}
30
+ try {
31
+ if (process.env) return {
32
+ INNGEST_DEV: process.env.INNGEST_DEV ?? process.env.NEXT_PUBLIC_INNGEST_DEV ?? process.env.REACT_APP_INNGEST_DEV ?? process.env.NUXT_PUBLIC_INNGEST_DEV ?? process.env.VUE_APP_INNGEST_DEV ?? process.env.VITE_INNGEST_DEV,
33
+ NODE_ENV: process.env.NODE_ENV ?? process.env.NEXT_PUBLIC_NODE_ENV ?? process.env.REACT_APP_NODE_ENV ?? process.env.NUXT_PUBLIC_NODE_ENV ?? process.env.VUE_APP_NODE_ENV ?? process.env.VITE_NODE_ENV ?? process.env.VITE_MODE,
34
+ INNGEST_BASE_URL: process.env.INNGEST_BASE_URL ?? process.env.NEXT_PUBLIC_INNGEST_BASE_URL ?? process.env.REACT_APP_INNGEST_BASE_URL ?? process.env.NUXT_PUBLIC_INNGEST_BASE_URL ?? process.env.VUE_APP_INNGEST_BASE_URL ?? process.env.VITE_INNGEST_BASE_URL,
35
+ INNGEST_API_BASE_URL: process.env.INNGEST_API_BASE_URL ?? process.env.NEXT_PUBLIC_INNGEST_API_BASE_URL ?? process.env.REACT_APP_INNGEST_API_BASE_URL ?? process.env.NUXT_PUBLIC_INNGEST_API_BASE_URL ?? process.env.VUE_APP_INNGEST_API_BASE_URL ?? process.env.VITE_INNGEST_API_BASE_URL,
36
+ INNGEST_SIGNING_KEY: process.env.INNGEST_SIGNING_KEY,
37
+ INNGEST_SIGNING_KEY_FALLBACK: process.env.INNGEST_SIGNING_KEY_FALLBACK
38
+ };
39
+ } catch {}
40
+ try {
41
+ const denoEnv = Deno.env.toObject();
42
+ if (denoEnv) return {
43
+ INNGEST_DEV: denoEnv.INNGEST_DEV,
44
+ NODE_ENV: denoEnv.NODE_ENV,
45
+ INNGEST_BASE_URL: denoEnv.INNGEST_BASE_URL,
46
+ INNGEST_API_BASE_URL: denoEnv.INNGEST_API_BASE_URL,
47
+ INNGEST_SIGNING_KEY: denoEnv.INNGEST_SIGNING_KEY,
48
+ INNGEST_SIGNING_KEY_FALLBACK: denoEnv.INNGEST_SIGNING_KEY_FALLBACK
49
+ };
50
+ } catch {}
51
+ try {
52
+ const netlifyEnv = Netlify.env.toObject();
53
+ if (netlifyEnv) return {
54
+ INNGEST_DEV: netlifyEnv.INNGEST_DEV,
55
+ NODE_ENV: netlifyEnv.NODE_ENV,
56
+ INNGEST_BASE_URL: netlifyEnv.INNGEST_BASE_URL,
57
+ INNGEST_API_BASE_URL: netlifyEnv.INNGEST_API_BASE_URL,
58
+ INNGEST_SIGNING_KEY: netlifyEnv.INNGEST_SIGNING_KEY,
59
+ INNGEST_SIGNING_KEY_FALLBACK: netlifyEnv.INNGEST_SIGNING_KEY_FALLBACK
60
+ };
61
+ } catch {}
62
+ })();
63
+ /**
64
+ * Given a `key`, get the environment variable under that key.
65
+ */
66
+ const getEnvVar = (key) => {
67
+ return env?.[key];
68
+ };
69
+
70
+ //#endregion
71
+ exports.getEnvVar = getEnvVar;
72
+ //# sourceMappingURL=env.cjs.map
package/env.cjs.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.cjs","names":[],"sources":["../src/env.ts"],"sourcesContent":["export type EnvValue = string | undefined;\r\nexport type Env = Record<string, EnvValue>;\r\n\r\nexport type ExpectedEnv = {\r\n INNGEST_DEV: string | undefined;\r\n NODE_ENV: string | undefined;\r\n INNGEST_BASE_URL: string | undefined;\r\n INNGEST_API_BASE_URL: string | undefined;\r\n INNGEST_SIGNING_KEY: string | undefined;\r\n INNGEST_SIGNING_KEY_FALLBACK: string | undefined;\r\n};\r\n\r\n/**\r\n * The environment variables that we wish to access in the environment.\r\n *\r\n * Due to the way that some environment variables are exposed across different\r\n * runtimes and bundling tools, we need to be careful about how we access them.\r\n *\r\n * The most basic annoyance is that environment variables are exposed in\r\n * different locations (e.g. `process.env`, `Deno.env`, `Netlify.env`,\r\n * `import.meta.env`).\r\n *\r\n * Bundling can be more disruptive though, where some will literally\r\n * find/replace `process.env.MY_VAR` with the value of `MY_VAR` at build time,\r\n * which requires us to ensure that the full env var is used in code instead of\r\n * dynamically building it.\r\n */\r\nconst env: ExpectedEnv | undefined = (() => {\r\n // Pure vite\r\n try {\r\n // @ts-expect-error - import.meta only available in some environments\r\n const viteEnv = import.meta.env;\r\n\r\n if (viteEnv) {\r\n return {\r\n INNGEST_DEV: viteEnv.INNGEST_DEV ?? viteEnv.VITE_INNGEST_DEV,\r\n NODE_ENV: viteEnv.NODE_ENV,\r\n INNGEST_BASE_URL:\r\n viteEnv.INNGEST_BASE_URL ?? viteEnv.VITE_INNGEST_BASE_URL,\r\n INNGEST_API_BASE_URL:\r\n viteEnv.INNGEST_API_BASE_URL ?? viteEnv.VITE_INNGEST_API_BASE_URL,\r\n INNGEST_SIGNING_KEY: viteEnv.INNGEST_SIGNING_KEY,\r\n INNGEST_SIGNING_KEY_FALLBACK: viteEnv.INNGEST_SIGNING_KEY_FALLBACK,\r\n };\r\n }\r\n } catch {\r\n // noop\r\n }\r\n\r\n try {\r\n // Node-like environments (sometimes polyfilled Vite)\r\n if (process.env) {\r\n return {\r\n INNGEST_DEV:\r\n process.env.INNGEST_DEV ??\r\n process.env.NEXT_PUBLIC_INNGEST_DEV ??\r\n process.env.REACT_APP_INNGEST_DEV ??\r\n process.env.NUXT_PUBLIC_INNGEST_DEV ??\r\n process.env.VUE_APP_INNGEST_DEV ??\r\n process.env.VITE_INNGEST_DEV,\r\n\r\n NODE_ENV:\r\n process.env.NODE_ENV ??\r\n process.env.NEXT_PUBLIC_NODE_ENV ??\r\n process.env.REACT_APP_NODE_ENV ??\r\n process.env.NUXT_PUBLIC_NODE_ENV ??\r\n process.env.VUE_APP_NODE_ENV ??\r\n process.env.VITE_NODE_ENV ??\r\n process.env.VITE_MODE,\r\n\r\n INNGEST_BASE_URL:\r\n process.env.INNGEST_BASE_URL ??\r\n process.env.NEXT_PUBLIC_INNGEST_BASE_URL ??\r\n process.env.REACT_APP_INNGEST_BASE_URL ??\r\n process.env.NUXT_PUBLIC_INNGEST_BASE_URL ??\r\n process.env.VUE_APP_INNGEST_BASE_URL ??\r\n process.env.VITE_INNGEST_BASE_URL,\r\n\r\n INNGEST_API_BASE_URL:\r\n process.env.INNGEST_API_BASE_URL ??\r\n process.env.NEXT_PUBLIC_INNGEST_API_BASE_URL ??\r\n process.env.REACT_APP_INNGEST_API_BASE_URL ??\r\n process.env.NUXT_PUBLIC_INNGEST_API_BASE_URL ??\r\n process.env.VUE_APP_INNGEST_API_BASE_URL ??\r\n process.env.VITE_INNGEST_API_BASE_URL,\r\n\r\n INNGEST_SIGNING_KEY: process.env.INNGEST_SIGNING_KEY,\r\n\r\n INNGEST_SIGNING_KEY_FALLBACK: process.env.INNGEST_SIGNING_KEY_FALLBACK,\r\n };\r\n }\r\n } catch {\r\n // noop\r\n }\r\n\r\n // Deno\r\n try {\r\n const denoEnv = Deno.env.toObject();\r\n\r\n if (denoEnv) {\r\n return {\r\n INNGEST_DEV: denoEnv.INNGEST_DEV,\r\n NODE_ENV: denoEnv.NODE_ENV,\r\n INNGEST_BASE_URL: denoEnv.INNGEST_BASE_URL,\r\n INNGEST_API_BASE_URL: denoEnv.INNGEST_API_BASE_URL,\r\n INNGEST_SIGNING_KEY: denoEnv.INNGEST_SIGNING_KEY,\r\n INNGEST_SIGNING_KEY_FALLBACK: denoEnv.INNGEST_SIGNING_KEY_FALLBACK,\r\n };\r\n }\r\n } catch {\r\n // noop\r\n }\r\n\r\n // Netlify\r\n try {\r\n const netlifyEnv = Netlify.env.toObject();\r\n\r\n if (netlifyEnv) {\r\n return {\r\n INNGEST_DEV: netlifyEnv.INNGEST_DEV,\r\n NODE_ENV: netlifyEnv.NODE_ENV,\r\n INNGEST_BASE_URL: netlifyEnv.INNGEST_BASE_URL,\r\n INNGEST_API_BASE_URL: netlifyEnv.INNGEST_API_BASE_URL,\r\n INNGEST_SIGNING_KEY: netlifyEnv.INNGEST_SIGNING_KEY,\r\n INNGEST_SIGNING_KEY_FALLBACK: netlifyEnv.INNGEST_SIGNING_KEY_FALLBACK,\r\n };\r\n }\r\n } catch {\r\n // noop\r\n }\r\n})();\r\n\r\n/**\r\n * The Deno environment, which is not always available.\r\n */\r\ndeclare const Deno: {\r\n env: { toObject: () => Env };\r\n};\r\n\r\n/**\r\n * The Netlify environment, which is not always available.\r\n */\r\ndeclare const Netlify: {\r\n env: { toObject: () => Env };\r\n};\r\n\r\n/**\r\n * Given a `key`, get the environment variable under that key.\r\n */\r\nexport const getEnvVar = (key: keyof ExpectedEnv): string | undefined => {\r\n return env?.[key];\r\n};\r\n"],"mappings":";;;;;;;;;;;;;;;;;AA2BA,MAAM,aAAsC;AAE1C,KAAI;EAEF,MAAM,aAAsB;AAE5B,MAAI,QACF,QAAO;GACL,aAAa,QAAQ,eAAe,QAAQ;GAC5C,UAAU,QAAQ;GAClB,kBACE,QAAQ,oBAAoB,QAAQ;GACtC,sBACE,QAAQ,wBAAwB,QAAQ;GAC1C,qBAAqB,QAAQ;GAC7B,8BAA8B,QAAQ;GACvC;SAEG;AAIR,KAAI;AAEF,MAAI,QAAQ,IACV,QAAO;GACL,aACE,QAAQ,IAAI,eACZ,QAAQ,IAAI,2BACZ,QAAQ,IAAI,yBACZ,QAAQ,IAAI,2BACZ,QAAQ,IAAI,uBACZ,QAAQ,IAAI;GAEd,UACE,QAAQ,IAAI,YACZ,QAAQ,IAAI,wBACZ,QAAQ,IAAI,sBACZ,QAAQ,IAAI,wBACZ,QAAQ,IAAI,oBACZ,QAAQ,IAAI,iBACZ,QAAQ,IAAI;GAEd,kBACE,QAAQ,IAAI,oBACZ,QAAQ,IAAI,gCACZ,QAAQ,IAAI,8BACZ,QAAQ,IAAI,gCACZ,QAAQ,IAAI,4BACZ,QAAQ,IAAI;GAEd,sBACE,QAAQ,IAAI,wBACZ,QAAQ,IAAI,oCACZ,QAAQ,IAAI,kCACZ,QAAQ,IAAI,oCACZ,QAAQ,IAAI,gCACZ,QAAQ,IAAI;GAEd,qBAAqB,QAAQ,IAAI;GAEjC,8BAA8B,QAAQ,IAAI;GAC3C;SAEG;AAKR,KAAI;EACF,MAAM,UAAU,KAAK,IAAI,UAAU;AAEnC,MAAI,QACF,QAAO;GACL,aAAa,QAAQ;GACrB,UAAU,QAAQ;GAClB,kBAAkB,QAAQ;GAC1B,sBAAsB,QAAQ;GAC9B,qBAAqB,QAAQ;GAC7B,8BAA8B,QAAQ;GACvC;SAEG;AAKR,KAAI;EACF,MAAM,aAAa,QAAQ,IAAI,UAAU;AAEzC,MAAI,WACF,QAAO;GACL,aAAa,WAAW;GACxB,UAAU,WAAW;GACrB,kBAAkB,WAAW;GAC7B,sBAAsB,WAAW;GACjC,qBAAqB,WAAW;GAChC,8BAA8B,WAAW;GAC1C;SAEG;IAGN;;;;AAmBJ,MAAa,aAAa,QAA+C;AACvE,QAAO,MAAM"}
package/env.mjs ADDED
@@ -0,0 +1,71 @@
1
+ //#region src/env.ts
2
+ /**
3
+ * The environment variables that we wish to access in the environment.
4
+ *
5
+ * Due to the way that some environment variables are exposed across different
6
+ * runtimes and bundling tools, we need to be careful about how we access them.
7
+ *
8
+ * The most basic annoyance is that environment variables are exposed in
9
+ * different locations (e.g. `process.env`, `Deno.env`, `Netlify.env`,
10
+ * `import.meta.env`).
11
+ *
12
+ * Bundling can be more disruptive though, where some will literally
13
+ * find/replace `process.env.MY_VAR` with the value of `MY_VAR` at build time,
14
+ * which requires us to ensure that the full env var is used in code instead of
15
+ * dynamically building it.
16
+ */
17
+ const env = (() => {
18
+ try {
19
+ const viteEnv = import.meta.env;
20
+ if (viteEnv) return {
21
+ INNGEST_DEV: viteEnv.INNGEST_DEV ?? viteEnv.VITE_INNGEST_DEV,
22
+ NODE_ENV: viteEnv.NODE_ENV,
23
+ INNGEST_BASE_URL: viteEnv.INNGEST_BASE_URL ?? viteEnv.VITE_INNGEST_BASE_URL,
24
+ INNGEST_API_BASE_URL: viteEnv.INNGEST_API_BASE_URL ?? viteEnv.VITE_INNGEST_API_BASE_URL,
25
+ INNGEST_SIGNING_KEY: viteEnv.INNGEST_SIGNING_KEY,
26
+ INNGEST_SIGNING_KEY_FALLBACK: viteEnv.INNGEST_SIGNING_KEY_FALLBACK
27
+ };
28
+ } catch {}
29
+ try {
30
+ if (process.env) return {
31
+ INNGEST_DEV: process.env.INNGEST_DEV ?? process.env.NEXT_PUBLIC_INNGEST_DEV ?? process.env.REACT_APP_INNGEST_DEV ?? process.env.NUXT_PUBLIC_INNGEST_DEV ?? process.env.VUE_APP_INNGEST_DEV ?? process.env.VITE_INNGEST_DEV,
32
+ NODE_ENV: process.env.NODE_ENV ?? process.env.NEXT_PUBLIC_NODE_ENV ?? process.env.REACT_APP_NODE_ENV ?? process.env.NUXT_PUBLIC_NODE_ENV ?? process.env.VUE_APP_NODE_ENV ?? process.env.VITE_NODE_ENV ?? process.env.VITE_MODE,
33
+ INNGEST_BASE_URL: process.env.INNGEST_BASE_URL ?? process.env.NEXT_PUBLIC_INNGEST_BASE_URL ?? process.env.REACT_APP_INNGEST_BASE_URL ?? process.env.NUXT_PUBLIC_INNGEST_BASE_URL ?? process.env.VUE_APP_INNGEST_BASE_URL ?? process.env.VITE_INNGEST_BASE_URL,
34
+ INNGEST_API_BASE_URL: process.env.INNGEST_API_BASE_URL ?? process.env.NEXT_PUBLIC_INNGEST_API_BASE_URL ?? process.env.REACT_APP_INNGEST_API_BASE_URL ?? process.env.NUXT_PUBLIC_INNGEST_API_BASE_URL ?? process.env.VUE_APP_INNGEST_API_BASE_URL ?? process.env.VITE_INNGEST_API_BASE_URL,
35
+ INNGEST_SIGNING_KEY: process.env.INNGEST_SIGNING_KEY,
36
+ INNGEST_SIGNING_KEY_FALLBACK: process.env.INNGEST_SIGNING_KEY_FALLBACK
37
+ };
38
+ } catch {}
39
+ try {
40
+ const denoEnv = Deno.env.toObject();
41
+ if (denoEnv) return {
42
+ INNGEST_DEV: denoEnv.INNGEST_DEV,
43
+ NODE_ENV: denoEnv.NODE_ENV,
44
+ INNGEST_BASE_URL: denoEnv.INNGEST_BASE_URL,
45
+ INNGEST_API_BASE_URL: denoEnv.INNGEST_API_BASE_URL,
46
+ INNGEST_SIGNING_KEY: denoEnv.INNGEST_SIGNING_KEY,
47
+ INNGEST_SIGNING_KEY_FALLBACK: denoEnv.INNGEST_SIGNING_KEY_FALLBACK
48
+ };
49
+ } catch {}
50
+ try {
51
+ const netlifyEnv = Netlify.env.toObject();
52
+ if (netlifyEnv) return {
53
+ INNGEST_DEV: netlifyEnv.INNGEST_DEV,
54
+ NODE_ENV: netlifyEnv.NODE_ENV,
55
+ INNGEST_BASE_URL: netlifyEnv.INNGEST_BASE_URL,
56
+ INNGEST_API_BASE_URL: netlifyEnv.INNGEST_API_BASE_URL,
57
+ INNGEST_SIGNING_KEY: netlifyEnv.INNGEST_SIGNING_KEY,
58
+ INNGEST_SIGNING_KEY_FALLBACK: netlifyEnv.INNGEST_SIGNING_KEY_FALLBACK
59
+ };
60
+ } catch {}
61
+ })();
62
+ /**
63
+ * Given a `key`, get the environment variable under that key.
64
+ */
65
+ const getEnvVar = (key) => {
66
+ return env?.[key];
67
+ };
68
+
69
+ //#endregion
70
+ export { getEnvVar };
71
+ //# sourceMappingURL=env.mjs.map
package/env.mjs.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env.mjs","names":[],"sources":["../src/env.ts"],"sourcesContent":["export type EnvValue = string | undefined;\r\nexport type Env = Record<string, EnvValue>;\r\n\r\nexport type ExpectedEnv = {\r\n INNGEST_DEV: string | undefined;\r\n NODE_ENV: string | undefined;\r\n INNGEST_BASE_URL: string | undefined;\r\n INNGEST_API_BASE_URL: string | undefined;\r\n INNGEST_SIGNING_KEY: string | undefined;\r\n INNGEST_SIGNING_KEY_FALLBACK: string | undefined;\r\n};\r\n\r\n/**\r\n * The environment variables that we wish to access in the environment.\r\n *\r\n * Due to the way that some environment variables are exposed across different\r\n * runtimes and bundling tools, we need to be careful about how we access them.\r\n *\r\n * The most basic annoyance is that environment variables are exposed in\r\n * different locations (e.g. `process.env`, `Deno.env`, `Netlify.env`,\r\n * `import.meta.env`).\r\n *\r\n * Bundling can be more disruptive though, where some will literally\r\n * find/replace `process.env.MY_VAR` with the value of `MY_VAR` at build time,\r\n * which requires us to ensure that the full env var is used in code instead of\r\n * dynamically building it.\r\n */\r\nconst env: ExpectedEnv | undefined = (() => {\r\n // Pure vite\r\n try {\r\n // @ts-expect-error - import.meta only available in some environments\r\n const viteEnv = import.meta.env;\r\n\r\n if (viteEnv) {\r\n return {\r\n INNGEST_DEV: viteEnv.INNGEST_DEV ?? viteEnv.VITE_INNGEST_DEV,\r\n NODE_ENV: viteEnv.NODE_ENV,\r\n INNGEST_BASE_URL:\r\n viteEnv.INNGEST_BASE_URL ?? viteEnv.VITE_INNGEST_BASE_URL,\r\n INNGEST_API_BASE_URL:\r\n viteEnv.INNGEST_API_BASE_URL ?? viteEnv.VITE_INNGEST_API_BASE_URL,\r\n INNGEST_SIGNING_KEY: viteEnv.INNGEST_SIGNING_KEY,\r\n INNGEST_SIGNING_KEY_FALLBACK: viteEnv.INNGEST_SIGNING_KEY_FALLBACK,\r\n };\r\n }\r\n } catch {\r\n // noop\r\n }\r\n\r\n try {\r\n // Node-like environments (sometimes polyfilled Vite)\r\n if (process.env) {\r\n return {\r\n INNGEST_DEV:\r\n process.env.INNGEST_DEV ??\r\n process.env.NEXT_PUBLIC_INNGEST_DEV ??\r\n process.env.REACT_APP_INNGEST_DEV ??\r\n process.env.NUXT_PUBLIC_INNGEST_DEV ??\r\n process.env.VUE_APP_INNGEST_DEV ??\r\n process.env.VITE_INNGEST_DEV,\r\n\r\n NODE_ENV:\r\n process.env.NODE_ENV ??\r\n process.env.NEXT_PUBLIC_NODE_ENV ??\r\n process.env.REACT_APP_NODE_ENV ??\r\n process.env.NUXT_PUBLIC_NODE_ENV ??\r\n process.env.VUE_APP_NODE_ENV ??\r\n process.env.VITE_NODE_ENV ??\r\n process.env.VITE_MODE,\r\n\r\n INNGEST_BASE_URL:\r\n process.env.INNGEST_BASE_URL ??\r\n process.env.NEXT_PUBLIC_INNGEST_BASE_URL ??\r\n process.env.REACT_APP_INNGEST_BASE_URL ??\r\n process.env.NUXT_PUBLIC_INNGEST_BASE_URL ??\r\n process.env.VUE_APP_INNGEST_BASE_URL ??\r\n process.env.VITE_INNGEST_BASE_URL,\r\n\r\n INNGEST_API_BASE_URL:\r\n process.env.INNGEST_API_BASE_URL ??\r\n process.env.NEXT_PUBLIC_INNGEST_API_BASE_URL ??\r\n process.env.REACT_APP_INNGEST_API_BASE_URL ??\r\n process.env.NUXT_PUBLIC_INNGEST_API_BASE_URL ??\r\n process.env.VUE_APP_INNGEST_API_BASE_URL ??\r\n process.env.VITE_INNGEST_API_BASE_URL,\r\n\r\n INNGEST_SIGNING_KEY: process.env.INNGEST_SIGNING_KEY,\r\n\r\n INNGEST_SIGNING_KEY_FALLBACK: process.env.INNGEST_SIGNING_KEY_FALLBACK,\r\n };\r\n }\r\n } catch {\r\n // noop\r\n }\r\n\r\n // Deno\r\n try {\r\n const denoEnv = Deno.env.toObject();\r\n\r\n if (denoEnv) {\r\n return {\r\n INNGEST_DEV: denoEnv.INNGEST_DEV,\r\n NODE_ENV: denoEnv.NODE_ENV,\r\n INNGEST_BASE_URL: denoEnv.INNGEST_BASE_URL,\r\n INNGEST_API_BASE_URL: denoEnv.INNGEST_API_BASE_URL,\r\n INNGEST_SIGNING_KEY: denoEnv.INNGEST_SIGNING_KEY,\r\n INNGEST_SIGNING_KEY_FALLBACK: denoEnv.INNGEST_SIGNING_KEY_FALLBACK,\r\n };\r\n }\r\n } catch {\r\n // noop\r\n }\r\n\r\n // Netlify\r\n try {\r\n const netlifyEnv = Netlify.env.toObject();\r\n\r\n if (netlifyEnv) {\r\n return {\r\n INNGEST_DEV: netlifyEnv.INNGEST_DEV,\r\n NODE_ENV: netlifyEnv.NODE_ENV,\r\n INNGEST_BASE_URL: netlifyEnv.INNGEST_BASE_URL,\r\n INNGEST_API_BASE_URL: netlifyEnv.INNGEST_API_BASE_URL,\r\n INNGEST_SIGNING_KEY: netlifyEnv.INNGEST_SIGNING_KEY,\r\n INNGEST_SIGNING_KEY_FALLBACK: netlifyEnv.INNGEST_SIGNING_KEY_FALLBACK,\r\n };\r\n }\r\n } catch {\r\n // noop\r\n }\r\n})();\r\n\r\n/**\r\n * The Deno environment, which is not always available.\r\n */\r\ndeclare const Deno: {\r\n env: { toObject: () => Env };\r\n};\r\n\r\n/**\r\n * The Netlify environment, which is not always available.\r\n */\r\ndeclare const Netlify: {\r\n env: { toObject: () => Env };\r\n};\r\n\r\n/**\r\n * Given a `key`, get the environment variable under that key.\r\n */\r\nexport const getEnvVar = (key: keyof ExpectedEnv): string | undefined => {\r\n return env?.[key];\r\n};\r\n"],"mappings":";;;;;;;;;;;;;;;;AA2BA,MAAM,aAAsC;AAE1C,KAAI;EAEF,MAAM,UAAU,OAAO,KAAK;AAE5B,MAAI,QACF,QAAO;GACL,aAAa,QAAQ,eAAe,QAAQ;GAC5C,UAAU,QAAQ;GAClB,kBACE,QAAQ,oBAAoB,QAAQ;GACtC,sBACE,QAAQ,wBAAwB,QAAQ;GAC1C,qBAAqB,QAAQ;GAC7B,8BAA8B,QAAQ;GACvC;SAEG;AAIR,KAAI;AAEF,MAAI,QAAQ,IACV,QAAO;GACL,aACE,QAAQ,IAAI,eACZ,QAAQ,IAAI,2BACZ,QAAQ,IAAI,yBACZ,QAAQ,IAAI,2BACZ,QAAQ,IAAI,uBACZ,QAAQ,IAAI;GAEd,UACE,QAAQ,IAAI,YACZ,QAAQ,IAAI,wBACZ,QAAQ,IAAI,sBACZ,QAAQ,IAAI,wBACZ,QAAQ,IAAI,oBACZ,QAAQ,IAAI,iBACZ,QAAQ,IAAI;GAEd,kBACE,QAAQ,IAAI,oBACZ,QAAQ,IAAI,gCACZ,QAAQ,IAAI,8BACZ,QAAQ,IAAI,gCACZ,QAAQ,IAAI,4BACZ,QAAQ,IAAI;GAEd,sBACE,QAAQ,IAAI,wBACZ,QAAQ,IAAI,oCACZ,QAAQ,IAAI,kCACZ,QAAQ,IAAI,oCACZ,QAAQ,IAAI,gCACZ,QAAQ,IAAI;GAEd,qBAAqB,QAAQ,IAAI;GAEjC,8BAA8B,QAAQ,IAAI;GAC3C;SAEG;AAKR,KAAI;EACF,MAAM,UAAU,KAAK,IAAI,UAAU;AAEnC,MAAI,QACF,QAAO;GACL,aAAa,QAAQ;GACrB,UAAU,QAAQ;GAClB,kBAAkB,QAAQ;GAC1B,sBAAsB,QAAQ;GAC9B,qBAAqB,QAAQ;GAC7B,8BAA8B,QAAQ;GACvC;SAEG;AAKR,KAAI;EACF,MAAM,aAAa,QAAQ,IAAI,UAAU;AAEzC,MAAI,WACF,QAAO;GACL,aAAa,WAAW;GACxB,UAAU,WAAW;GACrB,kBAAkB,WAAW;GAC7B,sBAAsB,WAAW;GACjC,qBAAqB,WAAW;GAChC,8BAA8B,WAAW;GAC1C;SAEG;IAGN;;;;AAmBJ,MAAa,aAAa,QAA+C;AACvE,QAAO,MAAM"}