@base44-preview/vite-plugin 1.0.48-pr.138.622eb14 → 1.0.48-pr.142.9fcc12e

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 (112) hide show
  1. package/README.md +24 -0
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +8 -2
  4. package/dist/index.js.map +1 -1
  5. package/dist/private-data-sources/build-http.d.ts +9 -0
  6. package/dist/private-data-sources/build-http.d.ts.map +1 -0
  7. package/dist/private-data-sources/build-http.js +38 -0
  8. package/dist/private-data-sources/build-http.js.map +1 -0
  9. package/dist/private-data-sources/elasticsearch.d.ts +8 -0
  10. package/dist/private-data-sources/elasticsearch.d.ts.map +1 -0
  11. package/dist/private-data-sources/elasticsearch.js +6 -0
  12. package/dist/private-data-sources/elasticsearch.js.map +1 -0
  13. package/dist/private-data-sources/http-url.d.ts +10 -0
  14. package/dist/private-data-sources/http-url.d.ts.map +1 -0
  15. package/dist/private-data-sources/http-url.js +20 -0
  16. package/dist/private-data-sources/http-url.js.map +1 -0
  17. package/dist/private-data-sources/http.d.ts +8 -0
  18. package/dist/private-data-sources/http.d.ts.map +1 -0
  19. package/dist/private-data-sources/http.js +6 -0
  20. package/dist/private-data-sources/http.js.map +1 -0
  21. package/dist/private-data-sources/hyperdrive.d.ts +28 -0
  22. package/dist/private-data-sources/hyperdrive.d.ts.map +1 -0
  23. package/dist/private-data-sources/hyperdrive.js +39 -0
  24. package/dist/private-data-sources/hyperdrive.js.map +1 -0
  25. package/dist/private-data-sources/ioredis-adapter.d.ts +35 -0
  26. package/dist/private-data-sources/ioredis-adapter.d.ts.map +1 -0
  27. package/dist/private-data-sources/ioredis-adapter.js +203 -0
  28. package/dist/private-data-sources/ioredis-adapter.js.map +1 -0
  29. package/dist/private-data-sources/manifest.d.ts +7 -0
  30. package/dist/private-data-sources/manifest.d.ts.map +1 -0
  31. package/dist/private-data-sources/manifest.js +95 -0
  32. package/dist/private-data-sources/manifest.js.map +1 -0
  33. package/dist/private-data-sources/mariadb.d.ts +14 -0
  34. package/dist/private-data-sources/mariadb.d.ts.map +1 -0
  35. package/dist/private-data-sources/mariadb.js +6 -0
  36. package/dist/private-data-sources/mariadb.js.map +1 -0
  37. package/dist/private-data-sources/mongodb.d.ts +24 -0
  38. package/dist/private-data-sources/mongodb.d.ts.map +1 -0
  39. package/dist/private-data-sources/mongodb.js +52 -0
  40. package/dist/private-data-sources/mongodb.js.map +1 -0
  41. package/dist/private-data-sources/mysql.d.ts +14 -0
  42. package/dist/private-data-sources/mysql.d.ts.map +1 -0
  43. package/dist/private-data-sources/mysql.js +6 -0
  44. package/dist/private-data-sources/mysql.js.map +1 -0
  45. package/dist/private-data-sources/node-net-adapter.d.ts +20 -0
  46. package/dist/private-data-sources/node-net-adapter.d.ts.map +1 -0
  47. package/dist/private-data-sources/node-net-adapter.js +219 -0
  48. package/dist/private-data-sources/node-net-adapter.js.map +1 -0
  49. package/dist/private-data-sources/oracle.d.ts +20 -0
  50. package/dist/private-data-sources/oracle.d.ts.map +1 -0
  51. package/dist/private-data-sources/oracle.js +32 -0
  52. package/dist/private-data-sources/oracle.js.map +1 -0
  53. package/dist/private-data-sources/postgres.d.ts +14 -0
  54. package/dist/private-data-sources/postgres.d.ts.map +1 -0
  55. package/dist/private-data-sources/postgres.js +6 -0
  56. package/dist/private-data-sources/postgres.js.map +1 -0
  57. package/dist/private-data-sources/redis-auth.d.ts +3 -0
  58. package/dist/private-data-sources/redis-auth.d.ts.map +1 -0
  59. package/dist/private-data-sources/redis-auth.js +72 -0
  60. package/dist/private-data-sources/redis-auth.js.map +1 -0
  61. package/dist/private-data-sources/redis.d.ts +46 -0
  62. package/dist/private-data-sources/redis.d.ts.map +1 -0
  63. package/dist/private-data-sources/redis.js +27 -0
  64. package/dist/private-data-sources/redis.js.map +1 -0
  65. package/dist/private-data-sources/runtime-environment.d.ts +2 -0
  66. package/dist/private-data-sources/runtime-environment.d.ts.map +1 -0
  67. package/dist/private-data-sources/runtime-environment.js +6 -0
  68. package/dist/private-data-sources/runtime-environment.js.map +1 -0
  69. package/dist/private-data-sources/sqlserver.d.ts +18 -0
  70. package/dist/private-data-sources/sqlserver.d.ts.map +1 -0
  71. package/dist/private-data-sources/sqlserver.js +13 -0
  72. package/dist/private-data-sources/sqlserver.js.map +1 -0
  73. package/dist/private-data-sources/tcp.d.ts +29 -0
  74. package/dist/private-data-sources/tcp.d.ts.map +1 -0
  75. package/dist/private-data-sources/tcp.js +63 -0
  76. package/dist/private-data-sources/tcp.js.map +1 -0
  77. package/dist/private-data-sources/tedious-adapter.d.ts +2 -0
  78. package/dist/private-data-sources/tedious-adapter.d.ts.map +1 -0
  79. package/dist/private-data-sources/tedious-adapter.js +63 -0
  80. package/dist/private-data-sources/tedious-adapter.js.map +1 -0
  81. package/dist/private-data-sources/types.d.ts +27 -0
  82. package/dist/private-data-sources/types.d.ts.map +1 -0
  83. package/dist/private-data-sources/types.js +2 -0
  84. package/dist/private-data-sources/types.js.map +1 -0
  85. package/dist/private-data-sources-plugin.d.ts +3 -0
  86. package/dist/private-data-sources-plugin.d.ts.map +1 -0
  87. package/dist/private-data-sources-plugin.js +51 -0
  88. package/dist/private-data-sources-plugin.js.map +1 -0
  89. package/package.json +1 -1
  90. package/src/index.ts +9 -2
  91. package/src/private-data-sources/build-http.ts +51 -0
  92. package/src/private-data-sources/cloudflare-workers.d.ts +3 -0
  93. package/src/private-data-sources/elasticsearch.ts +8 -0
  94. package/src/private-data-sources/http-url.ts +23 -0
  95. package/src/private-data-sources/http.ts +6 -0
  96. package/src/private-data-sources/hyperdrive.ts +48 -0
  97. package/src/private-data-sources/ioredis-adapter.ts +229 -0
  98. package/src/private-data-sources/manifest.ts +127 -0
  99. package/src/private-data-sources/mariadb.ts +8 -0
  100. package/src/private-data-sources/mongodb.ts +70 -0
  101. package/src/private-data-sources/mysql.ts +8 -0
  102. package/src/private-data-sources/node-net-adapter.ts +247 -0
  103. package/src/private-data-sources/oracle.ts +34 -0
  104. package/src/private-data-sources/postgres.ts +8 -0
  105. package/src/private-data-sources/redis-auth.ts +83 -0
  106. package/src/private-data-sources/redis.ts +47 -0
  107. package/src/private-data-sources/runtime-environment.ts +6 -0
  108. package/src/private-data-sources/sqlserver.ts +22 -0
  109. package/src/private-data-sources/tcp.ts +86 -0
  110. package/src/private-data-sources/tedious-adapter.ts +67 -0
  111. package/src/private-data-sources/types.ts +29 -0
  112. package/src/private-data-sources-plugin.ts +55 -0
@@ -0,0 +1,72 @@
1
+ const MAX_AUTH_RESPONSE_BYTES = 4096;
2
+ function isCloudflareTcpSocket(socket) {
3
+ const candidate = socket;
4
+ return (candidate !== null &&
5
+ typeof candidate === "object" &&
6
+ !!candidate.readable &&
7
+ typeof candidate.readable.getReader === "function" &&
8
+ !!candidate.writable &&
9
+ typeof candidate.writable.getWriter === "function");
10
+ }
11
+ function encodeRespArray(values) {
12
+ const encoder = new TextEncoder();
13
+ const chunks = [encoder.encode(`*${values.length}\r\n`)];
14
+ for (const value of values) {
15
+ const bytes = encoder.encode(value);
16
+ chunks.push(encoder.encode(`$${bytes.byteLength}\r\n`), bytes, encoder.encode("\r\n"));
17
+ }
18
+ const result = new Uint8Array(chunks.reduce((total, chunk) => total + chunk.byteLength, 0));
19
+ let offset = 0;
20
+ for (const chunk of chunks) {
21
+ result.set(chunk, offset);
22
+ offset += chunk.byteLength;
23
+ }
24
+ return result;
25
+ }
26
+ async function readResponseLine(reader) {
27
+ const bytes = [];
28
+ while (bytes.length <= MAX_AUTH_RESPONSE_BYTES) {
29
+ const { value, done } = await reader.read();
30
+ if (done)
31
+ break;
32
+ for (const byte of value ?? []) {
33
+ bytes.push(byte);
34
+ const length = bytes.length;
35
+ if (length >= 2 && bytes[length - 2] === 13 && bytes[length - 1] === 10) {
36
+ return new TextDecoder().decode(new Uint8Array(bytes.slice(0, -2)));
37
+ }
38
+ if (length > MAX_AUTH_RESPONSE_BYTES)
39
+ break;
40
+ }
41
+ }
42
+ throw new Error("Redis authentication failed: invalid or missing server response");
43
+ }
44
+ async function authenticateRedisSocket(socket, username, password) {
45
+ if (!isCloudflareTcpSocket(socket)) {
46
+ throw new Error("Redis private data source did not return a readable/writable TCP socket");
47
+ }
48
+ const reader = socket.readable.getReader();
49
+ const writer = socket.writable.getWriter();
50
+ try {
51
+ await socket.opened;
52
+ const auth = username ? ["AUTH", username, password] : ["AUTH", password];
53
+ await writer.write(encodeRespArray(auth));
54
+ const response = await readResponseLine(reader);
55
+ if (response === "+OK")
56
+ return socket;
57
+ const message = response.startsWith("-") ? response.slice(1) : `unexpected response ${JSON.stringify(response)}`;
58
+ throw new Error(`Redis authentication failed: ${message}`);
59
+ }
60
+ catch (error) {
61
+ socket.close?.();
62
+ throw error;
63
+ }
64
+ finally {
65
+ reader.releaseLock();
66
+ writer.releaseLock();
67
+ }
68
+ }
69
+ export function authenticateRedisSocketIfNeeded(socket, username, password) {
70
+ return password ? authenticateRedisSocket(socket, username, password) : socket;
71
+ }
72
+ //# sourceMappingURL=redis-auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redis-auth.js","sourceRoot":"","sources":["../../src/private-data-sources/redis-auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ export declare function redis(name: unknown): Readonly<Readonly<{
2
+ name: string | undefined;
3
+ type: string | undefined;
4
+ readonly bindingName: string | undefined;
5
+ readonly host: string | undefined;
6
+ readonly port: number | undefined;
7
+ readonly database: string | undefined;
8
+ readonly username: string | undefined;
9
+ readonly user: string | undefined;
10
+ readonly password: string | undefined;
11
+ connect(options?: unknown): unknown;
12
+ readonly binding: unknown;
13
+ }> & {
14
+ connect: (options?: unknown) => unknown;
15
+ } & {
16
+ connect(options?: unknown): unknown;
17
+ ioredisConnector(): {
18
+ new (options?: {
19
+ disconnectTimeout?: number;
20
+ }): {
21
+ firstError?: Error;
22
+ "__#private@#stream": import("./ioredis-adapter.js").IoredisNetStream | undefined;
23
+ "__#private@#disconnectTimeout": number;
24
+ check(): boolean;
25
+ connect(errorEmitter?: (type: string, err: Error) => void): Promise<import("./ioredis-adapter.js").IoredisNetStream>;
26
+ disconnect(): void;
27
+ };
28
+ };
29
+ ioredisOptions(): Readonly<{
30
+ password?: string;
31
+ username?: string;
32
+ Connector: {
33
+ new (options?: {
34
+ disconnectTimeout?: number;
35
+ }): {
36
+ firstError?: Error;
37
+ "__#private@#stream": import("./ioredis-adapter.js").IoredisNetStream | undefined;
38
+ "__#private@#disconnectTimeout": number;
39
+ check(): boolean;
40
+ connect(errorEmitter?: (type: string, err: Error) => void): Promise<import("./ioredis-adapter.js").IoredisNetStream>;
41
+ disconnect(): void;
42
+ };
43
+ };
44
+ }>;
45
+ }>;
46
+ //# sourceMappingURL=redis.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redis.d.ts","sourceRoot":"","sources":["../../src/private-data-sources/redis.ts"],"names":[],"mappings":"AAKA,wBAAgB,KAAK,CAAC,IAAI,EAAE,OAAO;;;;;;;;;;;;;aAItB,CAAC,OAAO,CAAC,EAAE,OAAO,KAAK,OAAO;;sBAKrB,OAAO;;;6BAiCmpI,CAAC;;;;;;;;;;;;;;;iCAAD,CAAC;;;;;;;;;;;GADhrI"}
@@ -0,0 +1,27 @@
1
+ import { buildIoredisConnectorFactory } from "./ioredis-adapter.js";
2
+ import { privateDataSourceReference } from "./manifest.js";
3
+ import { authenticateRedisSocketIfNeeded } from "./redis-auth.js";
4
+ import { buildTcpPrivateDataSource } from "./tcp.js";
5
+ export function redis(name) {
6
+ const source = buildTcpPrivateDataSource(privateDataSourceReference(name, "redis"));
7
+ const { connect: _connect, ...descriptors } = Object.getOwnPropertyDescriptors(source);
8
+ const extension = {
9
+ connect(options) {
10
+ return authenticateRedisSocketIfNeeded(source.connect(options), source.username, source.password);
11
+ },
12
+ ioredisConnector() {
13
+ return buildIoredisConnectorFactory(() => authenticateRedisSocketIfNeeded(source.connect(), source.username, source.password));
14
+ },
15
+ ioredisOptions() {
16
+ return Object.freeze({
17
+ Connector: buildIoredisConnectorFactory(() => source.connect()),
18
+ ...(source.password && source.username
19
+ ? { username: source.username }
20
+ : {}),
21
+ ...(source.password ? { password: source.password } : {}),
22
+ });
23
+ },
24
+ };
25
+ return Object.freeze(Object.defineProperties(extension, descriptors));
26
+ }
27
+ //# sourceMappingURL=redis.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redis.js","sourceRoot":"","sources":["../../src/private-data-sources/redis.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,+BAA+B,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,EAAE,yBAAyB,EAAE,MAAM,UAAU,CAAC;AAErD,MAAM,UAAU,KAAK,CAAC,IAAa;IACjC,MAAM,MAAM,GAAG,yBAAyB,CACtC,0BAA0B,CAAC,IAAI,EAAE,OAAO,CAAC,CAG1C,CAAC;IACF,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,WAAW,EAAE,GACzC,MAAM,CAAC,yBAAyB,CAAC,MAAM,CAAC,CAAC;IAC3C,MAAM,SAAS,GAAG;QAChB,OAAO,CAAC,OAAiB;YACvB,OAAO,+BAA+B,CACpC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EACvB,MAAM,CAAC,QAAQ,EACf,MAAM,CAAC,QAAQ,CAChB,CAAC;QACJ,CAAC;QACD,gBAAgB;YACd,OAAO,4BAA4B,CAAC,GAAG,EAAE,CACvC,+BAA+B,CAC7B,MAAM,CAAC,OAAO,EAAE,EAChB,MAAM,CAAC,QAAQ,EACf,MAAM,CAAC,QAAQ,CAChB,CACF,CAAC;QACJ,CAAC;QACD,cAAc;YACZ,OAAO,MAAM,CAAC,MAAM,CAAC;gBACnB,SAAS,EAAE,4BAA4B,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBAC/D,GAAG,CAAC,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ;oBACpC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE;oBAC/B,CAAC,CAAC,EAAE,CAAC;gBACP,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC1D,CAAC,CAAC;QACL,CAAC;KACF,CAAC;IACF,OAAO,MAAM,CAAC,MAAM,CAClB,MAAM,CAAC,gBAAgB,CACrB,SAAS,EACT,WAAW,CACwB,CACtC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function workerEnvironment(): Record<string, unknown>;
2
+ //# sourceMappingURL=runtime-environment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-environment.d.ts","sourceRoot":"","sources":["../../src/private-data-sources/runtime-environment.ts"],"names":[],"mappings":"AAGA,wBAAgB,iBAAiB,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAE3D"}
@@ -0,0 +1,6 @@
1
+ import { env } from "cloudflare:workers";
2
+ // TanStack server code reads the bindings and the manifest off the ambient worker `env`.
3
+ export function workerEnvironment() {
4
+ return env;
5
+ }
6
+ //# sourceMappingURL=runtime-environment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-environment.js","sourceRoot":"","sources":["../../src/private-data-sources/runtime-environment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAEzC,yFAAyF;AACzF,MAAM,UAAU,iBAAiB;IAC/B,OAAO,GAA8B,CAAC;AACxC,CAAC"}
@@ -0,0 +1,18 @@
1
+ export declare function sqlserver(name: unknown): Readonly<Readonly<{
2
+ name: string | undefined;
3
+ type: string | undefined;
4
+ readonly bindingName: string | undefined;
5
+ readonly host: string | undefined;
6
+ readonly port: number | undefined;
7
+ readonly database: string | undefined;
8
+ readonly username: string | undefined;
9
+ readonly user: string | undefined;
10
+ readonly password: string | undefined;
11
+ connect(options?: unknown): unknown;
12
+ readonly binding: unknown;
13
+ }> & {
14
+ connect: (options?: unknown) => unknown;
15
+ } & {
16
+ tediousConnector(): (_connectOptions?: unknown, _lookup?: unknown, signal?: AbortSignal) => Promise<import("./node-net-adapter.js").NodeNetSocket>;
17
+ }>;
18
+ //# sourceMappingURL=sqlserver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlserver.d.ts","sourceRoot":"","sources":["../../src/private-data-sources/sqlserver.ts"],"names":[],"mappings":"AAIA,wBAAgB,SAAS,CAAC,IAAI,EAAE,OAAO;;;;;;;;;;;;;aAI1B,CAAC,OAAO,CAAC,EAAE,OAAO,KAAK,OAAO;;;GAa1C"}
@@ -0,0 +1,13 @@
1
+ import { buildTediousConnectorFactory } from "./tedious-adapter.js";
2
+ import { privateDataSourceReference } from "./manifest.js";
3
+ import { buildTcpPrivateDataSource } from "./tcp.js";
4
+ export function sqlserver(name) {
5
+ const source = buildTcpPrivateDataSource(privateDataSourceReference(name, "sqlserver"));
6
+ const extension = {
7
+ tediousConnector() {
8
+ return buildTediousConnectorFactory(() => source.connect());
9
+ },
10
+ };
11
+ return Object.freeze(Object.defineProperties(extension, Object.getOwnPropertyDescriptors(source)));
12
+ }
13
+ //# sourceMappingURL=sqlserver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqlserver.js","sourceRoot":"","sources":["../../src/private-data-sources/sqlserver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,4BAA4B,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,EAAE,0BAA0B,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,yBAAyB,EAAE,MAAM,UAAU,CAAC;AAErD,MAAM,UAAU,SAAS,CAAC,IAAa;IACrC,MAAM,MAAM,GAAG,yBAAyB,CACtC,0BAA0B,CAAC,IAAI,EAAE,WAAW,CAAC,CAG9C,CAAC;IACF,MAAM,SAAS,GAAG;QAChB,gBAAgB;YACd,OAAO,4BAA4B,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9D,CAAC;KACF,CAAC;IACF,OAAO,MAAM,CAAC,MAAM,CAClB,MAAM,CAAC,gBAAgB,CACrB,SAAS,EACT,MAAM,CAAC,yBAAyB,CAAC,MAAM,CAAC,CACL,CACtC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,29 @@
1
+ import type { CloudflareTcpSocket, PrivateDataSourceManifestEntry } from "./types.js";
2
+ export declare function buildTcpPrivateDataSource(entry: PrivateDataSourceManifestEntry): Readonly<{
3
+ name: string | undefined;
4
+ type: string | undefined;
5
+ readonly bindingName: string | undefined;
6
+ readonly host: string | undefined;
7
+ readonly port: number | undefined;
8
+ readonly database: string | undefined;
9
+ readonly username: string | undefined;
10
+ readonly user: string | undefined;
11
+ readonly password: string | undefined;
12
+ connect(options?: unknown): unknown;
13
+ readonly binding: unknown;
14
+ }>;
15
+ export declare function isCloudflareTcpSocket(socket: unknown): socket is CloudflareTcpSocket;
16
+ export declare function tcp(name: unknown, expectedType: string): Readonly<{
17
+ name: string | undefined;
18
+ type: string | undefined;
19
+ readonly bindingName: string | undefined;
20
+ readonly host: string | undefined;
21
+ readonly port: number | undefined;
22
+ readonly database: string | undefined;
23
+ readonly username: string | undefined;
24
+ readonly user: string | undefined;
25
+ readonly password: string | undefined;
26
+ connect(options?: unknown): unknown;
27
+ readonly binding: unknown;
28
+ }>;
29
+ //# sourceMappingURL=tcp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tcp.d.ts","sourceRoot":"","sources":["../../src/private-data-sources/tcp.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,mBAAmB,EACnB,8BAA8B,EAE/B,MAAM,YAAY,CAAC;AAUpB,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,8BAA8B;;;;;;;;;;sBAyBzD,OAAO;;GAuB5B;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,IAAI,mBAAmB,CAUpF;AAED,wBAAgB,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM;;;;;;;;;;sBArCjC,OAAO;;GAyC5B"}
@@ -0,0 +1,63 @@
1
+ import { currentPrivateDataSource, privateDataSourceReference, privateDataSourceBinding, } from "./manifest.js";
2
+ function hasConnect(binding) {
3
+ return (binding !== null &&
4
+ typeof binding === "object" &&
5
+ typeof binding.connect === "function");
6
+ }
7
+ export function buildTcpPrivateDataSource(entry) {
8
+ return Object.freeze({
9
+ name: entry.name,
10
+ type: entry.type,
11
+ get bindingName() {
12
+ return currentPrivateDataSource(entry).bindingName;
13
+ },
14
+ get host() {
15
+ return currentPrivateDataSource(entry).host;
16
+ },
17
+ get port() {
18
+ return currentPrivateDataSource(entry).port;
19
+ },
20
+ get database() {
21
+ return currentPrivateDataSource(entry).database;
22
+ },
23
+ get username() {
24
+ return currentPrivateDataSource(entry).username;
25
+ },
26
+ get user() {
27
+ return currentPrivateDataSource(entry).username;
28
+ },
29
+ get password() {
30
+ return currentPrivateDataSource(entry).password;
31
+ },
32
+ connect(options) {
33
+ const current = currentPrivateDataSource(entry);
34
+ const binding = privateDataSourceBinding(current);
35
+ if (!hasConnect(binding)) {
36
+ throw new Error(`Private data source "${current.name}" does not expose connect()`);
37
+ }
38
+ const address = typeof current.host === "string" && typeof current.port === "number"
39
+ ? { hostname: current.host, port: current.port }
40
+ : null;
41
+ if (!address) {
42
+ throw new Error(`Private data source "${current.name}" has no TCP address`);
43
+ }
44
+ return binding.connect(address, options);
45
+ },
46
+ get binding() {
47
+ return privateDataSourceBinding(entry);
48
+ },
49
+ });
50
+ }
51
+ export function isCloudflareTcpSocket(socket) {
52
+ const socketObject = socket;
53
+ return (socketObject !== null &&
54
+ typeof socketObject === "object" &&
55
+ !!socketObject.readable &&
56
+ typeof socketObject.readable.getReader === "function" &&
57
+ !!socketObject.writable &&
58
+ typeof socketObject.writable.getWriter === "function");
59
+ }
60
+ export function tcp(name, expectedType) {
61
+ return buildTcpPrivateDataSource(privateDataSourceReference(name, expectedType));
62
+ }
63
+ //# sourceMappingURL=tcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tcp.js","sourceRoot":"","sources":["../../src/private-data-sources/tcp.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EACxB,0BAA0B,EAC1B,wBAAwB,GACzB,MAAM,eAAe,CAAC;AAOvB,SAAS,UAAU,CAAC,OAAgB;IAClC,OAAO,CACL,OAAO,KAAK,IAAI;QAChB,OAAO,OAAO,KAAK,QAAQ;QAC3B,OAAQ,OAAiC,CAAC,OAAO,KAAK,UAAU,CACjE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,KAAqC;IAC7E,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,IAAI,WAAW;YACb,OAAO,wBAAwB,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC;QACrD,CAAC;QACD,IAAI,IAAI;YACN,OAAO,wBAAwB,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC;QAC9C,CAAC;QACD,IAAI,IAAI;YACN,OAAO,wBAAwB,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC;QAC9C,CAAC;QACD,IAAI,QAAQ;YACV,OAAO,wBAAwB,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC;QAClD,CAAC;QACD,IAAI,QAAQ;YACV,OAAO,wBAAwB,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC;QAClD,CAAC;QACD,IAAI,IAAI;YACN,OAAO,wBAAwB,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC;QAClD,CAAC;QACD,IAAI,QAAQ;YACV,OAAO,wBAAwB,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC;QAClD,CAAC;QACD,OAAO,CAAC,OAAiB;YACvB,MAAM,OAAO,GAAG,wBAAwB,CAAC,KAAK,CAAC,CAAC;YAChD,MAAM,OAAO,GAAG,wBAAwB,CAAC,OAAO,CAAC,CAAC;YAClD,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBACzB,MAAM,IAAI,KAAK,CACb,wBAAwB,OAAO,CAAC,IAAI,6BAA6B,CAClE,CAAC;YACJ,CAAC;YACD,MAAM,OAAO,GACX,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ;gBAClE,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE;gBAChD,CAAC,CAAC,IAAI,CAAC;YACX,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CACb,wBAAwB,OAAO,CAAC,IAAI,sBAAsB,CAC3D,CAAC;YACJ,CAAC;YACD,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC3C,CAAC;QACD,IAAI,OAAO;YACT,OAAO,wBAAwB,CAAC,KAAK,CAAC,CAAC;QACzC,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,MAAe;IACnD,MAAM,YAAY,GAAG,MAA6C,CAAC;IACnE,OAAO,CACL,YAAY,KAAK,IAAI;QACrB,OAAO,YAAY,KAAK,QAAQ;QAChC,CAAC,CAAC,YAAY,CAAC,QAAQ;QACvB,OAAO,YAAY,CAAC,QAAQ,CAAC,SAAS,KAAK,UAAU;QACrD,CAAC,CAAC,YAAY,CAAC,QAAQ;QACvB,OAAO,YAAY,CAAC,QAAQ,CAAC,SAAS,KAAK,UAAU,CACtD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,GAAG,CAAC,IAAa,EAAE,YAAoB;IACrD,OAAO,yBAAyB,CAC9B,0BAA0B,CAAC,IAAI,EAAE,YAAY,CAAC,CAC/C,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function buildTediousConnectorFactory(connect: () => unknown): (_connectOptions?: unknown, _lookup?: unknown, signal?: AbortSignal) => Promise<import("./node-net-adapter.js").NodeNetSocket>;
2
+ //# sourceMappingURL=tedious-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tedious-adapter.d.ts","sourceRoot":"","sources":["../../src/private-data-sources/tedious-adapter.ts"],"names":[],"mappings":"AA4DA,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,MAAM,OAAO,IACnD,kBAAkB,OAAO,EAAE,UAAU,OAAO,EAAE,SAAS,WAAW,4DAKjF"}
@@ -0,0 +1,63 @@
1
+ import { isCloudflareTcpSocket } from "./tcp.js";
2
+ import { buildNodeNetSocket } from "./node-net-adapter.js";
3
+ function abortError(label, signal) {
4
+ return signal.reason instanceof Error
5
+ ? signal.reason
6
+ : new Error(`${label} connection aborted`);
7
+ }
8
+ async function waitForCloudflareTcpSocketOpen(socket, label, signal) {
9
+ if (!isCloudflareTcpSocket(socket)) {
10
+ throw new Error(`${label} did not return a readable/writable TCP socket`);
11
+ }
12
+ if (!socket.opened)
13
+ return;
14
+ if (!signal) {
15
+ await socket.opened;
16
+ return;
17
+ }
18
+ if (signal.aborted) {
19
+ try {
20
+ socket.close?.();
21
+ }
22
+ catch {
23
+ // Best-effort cleanup; surface the abort reason below.
24
+ }
25
+ throw abortError(label, signal);
26
+ }
27
+ let onAbort = null;
28
+ try {
29
+ await Promise.race([
30
+ socket.opened,
31
+ new Promise((_, reject) => {
32
+ onAbort = () => reject(abortError(label, signal));
33
+ signal.addEventListener("abort", onAbort, { once: true });
34
+ }),
35
+ ]);
36
+ }
37
+ catch (error) {
38
+ try {
39
+ socket.close?.();
40
+ }
41
+ catch {
42
+ // Preserve the original connection/abort error.
43
+ }
44
+ throw error;
45
+ }
46
+ finally {
47
+ if (onAbort)
48
+ signal.removeEventListener("abort", onAbort);
49
+ }
50
+ }
51
+ function buildTediousNetSocket(socket) {
52
+ return buildNodeNetSocket(socket, "SQL Server private data source", {
53
+ deferConnectEvent: true,
54
+ });
55
+ }
56
+ export function buildTediousConnectorFactory(connect) {
57
+ return async (_connectOptions, _lookup, signal) => {
58
+ const socket = connect();
59
+ await waitForCloudflareTcpSocketOpen(socket, "SQL Server private data source", signal);
60
+ return buildTediousNetSocket(socket);
61
+ };
62
+ }
63
+ //# sourceMappingURL=tedious-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tedious-adapter.js","sourceRoot":"","sources":["../../src/private-data-sources/tedious-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE3D,SAAS,UAAU,CAAC,KAAa,EAAE,MAAmB;IACpD,OAAO,MAAM,CAAC,MAAM,YAAY,KAAK;QACnC,CAAC,CAAC,MAAM,CAAC,MAAM;QACf,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,KAAK,qBAAqB,CAAC,CAAC;AAC/C,CAAC;AAED,KAAK,UAAU,8BAA8B,CAC3C,MAAe,EACf,KAAa,EACb,MAAoB;IAEpB,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,gDAAgD,CAAC,CAAC;IAC5E,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,MAAM;QAAE,OAAO;IAE3B,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,MAAM,CAAC,MAAM,CAAC;QACpB,OAAO;IACT,CAAC;IAED,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,IAAI,CAAC;YACH,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC;QACnB,CAAC;QAAC,MAAM,CAAC;YACP,uDAAuD;QACzD,CAAC;QACD,MAAM,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAClC,CAAC;IAED,IAAI,OAAO,GAAwB,IAAI,CAAC;IACxC,IAAI,CAAC;QACH,MAAM,OAAO,CAAC,IAAI,CAAC;YACjB,MAAM,CAAC,MAAM;YACb,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;gBACxB,OAAO,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;gBAClD,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;YAC5D,CAAC,CAAC;SACH,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC;YACH,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC;QACnB,CAAC;QAAC,MAAM,CAAC;YACP,gDAAgD;QAClD,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;YAAS,CAAC;QACT,IAAI,OAAO;YAAE,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC5D,CAAC;AACH,CAAC;AAED,SAAS,qBAAqB,CAAC,MAAe;IAC5C,OAAO,kBAAkB,CAAC,MAAM,EAAE,gCAAgC,EAAE;QAClE,iBAAiB,EAAE,IAAI;KACxB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,OAAsB;IACjE,OAAO,KAAK,EAAE,eAAyB,EAAE,OAAiB,EAAE,MAAoB,EAAE,EAAE;QAClF,MAAM,MAAM,GAAG,OAAO,EAAE,CAAC;QACzB,MAAM,8BAA8B,CAAC,MAAM,EAAE,gCAAgC,EAAE,MAAM,CAAC,CAAC;QACvF,OAAO,qBAAqB,CAAC,MAAM,CAAC,CAAC;IACvC,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,27 @@
1
+ export interface PrivateDataSourceManifestEntry {
2
+ name?: string;
3
+ type?: string;
4
+ bindingName?: string;
5
+ bindingKind?: string;
6
+ networkScope?: string;
7
+ baseUrl?: string;
8
+ host?: string;
9
+ port?: number;
10
+ database?: string;
11
+ username?: string;
12
+ password?: string;
13
+ }
14
+ export interface FetchPrivateDataSourceBinding {
15
+ fetch: (resource: RequestInfo | URL, init?: RequestInit) => Response | Promise<Response>;
16
+ }
17
+ export interface TcpPrivateDataSourceBinding {
18
+ connect: (address: unknown, options?: unknown) => unknown;
19
+ }
20
+ export interface CloudflareTcpSocket {
21
+ readable: ReadableStream<Uint8Array>;
22
+ writable: WritableStream<Uint8Array>;
23
+ opened?: Promise<unknown>;
24
+ close?: () => void;
25
+ closed?: Promise<unknown>;
26
+ }
27
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/private-data-sources/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,8BAA8B;IAC7C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,6BAA6B;IAC5C,KAAK,EAAE,CAAC,QAAQ,EAAE,WAAW,GAAG,GAAG,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;CAC1F;AAED,MAAM,WAAW,2BAA2B;IAC1C,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC;CAC3D;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;IACrC,QAAQ,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;IACrC,MAAM,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;CAC3B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/private-data-sources/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ import type { Plugin } from "vite";
2
+ export declare function privateDataSourcesPlugin(): Plugin;
3
+ //# sourceMappingURL=private-data-sources-plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"private-data-sources-plugin.d.ts","sourceRoot":"","sources":["../src/private-data-sources-plugin.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAiCnC,wBAAgB,wBAAwB,IAAI,MAAM,CAmBjD"}
@@ -0,0 +1,51 @@
1
+ import path from "node:path";
2
+ import { fileURLToPath } from "node:url";
3
+ /**
4
+ * Serves `base44:private-data-sources/<type>` to TanStack server code, so it
5
+ * reaches a workspace private data source with the SAME import a backend
6
+ * function uses:
7
+ *
8
+ * import { sqlserver } from "base44:private-data-sources/sqlserver";
9
+ *
10
+ * The modules are this package's own copy of the backend-function adapters
11
+ * (`@base44/functions-compiler`), reading the worker's bindings and manifest off
12
+ * `env` from `cloudflare:workers`. Each specifier resolves to the compiled file
13
+ * so Vite bundles it like any source module.
14
+ *
15
+ * The bindings exist only on the deployed worker: in the editor's dev preview a
16
+ * lookup throws, saying the source is available on the published app.
17
+ */
18
+ const PREFIX = "base44:private-data-sources/";
19
+ const SOURCE_TYPES = new Set([
20
+ "elasticsearch",
21
+ "http",
22
+ "mariadb",
23
+ "mongodb",
24
+ "mysql",
25
+ "oracle",
26
+ "postgres",
27
+ "redis",
28
+ "sqlserver",
29
+ ]);
30
+ const MODULES_DIR = path.join(path.dirname(fileURLToPath(import.meta.url)), "private-data-sources");
31
+ export function privateDataSourcesPlugin() {
32
+ return {
33
+ name: "base44-private-data-sources",
34
+ // Ahead of Vite's own resolution so the bare scheme is never read as a URL.
35
+ enforce: "pre",
36
+ resolveId(id) {
37
+ if (!id.startsWith(PREFIX))
38
+ return null;
39
+ const sourceType = id.slice(PREFIX.length);
40
+ if (!SOURCE_TYPES.has(sourceType)) {
41
+ this.error(`"${id}" is not a private data source type. Use one of: ${[...SOURCE_TYPES].join(", ")}.`);
42
+ }
43
+ // The source carries credentials, so it must never reach the browser bundle.
44
+ if (this.environment?.name === "client") {
45
+ this.error(`"${id}" is server-only. Move this import into a server function or server route.`);
46
+ }
47
+ return path.join(MODULES_DIR, `${sourceType}.js`);
48
+ },
49
+ };
50
+ }
51
+ //# sourceMappingURL=private-data-sources-plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"private-data-sources-plugin.js","sourceRoot":"","sources":["../src/private-data-sources-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAGzC;;;;;;;;;;;;;;GAcG;AAEH,MAAM,MAAM,GAAG,8BAA8B,CAAC;AAC9C,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC;IAC3B,eAAe;IACf,MAAM;IACN,SAAS;IACT,SAAS;IACT,OAAO;IACP,QAAQ;IACR,UAAU;IACV,OAAO;IACP,WAAW;CACZ,CAAC,CAAC;AAEH,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,sBAAsB,CAAC,CAAC;AAEpG,MAAM,UAAU,wBAAwB;IACtC,OAAO;QACL,IAAI,EAAE,6BAA6B;QACnC,4EAA4E;QAC5E,OAAO,EAAE,KAAK;QAEd,SAAS,CAAC,EAAE;YACV,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC;gBAAE,OAAO,IAAI,CAAC;YACxC,MAAM,UAAU,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC3C,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;gBAClC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,oDAAoD,CAAC,GAAG,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACxG,CAAC;YACD,6EAA6E;YAC7E,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACxC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,4EAA4E,CAAC,CAAC;YACjG,CAAC;YACD,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,UAAU,KAAK,CAAC,CAAC;QACpD,CAAC;KACF,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@base44-preview/vite-plugin",
3
- "version": "1.0.48-pr.138.622eb14",
3
+ "version": "1.0.48-pr.142.9fcc12e",
4
4
  "description": "The Vite plugin for base44 based applications",
5
5
  "type": "module",
6
6
  "license": "MIT",
package/src/index.ts CHANGED
@@ -8,9 +8,12 @@ import { htmlInjectionsPlugin } from "./html-injections-plugin.js";
8
8
  import { buildStatusPlugin } from "./build-status-plugin.js";
9
9
  import { base44RuntimePlugin } from "./base44-runtime-plugin.js";
10
10
  import { workerdCompatPlugin } from "./workerd-compat-plugin.js";
11
+ import { privateDataSourcesPlugin } from "./private-data-sources-plugin.js";
11
12
  import { routeRequestLogPlugin } from "./route-request-log/vite-plugin.js";
12
13
  export type { DocumentScript } from "./consts.js";
13
14
 
15
+ const PLATFORM_API_PROXY_PATH = "^/api/(apps|app-logs)([/?]|$)";
16
+
14
17
  const isRunningInSandbox = !!process.env.MODAL_SANDBOX_ID;
15
18
 
16
19
  // Both optimizer spellings mean the same thing here: treat .js files as JSX,
@@ -158,12 +161,14 @@ export default function vitePlugin(
158
161
  : (() => {
159
162
  if (env.VITE_BASE44_APP_BASE_URL) {
160
163
  console.log(
161
- `[base44] Proxy enabled: /api -> ${env.VITE_BASE44_APP_BASE_URL}`
164
+ `[base44] Proxy enabled: /api/apps, /api/app-logs -> ${env.VITE_BASE44_APP_BASE_URL}`
162
165
  );
163
166
  return {
164
167
  server: {
165
168
  proxy: {
166
- "/api": {
169
+ // Only the platform's paths: the rest of /api is the app's own server
170
+ // routes, and under `base44 dev` proxying them loops back to the CLI.
171
+ [PLATFORM_API_PROXY_PATH]: {
167
172
  target: env.VITE_BASE44_APP_BASE_URL,
168
173
  changeOrigin: true,
169
174
  },
@@ -304,6 +309,8 @@ export default function vitePlugin(
304
309
  // `ws` and `AsyncLocalStorage.enterWith()` for Cloudflare Workers server code.
305
310
  // Inert outside environments that resolve with the "workerd" condition.
306
311
  workerdCompatPlugin(),
312
+ // Serves `base44:private-data-sources/*` to TanStack server code.
313
+ privateDataSourcesPlugin(),
307
314
  // Dev-only: tags a full-stack route's console output with the request's
308
315
  // X-B44-Request-Id. Registered as a Nitro module (the `nitro` property)
309
316
  // because Nitro runs dev routes in a worker whose console the Vite process
@@ -0,0 +1,51 @@
1
+ import { resolveHttpPrivateDataSourceUrl } from "./http-url.js";
2
+ import {
3
+ currentPrivateDataSource,
4
+ privateDataSourceBinding,
5
+ } from "./manifest.js";
6
+ import type { FetchPrivateDataSourceBinding, PrivateDataSourceManifestEntry } from "./types.js";
7
+
8
+ // Internal, NOT a public virtual module: app code cannot import this builder to
9
+ // hand-forge a manifest entry. The only public entrypoints — http()/elasticsearch()
10
+ // — resolve their entry from the immutable runtime manifest via lookupPrivateDataSource.
11
+
12
+ function hasFetch(binding: unknown): binding is FetchPrivateDataSourceBinding {
13
+ return (
14
+ binding !== null &&
15
+ typeof binding === "object" &&
16
+ typeof (binding as { fetch?: unknown }).fetch === "function"
17
+ );
18
+ }
19
+
20
+ export function buildHttpPrivateDataSource(entry: PrivateDataSourceManifestEntry) {
21
+ return Object.freeze({
22
+ name: entry.name,
23
+ type: entry.type,
24
+ get bindingName() {
25
+ return currentPrivateDataSource(entry).bindingName;
26
+ },
27
+ fetch(resource: RequestInfo | URL, init?: RequestInit) {
28
+ const current = currentPrivateDataSource(entry);
29
+ const binding = privateDataSourceBinding(current);
30
+ if (!hasFetch(binding)) {
31
+ throw new Error(
32
+ `Private data source "${current.name}" does not expose fetch()`,
33
+ );
34
+ }
35
+ return binding.fetch(
36
+ resolveHttpPrivateDataSourceUrl(current, resource),
37
+ init,
38
+ );
39
+ },
40
+ // Fixed services expose the raw binding (Cloudflare pins their single
41
+ // target). Deferred Actor handles decide this from the request manifest,
42
+ // after their request environment exists.
43
+ get binding() {
44
+ const current = currentPrivateDataSource(entry);
45
+ return current.bindingName !== undefined
46
+ && current.networkScope !== "network"
47
+ ? privateDataSourceBinding(current)
48
+ : undefined;
49
+ },
50
+ });
51
+ }
@@ -0,0 +1,3 @@
1
+ declare module "cloudflare:workers" {
2
+ export const env: unknown;
3
+ }
@@ -0,0 +1,8 @@
1
+ import { buildHttpPrivateDataSource } from "./build-http.js";
2
+ import { privateDataSourceReference } from "./manifest.js";
3
+
4
+ export function elasticsearch(name: unknown) {
5
+ return buildHttpPrivateDataSource(
6
+ privateDataSourceReference(name, "elasticsearch"),
7
+ );
8
+ }