@prisma/composer-prisma-cloud 0.2.0 → 0.3.0-dev.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. package/dist/buckets-main.mjs +795 -0
  2. package/dist/buckets-main.mjs.map +1 -0
  3. package/dist/compute-main.mjs +559 -0
  4. package/dist/compute-main.mjs.map +1 -0
  5. package/dist/control.d.mts +34 -5
  6. package/dist/control.d.mts.map +1 -0
  7. package/dist/control.mjs +98 -1280
  8. package/dist/control.mjs.map +1 -1
  9. package/dist/cron/index.d.mts +54 -4
  10. package/dist/cron/index.d.mts.map +1 -0
  11. package/dist/cron/index.mjs +145 -42
  12. package/dist/cron/index.mjs.map +1 -1
  13. package/dist/cron/scheduler-entrypoint.mjs +637 -529
  14. package/dist/cron/scheduler-entrypoint.mjs.map +1 -1
  15. package/dist/cron/scheduler-service.mjs +145 -42
  16. package/dist/cron/scheduler-service.mjs.map +1 -1
  17. package/dist/email/email-entrypoint.mjs +19738 -0
  18. package/dist/email/email-entrypoint.mjs.map +1 -0
  19. package/dist/email/email-service.mjs +565 -0
  20. package/dist/email/email-service.mjs.map +1 -0
  21. package/dist/email/index.d.mts +282 -0
  22. package/dist/email/index.d.mts.map +1 -0
  23. package/dist/email/index.mjs +652 -0
  24. package/dist/email/index.mjs.map +1 -0
  25. package/dist/email/testing.d.mts +22 -0
  26. package/dist/email/testing.d.mts.map +1 -0
  27. package/dist/email/testing.mjs +1321 -0
  28. package/dist/email/testing.mjs.map +1 -0
  29. package/dist/get-port-BYnpbW5H.mjs +111 -0
  30. package/dist/get-port-BYnpbW5H.mjs.map +1 -0
  31. package/dist/index.d.mts +37 -6
  32. package/dist/index.d.mts.map +1 -0
  33. package/dist/index.mjs +70 -45
  34. package/dist/index.mjs.map +1 -1
  35. package/dist/local-target.d.mts +12 -0
  36. package/dist/local-target.d.mts.map +1 -0
  37. package/dist/local-target.mjs +6185 -0
  38. package/dist/local-target.mjs.map +1 -0
  39. package/dist/param-BTzY0ne5-CW6ojZ3E.mjs +66 -0
  40. package/dist/param-BTzY0ne5-CW6ojZ3E.mjs.map +1 -0
  41. package/dist/pg-connection-CadPZuEK-CF3FsSQu.mjs +79 -0
  42. package/dist/pg-connection-CadPZuEK-CF3FsSQu.mjs.map +1 -0
  43. package/dist/postgres-main.mjs +602 -0
  44. package/dist/postgres-main.mjs.map +1 -0
  45. package/dist/preflight-names-BPL-qsZF-BfoRgbgb.mjs +1252 -0
  46. package/dist/preflight-names-BPL-qsZF-BfoRgbgb.mjs.map +1 -0
  47. package/dist/{prisma-next-DlU01kXJ-2sP5mQb6.mjs → prisma-next-BvBwGCIt-DssgnctU.mjs} +21 -80
  48. package/dist/prisma-next-BvBwGCIt-DssgnctU.mjs.map +1 -0
  49. package/dist/prisma-next.d.mts +14 -5
  50. package/dist/prisma-next.d.mts.map +1 -0
  51. package/dist/prisma-next.mjs +1 -1
  52. package/dist/provisioned-edges-C1wSO3cx-YC5C19f9.mjs +151 -0
  53. package/dist/provisioned-edges-C1wSO3cx-YC5C19f9.mjs.map +1 -0
  54. package/dist/secret-rz_ZqNeq-_xd97Jd9.mjs +47 -0
  55. package/dist/secret-rz_ZqNeq-_xd97Jd9.mjs.map +1 -0
  56. package/dist/segments-NpKN-46R-C_LQ2urs.mjs +1454 -0
  57. package/dist/segments-NpKN-46R-C_LQ2urs.mjs.map +1 -0
  58. package/dist/{serializer-CX4VYdf_-KKGoAxfx.mjs → serializer-CJiOhF2d-DJUjQj1i.mjs} +34 -44
  59. package/dist/serializer-CJiOhF2d-DJUjQj1i.mjs.map +1 -0
  60. package/dist/serializer-Cx5slrV4-xJfH6EWS.d.mts.map +1 -0
  61. package/dist/storage/index.d.mts +52 -5
  62. package/dist/storage/index.d.mts.map +1 -0
  63. package/dist/storage/index.mjs +158 -47
  64. package/dist/storage/index.mjs.map +1 -1
  65. package/dist/storage/storage-entrypoint.mjs +370 -271
  66. package/dist/storage/storage-entrypoint.mjs.map +1 -1
  67. package/dist/storage/storage-service.mjs +158 -47
  68. package/dist/storage/storage-service.mjs.map +1 -1
  69. package/dist/storage/testing.d.mts +7 -6
  70. package/dist/storage/testing.d.mts.map +1 -0
  71. package/dist/storage/testing.mjs +4 -21
  72. package/dist/storage/testing.mjs.map +1 -1
  73. package/dist/streams/index.d.mts +56 -84
  74. package/dist/streams/index.d.mts.map +1 -0
  75. package/dist/streams/index.mjs +158 -47
  76. package/dist/streams/index.mjs.map +1 -1
  77. package/dist/streams/streams-entrypoint.mjs +366 -250
  78. package/dist/streams/streams-entrypoint.mjs.map +1 -1
  79. package/dist/streams/streams-service.mjs +158 -47
  80. package/dist/streams/streams-service.mjs.map +1 -1
  81. package/dist/streams/testing.d.mts.map +1 -0
  82. package/dist/testing.d.mts.map +1 -0
  83. package/dist/testing.mjs +1 -1
  84. package/dist/testing.mjs.map +1 -1
  85. package/package.json +34 -20
  86. package/src/exports/control.ts +1 -0
  87. package/src/exports/cron.ts +1 -0
  88. package/src/exports/email-testing.ts +1 -0
  89. package/src/exports/email.ts +1 -0
  90. package/src/exports/index.ts +1 -0
  91. package/src/exports/local-target.ts +1 -0
  92. package/src/exports/prisma-next.ts +1 -0
  93. package/src/exports/storage-testing.ts +1 -0
  94. package/src/exports/storage.ts +1 -0
  95. package/src/exports/streams-testing.ts +1 -0
  96. package/src/exports/streams.ts +1 -0
  97. package/src/exports/testing.ts +1 -0
  98. package/dist/prisma-next-DlU01kXJ-2sP5mQb6.mjs.map +0 -1
  99. package/dist/provisioned-edges-DIQAR4q4-Bn9op-JG.mjs +0 -151
  100. package/dist/provisioned-edges-DIQAR4q4-Bn9op-JG.mjs.map +0 -1
  101. package/dist/serializer-CX4VYdf_-KKGoAxfx.mjs.map +0 -1
@@ -0,0 +1,282 @@
1
+ import { BuildAdapter, DependencyEnd, Deps, Expose, HydratedDeps, ModuleNode, NODE, ParamNeed, Params, RunnableServiceNode, SecretNeed, SecretValues, Secrets, ServiceNode, Values } from "@prisma/composer";
2
+ import { Type } from "arktype";
3
+ import "@standard-schema/spec";
4
+ //#region ../../1-prisma-cloud/1-extensions/target/dist/index.d.mts
5
+ //#endregion
6
+ //#region src/compute.d.ts
7
+ declare const reservedParams: {
8
+ readonly port: import("@prisma/composer").ConfigParam<import("@standard-schema/spec").StandardSchemaV1<number, number>>;
9
+ };
10
+ type ReservedParams = typeof reservedParams;
11
+ /**
12
+ * A Prisma Compute service — declarations only (deps + params + build + the
13
+ * ports it exposes), no descriptor. `params` merges with the reserved
14
+ * `ReservedParams` (`port`); a user param whose name collides with a reserved
15
+ * one fails at authoring, the same way a colliding dependency name does.
16
+ *
17
+ * · run(address, boot) — the process controller: deserialize the platform
18
+ * environment (keyed off `address`, the extension's ONE env read) into a
19
+ * typed Config, re-emit it under address-free process-local stash keys,
20
+ * then call boot() to start the app's entry.
21
+ * · load() / config() — called from inside the app's entry: read the stash;
22
+ * load() hydrates + memoizes the deps, config() returns the typed params.
23
+ * Separate accessors so a dep and a param never share a namespace (ADR-0021).
24
+ * · origin() — this service's platform-assigned public origin, read from the
25
+ * stash `run()` populates; memoized per process.
26
+ *
27
+ * The underlying node carries `extension: '@prisma/composer-prisma-cloud'` —
28
+ * the control-plane registry key `prisma-composer deploy` resolves through the
29
+ * app's `prisma-composer.config.ts` (ADR-0017). This module loads nothing at
30
+ * deploy time; nodes are pure data until run() or load() is called.
31
+ */
32
+ declare class ComputeService<D extends Deps, P extends Params, E extends Expose, S extends Secrets> implements RunnableServiceNode<D, P & ReservedParams, E, S> {
33
+ #private;
34
+ readonly [NODE]: true;
35
+ readonly kind: 'service';
36
+ readonly name: string;
37
+ readonly extension: string;
38
+ readonly type: string;
39
+ readonly inputs: D;
40
+ readonly params: P & ReservedParams;
41
+ readonly secretSlots: S;
42
+ readonly build: BuildAdapter;
43
+ readonly expose: E | undefined;
44
+ constructor(node: ServiceNode<D, P & ReservedParams, E, S>);
45
+ run(address: string, boot: () => Promise<unknown>): Promise<unknown>;
46
+ load(): HydratedDeps<D>;
47
+ config(): Values<P & ReservedParams>;
48
+ secrets(): SecretValues<S>;
49
+ /** This service's platform-assigned public origin — read from the stash
50
+ * run() populates and memoized per process. Throws if called before run()
51
+ * has stashed it (readOrigin's pinned message). */
52
+ origin(): string;
53
+ }
54
+ //#endregion
55
+ //#region src/postgres.d.ts
56
+ interface PostgresConfig {
57
+ readonly url: string;
58
+ }
59
+ //#endregion
60
+ //#region ../../1-prisma-cloud/2-shared-modules/email/dist/email-service-Cm-YAvgn.d.mts
61
+ //#region src/email-service.d.ts
62
+ declare function emailService(opts?: {
63
+ deliveryUrl?: string;
64
+ }): ComputeService<{
65
+ db: import("@prisma/composer").DependencyEnd<PostgresConfig, import("@prisma/composer").Contract<"postgres", PostgresConfig>>;
66
+ }, {
67
+ deliveryMode: import("@prisma/composer").ConfigParam<import("arktype/internal/variants/string.ts").StringType<"resend" | "smtp" | "none", {}>>;
68
+ deliveryUrl: import("@prisma/composer").ConfigParam<import("@standard-schema/spec").StandardSchemaV1<string, string>>;
69
+ from: import("@prisma/composer").ConfigParam<import("@standard-schema/spec").StandardSchemaV1<string, string>>;
70
+ }, {
71
+ send: import("@prisma/composer").Contract<"rpc", {
72
+ send: (input: {
73
+ templateId: string;
74
+ to: string[];
75
+ subject: string;
76
+ html: string;
77
+ idempotencyKey: string;
78
+ cc?: string[];
79
+ bcc?: string[];
80
+ replyTo?: string;
81
+ text?: string;
82
+ }) => Promise<{
83
+ id: string;
84
+ status: "stored" | "queued" | "sent" | "failed";
85
+ error?: string;
86
+ }>;
87
+ }>;
88
+ outbox: import("@prisma/composer").Contract<"rpc", {
89
+ getEmail: (input: {
90
+ id: string;
91
+ }) => Promise<{
92
+ email: {
93
+ id: string;
94
+ templateId: string;
95
+ to: string[];
96
+ cc: string[];
97
+ bcc: string[];
98
+ replyTo: string | null;
99
+ from: string;
100
+ subject: string;
101
+ html: string;
102
+ text: string | null;
103
+ status: "stored" | "queued" | "sent" | "failed";
104
+ providerMessageId: string | null;
105
+ error: string | null;
106
+ attempts: number;
107
+ createdAt: string;
108
+ updatedAt: string;
109
+ } | null;
110
+ }>;
111
+ listEmails: (input: {
112
+ to?: string;
113
+ templateId?: string;
114
+ status?: "stored" | "queued" | "sent" | "failed";
115
+ cursor?: string;
116
+ limit?: number;
117
+ }) => Promise<{
118
+ emails: {
119
+ id: string;
120
+ templateId: string;
121
+ to: string[];
122
+ cc: string[];
123
+ bcc: string[];
124
+ replyTo: string | null;
125
+ from: string;
126
+ subject: string;
127
+ html: string;
128
+ text: string | null;
129
+ status: "stored" | "queued" | "sent" | "failed";
130
+ providerMessageId: string | null;
131
+ error: string | null;
132
+ attempts: number;
133
+ createdAt: string;
134
+ updatedAt: string;
135
+ }[];
136
+ nextCursor?: string;
137
+ }>;
138
+ }>;
139
+ }, {
140
+ deliveryCredential: import("@prisma/composer").SecretNeed;
141
+ }>;
142
+ //#endregion
143
+ //#region ../../1-prisma-cloud/2-shared-modules/email/dist/index.d.mts
144
+ //#region src/contract.d.ts
145
+ /** What a template's render produces. `text` is optional; `html` is required. */
146
+ interface RenderedEmail {
147
+ readonly subject: string;
148
+ readonly html: string;
149
+ readonly text?: string;
150
+ }
151
+ /**
152
+ * One template's data schema and its render function. `render` may be
153
+ * synchronous or async — the sender method awaits its result either way, so
154
+ * react-email's/jsx-email's async `render()` works directly (spec's
155
+ * `TemplateDef` amendment, 2026-07-22).
156
+ */
157
+ interface TemplateDef<D> {
158
+ readonly data: Type<D>;
159
+ readonly render: (data: D) => RenderedEmail | Promise<RenderedEmail>;
160
+ }
161
+ type TemplateDefs = Record<string, TemplateDef<any>>;
162
+ /**
163
+ * Identity helper that infers `T` with literal keys and each entry's own
164
+ * data type — the `defineSchedule` pattern
165
+ * (`packages/1-prisma-cloud/2-shared-modules/cron/src/schedule.ts`).
166
+ * Performs no validation and no transformation.
167
+ */
168
+ declare function defineTemplates<const T extends { [K in keyof T]: TemplateDef<any>; }>(defs: T): T;
169
+ declare const emailSendContract: import("@prisma/composer").Contract<"rpc", {
170
+ send: (input: {
171
+ templateId: string;
172
+ to: string[];
173
+ subject: string;
174
+ html: string;
175
+ idempotencyKey: string;
176
+ cc?: string[];
177
+ bcc?: string[];
178
+ replyTo?: string;
179
+ text?: string;
180
+ }) => Promise<{
181
+ id: string;
182
+ status: "stored" | "queued" | "sent" | "failed";
183
+ error?: string;
184
+ }>;
185
+ }>;
186
+ declare const emailOutboxContract: import("@prisma/composer").Contract<"rpc", {
187
+ getEmail: (input: {
188
+ id: string;
189
+ }) => Promise<{
190
+ email: {
191
+ id: string;
192
+ templateId: string;
193
+ to: string[];
194
+ cc: string[];
195
+ bcc: string[];
196
+ replyTo: string | null;
197
+ from: string;
198
+ subject: string;
199
+ html: string;
200
+ text: string | null;
201
+ status: "stored" | "queued" | "sent" | "failed";
202
+ providerMessageId: string | null;
203
+ error: string | null;
204
+ attempts: number;
205
+ createdAt: string;
206
+ updatedAt: string;
207
+ } | null;
208
+ }>;
209
+ listEmails: (input: {
210
+ to?: string;
211
+ templateId?: string;
212
+ status?: "stored" | "queued" | "sent" | "failed";
213
+ cursor?: string;
214
+ limit?: number;
215
+ }) => Promise<{
216
+ emails: {
217
+ id: string;
218
+ templateId: string;
219
+ to: string[];
220
+ cc: string[];
221
+ bcc: string[];
222
+ replyTo: string | null;
223
+ from: string;
224
+ subject: string;
225
+ html: string;
226
+ text: string | null;
227
+ status: "stored" | "queued" | "sent" | "failed";
228
+ providerMessageId: string | null;
229
+ error: string | null;
230
+ attempts: number;
231
+ createdAt: string;
232
+ updatedAt: string;
233
+ }[];
234
+ nextCursor?: string;
235
+ }>;
236
+ }>;
237
+ /**
238
+ * The per-template send methods a `emailSender(templates)` dependency
239
+ * hydrates to. Optional fields accept explicit `undefined` — absent and
240
+ * `undefined` mean the same thing everywhere — so a caller under
241
+ * `exactOptionalPropertyTypes` can pass a maybe-undefined value straight
242
+ * through instead of conditionally spreading it (spec's `EmailSender`
243
+ * amendment, 2026-07-22).
244
+ */
245
+ type EmailSender<T extends TemplateDefs> = { readonly [K in keyof T]: (input: {
246
+ readonly to: string | readonly string[];
247
+ readonly data: T[K] extends TemplateDef<infer D> ? D : never;
248
+ readonly cc?: readonly string[] | undefined;
249
+ readonly bcc?: readonly string[] | undefined;
250
+ readonly replyTo?: string | undefined;
251
+ /** Omitted (or `undefined`) mints a fresh UUID on every call — that call's own retry is NOT deduped against a previous one. Supply and reuse your own key across retries to get the outbox's dedup guarantee. */
252
+ readonly idempotencyKey?: string | undefined;
253
+ }) => Promise<{
254
+ id: string;
255
+ status: 'stored' | 'queued' | 'sent' | 'failed';
256
+ error?: string;
257
+ }>; };
258
+ /**
259
+ * A consumer's dependency on the `send` port: one method per declared
260
+ * template, each validating its own `data`, rendering, and calling the
261
+ * generic `send` op. Connection params and hydration reuse `rpc()`'s exactly
262
+ * — same `url`/`serviceKey` binding, built the same way `rpc(emailSendContract)`
263
+ * would be, then wrapped.
264
+ */
265
+ declare function emailSender<T extends TemplateDefs>(templates: T): DependencyEnd<EmailSender<T>, typeof emailSendContract>;
266
+ //#endregion
267
+ //#region src/email-module.d.ts
268
+ declare function email(opts?: {
269
+ name?: string;
270
+ deliveryUrl?: string;
271
+ }): ModuleNode<Record<never, never>, {
272
+ send: typeof emailSendContract;
273
+ outbox: typeof emailOutboxContract;
274
+ }, {
275
+ deliveryCredential: SecretNeed;
276
+ }, {
277
+ deliveryMode: ParamNeed;
278
+ from: ParamNeed;
279
+ }>;
280
+ //#endregion
281
+ export { type EmailSender, type RenderedEmail, type TemplateDef, type TemplateDefs, defineTemplates, email, emailOutboxContract, emailSendContract, emailSender, emailService };
282
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../../../../1-prisma-cloud/1-extensions/target/dist/index.d.mts","../../../../1-prisma-cloud/2-shared-modules/email/dist/email-service-Cm-YAvgn.d.mts","../../../../1-prisma-cloud/2-shared-modules/email/dist/index.d.mts"],"mappings":";;;;;;cA0Cc;WACH,+BAA+B,4CAA4C;;KAEjF,wBAAwB;;;;;;;;;;;;;;;;;;;;;;cAsBf,eAAe,UAAU,MAAM,UAAU,QAAQ,UAAU,QAAQ,UAAU,oBAAoB,oBAAoB,GAAG,IAAI,gBAAgB,GAAG;;YAEjJ;WACD;WACA;WACA;WACA;WACA,QAAQ;WACR,QAAQ,IAAI;WACZ,aAAa;WACb,OAAO;WACP,QAAQ;EACjB,YAAY,MAAM,YAAY,GAAG,IAAI,gBAAgB,GAAG;EACxD,IAAI,iBAAiB,YAAY,mBAAmB;EACpD,QAAQ,aAAa;EACrB,UAAU,OAAO,IAAI;EACrB,WAAW,aAAa;;;;EAIxB;;;;UA+DQ;WACC;;;;;iBCtJM,aAAa;EAC5B;IAsDQ;EApDR,6BAA6B,cAHd,yCAGsG,qBAAzC;;EAE5E,uCAAuC,0DAA0D;EACjG,sCAAsC,4CAA4C;EAClF,+BAA+B,4CAA4C;;EAE3E,+BAA+B;IAC7B,OAAO;MACL;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;UACI;MACJ;MACA;MACA;;;EAGJ,iCAAiC;IAC/B,WAAW;MACT;UACI;MACJ;QACE;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;;;IAGJ,aAAa;MACX;MACA;MACA;MACA;MACA;UACI;MACJ;QACE;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;;MAEF;;;;EAIJ,6CAA6C;;;;;;UC1ErC;WACC;WACA;WACA;;;;;;;;UAQD,YAAY;WACX,MAAM,KAAK;WACX,SAAS,MAAM,MAAM,gBAAgB,QAAQ;;KAEnD,eAAe,eAAe;;;;;;;iBAOlB,sBAAsB,aAAa,WAAW,IAAI,qBAAqB,MAAM,IAAI;cACpF,4CAA4C;EACxD,OAAO;IACL;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;QACI;IACJ;IACA;IACA;;;cAGU,8CAA8C;EAC1D,WAAW;IACT;QACI;IACJ;MACE;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;;;EAGJ,aAAa;IACX;IACA;IACA;IACA;IACA;QACI;IACJ;MACE;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;MACA;;IAEF;;;;;;;;;;;KAWC,YAAY,UAAU,4BAA4B,WAAW,KAAK;WAC5D;WACA,MAAM,EAAE,WAAW,kBAAkB,KAAK;WAC1C;WACA;WACA;;WAEA;MACL;EACJ;EACA;EACA;;;;;;;;;iBASe,YAAY,UAAU,cAAc,WAAW,IAAI,cAAc,YAAY,WAAW;;;iBAGxF,MAAM;EACrB;EACA;IACE,WAAW;EACb,aAAa;EACb,eAAe;;EAEf,oBAAoB;;EAEpB,cAAc;EACd,MAAM"}