@alienplatform/bindings 3.2.0 → 3.3.0-dev.0d4f932037814a854d56a7e4e82a8a34cc2e35cb

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.
package/README.md CHANGED
@@ -1,6 +1,7 @@
1
1
  # `@alienplatform/bindings`
2
2
 
3
- Direct TypeScript bindings for Alien storage, kv, queue, vault, and linked-container discovery over an
3
+ Direct TypeScript bindings for Alien storage, kv, queue, vault, linked-container
4
+ discovery, and Postgres over an
4
5
  in-process [napi-rs](https://napi.rs) addon. The addon itself lives in the Rust
5
6
  crate `crates/alien-bindings-node`; this package is the published JavaScript
6
7
  wrapper that loads it.
@@ -20,6 +21,43 @@ const publicUrl = await database.getPublicUrl() // string | null
20
21
  Use the internal URL for calls between resources in the same deployment. Use
21
22
  the public URL only when the caller is outside that private network.
22
23
 
24
+ ## Postgres
25
+
26
+ Postgres is connection-only: every backend speaks the same wire protocol, so the
27
+ binding hands back connection details and your app connects with its own driver.
28
+ Resolving a managed cloud backend (Aurora, Cloud SQL, Flexible Server) reads the
29
+ password from that cloud's secret store using the workload's own identity — the
30
+ binding itself only ever carries a locator for it.
31
+
32
+ ```ts
33
+ import { Client } from "pg"
34
+ import { postgres } from "@alienplatform/bindings"
35
+
36
+ const conn = await postgres("my-db").connection()
37
+
38
+ // Field style: node-postgres parses a URL's sslmode and would override `ssl`, so
39
+ // pass the fields when you need `conn.ssl` to take effect.
40
+ const client = new Client({
41
+ host: conn.host,
42
+ port: conn.port,
43
+ database: conn.database,
44
+ user: conn.username,
45
+ password: conn.password,
46
+ ssl: conn.ssl,
47
+ })
48
+ await client.connect()
49
+ ```
50
+
51
+ `conn.connectionString` is the same details as a `postgres://` URL, with the
52
+ credentials percent-encoded, for drivers that take one.
53
+
54
+ External (BYO) Postgres bindings use verified TLS by default. Their `sslMode`
55
+ policy is deliberately limited to `"verify-full"` and `"disable"` because
56
+ node-postgres cannot represent libpq's opportunistic `prefer` fallback without
57
+ owning the connection attempt. Use `"disable"` only as an explicit compatibility
58
+ opt-out for a plaintext-only server; missing legacy configuration defaults to
59
+ `"verify-full"`.
60
+
23
61
  ## Native addon resolution
24
62
 
25
63
  The addon is loaded lazily on the first binding operation (never at import — the
package/dist/errors.d.ts CHANGED
@@ -40,6 +40,55 @@ export declare const BindingNotConfiguredError: {
40
40
  envVar: z.ZodString;
41
41
  }, z.core.$strip>>;
42
42
  };
43
+ /**
44
+ * Thrown when the native addon reports a Postgres `sslmode` this package does not
45
+ * recognize, which means the addon and this wrapper disagree about the Rust `SslMode`
46
+ * enum — a version skew between the two halves of the package.
47
+ *
48
+ * `sslmode` is the value the addon sent; `expected` is the set this wrapper accepts.
49
+ * Not retryable: a skew is fixed by aligning versions, not by trying again.
50
+ */
51
+ export declare const UnknownPostgresSslModeError: {
52
+ metadata: import("@alienplatform/core").AlienErrorMetadata<z.ZodObject<{
53
+ sslmode: z.ZodString;
54
+ expected: z.ZodArray<z.ZodString>;
55
+ }, z.core.$strip>>;
56
+ contextSchema: z.ZodObject<{
57
+ sslmode: z.ZodString;
58
+ expected: z.ZodArray<z.ZodString>;
59
+ }, z.core.$strip>;
60
+ create: (context: {
61
+ sslmode: string;
62
+ expected: string[];
63
+ }) => import("@alienplatform/core").AlienErrorDefinition<z.ZodObject<{
64
+ sslmode: z.ZodString;
65
+ expected: z.ZodArray<z.ZodString>;
66
+ }, z.core.$strip>>;
67
+ };
68
+ /**
69
+ * Thrown when the native addon reports a Postgres TLS policy that cannot be
70
+ * applied safely, such as a verified mode without any CA roots.
71
+ *
72
+ * This indicates wrapper/addon version skew or a malformed resolved binding.
73
+ * It is not retryable because retrying cannot repair the contract.
74
+ */
75
+ export declare const InvalidPostgresTlsConfigError: {
76
+ metadata: import("@alienplatform/core").AlienErrorMetadata<z.ZodObject<{
77
+ sslmode: z.ZodString;
78
+ reason: z.ZodString;
79
+ }, z.core.$strip>>;
80
+ contextSchema: z.ZodObject<{
81
+ sslmode: z.ZodString;
82
+ reason: z.ZodString;
83
+ }, z.core.$strip>;
84
+ create: (context: {
85
+ sslmode: string;
86
+ reason: string;
87
+ }) => import("@alienplatform/core").AlienErrorDefinition<z.ZodObject<{
88
+ sslmode: z.ZodString;
89
+ reason: z.ZodString;
90
+ }, z.core.$strip>>;
91
+ };
43
92
  /**
44
93
  * Recover a typed {@link AlienError} from an error thrown by the native addon.
45
94
  *
@@ -53,4 +102,5 @@ export declare const BindingNotConfiguredError: {
53
102
  * `BINDINGS_ERROR`, preserving the original message.
54
103
  */
55
104
  export declare function unwrapNapiError(err: unknown): AlienError;
105
+ export { BindingNotFoundError } from "@alienplatform/core";
56
106
  //# sourceMappingURL=errors.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAC7D,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAA;AAI3B,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,CAAA;AAElC;;;;;;;GAOG;AACH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;CAWpC,CAAA;AAwCF;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,UAAU,CAsCxD"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AAC7D,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAA;AAI3B,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,CAAA;AAElC;;;;;;;GAOG;AACH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;CAWpC,CAAA;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;CAUtC,CAAA;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;CAUxC,CAAA;AAwCF;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,UAAU,CAsCxD;AAGD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA"}
@@ -13,7 +13,7 @@
13
13
  * correctly even when destructured off the handle (`const { get } = storage(x)`).
14
14
  */
15
15
  import type { NativeAddon } from "./loader.js";
16
- import type { Container, Kv, Queue, Storage, Vault } from "./types.js";
16
+ import type { Container, Kv, Postgres, Queue, Storage, Vault } from "./types.js";
17
17
  /** The public factory surface. */
18
18
  export interface Factories {
19
19
  storage(name: string): Storage;
@@ -21,6 +21,7 @@ export interface Factories {
21
21
  queue(name: string): Queue;
22
22
  vault(name: string): Vault;
23
23
  container(name: string): Container;
24
+ postgres(name: string): Postgres;
24
25
  }
25
26
  /** Build the factories bound to a given addon provider. */
26
27
  export declare function createFactories(getAddon: () => NativeAddon): Factories;
@@ -1 +1 @@
1
- {"version":3,"file":"factories.d.ts","sourceRoot":"","sources":["../src/factories.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,KAAK,EACV,WAAW,EAOZ,MAAM,aAAa,CAAA;AACpB,OAAO,KAAK,EACV,SAAS,EACT,EAAE,EAIF,KAAK,EAGL,OAAO,EACP,KAAK,EACN,MAAM,YAAY,CAAA;AAsInB,kCAAkC;AAClC,MAAM,WAAW,SAAS;IACxB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAA;IAC9B,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,EAAE,CAAA;IACpB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAAA;IAC1B,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAAA;IAC1B,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAA;CACnC;AAED,2DAA2D;AAC3D,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,WAAW,GAAG,SAAS,CAQtE"}
1
+ {"version":3,"file":"factories.d.ts","sourceRoot":"","sources":["../src/factories.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAQH,OAAO,KAAK,EACV,WAAW,EASZ,MAAM,aAAa,CAAA;AACpB,OAAO,KAAK,EACV,SAAS,EACT,EAAE,EAGF,QAAQ,EAIR,KAAK,EAGL,OAAO,EACP,KAAK,EACN,MAAM,YAAY,CAAA;AA8PnB,kCAAkC;AAClC,MAAM,WAAW,SAAS;IACxB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAA;IAC9B,EAAE,CAAC,IAAI,EAAE,MAAM,GAAG,EAAE,CAAA;IACpB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAAA;IAC1B,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAAA;IAC1B,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAA;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAA;CACjC;AAED,2DAA2D;AAC3D,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,WAAW,GAAG,SAAS,CAStE"}
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * `@alienplatform/bindings` — direct TypeScript bindings for Alien storage, kv,
3
- * queue, vault, and linked containers, backed by an in-process napi-rs addon over the Rust
4
- * `alien-bindings` crate.
3
+ * queue, vault, linked containers, and Postgres, backed by an in-process napi-rs addon
4
+ * over the Rust `alien-bindings` crate.
5
5
  *
6
6
  * Constructing a factory (`storage("x")`, `kv("y")`, …) does no I/O and needs no
7
7
  * addon; the native module loads on the first operation. The first operation
@@ -18,6 +18,8 @@ export declare const queue: (name: string) => import("./types.js").Queue;
18
18
  export declare const vault: (name: string) => import("./types.js").Vault;
19
19
  /** Resolve the linked-container binding named `name`. */
20
20
  export declare const container: (name: string) => import("./types.js").Container;
21
- export { AlienError, BindingNotConfiguredError, defineError } from "./errors.js";
22
- export type { Container, Kv, KvScanItem, KvScanResult, KvSetOptions, ObjectMeta, PresignedRequest, Queue, QueueMessage, SignedUrlMethod, SignedUrlOptions, Storage, Vault, } from "./types.js";
21
+ /** Resolve the Postgres binding named `name`. */
22
+ export declare const postgres: (name: string) => import("./types.js").Postgres;
23
+ export { AlienError, BindingNotConfiguredError, BindingNotFoundError, defineError, InvalidPostgresTlsConfigError, UnknownPostgresSslModeError, } from "./errors.js";
24
+ export type { Container, Kv, KvScanItem, KvScanResult, KvSetOptions, ObjectMeta, Postgres, PostgresConnection, PostgresSslMode, PostgresTlsOptions, PresignedRequest, Queue, QueueMessage, SignedUrlMethod, SignedUrlOptions, Storage, Vault, } from "./types.js";
23
25
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAOH,gDAAgD;AAChD,eAAO,MAAM,OAAO,gDAAoB,CAAA;AACxC,kDAAkD;AAClD,eAAO,MAAM,EAAE,2CAAe,CAAA;AAC9B,8CAA8C;AAC9C,eAAO,MAAM,KAAK,8CAAkB,CAAA;AACpC,8CAA8C;AAC9C,eAAO,MAAM,KAAK,8CAAkB,CAAA;AACpC,yDAAyD;AACzD,eAAO,MAAM,SAAS,kDAAsB,CAAA;AAE5C,OAAO,EAAE,UAAU,EAAE,yBAAyB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAEhF,YAAY,EACV,SAAS,EACT,EAAE,EACF,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,gBAAgB,EAChB,KAAK,EACL,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,OAAO,EACP,KAAK,GACN,MAAM,YAAY,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAOH,gDAAgD;AAChD,eAAO,MAAM,OAAO,gDAAoB,CAAA;AACxC,kDAAkD;AAClD,eAAO,MAAM,EAAE,2CAAe,CAAA;AAC9B,8CAA8C;AAC9C,eAAO,MAAM,KAAK,8CAAkB,CAAA;AACpC,8CAA8C;AAC9C,eAAO,MAAM,KAAK,8CAAkB,CAAA;AACpC,yDAAyD;AACzD,eAAO,MAAM,SAAS,kDAAsB,CAAA;AAC5C,iDAAiD;AACjD,eAAO,MAAM,QAAQ,iDAAqB,CAAA;AAE1C,OAAO,EACL,UAAU,EACV,yBAAyB,EACzB,oBAAoB,EACpB,WAAW,EACX,6BAA6B,EAC7B,2BAA2B,GAC5B,MAAM,aAAa,CAAA;AAEpB,YAAY,EACV,SAAS,EACT,EAAE,EACF,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,QAAQ,EACR,kBAAkB,EAClB,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,KAAK,EACL,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,OAAO,EACP,KAAK,GACN,MAAM,YAAY,CAAA"}
package/dist/index.js CHANGED
@@ -1,9 +1,9 @@
1
- import { a as BindingNotConfiguredError, i as AlienError, o as defineError, r as createFactories, t as loadAddon } from "./loader.js";
1
+ import { a as BindingNotConfiguredError, c as UnknownPostgresSslModeError, i as AlienError, l as defineError, o as BindingNotFoundError, r as createFactories, s as InvalidPostgresTlsConfigError, t as loadAddon } from "./loader.js";
2
2
  //#region src/index.ts
3
3
  /**
4
4
  * `@alienplatform/bindings` — direct TypeScript bindings for Alien storage, kv,
5
- * queue, vault, and linked containers, backed by an in-process napi-rs addon over the Rust
6
- * `alien-bindings` crate.
5
+ * queue, vault, linked containers, and Postgres, backed by an in-process napi-rs addon
6
+ * over the Rust `alien-bindings` crate.
7
7
  *
8
8
  * Constructing a factory (`storage("x")`, `kv("y")`, …) does no I/O and needs no
9
9
  * addon; the native module loads on the first operation. The first operation
@@ -21,5 +21,7 @@ const queue = factories.queue;
21
21
  const vault = factories.vault;
22
22
  /** Resolve the linked-container binding named `name`. */
23
23
  const container = factories.container;
24
+ /** Resolve the Postgres binding named `name`. */
25
+ const postgres = factories.postgres;
24
26
  //#endregion
25
- export { AlienError, BindingNotConfiguredError, container, defineError, kv, queue, storage, vault };
27
+ export { AlienError, BindingNotConfiguredError, BindingNotFoundError, InvalidPostgresTlsConfigError, UnknownPostgresSslModeError, container, defineError, kv, postgres, queue, storage, vault };
package/dist/loader.d.ts CHANGED
@@ -89,6 +89,28 @@ export interface RawContainerHandle {
89
89
  getInternalUrl(): Promise<string>;
90
90
  getPublicUrl(): Promise<string | null>;
91
91
  }
92
+ /**
93
+ * Raw napi Postgres connection. `sslmode` is the exact query-parameter value the
94
+ * Rust `SslMode` emits.
95
+ */
96
+ export interface RawPostgresConnection {
97
+ connectionString: string;
98
+ host: string;
99
+ port: number;
100
+ database: string;
101
+ username: string;
102
+ password: string;
103
+ sslmode: unknown;
104
+ caCertificates: unknown;
105
+ }
106
+ /**
107
+ * Raw napi Postgres handle. `connection()` is synchronous: the Rust provider has
108
+ * already resolved everything (including reading a cloud backend's password from
109
+ * its secret store) by the time the handle exists.
110
+ */
111
+ export interface RawPostgresHandle {
112
+ connection(): RawPostgresConnection;
113
+ }
92
114
  /** Raw napi vault handle. */
93
115
  export interface RawVaultHandle {
94
116
  getSecret(name: string): Promise<string>;
@@ -103,6 +125,7 @@ export interface RawBindingsHandle {
103
125
  queue(name: string): Promise<RawQueueHandle>;
104
126
  vault(name: string): Promise<RawVaultHandle>;
105
127
  container(name: string): Promise<RawContainerHandle>;
128
+ postgres(name: string): Promise<RawPostgresHandle>;
106
129
  }
107
130
  /** The complete napi addon module surface consumed by the wrapper. */
108
131
  export interface NativeAddon {
@@ -1 +1 @@
1
- {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"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"}
package/dist/loader.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { createRequire } from "node:module";
2
- import { AlienError, defineError } from "@alienplatform/core";
2
+ import { AlienError, BindingNotFoundError, defineError } from "@alienplatform/core";
3
3
  import { existsSync } from "node:fs";
4
4
  import { dirname, join } from "node:path";
5
5
  import { fileURLToPath } from "node:url";
@@ -3380,6 +3380,41 @@ const BindingNotConfiguredError = defineError({
3380
3380
  internal: false,
3381
3381
  httpStatusCode: 400
3382
3382
  });
3383
+ /**
3384
+ * Thrown when the native addon reports a Postgres `sslmode` this package does not
3385
+ * recognize, which means the addon and this wrapper disagree about the Rust `SslMode`
3386
+ * enum — a version skew between the two halves of the package.
3387
+ *
3388
+ * `sslmode` is the value the addon sent; `expected` is the set this wrapper accepts.
3389
+ * Not retryable: a skew is fixed by aligning versions, not by trying again.
3390
+ */
3391
+ const UnknownPostgresSslModeError = defineError({
3392
+ code: "UNKNOWN_POSTGRES_SSLMODE",
3393
+ context: object({
3394
+ sslmode: string(),
3395
+ expected: array(string())
3396
+ }),
3397
+ message: ({ sslmode, expected }) => `@alienplatform/bindings received an unknown Postgres sslmode '${sslmode}' from the native addon; expected one of ${expected.join(", ")}.`,
3398
+ retryable: false,
3399
+ internal: false
3400
+ });
3401
+ /**
3402
+ * Thrown when the native addon reports a Postgres TLS policy that cannot be
3403
+ * applied safely, such as a verified mode without any CA roots.
3404
+ *
3405
+ * This indicates wrapper/addon version skew or a malformed resolved binding.
3406
+ * It is not retryable because retrying cannot repair the contract.
3407
+ */
3408
+ const InvalidPostgresTlsConfigError = defineError({
3409
+ code: "INVALID_POSTGRES_TLS_CONFIG",
3410
+ context: object({
3411
+ sslmode: string(),
3412
+ reason: string()
3413
+ }),
3414
+ message: ({ sslmode, reason }) => `@alienplatform/bindings received an invalid Postgres TLS configuration for sslmode '${sslmode}' from the native addon: ${reason}.`,
3415
+ retryable: false,
3416
+ internal: false
3417
+ });
3383
3418
  /** Fallback code for napi-internal errors whose message is not an envelope. */
3384
3419
  const GENERIC_BINDINGS_CODE = "BINDINGS_ERROR";
3385
3420
  /** Envelope codes the wrapper maps to a dedicated typed error. */
@@ -3540,6 +3575,90 @@ function makeVault(handle) {
3540
3575
  list: () => guard(handle, (raw) => raw.listSecrets())
3541
3576
  };
3542
3577
  }
3578
+ const POSTGRES_SSL_MODES = {
3579
+ disable: true,
3580
+ "verify-ca": true,
3581
+ "verify-full": true
3582
+ };
3583
+ function postgresSslModeLabel(sslmode) {
3584
+ return typeof sslmode === "string" ? sslmode : String(sslmode);
3585
+ }
3586
+ function invalidPostgresTlsConfig(sslmode, reason) {
3587
+ return new AlienError(InvalidPostgresTlsConfigError.create({
3588
+ sslmode: postgresSslModeLabel(sslmode),
3589
+ reason
3590
+ }).toOptions());
3591
+ }
3592
+ function isPostgresSslMode(value) {
3593
+ return typeof value === "string" && Object.hasOwn(POSTGRES_SSL_MODES, value);
3594
+ }
3595
+ function hasAtLeastOne(values) {
3596
+ return values.length > 0;
3597
+ }
3598
+ /**
3599
+ * Decode the raw addon connection into the public discriminated union, deriving
3600
+ * node-postgres TLS options from the Rust-resolved mode and provider roots.
3601
+ *
3602
+ * An unrecognized `sslmode` means the addon and this wrapper disagree about the
3603
+ * `SslMode` enum — a version skew that must fail loudly rather than produce a
3604
+ * connection with a silently wrong TLS posture. It throws
3605
+ * {@link UnknownPostgresSslModeError} so a caller can discriminate it by `code`;
3606
+ * `guard` passes an `AlienError` through untouched.
3607
+ */
3608
+ function toPostgresConnection(raw) {
3609
+ if (!isPostgresSslMode(raw.sslmode)) throw new AlienError(UnknownPostgresSslModeError.create({
3610
+ sslmode: postgresSslModeLabel(raw.sslmode),
3611
+ expected: Object.keys(POSTGRES_SSL_MODES)
3612
+ }).toOptions());
3613
+ if (!Array.isArray(raw.caCertificates)) throw invalidPostgresTlsConfig(raw.sslmode, "caCertificates must be an array");
3614
+ const caCertificates = [];
3615
+ const rawCaCertificates = raw.caCertificates;
3616
+ for (const [index, certificate] of rawCaCertificates.entries()) {
3617
+ if (typeof certificate !== "string") throw invalidPostgresTlsConfig(raw.sslmode, `caCertificates[${index}] must be a string`);
3618
+ if (certificate.trim().length === 0) throw invalidPostgresTlsConfig(raw.sslmode, `caCertificates[${index}] cannot be empty`);
3619
+ caCertificates.push(certificate);
3620
+ }
3621
+ const fields = {
3622
+ connectionString: raw.connectionString,
3623
+ host: raw.host,
3624
+ port: raw.port,
3625
+ database: raw.database,
3626
+ username: raw.username,
3627
+ password: raw.password
3628
+ };
3629
+ switch (raw.sslmode) {
3630
+ case "disable":
3631
+ if (caCertificates.length > 0) throw invalidPostgresTlsConfig(raw.sslmode, "disable cannot carry CA certificates");
3632
+ return {
3633
+ ...fields,
3634
+ sslmode: raw.sslmode,
3635
+ ssl: false
3636
+ };
3637
+ case "verify-ca":
3638
+ if (!hasAtLeastOne(caCertificates)) throw invalidPostgresTlsConfig(raw.sslmode, "verify-ca requires at least one CA certificate");
3639
+ return {
3640
+ ...fields,
3641
+ sslmode: raw.sslmode,
3642
+ ssl: {
3643
+ ca: caCertificates,
3644
+ rejectUnauthorized: true,
3645
+ checkServerIdentity: () => void 0
3646
+ }
3647
+ };
3648
+ case "verify-full": return {
3649
+ ...fields,
3650
+ sslmode: raw.sslmode,
3651
+ ssl: {
3652
+ ...caCertificates.length > 0 ? { ca: caCertificates } : {},
3653
+ rejectUnauthorized: true
3654
+ }
3655
+ };
3656
+ default: return raw.sslmode;
3657
+ }
3658
+ }
3659
+ function makePostgres(handle) {
3660
+ return { connection: () => guard(handle, async (raw) => toPostgresConnection(raw.connection())) };
3661
+ }
3543
3662
  /** Build the factories bound to a given addon provider. */
3544
3663
  function createFactories(getAddon) {
3545
3664
  return {
@@ -3547,7 +3666,8 @@ function createFactories(getAddon) {
3547
3666
  kv: (name) => makeKv(lazyHandle(getAddon, name, (b, n) => b.kv(n))),
3548
3667
  queue: (name) => makeQueue(lazyHandle(getAddon, name, (b, n) => b.queue(n))),
3549
3668
  vault: (name) => makeVault(lazyHandle(getAddon, name, (b, n) => b.vault(n))),
3550
- container: (name) => makeContainer(lazyHandle(getAddon, name, (b, n) => b.container(n)))
3669
+ container: (name) => makeContainer(lazyHandle(getAddon, name, (b, n) => b.container(n))),
3670
+ postgres: (name) => makePostgres(lazyHandle(getAddon, name, (b, n) => b.postgres(n)))
3551
3671
  };
3552
3672
  }
3553
3673
  //#endregion
@@ -3716,4 +3836,4 @@ function loadAddon() {
3716
3836
  throw new Error(`Cannot load the @alienplatform/bindings native addon for '${triple}'. Install the '${pkg}' prebuild, or build it locally with \`napi build --platform\` in crates/alien-bindings-node, or set ALIEN_BINDINGS_ADDON_PATH to a built .node file.`);
3717
3837
  }
3718
3838
  //#endregion
3719
- export { BindingNotConfiguredError as a, AlienError as i, registerEmbeddedAddon as n, defineError as o, createFactories as r, loadAddon as t };
3839
+ export { BindingNotConfiguredError as a, UnknownPostgresSslModeError as c, AlienError as i, defineError as l, registerEmbeddedAddon as n, BindingNotFoundError as o, createFactories as r, InvalidPostgresTlsConfigError as s, loadAddon as t };
package/dist/native.d.ts CHANGED
@@ -38,6 +38,8 @@ export declare const queue: (name: string) => import("./types.js").Queue;
38
38
  export declare const vault: (name: string) => import("./types.js").Vault;
39
39
  /** Resolve the linked-container binding named `name`. */
40
40
  export declare const container: (name: string) => import("./types.js").Container;
41
- export { AlienError, BindingNotConfiguredError, defineError } from "./errors.js";
42
- export type { Container, Kv, KvScanItem, KvScanResult, KvSetOptions, ObjectMeta, PresignedRequest, Queue, QueueMessage, SignedUrlMethod, SignedUrlOptions, Storage, Vault, } from "./types.js";
41
+ /** Resolve the Postgres binding named `name`. */
42
+ export declare const postgres: (name: string) => import("./types.js").Postgres;
43
+ export { AlienError, BindingNotConfiguredError, defineError, InvalidPostgresTlsConfigError, UnknownPostgresSslModeError, } from "./errors.js";
44
+ export type { Container, Kv, KvScanItem, KvScanResult, KvSetOptions, ObjectMeta, Postgres, PostgresConnection, PostgresSslMode, PostgresTlsOptions, PresignedRequest, Queue, QueueMessage, SignedUrlMethod, SignedUrlOptions, Storage, Vault, } from "./types.js";
43
45
  //# sourceMappingURL=native.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"native.d.ts","sourceRoot":"","sources":["../src/native.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAMH;;;;;;GAMG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAE3C;AAID,gDAAgD;AAChD,eAAO,MAAM,OAAO,gDAAoB,CAAA;AACxC,kDAAkD;AAClD,eAAO,MAAM,EAAE,2CAAe,CAAA;AAC9B,8CAA8C;AAC9C,eAAO,MAAM,KAAK,8CAAkB,CAAA;AACpC,8CAA8C;AAC9C,eAAO,MAAM,KAAK,8CAAkB,CAAA;AACpC,yDAAyD;AACzD,eAAO,MAAM,SAAS,kDAAsB,CAAA;AAE5C,OAAO,EAAE,UAAU,EAAE,yBAAyB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAEhF,YAAY,EACV,SAAS,EACT,EAAE,EACF,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,gBAAgB,EAChB,KAAK,EACL,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,OAAO,EACP,KAAK,GACN,MAAM,YAAY,CAAA"}
1
+ {"version":3,"file":"native.d.ts","sourceRoot":"","sources":["../src/native.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAMH;;;;;;GAMG;AACH,wBAAgB,oBAAoB,IAAI,IAAI,CAE3C;AAID,gDAAgD;AAChD,eAAO,MAAM,OAAO,gDAAoB,CAAA;AACxC,kDAAkD;AAClD,eAAO,MAAM,EAAE,2CAAe,CAAA;AAC9B,8CAA8C;AAC9C,eAAO,MAAM,KAAK,8CAAkB,CAAA;AACpC,8CAA8C;AAC9C,eAAO,MAAM,KAAK,8CAAkB,CAAA;AACpC,yDAAyD;AACzD,eAAO,MAAM,SAAS,kDAAsB,CAAA;AAC5C,iDAAiD;AACjD,eAAO,MAAM,QAAQ,iDAAqB,CAAA;AAE1C,OAAO,EACL,UAAU,EACV,yBAAyB,EACzB,WAAW,EACX,6BAA6B,EAC7B,2BAA2B,GAC5B,MAAM,aAAa,CAAA;AAEpB,YAAY,EACV,SAAS,EACT,EAAE,EACF,UAAU,EACV,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,QAAQ,EACR,kBAAkB,EAClB,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,KAAK,EACL,YAAY,EACZ,eAAe,EACf,gBAAgB,EAChB,OAAO,EACP,KAAK,GACN,MAAM,YAAY,CAAA"}
package/dist/native.js CHANGED
@@ -1,4 +1,4 @@
1
- import { a as BindingNotConfiguredError, i as AlienError, n as registerEmbeddedAddon, o as defineError, r as createFactories } from "./loader.js";
1
+ import { a as BindingNotConfiguredError, c as UnknownPostgresSslModeError, i as AlienError, l as defineError, n as registerEmbeddedAddon, r as createFactories, s as InvalidPostgresTlsConfigError } from "./loader.js";
2
2
  import addon from "./alien-bindings.node";
3
3
  //#region src/native.ts
4
4
  /**
@@ -44,5 +44,7 @@ const queue = factories.queue;
44
44
  const vault = factories.vault;
45
45
  /** Resolve the linked-container binding named `name`. */
46
46
  const container = factories.container;
47
+ /** Resolve the Postgres binding named `name`. */
48
+ const postgres = factories.postgres;
47
49
  //#endregion
48
- export { AlienError, BindingNotConfiguredError, container, defineError, installEmbeddedAddon, kv, queue, storage, vault };
50
+ export { AlienError, BindingNotConfiguredError, InvalidPostgresTlsConfigError, UnknownPostgresSslModeError, container, defineError, installEmbeddedAddon, kv, postgres, queue, storage, vault };
package/dist/types.d.ts CHANGED
@@ -139,6 +139,105 @@ export interface Container {
139
139
  /** Get the public URL when the container is publicly exposed. */
140
140
  getPublicUrl(): Promise<string | null>;
141
141
  }
142
+ /**
143
+ * TLS mode for a Postgres connection: `disable` for the local developer backend
144
+ * or an explicit BYO plaintext opt-out, `verify-full` for a BYO database with
145
+ * certificate and hostname verification, `verify-ca` for Cloud SQL over its
146
+ * Private Service Connect IP, and `verify-full` for Aurora and Flexible Server.
147
+ */
148
+ export type PostgresSslMode = "disable" | "verify-ca" | "verify-full";
149
+ /** TLS options for `verify-ca`, where the provider CA authenticates the server. */
150
+ interface PostgresVerifyCaTlsOptions {
151
+ /**
152
+ * One or more PEM-encoded provider CA certificates. `verify-ca` cannot use the
153
+ * operating system trust store because the certificate is specific to the instance.
154
+ */
155
+ ca: [string, ...string[]];
156
+ /** Always true: an untrusted certificate fails the connection. */
157
+ rejectUnauthorized: true;
158
+ /**
159
+ * Skip hostname matching after the CA chain succeeds because Cloud SQL's
160
+ * certificate does not contain the Private Service Connect IP being dialed.
161
+ */
162
+ checkServerIdentity: () => undefined;
163
+ }
164
+ /** TLS options for full certificate and hostname verification. */
165
+ interface PostgresVerifyFullTlsOptions {
166
+ /**
167
+ * PEM-encoded provider root CA certificates. Managed backends supply these;
168
+ * an external database can omit them to use the operating system trust store.
169
+ */
170
+ ca?: string[];
171
+ /** Always true: an untrusted certificate fails the connection. */
172
+ rejectUnauthorized: true;
173
+ /** `verify-full` must never override Node's hostname verification. */
174
+ checkServerIdentity?: never;
175
+ }
176
+ /** Verified TLS options ready to pass to node-postgres. */
177
+ export type PostgresTlsOptions = PostgresVerifyCaTlsOptions | PostgresVerifyFullTlsOptions;
178
+ /** Connection fields shared by every Postgres TLS mode. */
179
+ interface PostgresConnectionFields {
180
+ /**
181
+ * `postgres://user:password@host:port/database?sslmode=<mode>`. The username,
182
+ * password, and database are percent-encoded to the RFC 3986 unreserved set, so a
183
+ * generated password containing URL-special characters can never corrupt the URL.
184
+ */
185
+ connectionString: string;
186
+ /** Address to dial — the cluster writer endpoint for Aurora, the host elsewhere. */
187
+ host: string;
188
+ /** TCP port. */
189
+ port: number;
190
+ /** Database name. */
191
+ database: string;
192
+ /** Role to connect as. */
193
+ username: string;
194
+ /**
195
+ * Connection password. For the managed cloud backends this was read from the
196
+ * cloud secret store when the binding resolved; the binding itself only ever
197
+ * carries a locator for it.
198
+ */
199
+ password: string;
200
+ }
201
+ interface PostgresDisableConnection extends PostgresConnectionFields {
202
+ sslmode: "disable";
203
+ ssl: false;
204
+ }
205
+ interface PostgresVerifyCaConnection extends PostgresConnectionFields {
206
+ sslmode: "verify-ca";
207
+ ssl: PostgresVerifyCaTlsOptions;
208
+ }
209
+ interface PostgresVerifyFullConnection extends PostgresConnectionFields {
210
+ sslmode: "verify-full";
211
+ ssl: PostgresVerifyFullTlsOptions;
212
+ }
213
+ /**
214
+ * Everything a Postgres driver needs to connect, discriminated by {@link sslmode}.
215
+ *
216
+ * For node-postgres, pass the individual fields with `ssl` rather than combining
217
+ * `connectionString` and `ssl`. node-postgres parses URL TLS parameters and can
218
+ * overwrite an explicit `ssl` object, including provider roots.
219
+ *
220
+ * External (BYO) bindings default to `verify-full`. A plaintext-only legacy server
221
+ * must be configured explicitly with `sslMode: "disable"` in its external binding.
222
+ */
223
+ export type PostgresConnection = PostgresDisableConnection | PostgresVerifyCaConnection | PostgresVerifyFullConnection;
224
+ /**
225
+ * A resolved Postgres binding.
226
+ *
227
+ * Unlike the other kinds this exposes no operations: every Postgres backend speaks
228
+ * the same wire protocol, so the binding hands back connection details and the
229
+ * application connects with its own driver.
230
+ */
231
+ export interface Postgres {
232
+ /**
233
+ * Resolve the connection details.
234
+ *
235
+ * For a managed cloud backend the first call reads the password from that cloud's
236
+ * secret store with the workload's own identity; the resolved value is then reused,
237
+ * so call the factory again to pick up a rotated password.
238
+ */
239
+ connection(): Promise<PostgresConnection>;
240
+ }
142
241
  /** A resolved vault (secrets) binding. */
143
242
  export interface Vault {
144
243
  /** Get the secret named `name` as a string. */
@@ -154,4 +253,5 @@ export interface Vault {
154
253
  /** List the names of all secrets in this vault. */
155
254
  list(): Promise<string[]>;
156
255
  }
256
+ export {};
157
257
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,2CAA2C;AAC3C,MAAM,WAAW,UAAU;IACzB,+CAA+C;IAC/C,QAAQ,EAAE,MAAM,CAAA;IAChB,4BAA4B;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,qDAAqD;IACrD,YAAY,EAAE,MAAM,CAAA;CACrB;AAED,yDAAyD;AACzD,MAAM,MAAM,eAAe,GAAG,KAAK,GAAG,KAAK,GAAG,QAAQ,CAAA;AAEtD,6CAA6C;AAC7C,MAAM,WAAW,gBAAgB;IAC/B,wDAAwD;IACxD,MAAM,EAAE,eAAe,CAAA;IACvB,oCAAoC;IACpC,IAAI,EAAE,MAAM,CAAA;IACZ,mCAAmC;IACnC,SAAS,EAAE,MAAM,CAAA;CAClB;AAED;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAChC;AAED,yCAAyC;AACzC,MAAM,WAAW,OAAO;IACtB,kCAAkC;IAClC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IAClC,8BAA8B;IAC9B,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC3D,mCAAmC;IACnC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACnC,qDAAqD;IACrD,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAAA;IAC5C,+CAA+C;IAC/C,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;IACvC,yCAAyC;IACzC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC7C,6CAA6C;IAC7C,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAA;CAChE;AAED,kCAAkC;AAClC,MAAM,WAAW,YAAY;IAC3B,gCAAgC;IAChC,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,wDAAwD;IACxD,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAED,kDAAkD;AAClD,MAAM,WAAW,UAAU;IACzB,eAAe;IACf,GAAG,EAAE,MAAM,CAAA;IACX,2BAA2B;IAC3B,KAAK,EAAE,MAAM,CAAA;CACd;AAED,8BAA8B;AAC9B,MAAM,WAAW,YAAY;IAC3B;;;OAGG;IACH,KAAK,EAAE,UAAU,EAAE,CAAA;IACnB,sEAAsE;IACtE,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,oCAAoC;AACpC,MAAM,WAAW,EAAE;IACjB,sEAAsE;IACtE,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;IACxC,0EAA0E;IAC1E,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;IAC5C,2EAA2E;IAC3E,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAA;IACpD;;;OAGG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IACzE;;;;OAIG;IACH,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAC9E,yCAAyC;IACzC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAClC,kCAAkC;IAClC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IACrC,0DAA0D;IAC1D,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;CAC7E;AAED,uCAAuC;AACvC,MAAM,WAAW,YAAY;IAC3B,kDAAkD;IAClD,WAAW,EAAE,MAAM,GAAG,MAAM,CAAA;IAC5B;;;OAGG;IACH,OAAO,EAAE,MAAM,CAAA;IACf,0CAA0C;IAC1C,aAAa,EAAE,MAAM,CAAA;IACrB;;;OAGG;IACH,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,gCAAgC;AAChC,MAAM,WAAW,KAAK;IACpB,4EAA4E;IAC5E,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACrC,+BAA+B;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACrC,oCAAoC;IACpC,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAA;IAC7C,mDAAmD;IACnD,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACnC,2EAA2E;IAC3E,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACpC,yCAAyC;IACzC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACvB;AAED,0DAA0D;AAC1D,MAAM,WAAW,SAAS;IACxB,mEAAmE;IACnE,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,CAAA;IACjC,iEAAiE;IACjE,YAAY,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;CACvC;AAED,0CAA0C;AAC1C,MAAM,WAAW,KAAK;IACpB,+CAA+C;IAC/C,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IAClC,mDAAmD;IACnD,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;IAC9C,oEAAoE;IACpE,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC/C,oEAAoE;IACpE,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACpD,sCAAsC;IACtC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACnC,mDAAmD;IACnD,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;CAC1B"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alienplatform/bindings",
3
- "version": "3.2.0",
3
+ "version": "3.3.0-dev.0d4f932037814a854d56a7e4e82a8a34cc2e35cb",
4
4
  "type": "module",
5
5
  "sideEffects": false,
6
6
  "types": "./dist/index.d.ts",
@@ -24,7 +24,6 @@
24
24
  "scripts": {
25
25
  "build": "tsdown && tsc -p tsconfig.build.json --emitDeclarationOnly",
26
26
  "build:addon": "napi build --platform --release --cwd ../../crates/alien-bindings-node",
27
- "prepare": "npm run build",
28
27
  "test": "vitest run",
29
28
  "test:bun": "bun scripts/run-bun-tests.mjs",
30
29
  "test:ts": "tsc --noEmit",
@@ -39,11 +38,12 @@
39
38
  "kv",
40
39
  "queue",
41
40
  "vault",
41
+ "postgres",
42
42
  "napi"
43
43
  ],
44
44
  "author": "Alien Software, Inc. <hi@alien.dev>",
45
45
  "license": "FSL-1.1-Apache-2.0",
46
- "description": "Direct TypeScript bindings for Alien storage, kv, queue, and vault over an in-process napi-rs addon",
46
+ "description": "Direct TypeScript bindings for Alien storage, kv, queue, vault, and postgres over an in-process napi-rs addon",
47
47
  "homepage": "https://alien.dev",
48
48
  "repository": {
49
49
  "type": "git",
@@ -64,12 +64,12 @@
64
64
  "zod": "4.3.2"
65
65
  },
66
66
  "dependencies": {
67
- "@alienplatform/core": "workspace:^"
67
+ "@alienplatform/core": "3.3.0-dev.0d4f932037814a854d56a7e4e82a8a34cc2e35cb"
68
68
  },
69
69
  "optionalDependencies": {
70
- "@alienplatform/bindings-darwin-arm64": "3.2.0",
71
- "@alienplatform/bindings-darwin-x64": "3.2.0",
72
- "@alienplatform/bindings-linux-x64-gnu": "3.2.0",
73
- "@alienplatform/bindings-linux-arm64-gnu": "3.2.0"
70
+ "@alienplatform/bindings-darwin-arm64": "3.3.0-dev.0d4f932037814a854d56a7e4e82a8a34cc2e35cb",
71
+ "@alienplatform/bindings-darwin-x64": "3.3.0-dev.0d4f932037814a854d56a7e4e82a8a34cc2e35cb",
72
+ "@alienplatform/bindings-linux-x64-gnu": "3.3.0-dev.0d4f932037814a854d56a7e4e82a8a34cc2e35cb",
73
+ "@alienplatform/bindings-linux-arm64-gnu": "3.3.0-dev.0d4f932037814a854d56a7e4e82a8a34cc2e35cb"
74
74
  }
75
75
  }