@runlane/lane-postgres-sqs 0.2.0 → 0.4.0

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/dist/index.cjs CHANGED
@@ -33,6 +33,9 @@ const postgresSqsLaneOptionsSchema = zod.strictObject({
33
33
  postgres: zod.unknown().refine((postgresOptions) => postgresOptions !== void 0, { message: "Postgres SQS lane postgres options are required." }),
34
34
  sqs: zod.unknown().refine((sqsOptions) => sqsOptions !== void 0, { message: "Postgres SQS lane sqs options are required." })
35
35
  });
36
+ /**
37
+ * Creates the first-party production lane backed by Postgres storage and SQS wakeup delivery.
38
+ */
36
39
  function postgresSqsLane(options) {
37
40
  const laneOptions = (0, _runlane_utilities.parseZodOrThrow)(postgresSqsLaneOptionsSchema, options, (error) => new _runlane_contracts.RunlaneError({
38
41
  code: _runlane_contracts.ErrorCode.ConfigurationInvalid,
@@ -47,13 +50,24 @@ function postgresSqsLane(options) {
47
50
  unsupportedKeyMessage: (option) => `Postgres SQS lane option "${option}" is not supported.`
48
51
  })
49
52
  }));
50
- const transport = (0, _runlane_transport_sqs.sqsTransport)(laneOptions.sqs);
51
- const storage = (0, _runlane_postgres_storage.postgresStorage)(laneOptions.postgres);
53
+ const deliveryProvider = (0, _runlane_transport_sqs.createSqsDeliveryProvider)(options.sqs);
54
+ const postgresOptions = options.postgres;
55
+ const postgresConfig = (0, _runlane_postgres_storage.resolvePostgresStorageConfig)({
56
+ connectionString: postgresOptions.connectionString,
57
+ schema: postgresOptions.schema
58
+ });
59
+ const storage = (0, _runlane_postgres_storage.createPostgresStorageDriver)(postgresOptions);
52
60
  return (0, _runlane_contracts.createLane)({
61
+ cli: [(0, _runlane_postgres_storage.createPostgresCliAdapter)(postgresConfig)],
62
+ delivery: {
63
+ mode: _runlane_contracts.LaneDeliveryMode.Transport,
64
+ publisher: deliveryProvider.publisher,
65
+ surface: deliveryProvider.surface
66
+ },
53
67
  name: laneOptions.name ?? "postgres-sqs",
54
- productionDurable: true,
55
- storage,
56
- transport
68
+ operatorReads: storage,
69
+ queues: deliveryProvider.queues,
70
+ storage
57
71
  });
58
72
  }
59
73
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["z","contractValidationMessages","RunlaneError","ErrorCode"],"sources":["../src/postgres-sqs-lane.ts"],"sourcesContent":["import { contractValidationMessages, createLane, ErrorCode, RunlaneError, type Lane } from '@runlane/contracts'\nimport { postgresStorage, type PostgresStorageOptions } from '@runlane/postgres-storage'\nimport { sqsTransport, type SqsTransportOptions } from '@runlane/transport-sqs'\nimport { getZodIssueMessage, parseZodOrThrow } from '@runlane/utilities'\nimport * as z from 'zod'\n\nenum PostgresSqsLaneValidationMessage {\n OptionsObject = 'Postgres SQS lane options must be an object.',\n PostgresRequired = 'Postgres SQS lane postgres options are required.',\n SqsRequired = 'Postgres SQS lane sqs options are required.',\n}\n\nconst postgresSqsLaneOptionsSchema = z.strictObject({\n name: z.string(contractValidationMessages.lane.name).min(1, contractValidationMessages.lane.name).optional(),\n postgres: z.unknown().refine((postgresOptions) => postgresOptions !== undefined, {\n message: PostgresSqsLaneValidationMessage.PostgresRequired,\n }),\n sqs: z.unknown().refine((sqsOptions) => sqsOptions !== undefined, {\n message: PostgresSqsLaneValidationMessage.SqsRequired,\n }),\n})\n\n/**\n * Construction options for the first-party production Postgres/SQS lane.\n *\n * Postgres and SQS nested options are validated by their owning adapter packages.\n */\nexport type PostgresSqsLaneOptions = Omit<z.output<typeof postgresSqsLaneOptionsSchema>, 'postgres' | 'sqs'> & {\n readonly postgres: PostgresStorageOptions\n readonly sqs: SqsTransportOptions\n}\n\n/**\n * Creates the first-party production lane backed by Postgres storage and SQS wakeup delivery.\n */\nexport function postgresSqsLane(options: PostgresSqsLaneOptions): Lane\nexport function postgresSqsLane(options: unknown): Lane {\n const laneOptions = parseZodOrThrow(\n postgresSqsLaneOptionsSchema,\n options,\n (error) =>\n new RunlaneError({\n code: ErrorCode.ConfigurationInvalid,\n message: getZodIssueMessage(error.issues[0], {\n fallbackMessage: PostgresSqsLaneValidationMessage.OptionsObject,\n fieldMessages: {\n name: contractValidationMessages.lane.name,\n postgres: PostgresSqsLaneValidationMessage.PostgresRequired,\n sqs: PostgresSqsLaneValidationMessage.SqsRequired,\n },\n rootMessage: PostgresSqsLaneValidationMessage.OptionsObject,\n unsupportedKeyMessage: (option) => `Postgres SQS lane option \"${option}\" is not supported.`,\n }),\n }),\n )\n const transport = sqsTransport(laneOptions.sqs as SqsTransportOptions)\n const storage = postgresStorage(laneOptions.postgres as PostgresStorageOptions)\n\n return createLane({\n name: laneOptions.name ?? 'postgres-sqs',\n productionDurable: true,\n storage,\n transport,\n })\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYA,MAAM,+BAA+BA,IAAE,aAAa;CAClD,MAAMA,IAAE,OAAOC,mBAAAA,2BAA2B,KAAK,IAAI,EAAE,IAAI,GAAGA,mBAAAA,2BAA2B,KAAK,IAAI,EAAE,SAAS;CAC3G,UAAUD,IAAE,QAAQ,EAAE,QAAQ,oBAAoB,oBAAoB,KAAA,GAAW,EAC/E,SAAA,mDACF,CAAC;CACD,KAAKA,IAAE,QAAQ,EAAE,QAAQ,eAAe,eAAe,KAAA,GAAW,EAChE,SAAA,8CACF,CAAC;AACH,CAAC;AAgBD,SAAgB,gBAAgB,SAAwB;CACtD,MAAM,eAAA,GAAA,mBAAA,iBACJ,8BACA,UACC,UACC,IAAIE,mBAAAA,aAAa;EACf,MAAMC,mBAAAA,UAAU;EAChB,UAAA,GAAA,mBAAA,oBAA4B,MAAM,OAAO,IAAI;GAC3C,iBAAA;GACA,eAAe;IACb,MAAMF,mBAAAA,2BAA2B,KAAK;IACtC,UAAA;IACA,KAAA;GACF;GACA,aAAA;GACA,wBAAwB,WAAW,6BAA6B,OAAO;EACzE,CAAC;CACH,CAAC,CACL;CACA,MAAM,aAAA,GAAA,uBAAA,cAAyB,YAAY,GAA0B;CACrE,MAAM,WAAA,GAAA,0BAAA,iBAA0B,YAAY,QAAkC;CAE9E,QAAA,GAAA,mBAAA,YAAkB;EAChB,MAAM,YAAY,QAAQ;EAC1B,mBAAmB;EACnB;EACA;CACF,CAAC;AACH"}
1
+ {"version":3,"file":"index.cjs","names":["z","contractValidationMessages","RunlaneError","ErrorCode","LaneDeliveryMode"],"sources":["../src/postgres-sqs-lane.ts"],"sourcesContent":["import {\n contractValidationMessages,\n createLane,\n ErrorCode,\n LaneDeliveryMode,\n RunlaneError,\n type TransportLane,\n} from '@runlane/contracts'\nimport {\n createPostgresCliAdapter,\n createPostgresStorageDriver,\n resolvePostgresStorageConfig,\n type PostgresStorageDriverOptions,\n} from '@runlane/postgres-storage'\nimport { createSqsDeliveryProvider, type SqsLambdaHandler, type SqsTransportOptions } from '@runlane/transport-sqs'\nimport { getZodIssueMessage, parseZodOrThrow } from '@runlane/utilities'\nimport * as z from 'zod'\n\nenum PostgresSqsLaneValidationMessage {\n OptionsObject = 'Postgres SQS lane options must be an object.',\n PostgresRequired = 'Postgres SQS lane postgres options are required.',\n SqsRequired = 'Postgres SQS lane sqs options are required.',\n}\n\nconst postgresSqsLaneOptionsSchema = z.strictObject({\n name: z.string(contractValidationMessages.lane.name).min(1, contractValidationMessages.lane.name).optional(),\n postgres: z.unknown().refine((postgresOptions) => postgresOptions !== undefined, {\n message: PostgresSqsLaneValidationMessage.PostgresRequired,\n }),\n sqs: z.unknown().refine((sqsOptions) => sqsOptions !== undefined, {\n message: PostgresSqsLaneValidationMessage.SqsRequired,\n }),\n})\n\n/**\n * Construction options for the first-party production Postgres/SQS lane.\n *\n * Postgres and SQS nested options are validated by their owning adapter packages.\n */\nexport type PostgresSqsLaneOptions = Omit<z.output<typeof postgresSqsLaneOptionsSchema>, 'postgres' | 'sqs'> & {\n readonly postgres: PostgresStorageDriverOptions\n readonly sqs: SqsTransportOptions\n}\n\n/**\n * Creates the first-party production lane backed by Postgres storage and SQS wakeup delivery.\n */\nexport function postgresSqsLane(options: PostgresSqsLaneOptions): TransportLane<SqsLambdaHandler> {\n const laneOptions = parseZodOrThrow(\n postgresSqsLaneOptionsSchema,\n options,\n (error) =>\n new RunlaneError({\n code: ErrorCode.ConfigurationInvalid,\n message: getZodIssueMessage(error.issues[0], {\n fallbackMessage: PostgresSqsLaneValidationMessage.OptionsObject,\n fieldMessages: {\n name: contractValidationMessages.lane.name,\n postgres: PostgresSqsLaneValidationMessage.PostgresRequired,\n sqs: PostgresSqsLaneValidationMessage.SqsRequired,\n },\n rootMessage: PostgresSqsLaneValidationMessage.OptionsObject,\n unsupportedKeyMessage: (option) => `Postgres SQS lane option \"${option}\" is not supported.`,\n }),\n }),\n )\n const deliveryProvider = createSqsDeliveryProvider(options.sqs)\n const postgresOptions = options.postgres\n const postgresConfig = resolvePostgresStorageConfig({\n connectionString: postgresOptions.connectionString,\n schema: postgresOptions.schema,\n })\n const storage = createPostgresStorageDriver(postgresOptions)\n\n return createLane({\n cli: [createPostgresCliAdapter(postgresConfig)],\n delivery: {\n mode: LaneDeliveryMode.Transport,\n publisher: deliveryProvider.publisher,\n surface: deliveryProvider.surface,\n },\n name: laneOptions.name ?? 'postgres-sqs',\n operatorReads: storage,\n queues: deliveryProvider.queues,\n storage,\n })\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwBA,MAAM,+BAA+BA,IAAE,aAAa;CAClD,MAAMA,IAAE,OAAOC,mBAAAA,2BAA2B,KAAK,IAAI,EAAE,IAAI,GAAGA,mBAAAA,2BAA2B,KAAK,IAAI,EAAE,SAAS;CAC3G,UAAUD,IAAE,QAAQ,EAAE,QAAQ,oBAAoB,oBAAoB,KAAA,GAAW,EAC/E,SAAA,mDACF,CAAC;CACD,KAAKA,IAAE,QAAQ,EAAE,QAAQ,eAAe,eAAe,KAAA,GAAW,EAChE,SAAA,8CACF,CAAC;AACH,CAAC;;;;AAeD,SAAgB,gBAAgB,SAAkE;CAChG,MAAM,eAAA,GAAA,mBAAA,iBACJ,8BACA,UACC,UACC,IAAIE,mBAAAA,aAAa;EACf,MAAMC,mBAAAA,UAAU;EAChB,UAAA,GAAA,mBAAA,oBAA4B,MAAM,OAAO,IAAI;GAC3C,iBAAA;GACA,eAAe;IACb,MAAMF,mBAAAA,2BAA2B,KAAK;IACtC,UAAA;IACA,KAAA;GACF;GACA,aAAA;GACA,wBAAwB,WAAW,6BAA6B,OAAO;EACzE,CAAC;CACH,CAAC,CACL;CACA,MAAM,oBAAA,GAAA,uBAAA,2BAA6C,QAAQ,GAAG;CAC9D,MAAM,kBAAkB,QAAQ;CAChC,MAAM,kBAAA,GAAA,0BAAA,8BAA8C;EAClD,kBAAkB,gBAAgB;EAClC,QAAQ,gBAAgB;CAC1B,CAAC;CACD,MAAM,WAAA,GAAA,0BAAA,6BAAsC,eAAe;CAE3D,QAAA,GAAA,mBAAA,YAAkB;EAChB,KAAK,EAAA,GAAA,0BAAA,0BAA0B,cAAc,CAAC;EAC9C,UAAU;GACR,MAAMG,mBAAAA,iBAAiB;GACvB,WAAW,iBAAiB;GAC5B,SAAS,iBAAiB;EAC5B;EACA,MAAM,YAAY,QAAQ;EAC1B,eAAe;EACf,QAAQ,iBAAiB;EACzB;CACF,CAAC;AACH"}
package/dist/index.d.cts CHANGED
@@ -1,6 +1,6 @@
1
- import { Lane } from "@runlane/contracts";
2
- import { PostgresStorageOptions } from "@runlane/postgres-storage";
3
- import { SqsTransportOptions } from "@runlane/transport-sqs";
1
+ import { TransportLane } from "@runlane/contracts";
2
+ import { PostgresStorageDriverOptions } from "@runlane/postgres-storage";
3
+ import { SqsLambdaHandler, SqsTransportOptions } from "@runlane/transport-sqs";
4
4
  import * as z from "zod";
5
5
 
6
6
  //#region src/postgres-sqs-lane.d.ts
@@ -15,13 +15,13 @@ declare const postgresSqsLaneOptionsSchema: z.ZodObject<{
15
15
  * Postgres and SQS nested options are validated by their owning adapter packages.
16
16
  */
17
17
  type PostgresSqsLaneOptions = Omit<z.output<typeof postgresSqsLaneOptionsSchema>, 'postgres' | 'sqs'> & {
18
- readonly postgres: PostgresStorageOptions;
18
+ readonly postgres: PostgresStorageDriverOptions;
19
19
  readonly sqs: SqsTransportOptions;
20
20
  };
21
21
  /**
22
22
  * Creates the first-party production lane backed by Postgres storage and SQS wakeup delivery.
23
23
  */
24
- declare function postgresSqsLane(options: PostgresSqsLaneOptions): Lane;
24
+ declare function postgresSqsLane(options: PostgresSqsLaneOptions): TransportLane<SqsLambdaHandler>;
25
25
  //#endregion
26
26
  export { type PostgresSqsLaneOptions, postgresSqsLane };
27
27
  //# sourceMappingURL=index.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.cts","names":[],"sources":["../src/postgres-sqs-lane.ts"],"mappings":";;;;;;cAYM,4BAAA,EAA4B,CAAA,CAAA,SAAA;;;;;;;;;;KAetB,sBAAA,GAAyB,IAAA,CAAK,CAAA,CAAE,MAAA,QAAc,4BAAA;EAAA,SAC/C,QAAA,EAAU,sBAAA;EAAA,SACV,GAAA,EAAK,mBAAA;AAAA;;;;iBAMA,eAAA,CAAgB,OAAA,EAAS,sBAAA,GAAyB,IAAI"}
1
+ {"version":3,"file":"index.d.cts","names":[],"sources":["../src/postgres-sqs-lane.ts"],"mappings":";;;;;;cAwBM,4BAAA,EAA4B,CAAA,CAAA,SAAA;;;;;;;;;;KAetB,sBAAA,GAAyB,IAAA,CAAK,CAAA,CAAE,MAAA,QAAc,4BAAA;EAAA,SAC/C,QAAA,EAAU,4BAAA;EAAA,SACV,GAAA,EAAK,mBAAA;AAAA;;;;iBAMA,eAAA,CAAgB,OAAA,EAAS,sBAAA,GAAyB,aAAA,CAAc,gBAAA"}
package/dist/index.d.mts CHANGED
@@ -1,6 +1,6 @@
1
- import { Lane } from "@runlane/contracts";
2
- import { PostgresStorageOptions } from "@runlane/postgres-storage";
3
- import { SqsTransportOptions } from "@runlane/transport-sqs";
1
+ import { TransportLane } from "@runlane/contracts";
2
+ import { PostgresStorageDriverOptions } from "@runlane/postgres-storage";
3
+ import { SqsLambdaHandler, SqsTransportOptions } from "@runlane/transport-sqs";
4
4
  import * as z from "zod";
5
5
 
6
6
  //#region src/postgres-sqs-lane.d.ts
@@ -15,13 +15,13 @@ declare const postgresSqsLaneOptionsSchema: z.ZodObject<{
15
15
  * Postgres and SQS nested options are validated by their owning adapter packages.
16
16
  */
17
17
  type PostgresSqsLaneOptions = Omit<z.output<typeof postgresSqsLaneOptionsSchema>, 'postgres' | 'sqs'> & {
18
- readonly postgres: PostgresStorageOptions;
18
+ readonly postgres: PostgresStorageDriverOptions;
19
19
  readonly sqs: SqsTransportOptions;
20
20
  };
21
21
  /**
22
22
  * Creates the first-party production lane backed by Postgres storage and SQS wakeup delivery.
23
23
  */
24
- declare function postgresSqsLane(options: PostgresSqsLaneOptions): Lane;
24
+ declare function postgresSqsLane(options: PostgresSqsLaneOptions): TransportLane<SqsLambdaHandler>;
25
25
  //#endregion
26
26
  export { type PostgresSqsLaneOptions, postgresSqsLane };
27
27
  //# sourceMappingURL=index.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../src/postgres-sqs-lane.ts"],"mappings":";;;;;;cAYM,4BAAA,EAA4B,CAAA,CAAA,SAAA;;;;;;;;;;KAetB,sBAAA,GAAyB,IAAA,CAAK,CAAA,CAAE,MAAA,QAAc,4BAAA;EAAA,SAC/C,QAAA,EAAU,sBAAA;EAAA,SACV,GAAA,EAAK,mBAAA;AAAA;;;;iBAMA,eAAA,CAAgB,OAAA,EAAS,sBAAA,GAAyB,IAAI"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../src/postgres-sqs-lane.ts"],"mappings":";;;;;;cAwBM,4BAAA,EAA4B,CAAA,CAAA,SAAA;;;;;;;;;;KAetB,sBAAA,GAAyB,IAAA,CAAK,CAAA,CAAE,MAAA,QAAc,4BAAA;EAAA,SAC/C,QAAA,EAAU,4BAAA;EAAA,SACV,GAAA,EAAK,mBAAA;AAAA;;;;iBAMA,eAAA,CAAgB,OAAA,EAAS,sBAAA,GAAyB,aAAA,CAAc,gBAAA"}
package/dist/index.mjs CHANGED
@@ -1,6 +1,6 @@
1
- import { ErrorCode, RunlaneError, contractValidationMessages, createLane } from "@runlane/contracts";
2
- import { postgresStorage } from "@runlane/postgres-storage";
3
- import { sqsTransport } from "@runlane/transport-sqs";
1
+ import { ErrorCode, LaneDeliveryMode, RunlaneError, contractValidationMessages, createLane } from "@runlane/contracts";
2
+ import { createPostgresCliAdapter, createPostgresStorageDriver, resolvePostgresStorageConfig } from "@runlane/postgres-storage";
3
+ import { createSqsDeliveryProvider } from "@runlane/transport-sqs";
4
4
  import { getZodIssueMessage, parseZodOrThrow } from "@runlane/utilities";
5
5
  import * as z from "zod";
6
6
  //#region src/postgres-sqs-lane.ts
@@ -9,6 +9,9 @@ const postgresSqsLaneOptionsSchema = z.strictObject({
9
9
  postgres: z.unknown().refine((postgresOptions) => postgresOptions !== void 0, { message: "Postgres SQS lane postgres options are required." }),
10
10
  sqs: z.unknown().refine((sqsOptions) => sqsOptions !== void 0, { message: "Postgres SQS lane sqs options are required." })
11
11
  });
12
+ /**
13
+ * Creates the first-party production lane backed by Postgres storage and SQS wakeup delivery.
14
+ */
12
15
  function postgresSqsLane(options) {
13
16
  const laneOptions = parseZodOrThrow(postgresSqsLaneOptionsSchema, options, (error) => new RunlaneError({
14
17
  code: ErrorCode.ConfigurationInvalid,
@@ -23,13 +26,24 @@ function postgresSqsLane(options) {
23
26
  unsupportedKeyMessage: (option) => `Postgres SQS lane option "${option}" is not supported.`
24
27
  })
25
28
  }));
26
- const transport = sqsTransport(laneOptions.sqs);
27
- const storage = postgresStorage(laneOptions.postgres);
29
+ const deliveryProvider = createSqsDeliveryProvider(options.sqs);
30
+ const postgresOptions = options.postgres;
31
+ const postgresConfig = resolvePostgresStorageConfig({
32
+ connectionString: postgresOptions.connectionString,
33
+ schema: postgresOptions.schema
34
+ });
35
+ const storage = createPostgresStorageDriver(postgresOptions);
28
36
  return createLane({
37
+ cli: [createPostgresCliAdapter(postgresConfig)],
38
+ delivery: {
39
+ mode: LaneDeliveryMode.Transport,
40
+ publisher: deliveryProvider.publisher,
41
+ surface: deliveryProvider.surface
42
+ },
29
43
  name: laneOptions.name ?? "postgres-sqs",
30
- productionDurable: true,
31
- storage,
32
- transport
44
+ operatorReads: storage,
45
+ queues: deliveryProvider.queues,
46
+ storage
33
47
  });
34
48
  }
35
49
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../src/postgres-sqs-lane.ts"],"sourcesContent":["import { contractValidationMessages, createLane, ErrorCode, RunlaneError, type Lane } from '@runlane/contracts'\nimport { postgresStorage, type PostgresStorageOptions } from '@runlane/postgres-storage'\nimport { sqsTransport, type SqsTransportOptions } from '@runlane/transport-sqs'\nimport { getZodIssueMessage, parseZodOrThrow } from '@runlane/utilities'\nimport * as z from 'zod'\n\nenum PostgresSqsLaneValidationMessage {\n OptionsObject = 'Postgres SQS lane options must be an object.',\n PostgresRequired = 'Postgres SQS lane postgres options are required.',\n SqsRequired = 'Postgres SQS lane sqs options are required.',\n}\n\nconst postgresSqsLaneOptionsSchema = z.strictObject({\n name: z.string(contractValidationMessages.lane.name).min(1, contractValidationMessages.lane.name).optional(),\n postgres: z.unknown().refine((postgresOptions) => postgresOptions !== undefined, {\n message: PostgresSqsLaneValidationMessage.PostgresRequired,\n }),\n sqs: z.unknown().refine((sqsOptions) => sqsOptions !== undefined, {\n message: PostgresSqsLaneValidationMessage.SqsRequired,\n }),\n})\n\n/**\n * Construction options for the first-party production Postgres/SQS lane.\n *\n * Postgres and SQS nested options are validated by their owning adapter packages.\n */\nexport type PostgresSqsLaneOptions = Omit<z.output<typeof postgresSqsLaneOptionsSchema>, 'postgres' | 'sqs'> & {\n readonly postgres: PostgresStorageOptions\n readonly sqs: SqsTransportOptions\n}\n\n/**\n * Creates the first-party production lane backed by Postgres storage and SQS wakeup delivery.\n */\nexport function postgresSqsLane(options: PostgresSqsLaneOptions): Lane\nexport function postgresSqsLane(options: unknown): Lane {\n const laneOptions = parseZodOrThrow(\n postgresSqsLaneOptionsSchema,\n options,\n (error) =>\n new RunlaneError({\n code: ErrorCode.ConfigurationInvalid,\n message: getZodIssueMessage(error.issues[0], {\n fallbackMessage: PostgresSqsLaneValidationMessage.OptionsObject,\n fieldMessages: {\n name: contractValidationMessages.lane.name,\n postgres: PostgresSqsLaneValidationMessage.PostgresRequired,\n sqs: PostgresSqsLaneValidationMessage.SqsRequired,\n },\n rootMessage: PostgresSqsLaneValidationMessage.OptionsObject,\n unsupportedKeyMessage: (option) => `Postgres SQS lane option \"${option}\" is not supported.`,\n }),\n }),\n )\n const transport = sqsTransport(laneOptions.sqs as SqsTransportOptions)\n const storage = postgresStorage(laneOptions.postgres as PostgresStorageOptions)\n\n return createLane({\n name: laneOptions.name ?? 'postgres-sqs',\n productionDurable: true,\n storage,\n transport,\n })\n}\n"],"mappings":";;;;;;AAYA,MAAM,+BAA+B,EAAE,aAAa;CAClD,MAAM,EAAE,OAAO,2BAA2B,KAAK,IAAI,EAAE,IAAI,GAAG,2BAA2B,KAAK,IAAI,EAAE,SAAS;CAC3G,UAAU,EAAE,QAAQ,EAAE,QAAQ,oBAAoB,oBAAoB,KAAA,GAAW,EAC/E,SAAA,mDACF,CAAC;CACD,KAAK,EAAE,QAAQ,EAAE,QAAQ,eAAe,eAAe,KAAA,GAAW,EAChE,SAAA,8CACF,CAAC;AACH,CAAC;AAgBD,SAAgB,gBAAgB,SAAwB;CACtD,MAAM,cAAc,gBAClB,8BACA,UACC,UACC,IAAI,aAAa;EACf,MAAM,UAAU;EAChB,SAAS,mBAAmB,MAAM,OAAO,IAAI;GAC3C,iBAAA;GACA,eAAe;IACb,MAAM,2BAA2B,KAAK;IACtC,UAAA;IACA,KAAA;GACF;GACA,aAAA;GACA,wBAAwB,WAAW,6BAA6B,OAAO;EACzE,CAAC;CACH,CAAC,CACL;CACA,MAAM,YAAY,aAAa,YAAY,GAA0B;CACrE,MAAM,UAAU,gBAAgB,YAAY,QAAkC;CAE9E,OAAO,WAAW;EAChB,MAAM,YAAY,QAAQ;EAC1B,mBAAmB;EACnB;EACA;CACF,CAAC;AACH"}
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../src/postgres-sqs-lane.ts"],"sourcesContent":["import {\n contractValidationMessages,\n createLane,\n ErrorCode,\n LaneDeliveryMode,\n RunlaneError,\n type TransportLane,\n} from '@runlane/contracts'\nimport {\n createPostgresCliAdapter,\n createPostgresStorageDriver,\n resolvePostgresStorageConfig,\n type PostgresStorageDriverOptions,\n} from '@runlane/postgres-storage'\nimport { createSqsDeliveryProvider, type SqsLambdaHandler, type SqsTransportOptions } from '@runlane/transport-sqs'\nimport { getZodIssueMessage, parseZodOrThrow } from '@runlane/utilities'\nimport * as z from 'zod'\n\nenum PostgresSqsLaneValidationMessage {\n OptionsObject = 'Postgres SQS lane options must be an object.',\n PostgresRequired = 'Postgres SQS lane postgres options are required.',\n SqsRequired = 'Postgres SQS lane sqs options are required.',\n}\n\nconst postgresSqsLaneOptionsSchema = z.strictObject({\n name: z.string(contractValidationMessages.lane.name).min(1, contractValidationMessages.lane.name).optional(),\n postgres: z.unknown().refine((postgresOptions) => postgresOptions !== undefined, {\n message: PostgresSqsLaneValidationMessage.PostgresRequired,\n }),\n sqs: z.unknown().refine((sqsOptions) => sqsOptions !== undefined, {\n message: PostgresSqsLaneValidationMessage.SqsRequired,\n }),\n})\n\n/**\n * Construction options for the first-party production Postgres/SQS lane.\n *\n * Postgres and SQS nested options are validated by their owning adapter packages.\n */\nexport type PostgresSqsLaneOptions = Omit<z.output<typeof postgresSqsLaneOptionsSchema>, 'postgres' | 'sqs'> & {\n readonly postgres: PostgresStorageDriverOptions\n readonly sqs: SqsTransportOptions\n}\n\n/**\n * Creates the first-party production lane backed by Postgres storage and SQS wakeup delivery.\n */\nexport function postgresSqsLane(options: PostgresSqsLaneOptions): TransportLane<SqsLambdaHandler> {\n const laneOptions = parseZodOrThrow(\n postgresSqsLaneOptionsSchema,\n options,\n (error) =>\n new RunlaneError({\n code: ErrorCode.ConfigurationInvalid,\n message: getZodIssueMessage(error.issues[0], {\n fallbackMessage: PostgresSqsLaneValidationMessage.OptionsObject,\n fieldMessages: {\n name: contractValidationMessages.lane.name,\n postgres: PostgresSqsLaneValidationMessage.PostgresRequired,\n sqs: PostgresSqsLaneValidationMessage.SqsRequired,\n },\n rootMessage: PostgresSqsLaneValidationMessage.OptionsObject,\n unsupportedKeyMessage: (option) => `Postgres SQS lane option \"${option}\" is not supported.`,\n }),\n }),\n )\n const deliveryProvider = createSqsDeliveryProvider(options.sqs)\n const postgresOptions = options.postgres\n const postgresConfig = resolvePostgresStorageConfig({\n connectionString: postgresOptions.connectionString,\n schema: postgresOptions.schema,\n })\n const storage = createPostgresStorageDriver(postgresOptions)\n\n return createLane({\n cli: [createPostgresCliAdapter(postgresConfig)],\n delivery: {\n mode: LaneDeliveryMode.Transport,\n publisher: deliveryProvider.publisher,\n surface: deliveryProvider.surface,\n },\n name: laneOptions.name ?? 'postgres-sqs',\n operatorReads: storage,\n queues: deliveryProvider.queues,\n storage,\n })\n}\n"],"mappings":";;;;;;AAwBA,MAAM,+BAA+B,EAAE,aAAa;CAClD,MAAM,EAAE,OAAO,2BAA2B,KAAK,IAAI,EAAE,IAAI,GAAG,2BAA2B,KAAK,IAAI,EAAE,SAAS;CAC3G,UAAU,EAAE,QAAQ,EAAE,QAAQ,oBAAoB,oBAAoB,KAAA,GAAW,EAC/E,SAAA,mDACF,CAAC;CACD,KAAK,EAAE,QAAQ,EAAE,QAAQ,eAAe,eAAe,KAAA,GAAW,EAChE,SAAA,8CACF,CAAC;AACH,CAAC;;;;AAeD,SAAgB,gBAAgB,SAAkE;CAChG,MAAM,cAAc,gBAClB,8BACA,UACC,UACC,IAAI,aAAa;EACf,MAAM,UAAU;EAChB,SAAS,mBAAmB,MAAM,OAAO,IAAI;GAC3C,iBAAA;GACA,eAAe;IACb,MAAM,2BAA2B,KAAK;IACtC,UAAA;IACA,KAAA;GACF;GACA,aAAA;GACA,wBAAwB,WAAW,6BAA6B,OAAO;EACzE,CAAC;CACH,CAAC,CACL;CACA,MAAM,mBAAmB,0BAA0B,QAAQ,GAAG;CAC9D,MAAM,kBAAkB,QAAQ;CAChC,MAAM,iBAAiB,6BAA6B;EAClD,kBAAkB,gBAAgB;EAClC,QAAQ,gBAAgB;CAC1B,CAAC;CACD,MAAM,UAAU,4BAA4B,eAAe;CAE3D,OAAO,WAAW;EAChB,KAAK,CAAC,yBAAyB,cAAc,CAAC;EAC9C,UAAU;GACR,MAAM,iBAAiB;GACvB,WAAW,iBAAiB;GAC5B,SAAS,iBAAiB;EAC5B;EACA,MAAM,YAAY,QAAQ;EAC1B,eAAe;EACf,QAAQ,iBAAiB;EACzB;CACF,CAAC;AACH"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@runlane/lane-postgres-sqs",
3
- "version": "0.2.0",
3
+ "version": "0.4.0",
4
4
  "description": "Production-ready Runlane lane composing PostgreSQL storage with Amazon SQS transport.",
5
5
  "type": "module",
6
6
  "sideEffects": false,
@@ -48,11 +48,11 @@
48
48
  "access": "public"
49
49
  },
50
50
  "dependencies": {
51
- "zod": "^4.3.6",
52
- "@runlane/contracts": "0.2.0",
53
- "@runlane/postgres-storage": "0.2.0",
54
- "@runlane/transport-sqs": "0.2.0",
55
- "@runlane/utilities": "0.2.0"
51
+ "zod": "^4.5.4",
52
+ "@runlane/contracts": "0.4.0",
53
+ "@runlane/postgres-storage": "0.4.0",
54
+ "@runlane/transport-sqs": "0.4.0",
55
+ "@runlane/utilities": "0.4.0"
56
56
  },
57
57
  "devDependencies": {
58
58
  "@aws-sdk/client-sqs": "^3.1045.0",
@@ -60,12 +60,12 @@
60
60
  "pg": "^8.20.0",
61
61
  "tsx": "^4.21.0",
62
62
  "@repo/eslint": "0.0.0",
63
- "@repo/postgres-test-runner": "0.0.2",
63
+ "@repo/postgres-test-runner": "0.0.4",
64
64
  "@repo/tsdown": "0.0.0",
65
65
  "@repo/typescript": "0.0.0",
66
66
  "@repo/vitest": "0.0.0",
67
- "@runlane/core": "0.2.0",
68
- "@runlane/testing": "0.2.0"
67
+ "@runlane/core": "0.4.0",
68
+ "@runlane/testing": "0.4.0"
69
69
  },
70
70
  "scripts": {
71
71
  "build": "tsdown",