@gaganref/confect-server 10.3.1-fork.7 → 10.3.1-fork.70

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 (159) hide show
  1. package/dist/ActionCall.d.ts +30 -0
  2. package/dist/ActionCall.d.ts.map +1 -0
  3. package/dist/ActionCall.js +41 -0
  4. package/dist/ActionCall.js.map +1 -0
  5. package/dist/ActionRunner.d.ts +1 -1
  6. package/dist/ActionRunner.d.ts.map +1 -1
  7. package/dist/ActionRunner.js +3 -3
  8. package/dist/ActionRunner.js.map +1 -1
  9. package/dist/AiGatewayDecisionClient.js +1 -1
  10. package/dist/AiGatewayLanguageClient.js +1 -1
  11. package/dist/Auth.d.ts +31 -2
  12. package/dist/Auth.d.ts.map +1 -1
  13. package/dist/Auth.js +23 -3
  14. package/dist/Auth.js.map +1 -1
  15. package/dist/Callback.d.ts +1 -1
  16. package/dist/Callback.d.ts.map +1 -1
  17. package/dist/Callback.js +6 -6
  18. package/dist/Callback.js.map +1 -1
  19. package/dist/ConvexConfigProvider.js +2 -2
  20. package/dist/ConvexFunctionDefinitions.d.ts.map +1 -1
  21. package/dist/ConvexFunctionDefinitions.js +4 -4
  22. package/dist/ConvexFunctionDefinitions.js.map +1 -1
  23. package/dist/ConvexLogger.js +1 -1
  24. package/dist/CronJobs.d.ts.map +1 -1
  25. package/dist/CronJobs.js +7 -6
  26. package/dist/CronJobs.js.map +1 -1
  27. package/dist/DatabaseSchema.js +2 -2
  28. package/dist/DatabaseWriter.d.ts +36 -2
  29. package/dist/DatabaseWriter.d.ts.map +1 -1
  30. package/dist/DatabaseWriter.js +55 -8
  31. package/dist/DatabaseWriter.js.map +1 -1
  32. package/dist/ExecutionMetadata.js +1 -1
  33. package/dist/FunctionImpl.js +2 -2
  34. package/dist/FunctionRegistryItem.d.ts +1 -0
  35. package/dist/FunctionRegistryItem.d.ts.map +1 -1
  36. package/dist/FunctionRegistryItem.js +2 -1
  37. package/dist/FunctionRegistryItem.js.map +1 -1
  38. package/dist/GroupImpl.d.ts +21 -2
  39. package/dist/GroupImpl.d.ts.map +1 -1
  40. package/dist/GroupImpl.js +21 -22
  41. package/dist/GroupImpl.js.map +1 -1
  42. package/dist/GroupRegistry.d.ts +1 -0
  43. package/dist/GroupRegistry.d.ts.map +1 -1
  44. package/dist/GroupRegistry.js +10 -3
  45. package/dist/GroupRegistry.js.map +1 -1
  46. package/dist/Handler.d.ts +8 -4
  47. package/dist/Handler.d.ts.map +1 -1
  48. package/dist/Handler.js.map +1 -1
  49. package/dist/HttpRouter.d.ts +2 -0
  50. package/dist/HttpRouter.d.ts.map +1 -1
  51. package/dist/HttpRouter.js +17 -8
  52. package/dist/HttpRouter.js.map +1 -1
  53. package/dist/MiddlewareImpl.js +1 -1
  54. package/dist/MutationRunner.d.ts +1 -1
  55. package/dist/MutationRunner.d.ts.map +1 -1
  56. package/dist/MutationRunner.js +3 -3
  57. package/dist/MutationRunner.js.map +1 -1
  58. package/dist/MutationTransactionContext.d.ts.map +1 -1
  59. package/dist/MutationTransactionContext.js +4 -3
  60. package/dist/MutationTransactionContext.js.map +1 -1
  61. package/dist/OfficialComponent.d.ts +60 -0
  62. package/dist/OfficialComponent.d.ts.map +1 -0
  63. package/dist/OfficialComponent.js +72 -0
  64. package/dist/OfficialComponent.js.map +1 -0
  65. package/dist/OrderedQuery.d.ts +4 -5
  66. package/dist/OrderedQuery.d.ts.map +1 -1
  67. package/dist/OrderedQuery.js.map +1 -1
  68. package/dist/QueryInitializer.js +2 -2
  69. package/dist/QueryRunner.js +2 -2
  70. package/dist/QueryStream.d.ts +120 -12
  71. package/dist/QueryStream.d.ts.map +1 -1
  72. package/dist/QueryStream.js +143 -41
  73. package/dist/QueryStream.js.map +1 -1
  74. package/dist/QueryStreamCursor.js +1 -1
  75. package/dist/QueryStreamIndexPrefix.js +1 -1
  76. package/dist/QueryStreamIndexRange.js +2 -2
  77. package/dist/QueryStreamKey.js +1 -1
  78. package/dist/QueryStreamKeyBounds.js +2 -2
  79. package/dist/QueryStreamKeyLayout.js +2 -2
  80. package/dist/QueryStreamKeyValues.js +2 -2
  81. package/dist/QueryStreamPagination.js +1 -1
  82. package/dist/QueryStreamReadBudget.d.ts +3 -2
  83. package/dist/QueryStreamReadBudget.d.ts.map +1 -1
  84. package/dist/QueryStreamReadBudget.js +8 -5
  85. package/dist/QueryStreamReadBudget.js.map +1 -1
  86. package/dist/QueryTransactionContext.js +2 -2
  87. package/dist/RegisteredConvexFunction.d.ts +10 -5
  88. package/dist/RegisteredConvexFunction.d.ts.map +1 -1
  89. package/dist/RegisteredConvexFunction.js +45 -29
  90. package/dist/RegisteredConvexFunction.js.map +1 -1
  91. package/dist/RegisteredFunction.d.ts +39 -22
  92. package/dist/RegisteredFunction.d.ts.map +1 -1
  93. package/dist/RegisteredFunction.js +155 -42
  94. package/dist/RegisteredFunction.js.map +1 -1
  95. package/dist/RegisteredNodeFunction.d.ts +1 -1
  96. package/dist/RegisteredNodeFunction.d.ts.map +1 -1
  97. package/dist/RegisteredNodeFunction.js +10 -6
  98. package/dist/RegisteredNodeFunction.js.map +1 -1
  99. package/dist/RegistryItems.d.ts +7 -0
  100. package/dist/RegistryItems.d.ts.map +1 -1
  101. package/dist/RegistryItems.js +8 -3
  102. package/dist/RegistryItems.js.map +1 -1
  103. package/dist/RequestMetadata.js +1 -1
  104. package/dist/Scheduler.d.ts +1 -1
  105. package/dist/Scheduler.d.ts.map +1 -1
  106. package/dist/Scheduler.js +14 -13
  107. package/dist/Scheduler.js.map +1 -1
  108. package/dist/Storage.js +1 -1
  109. package/dist/StorageActionWriter.js +1 -1
  110. package/dist/StorageReader.js +1 -1
  111. package/dist/StorageWriter.js +1 -1
  112. package/dist/TransactionMetadata.js +1 -1
  113. package/dist/VectorSearch.js +1 -1
  114. package/dist/index.d.ts +2 -0
  115. package/dist/index.d.ts.map +1 -1
  116. package/dist/index.js +20 -18
  117. package/dist/internal/AiGatewayDecisionClient.js +1 -1
  118. package/dist/internal/AiGatewayLanguageClient.js +1 -1
  119. package/dist/internal/AiGatewayServiceToken.js +1 -1
  120. package/dist/internal/DocumentPatch.d.ts +16 -0
  121. package/dist/internal/DocumentPatch.d.ts.map +1 -0
  122. package/dist/internal/DocumentPatch.js +36 -0
  123. package/dist/internal/DocumentPatch.js.map +1 -0
  124. package/dist/internal/observability.d.ts +5 -0
  125. package/dist/internal/observability.d.ts.map +1 -0
  126. package/dist/internal/observability.js +21 -0
  127. package/dist/internal/observability.js.map +1 -0
  128. package/dist/internal/reservedArgument.d.ts +8 -0
  129. package/dist/internal/reservedArgument.d.ts.map +1 -0
  130. package/dist/internal/reservedArgument.js +30 -0
  131. package/dist/internal/reservedArgument.js.map +1 -0
  132. package/package.json +5 -5
  133. package/src/ActionCall.ts +83 -0
  134. package/src/ActionRunner.ts +3 -2
  135. package/src/Auth.ts +49 -1
  136. package/src/Callback.ts +3 -2
  137. package/src/ConvexFunctionDefinitions.ts +2 -1
  138. package/src/CronJobs.ts +2 -1
  139. package/src/DatabaseWriter.ts +183 -25
  140. package/src/FunctionRegistryItem.ts +4 -0
  141. package/src/GroupImpl.ts +61 -8
  142. package/src/GroupRegistry.ts +7 -3
  143. package/src/Handler.ts +21 -5
  144. package/src/HttpRouter.ts +54 -4
  145. package/src/MutationRunner.ts +3 -2
  146. package/src/MutationTransactionContext.ts +2 -1
  147. package/src/OfficialComponent.ts +168 -0
  148. package/src/OrderedQuery.ts +4 -5
  149. package/src/QueryStream.ts +391 -61
  150. package/src/QueryStreamReadBudget.ts +19 -6
  151. package/src/RegisteredConvexFunction.ts +35 -2
  152. package/src/RegisteredFunction.ts +251 -45
  153. package/src/RegisteredNodeFunction.ts +11 -1
  154. package/src/RegistryItems.ts +31 -0
  155. package/src/Scheduler.ts +17 -19
  156. package/src/index.ts +2 -0
  157. package/src/internal/DocumentPatch.ts +87 -0
  158. package/src/internal/observability.ts +27 -0
  159. package/src/internal/reservedArgument.ts +56 -0
@@ -0,0 +1,30 @@
1
+ import type * as DatabaseSchema from "./DatabaseSchema.js";
2
+ import * as MiddlewareImpl from "./MiddlewareImpl.js";
3
+ declare const ActionCallAlreadyUsed_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
4
+ readonly _tag: "ActionCallAlreadyUsed";
5
+ } & Readonly<A>;
6
+ export declare class ActionCallAlreadyUsed extends ActionCallAlreadyUsed_base<{}> {
7
+ }
8
+ declare const ActionCallNotUsed_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
9
+ readonly _tag: "ActionCallNotUsed";
10
+ } & Readonly<A>;
11
+ export declare class ActionCallNotUsed extends ActionCallNotUsed_base<{}> {
12
+ }
13
+ declare const MissingFunctionType_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
14
+ readonly _tag: "MissingFunctionType";
15
+ } & Readonly<A>;
16
+ export declare class MissingFunctionType extends MissingFunctionType_base<{}> {
17
+ }
18
+ declare const NestedActionNotAllowed_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
19
+ readonly _tag: "NestedActionNotAllowed";
20
+ } & Readonly<A>;
21
+ export declare class NestedActionNotAllowed extends NestedActionNotAllowed_base<{}> {
22
+ }
23
+ declare const SchedulingNotAllowed_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
24
+ readonly _tag: "SchedulingNotAllowed";
25
+ } & Readonly<A>;
26
+ export declare class SchedulingNotAllowed extends SchedulingNotAllowed_base<{}> {
27
+ }
28
+ export declare const layer: <S extends DatabaseSchema.AnyWithProps>(schema: S) => import("effect/Layer").Layer<MiddlewareImpl.MiddlewareImpl<"@confect/core/ActionCall/Middleware">, never, never>;
29
+ export {};
30
+ //# sourceMappingURL=ActionCall.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ActionCall.d.ts","sourceRoot":"","sources":["../src/ActionCall.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,KAAK,cAAc,MAAM,qBAAqB,CAAC;AAG3D,OAAO,KAAK,cAAc,MAAM,qBAAqB,CAAC;;;;AAKtD,qBAAa,qBAAsB,SAAQ,2BAEzC,EAAE,CAAC;CAAG;;;;AACR,qBAAa,iBAAkB,SAAQ,uBAErC,EAAE,CAAC;CAAG;;;;AACR,qBAAa,mBAAoB,SAAQ,yBAEvC,EAAE,CAAC;CAAG;;;;AACR,qBAAa,sBAAuB,SAAQ,4BAE1C,EAAE,CAAC;CAAG;;;;AAER,qBAAa,oBAAqB,SAAQ,0BAExC,EAAE,CAAC;CAAG;AAER,eAAO,MAAM,KAAK,GAAI,CAAC,SAAS,cAAc,CAAC,YAAY,UAAU,CAAC,qHAgDnE,CAAC"}
@@ -0,0 +1,41 @@
1
+ import { __exportAll } from "./_virtual/_rolldown/runtime.js";
2
+ import { runWithCodec } from "./internal/reservedArgument.js";
3
+ import { ActionCtx } from "./ActionCtx.js";
4
+ import { ActionRunner } from "./ActionRunner.js";
5
+ import { make } from "./MiddlewareImpl.js";
6
+ import { MutationRunner } from "./MutationRunner.js";
7
+ import { QueryRunner } from "./QueryRunner.js";
8
+ import { Scheduler } from "./Scheduler.js";
9
+ import * as Context from "effect/Context";
10
+ import * as Effect from "effect/Effect";
11
+ import * as ActionCall from "@confect/core/ActionCall";
12
+ import * as Data from "effect/Data";
13
+ //#region src/ActionCall.ts
14
+ var ActionCall_exports = /* @__PURE__ */ __exportAll({
15
+ ActionCallAlreadyUsed: () => ActionCallAlreadyUsed,
16
+ ActionCallNotUsed: () => ActionCallNotUsed,
17
+ MissingFunctionType: () => MissingFunctionType,
18
+ NestedActionNotAllowed: () => NestedActionNotAllowed,
19
+ SchedulingNotAllowed: () => SchedulingNotAllowed,
20
+ layer: () => layer
21
+ });
22
+ var ActionCallAlreadyUsed = class extends Data.TaggedError("ActionCallAlreadyUsed") {};
23
+ var ActionCallNotUsed = class extends Data.TaggedError("ActionCallNotUsed") {};
24
+ var MissingFunctionType = class extends Data.TaggedError("MissingFunctionType") {};
25
+ var NestedActionNotAllowed = class extends Data.TaggedError("NestedActionNotAllowed") {};
26
+ var SchedulingNotAllowed = class extends Data.TaggedError("SchedulingNotAllowed") {};
27
+ const layer = (schema) => make(schema, ActionCall.Middleware, (effect) => Effect.gen(function* () {
28
+ const ctx = yield* ActionCtx();
29
+ let claimed = false;
30
+ const call = (ref, ...args) => Effect.suspend(() => {
31
+ if (claimed) return Effect.die(new ActionCallAlreadyUsed());
32
+ claimed = true;
33
+ if (ref.functionType !== "query" && ref.functionType !== "mutation") return Effect.die(new MissingFunctionType());
34
+ return runWithCodec(ref, args[0] ?? {}, (native, encoded) => ref.functionType === "query" ? ctx.runQuery(native, encoded) : ctx.runMutation(native, encoded));
35
+ }).pipe(Effect.withSpan("ActionCall.call"));
36
+ return yield* effect.pipe(Effect.provideService(ActionCall.ActionCall, call), Effect.updateContext((context) => Context.omit(QueryRunner, MutationRunner, ActionRunner, ActionCtx(), Scheduler)(context)));
37
+ }));
38
+ //#endregion
39
+ export { ActionCallAlreadyUsed, ActionCallNotUsed, ActionCall_exports, MissingFunctionType, NestedActionNotAllowed, SchedulingNotAllowed, layer };
40
+
41
+ //# sourceMappingURL=ActionCall.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ActionCall.js","names":["MiddlewareImpl.make","ActionCtx.ActionCtx","ReservedArgument.runWithCodec","QueryRunner.QueryRunner","MutationRunner.MutationRunner","ActionRunner.ActionRunner","Scheduler.Scheduler"],"sources":["../src/ActionCall.ts"],"sourcesContent":["import * as ReservedArgument from \"./internal/reservedArgument.js\";\nimport * as ActionCall from \"@confect/core/ActionCall\";\nimport type * as Ref from \"@confect/core/Ref\";\nimport type { FunctionReference } from \"convex/server\";\nimport * as Context from \"effect/Context\";\nimport * as Data from \"effect/Data\";\nimport * as Effect from \"effect/Effect\";\nimport * as ActionCtx from \"./ActionCtx.js\";\nimport * as ActionRunner from \"./ActionRunner.js\";\nimport type * as DatabaseSchema from \"./DatabaseSchema.js\";\nimport type * as DataModel from \"./DataModel.js\";\nimport type * as Handler from \"./Handler.js\";\nimport * as MiddlewareImpl from \"./MiddlewareImpl.js\";\nimport * as MutationRunner from \"./MutationRunner.js\";\nimport * as QueryRunner from \"./QueryRunner.js\";\nimport * as Scheduler from \"./Scheduler.js\";\n\nexport class ActionCallAlreadyUsed extends Data.TaggedError(\n \"ActionCallAlreadyUsed\",\n)<{}> {}\nexport class ActionCallNotUsed extends Data.TaggedError(\n \"ActionCallNotUsed\",\n)<{}> {}\nexport class MissingFunctionType extends Data.TaggedError(\n \"MissingFunctionType\",\n)<{}> {}\nexport class NestedActionNotAllowed extends Data.TaggedError(\n \"NestedActionNotAllowed\",\n)<{}> {}\n\nexport class SchedulingNotAllowed extends Data.TaggedError(\n \"SchedulingNotAllowed\",\n)<{}> {}\n\nexport const layer = <S extends DatabaseSchema.AnyWithProps>(schema: S) =>\n MiddlewareImpl.make(schema, ActionCall.Middleware, (effect) =>\n Effect.gen(function* () {\n const ctx = yield* ActionCtx.ActionCtx<\n DataModel.ToConvex<DataModel.FromSchema<S>>,\n DatabaseSchema.Scope<S>\n >();\n let claimed = false;\n const call: ActionCall.Call = <\n Target extends Ref.AnyQuery | Ref.AnyMutation,\n >(\n ref: Target,\n ...args: Ref.OptionalArgs<NoInfer<Target>>\n ) =>\n Effect.suspend(() => {\n if (claimed) return Effect.die(new ActionCallAlreadyUsed());\n claimed = true;\n if (ref.functionType !== \"query\" && ref.functionType !== \"mutation\")\n return Effect.die(new MissingFunctionType());\n return ReservedArgument.runWithCodec(\n ref,\n (args[0] ?? {}) as Ref.Args<Target>,\n (native, encoded) =>\n ref.functionType === \"query\"\n ? ctx.runQuery(\n native as FunctionReference<\"query\">,\n encoded as never,\n )\n : ctx.runMutation(\n native as FunctionReference<\"mutation\">,\n encoded as never,\n ),\n );\n }).pipe(Effect.withSpan(\"ActionCall.call\"));\n return yield* effect.pipe(\n Effect.provideService(ActionCall.ActionCall, call),\n Effect.updateContext(\n (context: Context.Context<Handler.ActionServices<S>>) =>\n Context.omit(\n QueryRunner.QueryRunner,\n MutationRunner.MutationRunner,\n ActionRunner.ActionRunner,\n ActionCtx.ActionCtx(),\n Scheduler.Scheduler,\n )(context),\n ),\n );\n }),\n );\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAiBA,IAAa,wBAAb,cAA2C,KAAK,YAC9C,uBACF,CAAC,CAAK,CAAC;AACP,IAAa,oBAAb,cAAuC,KAAK,YAC1C,mBACF,CAAC,CAAK,CAAC;AACP,IAAa,sBAAb,cAAyC,KAAK,YAC5C,qBACF,CAAC,CAAK,CAAC;AACP,IAAa,yBAAb,cAA4C,KAAK,YAC/C,wBACF,CAAC,CAAK,CAAC;AAEP,IAAa,uBAAb,cAA0C,KAAK,YAC7C,sBACF,CAAC,CAAK,CAAC;AAEP,MAAa,SAAgD,WAC3DA,KAAoB,QAAQ,WAAW,aAAa,WAClD,OAAO,IAAI,aAAa;CACtB,MAAM,MAAM,OAAOC,UAGjB;CACF,IAAI,UAAU;CACd,MAAM,QAGJ,KACA,GAAG,SAEH,OAAO,cAAc;EACnB,IAAI,SAAS,OAAO,OAAO,IAAI,IAAI,sBAAsB,CAAC;EAC1D,UAAU;EACV,IAAI,IAAI,iBAAiB,WAAW,IAAI,iBAAiB,YACvD,OAAO,OAAO,IAAI,IAAI,oBAAoB,CAAC;EAC7C,OAAOC,aACL,KACC,KAAK,MAAM,CAAC,IACZ,QAAQ,YACP,IAAI,iBAAiB,UACjB,IAAI,SACF,QACA,OACF,IACA,IAAI,YACF,QACA,OACF,CACR;CACF,CAAC,CAAC,CAAC,KAAK,OAAO,SAAS,iBAAiB,CAAC;CAC5C,OAAO,OAAO,OAAO,KACnB,OAAO,eAAe,WAAW,YAAY,IAAI,GACjD,OAAO,eACJ,YACC,QAAQ,KACNC,aACAC,gBACAC,cACAJ,UAAoB,GACpBK,SACF,CAAC,CAAC,OAAO,CACb,CACF;AACF,CAAC,CACH"}
@@ -1,4 +1,4 @@
1
- import * as Ref from "@confect/core/Ref";
1
+ import type * as Ref from "@confect/core/Ref";
2
2
  import { type GenericActionCtx } from "convex/server";
3
3
  import * as Effect from "effect/Effect";
4
4
  import * as Context from "effect/Context";
@@ -1 +1 @@
1
- {"version":3,"file":"ActionRunner.d.ts","sourceRoot":"","sources":["../src/ActionRunner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,KAAK,MAAM,MAAM,eAAe,CAAC;AAwB7C,eAAO,MAAM,YAAY;gBAjBX,MAAM,SAAS,GAAG,CAAC,SAAS,UAC9B,MAAM,WACL,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,KAChC,MAAM,CAAC,MAAM,CACd,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,EACnB,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,WAAW,CACvC;;;EAaF,CAAC;AACF,MAAM,MAAM,YAAY,GAAG,OAAO,YAAY,CAAC,UAAU,CAAC;AAE1D,eAAO,MAAM,KAAK,cAAe,gBAAgB,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC;gBAtBrD,MAAM,SAAS,GAAG,CAAC,SAAS,UAC9B,MAAM,WACL,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,KAChC,MAAM,CAAC,MAAM,CACd,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,EACnB,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,WAAW,CACvC;gBAiB2C,CAAC"}
1
+ {"version":3,"file":"ActionRunner.d.ts","sourceRoot":"","sources":["../src/ActionRunner.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,GAAG,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,KAAK,MAAM,MAAM,eAAe,CAAC;AAwB7C,eAAO,MAAM,YAAY;gBAjBX,MAAM,SAAS,GAAG,CAAC,SAAS,UAC9B,MAAM,WACL,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,KAChC,MAAM,CAAC,MAAM,CACd,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,EACnB,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,WAAW,CACvC;;;EAaF,CAAC;AACF,MAAM,MAAM,YAAY,GAAG,OAAO,YAAY,CAAC,UAAU,CAAC;AAE1D,eAAO,MAAM,KAAK,cAAe,gBAAgB,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC;gBAtBrD,MAAM,SAAS,GAAG,CAAC,SAAS,UAC9B,MAAM,WACL,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,KAChC,MAAM,CAAC,MAAM,CACd,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,EACnB,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,WAAW,CACvC;gBAiB2C,CAAC"}
@@ -1,15 +1,15 @@
1
1
  import { __exportAll } from "./_virtual/_rolldown/runtime.js";
2
+ import { runWithCodec } from "./internal/reservedArgument.js";
2
3
  import * as Context from "effect/Context";
3
- import * as Layer from "effect/Layer";
4
- import * as Ref from "@confect/core/Ref";
5
4
  import * as Effect from "effect/Effect";
5
+ import * as Layer from "effect/Layer";
6
6
  //#region src/ActionRunner.ts
7
7
  var ActionRunner_exports = /* @__PURE__ */ __exportAll({
8
8
  ActionRunner: () => ActionRunner,
9
9
  layer: () => layer
10
10
  });
11
11
  const run = Effect.fn("ActionRunner.runAction")((effect) => effect);
12
- const make = (runAction) => ({ runAction: (action, ...args) => run(Ref.runWithCodec(action, args[0] ?? {}, (functionReference, encodedArgs) => runAction(functionReference, encodedArgs))) });
12
+ const make = (runAction) => ({ runAction: (action, ...args) => run(runWithCodec(action, args[0] ?? {}, (functionReference, encodedArgs) => runAction(functionReference, encodedArgs))) });
13
13
  const ActionRunner = Context.Service("@confect/server/ActionRunner");
14
14
  const layer = (runAction) => Layer.succeed(ActionRunner, make(runAction));
15
15
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"ActionRunner.js","names":[],"sources":["../src/ActionRunner.ts"],"sourcesContent":["import * as Ref from \"@confect/core/Ref\";\nimport { type GenericActionCtx } from \"convex/server\";\nimport * as Effect from \"effect/Effect\";\nimport * as Context from \"effect/Context\";\nimport * as Layer from \"effect/Layer\";\nimport type * as Schema from \"effect/Schema\";\n\nconst run = Effect.fn(\"ActionRunner.runAction\")(\n <A, E>(effect: Effect.Effect<A, E>): Effect.Effect<A, E> => effect,\n);\n\nconst make = (runAction: GenericActionCtx<any>[\"runAction\"]) => ({\n runAction: <Action extends Ref.AnyAction>(\n action: Action,\n ...args: Ref.OptionalArgs<Action>\n ): Effect.Effect<\n Ref.Returns<Action>,\n Ref.Error<Action> | Schema.SchemaError\n > =>\n run(\n Ref.runWithCodec(\n action,\n (args[0] ?? {}) as Ref.Args<Action>,\n (functionReference, encodedArgs) =>\n runAction(functionReference, encodedArgs),\n ),\n ),\n});\n\nexport const ActionRunner = Context.Service<ReturnType<typeof make>>(\n \"@confect/server/ActionRunner\",\n);\nexport type ActionRunner = typeof ActionRunner.Identifier;\n\nexport const layer = (runAction: GenericActionCtx<any>[\"runAction\"]) =>\n Layer.succeed(ActionRunner, make(runAction));\n"],"mappings":";;;;;;;;;;AAOA,MAAM,MAAM,OAAO,GAAG,wBAAwB,CAAC,EACtC,WAAqD,MAC9D;AAEA,MAAM,QAAQ,eAAmD,EAC/D,YACE,QACA,GAAG,SAKH,IACE,IAAI,aACF,QACC,KAAK,MAAM,CAAC,IACZ,mBAAmB,gBAClB,UAAU,mBAAmB,WAAW,CAC5C,CACF,EACJ;AAEA,MAAa,eAAe,QAAQ,QAClC,8BACF;AAGA,MAAa,SAAS,cACpB,MAAM,QAAQ,cAAc,KAAK,SAAS,CAAC"}
1
+ {"version":3,"file":"ActionRunner.js","names":["ReservedArgument.runWithCodec"],"sources":["../src/ActionRunner.ts"],"sourcesContent":["import * as ReservedArgument from \"./internal/reservedArgument.js\";\nimport type * as Ref from \"@confect/core/Ref\";\nimport { type GenericActionCtx } from \"convex/server\";\nimport * as Effect from \"effect/Effect\";\nimport * as Context from \"effect/Context\";\nimport * as Layer from \"effect/Layer\";\nimport type * as Schema from \"effect/Schema\";\n\nconst run = Effect.fn(\"ActionRunner.runAction\")(\n <A, E>(effect: Effect.Effect<A, E>): Effect.Effect<A, E> => effect,\n);\n\nconst make = (runAction: GenericActionCtx<any>[\"runAction\"]) => ({\n runAction: <Action extends Ref.AnyAction>(\n action: Action,\n ...args: Ref.OptionalArgs<Action>\n ): Effect.Effect<\n Ref.Returns<Action>,\n Ref.Error<Action> | Schema.SchemaError\n > =>\n run(\n ReservedArgument.runWithCodec(\n action,\n (args[0] ?? {}) as Ref.Args<Action>,\n (functionReference, encodedArgs) =>\n runAction(functionReference, encodedArgs),\n ),\n ),\n});\n\nexport const ActionRunner = Context.Service<ReturnType<typeof make>>(\n \"@confect/server/ActionRunner\",\n);\nexport type ActionRunner = typeof ActionRunner.Identifier;\n\nexport const layer = (runAction: GenericActionCtx<any>[\"runAction\"]) =>\n Layer.succeed(ActionRunner, make(runAction));\n"],"mappings":";;;;;;;;;;AAQA,MAAM,MAAM,OAAO,GAAG,wBAAwB,CAAC,EACtC,WAAqD,MAC9D;AAEA,MAAM,QAAQ,eAAmD,EAC/D,YACE,QACA,GAAG,SAKH,IACEA,aACE,QACC,KAAK,MAAM,CAAC,IACZ,mBAAmB,gBAClB,UAAU,mBAAmB,WAAW,CAC5C,CACF,EACJ;AAEA,MAAa,eAAe,QAAQ,QAClC,8BACF;AAGA,MAAa,SAAS,cACpB,MAAM,QAAQ,cAAc,KAAK,SAAS,CAAC"}
@@ -1,8 +1,8 @@
1
1
  import { __exportAll } from "./_virtual/_rolldown/runtime.js";
2
2
  import { AiGatewayDisabled, AiGatewayError, AiGatewayUnavailable, layer as layer$1 } from "./internal/AiGatewayServiceToken.js";
3
3
  import { layer as layer$2, make as make$1 } from "./internal/AiGatewayDecisionClient.js";
4
- import * as Layer from "effect/Layer";
5
4
  import * as Effect from "effect/Effect";
5
+ import * as Layer from "effect/Layer";
6
6
  import * as OpenRouterClient from "@effect/ai-openrouter/OpenRouterClient";
7
7
  //#region src/AiGatewayDecisionClient.ts
8
8
  var AiGatewayDecisionClient_exports = /* @__PURE__ */ __exportAll({
@@ -1,8 +1,8 @@
1
1
  import { __exportAll } from "./_virtual/_rolldown/runtime.js";
2
2
  import { AiGatewayDisabled, AiGatewayError, AiGatewayUnavailable, layer as layer$1 } from "./internal/AiGatewayServiceToken.js";
3
3
  import { layer as layer$2, make as make$1 } from "./internal/AiGatewayLanguageClient.js";
4
- import * as Layer from "effect/Layer";
5
4
  import * as Effect from "effect/Effect";
5
+ import * as Layer from "effect/Layer";
6
6
  import * as OpenAiClient from "@effect/ai-openai-compat/OpenAiClient";
7
7
  //#region src/AiGatewayLanguageClient.ts
8
8
  var AiGatewayLanguageClient_exports = /* @__PURE__ */ __exportAll({
package/dist/Auth.d.ts CHANGED
@@ -1,15 +1,44 @@
1
- import type { Auth as ConvexAuth } from "convex/server";
1
+ import type { Auth as ConvexAuth, MutationAuth as ConvexMutationAuth, SignJwtOptions, UserIdentity } from "convex/server";
2
2
  import * as Context from "effect/Context";
3
3
  import * as Effect from "effect/Effect";
4
4
  import * as Layer from "effect/Layer";
5
5
  import * as Schema from "effect/Schema";
6
6
  import type * as DatabaseSchema from "./DatabaseSchema.js";
7
7
  declare const Auth_base: Context.ServiceClass<Auth, "@confect/server/Auth", {
8
- getUserIdentity: Effect.Effect<import("convex/server").UserIdentity, NoUserIdentityFoundError, never>;
8
+ getUserIdentity: Effect.Effect<UserIdentity, NoUserIdentityFoundError, never>;
9
9
  }>;
10
10
  export declare class Auth extends Auth_base {
11
11
  }
12
+ /**
13
+ * The outcome of Convex's identity verification for the current request.
14
+ */
15
+ export type Identity = {
16
+ readonly _tag: "Absent";
17
+ } | {
18
+ readonly _tag: "Valid";
19
+ readonly identity: UserIdentity;
20
+ } | {
21
+ readonly _tag: "Invalid";
22
+ };
23
+ /**
24
+ * Read HTTP identity without failing for missing or rejected credentials.
25
+ * Convex verifies the credential. Rejected reads expose no token or error
26
+ * detail.
27
+ */
28
+ export declare const getUserIdentity: Effect.Effect<Identity, never, Auth>;
12
29
  export declare const layer: (auth: ConvexAuth) => Layer.Layer<Auth, never, never>;
30
+ declare const MutationAuth_base: Context.ServiceClass<MutationAuth, "@confect/server/Auth/MutationAuth", {
31
+ readonly signJwt: (options: SignJwtOptions) => Effect.Effect<string>;
32
+ }>;
33
+ /**
34
+ * Mutation-only deployment signing, available in applications and components.
35
+ */
36
+ export declare class MutationAuth extends MutationAuth_base {
37
+ }
38
+ /**
39
+ * SDK rejections remain defects, as with the other native auth operations.
40
+ */
41
+ export declare const mutationLayer: (auth: ConvexMutationAuth) => Layer.Layer<MutationAuth, never, never>;
13
42
  export type ForTarget<Target extends DatabaseSchema.Target> = Target["kind"] extends "component" ? never : Auth;
14
43
  export declare const layerForTarget: <Target extends DatabaseSchema.Target>(target: Target, auth: ConvexAuth) => Layer.Layer<ForTarget<Target>>;
15
44
  declare const NoUserIdentityFoundError_base: Schema.Class<NoUserIdentityFoundError, Schema.TaggedStruct<"NoUserIdentityFoundError", {}>, import("effect/Cause").YieldableError>;
@@ -1 +1 @@
1
- {"version":3,"file":"Auth.d.ts","sourceRoot":"","sources":["../src/Auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,IAAI,UAAU,EAAE,MAAM,eAAe,CAAC;AACxD,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAE1C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAGtC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,cAAc,MAAM,qBAAqB,CAAC;;;;AAgB3D,qBAAa,IAAK,SAAQ,SAEzB;CAAG;AAEJ,eAAO,MAAM,KAAK,SAAU,UAAU,oCAAoC,CAAC;AAE3E,MAAM,MAAM,SAAS,CAAC,MAAM,SAAS,cAAc,CAAC,MAAM,IACxD,MAAM,CAAC,MAAM,CAAC,SAAS,WAAW,GAAG,KAAK,GAAG,IAAI,CAAC;AAEpD,eAAO,MAAM,cAAc,GAAI,MAAM,SAAS,cAAc,CAAC,MAAM,UACzD,MAAM,QACR,UAAU,KACf,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAKK,CAAC;;AAEtC,qBAAa,wBAAyB,SAAQ,6BAG7C;IACC,IAAa,OAAO,IAAI,MAAM,CAE7B;CACF"}
1
+ {"version":3,"file":"Auth.d.ts","sourceRoot":"","sources":["../src/Auth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,IAAI,IAAI,UAAU,EAClB,YAAY,IAAI,kBAAkB,EAClC,cAAc,EACd,YAAY,EACb,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,OAAO,MAAM,gBAAgB,CAAC;AAE1C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AAGtC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AACxC,OAAO,KAAK,KAAK,cAAc,MAAM,qBAAqB,CAAC;;;;AAgB3D,qBAAa,IAAK,SAAQ,SAEzB;CAAG;AAEJ;;GAEG;AACH,MAAM,MAAM,QAAQ,GAChB;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,GAC3B;IAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAA;CAAE,GAC3D;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;CAAE,CAAC;AAEjC;;;;GAIG;AACH,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAUhE,CAAC;AAEF,eAAO,MAAM,KAAK,SAAU,UAAU,oCAAoC,CAAC;;sBAQrD,CAAC,OAAO,EAAE,cAAc,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;;AANxE;;GAEG;AACH,qBAAa,YAAa,SAAQ,iBAKM;CAAG;AAE3C;;GAEG;AACH,eAAO,MAAM,aAAa,SAAU,kBAAkB,4CAGlD,CAAC;AAEL,MAAM,MAAM,SAAS,CAAC,MAAM,SAAS,cAAc,CAAC,MAAM,IACxD,MAAM,CAAC,MAAM,CAAC,SAAS,WAAW,GAAG,KAAK,GAAG,IAAI,CAAC;AAEpD,eAAO,MAAM,cAAc,GAAI,MAAM,SAAS,cAAc,CAAC,MAAM,UACzD,MAAM,QACR,UAAU,KACf,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAKK,CAAC;;AAEtC,qBAAa,wBAAyB,SAAQ,6BAG7C;IACC,IAAa,OAAO,IAAI,MAAM,CAE7B;CACF"}
package/dist/Auth.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { __exportAll } from "./_virtual/_rolldown/runtime.js";
2
2
  import * as Context from "effect/Context";
3
- import * as Layer from "effect/Layer";
4
3
  import * as Effect from "effect/Effect";
4
+ import * as Layer from "effect/Layer";
5
5
  import * as Schema from "effect/Schema";
6
6
  import { flow } from "effect/Function";
7
7
  import * as Match from "effect/Match";
@@ -9,16 +9,36 @@ import * as Option from "effect/Option";
9
9
  //#region src/Auth.ts
10
10
  var Auth_exports = /* @__PURE__ */ __exportAll({
11
11
  Auth: () => Auth,
12
+ MutationAuth: () => MutationAuth,
12
13
  NoUserIdentityFoundError: () => NoUserIdentityFoundError,
14
+ getUserIdentity: () => getUserIdentity,
13
15
  layer: () => layer,
14
- layerForTarget: () => layerForTarget
16
+ layerForTarget: () => layerForTarget,
17
+ mutationLayer: () => mutationLayer
15
18
  });
16
19
  const make = (auth) => ({ getUserIdentity: Effect.promise(() => auth.getUserIdentity()).pipe(Effect.andThen(flow(Option.fromNullishOr, Option.match({
17
20
  onNone: () => Effect.fail(new NoUserIdentityFoundError()),
18
21
  onSome: Effect.succeed
19
22
  })))) });
20
23
  var Auth = class extends Context.Service()("@confect/server/Auth") {};
24
+ /**
25
+ * Read HTTP identity without failing for missing or rejected credentials.
26
+ * Convex verifies the credential. Rejected reads expose no token or error
27
+ * detail.
28
+ */
29
+ const getUserIdentity = Auth.pipe(Effect.flatMap((auth) => auth.getUserIdentity.pipe(Effect.map((identity) => ({
30
+ _tag: "Valid",
31
+ identity
32
+ })), Effect.catchTag("NoUserIdentityFoundError", () => Effect.succeed({ _tag: "Absent" })), Effect.catchDefect(() => Effect.succeed({ _tag: "Invalid" })))));
21
33
  const layer = (auth) => Layer.succeed(Auth, make(auth));
34
+ /**
35
+ * Mutation-only deployment signing, available in applications and components.
36
+ */
37
+ var MutationAuth = class extends Context.Service()("@confect/server/Auth/MutationAuth") {};
38
+ /**
39
+ * SDK rejections remain defects, as with the other native auth operations.
40
+ */
41
+ const mutationLayer = (auth) => Layer.succeed(MutationAuth, { signJwt: (options) => Effect.promise(() => auth.signJwt(options)) });
22
42
  const layerForTarget = (target, auth) => Match.value(target.kind).pipe(Match.when("app", () => layer(auth)), Match.when("component", () => Layer.empty), Match.exhaustive);
23
43
  var NoUserIdentityFoundError = class extends Schema.TaggedError()("NoUserIdentityFoundError", {}) {
24
44
  get message() {
@@ -26,6 +46,6 @@ var NoUserIdentityFoundError = class extends Schema.TaggedError()("NoUserIdentit
26
46
  }
27
47
  };
28
48
  //#endregion
29
- export { Auth, Auth_exports, NoUserIdentityFoundError, layer, layerForTarget };
49
+ export { Auth, Auth_exports, MutationAuth, NoUserIdentityFoundError, getUserIdentity, layer, layerForTarget, mutationLayer };
30
50
 
31
51
  //# sourceMappingURL=Auth.js.map
package/dist/Auth.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Auth.js","names":[],"sources":["../src/Auth.ts"],"sourcesContent":["import type { Auth as ConvexAuth } from \"convex/server\";\nimport * as Context from \"effect/Context\";\nimport { flow } from \"effect/Function\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\nimport * as Match from \"effect/Match\";\nimport * as Option from \"effect/Option\";\nimport * as Schema from \"effect/Schema\";\nimport type * as DatabaseSchema from \"./DatabaseSchema.js\";\n\nconst make = (auth: ConvexAuth) => ({\n getUserIdentity: Effect.promise(() => auth.getUserIdentity()).pipe(\n Effect.andThen(\n flow(\n Option.fromNullishOr,\n Option.match({\n onNone: () => Effect.fail(new NoUserIdentityFoundError()),\n onSome: Effect.succeed,\n }),\n ),\n ),\n ),\n});\n\nexport class Auth extends Context.Service<Auth, ReturnType<typeof make>>()(\n \"@confect/server/Auth\",\n) {}\n\nexport const layer = (auth: ConvexAuth) => Layer.succeed(Auth, make(auth));\n\nexport type ForTarget<Target extends DatabaseSchema.Target> =\n Target[\"kind\"] extends \"component\" ? never : Auth;\n\nexport const layerForTarget = <Target extends DatabaseSchema.Target>(\n target: Target,\n auth: ConvexAuth,\n): Layer.Layer<ForTarget<Target>> =>\n Match.value(target.kind).pipe(\n Match.when(\"app\", () => layer(auth)),\n Match.when(\"component\", () => Layer.empty),\n Match.exhaustive,\n ) as Layer.Layer<ForTarget<Target>>;\n\nexport class NoUserIdentityFoundError extends Schema.TaggedError<NoUserIdentityFoundError>()(\n \"NoUserIdentityFoundError\",\n {},\n) {\n override get message(): string {\n return \"No user identity found\";\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;AAUA,MAAM,QAAQ,UAAsB,EAClC,iBAAiB,OAAO,cAAc,KAAK,gBAAgB,CAAC,CAAC,CAAC,KAC5D,OAAO,QACL,KACE,OAAO,eACP,OAAO,MAAM;CACX,cAAc,OAAO,KAAK,IAAI,yBAAyB,CAAC;CACxD,QAAQ,OAAO;AACjB,CAAC,CACH,CACF,CACF,EACF;AAEA,IAAa,OAAb,cAA0B,QAAQ,QAAuC,CAAC,CACxE,sBACF,CAAC,CAAC,CAAC;AAEH,MAAa,SAAS,SAAqB,MAAM,QAAQ,MAAM,KAAK,IAAI,CAAC;AAKzE,MAAa,kBACX,QACA,SAEA,MAAM,MAAM,OAAO,IAAI,CAAC,CAAC,KACvB,MAAM,KAAK,aAAa,MAAM,IAAI,CAAC,GACnC,MAAM,KAAK,mBAAmB,MAAM,KAAK,GACzC,MAAM,UACR;AAEF,IAAa,2BAAb,cAA8C,OAAO,YAAsC,CAAC,CAC1F,4BACA,CAAC,CACH,CAAC,CAAC;CACA,IAAa,UAAkB;EAC7B,OAAO;CACT;AACF"}
1
+ {"version":3,"file":"Auth.js","names":[],"sources":["../src/Auth.ts"],"sourcesContent":["import type {\n Auth as ConvexAuth,\n MutationAuth as ConvexMutationAuth,\n SignJwtOptions,\n UserIdentity,\n} from \"convex/server\";\nimport * as Context from \"effect/Context\";\nimport { flow } from \"effect/Function\";\nimport * as Effect from \"effect/Effect\";\nimport * as Layer from \"effect/Layer\";\nimport * as Match from \"effect/Match\";\nimport * as Option from \"effect/Option\";\nimport * as Schema from \"effect/Schema\";\nimport type * as DatabaseSchema from \"./DatabaseSchema.js\";\n\nconst make = (auth: ConvexAuth) => ({\n getUserIdentity: Effect.promise(() => auth.getUserIdentity()).pipe(\n Effect.andThen(\n flow(\n Option.fromNullishOr,\n Option.match({\n onNone: () => Effect.fail(new NoUserIdentityFoundError()),\n onSome: Effect.succeed,\n }),\n ),\n ),\n ),\n});\n\nexport class Auth extends Context.Service<Auth, ReturnType<typeof make>>()(\n \"@confect/server/Auth\",\n) {}\n\n/**\n * The outcome of Convex's identity verification for the current request.\n */\nexport type Identity =\n | { readonly _tag: \"Absent\" }\n | { readonly _tag: \"Valid\"; readonly identity: UserIdentity }\n | { readonly _tag: \"Invalid\" };\n\n/**\n * Read HTTP identity without failing for missing or rejected credentials.\n * Convex verifies the credential. Rejected reads expose no token or error\n * detail.\n */\nexport const getUserIdentity: Effect.Effect<Identity, never, Auth> = Auth.pipe(\n Effect.flatMap((auth) =>\n auth.getUserIdentity.pipe(\n Effect.map((identity): Identity => ({ _tag: \"Valid\", identity })),\n Effect.catchTag(\"NoUserIdentityFoundError\", () =>\n Effect.succeed<Identity>({ _tag: \"Absent\" }),\n ),\n Effect.catchDefect(() => Effect.succeed<Identity>({ _tag: \"Invalid\" })),\n ),\n ),\n);\n\nexport const layer = (auth: ConvexAuth) => Layer.succeed(Auth, make(auth));\n\n/**\n * Mutation-only deployment signing, available in applications and components.\n */\nexport class MutationAuth extends Context.Service<\n MutationAuth,\n {\n readonly signJwt: (options: SignJwtOptions) => Effect.Effect<string>;\n }\n>()(\"@confect/server/Auth/MutationAuth\") {}\n\n/**\n * SDK rejections remain defects, as with the other native auth operations.\n */\nexport const mutationLayer = (auth: ConvexMutationAuth) =>\n Layer.succeed(MutationAuth, {\n signJwt: (options) => Effect.promise(() => auth.signJwt(options)),\n });\n\nexport type ForTarget<Target extends DatabaseSchema.Target> =\n Target[\"kind\"] extends \"component\" ? never : Auth;\n\nexport const layerForTarget = <Target extends DatabaseSchema.Target>(\n target: Target,\n auth: ConvexAuth,\n): Layer.Layer<ForTarget<Target>> =>\n Match.value(target.kind).pipe(\n Match.when(\"app\", () => layer(auth)),\n Match.when(\"component\", () => Layer.empty),\n Match.exhaustive,\n ) as Layer.Layer<ForTarget<Target>>;\n\nexport class NoUserIdentityFoundError extends Schema.TaggedError<NoUserIdentityFoundError>()(\n \"NoUserIdentityFoundError\",\n {},\n) {\n override get message(): string {\n return \"No user identity found\";\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAeA,MAAM,QAAQ,UAAsB,EAClC,iBAAiB,OAAO,cAAc,KAAK,gBAAgB,CAAC,CAAC,CAAC,KAC5D,OAAO,QACL,KACE,OAAO,eACP,OAAO,MAAM;CACX,cAAc,OAAO,KAAK,IAAI,yBAAyB,CAAC;CACxD,QAAQ,OAAO;AACjB,CAAC,CACH,CACF,CACF,EACF;AAEA,IAAa,OAAb,cAA0B,QAAQ,QAAuC,CAAC,CACxE,sBACF,CAAC,CAAC,CAAC;;;;;;AAeH,MAAa,kBAAwD,KAAK,KACxE,OAAO,SAAS,SACd,KAAK,gBAAgB,KACnB,OAAO,KAAK,cAAwB;CAAE,MAAM;CAAS;AAAS,EAAE,GAChE,OAAO,SAAS,kCACd,OAAO,QAAkB,EAAE,MAAM,SAAS,CAAC,CAC7C,GACA,OAAO,kBAAkB,OAAO,QAAkB,EAAE,MAAM,UAAU,CAAC,CAAC,CACxE,CACF,CACF;AAEA,MAAa,SAAS,SAAqB,MAAM,QAAQ,MAAM,KAAK,IAAI,CAAC;;;;AAKzE,IAAa,eAAb,cAAkC,QAAQ,QAKxC,CAAC,CAAC,mCAAmC,CAAC,CAAC,CAAC;;;;AAK1C,MAAa,iBAAiB,SAC5B,MAAM,QAAQ,cAAc,EAC1B,UAAU,YAAY,OAAO,cAAc,KAAK,QAAQ,OAAO,CAAC,EAClE,CAAC;AAKH,MAAa,kBACX,QACA,SAEA,MAAM,MAAM,OAAO,IAAI,CAAC,CAAC,KACvB,MAAM,KAAK,aAAa,MAAM,IAAI,CAAC,GACnC,MAAM,KAAK,mBAAmB,MAAM,KAAK,GACzC,MAAM,UACR;AAEF,IAAa,2BAAb,cAA8C,OAAO,YAAsC,CAAC,CAC1F,4BACA,CAAC,CACH,CAAC,CAAC;CACA,IAAa,UAAkB;EAC7B,OAAO;CACT;AACF"}
@@ -1,5 +1,5 @@
1
1
  import * as Callback from "@confect/core/Callback";
2
- import * as Ref from "@confect/core/Ref";
2
+ import type * as Ref from "@confect/core/Ref";
3
3
  import * as Effect from "effect/Effect";
4
4
  import * as Schema from "effect/Schema";
5
5
  declare const CallbackContractMismatch_base: Schema.Class<CallbackContractMismatch, Schema.TaggedStruct<"CallbackContractMismatch", {
@@ -1 +1 @@
1
- {"version":3,"file":"Callback.d.ts","sourceRoot":"","sources":["../src/Callback.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,wBAAwB,CAAC;AAEnD,OAAO,KAAK,GAAG,MAAM,mBAAmB,CAAC;AAQzC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAOxC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;;;;;;;AAGxC;;;;GAIG;AACH,qBAAa,wBAAyB,SAAQ,6BAQ7C;IACC,IAAa,OAAO,IAAI,MAAM,CAE7B;CACF;AAyPD;;;;;;;;;GASG;AACH,eAAO,MAAM,MAAM,GACjB,SAAS,SAAS,QAAQ,CAAC,GAAG,EAC9B,IAAI,SAAS,GAAG,CAAC,GAAG,iJAcpB,CAAC"}
1
+ {"version":3,"file":"Callback.d.ts","sourceRoot":"","sources":["../src/Callback.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,wBAAwB,CAAC;AAEnD,OAAO,KAAK,KAAK,GAAG,MAAM,mBAAmB,CAAC;AAS9C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAOxC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;;;;;;;AAGxC;;;;GAIG;AACH,qBAAa,wBAAyB,SAAQ,6BAQ7C;IACC,IAAa,OAAO,IAAI,MAAM,CAE7B;CACF;AAyPD;;;;;;;;;GASG;AACH,eAAO,MAAM,MAAM,GACjB,SAAS,SAAS,QAAQ,CAAC,GAAG,EAC9B,IAAI,SAAS,GAAG,CAAC,GAAG,iJAcpB,CAAC"}
package/dist/Callback.js CHANGED
@@ -1,18 +1,18 @@
1
1
  import { __exportAll } from "./_virtual/_rolldown/runtime.js";
2
- import * as Ref from "@confect/core/Ref";
2
+ import { convexToJson, v } from "convex/values";
3
3
  import * as Effect from "effect/Effect";
4
+ import * as MiddlewareSpec from "@confect/core/MiddlewareSpec";
5
+ import * as Predicate from "effect/Predicate";
6
+ import * as Array from "effect/Array";
7
+ import { getFunctionReference } from "@confect/core/RefInternal";
4
8
  import { createFunctionHandle } from "convex/server";
5
9
  import * as Schema from "effect/Schema";
6
10
  import { pipe } from "effect/Function";
7
11
  import * as Option from "effect/Option";
8
12
  import * as Callback from "@confect/core/Callback";
9
- import * as MiddlewareSpec from "@confect/core/MiddlewareSpec";
10
13
  import { UnsupportedPropertySignatureKeyTypeError, compileAst } from "@confect/core/SchemaToValidator";
11
- import { convexToJson, v } from "convex/values";
12
- import * as Array from "effect/Array";
13
14
  import * as Number from "effect/Number";
14
15
  import * as Order from "effect/Order";
15
- import * as Predicate from "effect/Predicate";
16
16
  import * as Result from "effect/Result";
17
17
  import * as SchemaAST from "effect/SchemaAST";
18
18
  //#region src/Callback.ts
@@ -173,7 +173,7 @@ const verify = (contract, ref) => {
173
173
  */
174
174
  const create = Effect.fn("Callback.create")(function* (contract, ref) {
175
175
  if (ref._tag === "Confect") yield* Effect.fromResult(verify(contract, ref));
176
- const text = yield* Effect.promise(() => createFunctionHandle(Ref.getFunctionReference(ref)));
176
+ const text = yield* Effect.promise(() => createFunctionHandle(getFunctionReference(ref)));
177
177
  return yield* Schema.decodeEffect(Callback.handle(contract))(text).pipe(Effect.orDie);
178
178
  });
179
179
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"Callback.js","names":[],"sources":["../src/Callback.ts"],"sourcesContent":["import * as Callback from \"@confect/core/Callback\";\nimport * as MiddlewareSpec from \"@confect/core/MiddlewareSpec\";\nimport * as Ref from \"@confect/core/Ref\";\nimport {\n compileAst,\n UnsupportedPropertySignatureKeyTypeError,\n} from \"@confect/core/SchemaToValidator\";\nimport { createFunctionHandle } from \"convex/server\";\nimport { convexToJson, v, type GenericValidator } from \"convex/values\";\nimport * as Array from \"effect/Array\";\nimport * as Effect from \"effect/Effect\";\nimport { pipe } from \"effect/Function\";\nimport * as Number from \"effect/Number\";\nimport * as Option from \"effect/Option\";\nimport * as Order from \"effect/Order\";\nimport * as Predicate from \"effect/Predicate\";\nimport * as Result from \"effect/Result\";\nimport * as Schema from \"effect/Schema\";\nimport * as SchemaAST from \"effect/SchemaAST\";\n\n/**\n * The host function does not satisfy the contract on one side. `expected` and\n * `actual` describe the contract's and the host's validators, with union\n * members in a fixed order, or the reason a schema is unsupported.\n */\nexport class CallbackContractMismatch extends Schema.TaggedError<CallbackContractMismatch>()(\n \"CallbackContractMismatch\",\n {\n contract: Schema.String,\n side: Schema.Literals([\"args\", \"returns\", \"error\"]),\n expected: Schema.Json,\n actual: Schema.Json,\n },\n) {\n override get message(): string {\n return `The host function does not satisfy callback contract \"${this.contract}\": its ${this.side === \"error\" ? \"errors\" : this.side} compile to ${JSON.stringify(this.actual)}, the contract's to ${JSON.stringify(this.expected)}.`;\n }\n}\n\nconst alternatives = (\n validator: GenericValidator,\n): ReadonlyArray<GenericValidator> =>\n validator.kind === \"union\"\n ? validator.members.flatMap(alternatives)\n : [validator];\n\nconst literalKinds: Record<string, string> = {\n string: \"string\",\n number: \"float64\",\n bigint: \"int64\",\n boolean: \"boolean\",\n};\n\n/**\n * The alternatives `validators` accept, without those another alternative\n * already covers: everything under `v.any()`, and a literal under its base\n * kind. `true` and `false` together are `v.boolean()`.\n */\nconst alternativesOf = (\n validators: ReadonlyArray<GenericValidator>,\n): ReadonlyArray<GenericValidator> => {\n const flat = validators.flatMap(alternatives);\n if (flat.some(({ kind }) => kind === \"any\")) {\n return [v.any()];\n }\n const booleans = new Set(\n flat.flatMap((validator) =>\n validator.kind === \"literal\" && typeof validator.value === \"boolean\"\n ? [validator.value]\n : [],\n ),\n );\n const widened =\n booleans.has(true) && booleans.has(false) ? [...flat, v.boolean()] : flat;\n const kinds = new Set<string>(widened.map(({ kind }) => kind));\n return widened.filter(\n (validator) =>\n validator.kind !== \"literal\" ||\n !kinds.has(literalKinds[typeof validator.value] ?? \"\"),\n );\n};\n\nconst keyed = (\n described: ReadonlyArray<Schema.Json>,\n): ReadonlyArray<readonly [string, Schema.Json]> =>\n pipe(\n described,\n Array.map((json) => [JSON.stringify(json), json] as const),\n Array.dedupeWith(([a], [b]) => a === b),\n Array.sortWith(([key]) => key, Order.String),\n );\n\n/**\n * The distinct alternatives `validators` accept, keyed by their description and\n * sorted by it, so union order and repetition do not count as differences.\n */\nconst membersOf = (validators: ReadonlyArray<GenericValidator>) =>\n keyed(alternativesOf(validators).map(describe));\n\nconst unionOf = (\n members: ReadonlyArray<readonly [string, Schema.Json]>,\n): Schema.Json => {\n const [only, ...rest] = members;\n return only !== undefined && rest.length === 0\n ? only[1]\n : { kind: \"union\", members: members.map(([, described]) => described) };\n};\n\nconst describe = (validator: GenericValidator): Schema.Json => {\n switch (validator.kind) {\n case \"id\":\n return { kind: \"id\", tableName: validator.tableName };\n case \"literal\":\n return { kind: \"literal\", value: convexToJson(validator.value) };\n case \"array\":\n return { kind: \"array\", element: describe(validator.element) };\n case \"record\":\n return {\n kind: \"record\",\n key: describe(validator.key),\n value: describe(validator.value),\n };\n case \"object\":\n return {\n kind: \"object\",\n fields: Object.fromEntries(\n pipe(\n Object.entries(validator.fields),\n Array.sortWith(([name]) => name, Order.String),\n Array.map(([name, field]) => [\n name,\n field.isOptional === \"optional\"\n ? { kind: \"optional\", value: describe(field) }\n : describe(field),\n ]),\n ),\n ),\n };\n case \"union\":\n return unionOf(membersOf([validator]));\n default:\n return { kind: validator.kind };\n }\n};\n\nconst ownError = (provenance: {\n readonly error?: Schema.Codec<any, any>;\n}): ReadonlyArray<Schema.Codec<any, any>> =>\n \"error\" in provenance && provenance.error !== undefined\n ? [provenance.error]\n : [];\n\nconst errorAlternatives = (schema: Schema.Top): ReadonlyArray<Schema.Top> =>\n SchemaAST.isUnion(schema.ast) &&\n Predicate.hasProperty(schema, \"members\") &&\n Array.isArray(schema.members)\n ? schema.members.flatMap((member) =>\n Schema.isSchema(member) ? errorAlternatives(member) : [],\n )\n : [schema];\n\n/**\n * Compile args field by field, as registration does, so a recursive field does\n * not widen the entire args object to `v.any()`.\n */\nconst compileArgs = (ast: SchemaAST.Objects): ReturnType<typeof compileAst> =>\n Effect.forEach(ast.propertySignatures, ({ name, type }) => {\n if (typeof name !== \"string\") {\n return Effect.fail(\n new UnsupportedPropertySignatureKeyTypeError({ propertyKey: name }),\n );\n }\n return Option.match(Number.parse(name), {\n onSome: (propertyKey) =>\n Effect.fail(\n new UnsupportedPropertySignatureKeyTypeError({ propertyKey }),\n ),\n onNone: () => {\n const optional = SchemaAST.isOptional(type);\n return compileAst(type, optional).pipe(\n Effect.map(\n (validator) =>\n [name, optional ? v.optional(validator) : validator] as const,\n ),\n );\n },\n });\n }).pipe(Effect.map((fields) => v.object(Object.fromEntries(fields))));\n\nconst compileSchema = (schema: Schema.Top, side?: \"args\" | \"returns\") => {\n const ast = Schema.toEncoded(schema).ast;\n return Effect.runSync(\n Effect.result(\n side === \"args\" && SchemaAST.isObjects(ast)\n ? compileArgs(ast)\n : compileAst(ast),\n ),\n );\n};\n\nconst describeCompiled = (\n compiled: ReadonlyArray<ReturnType<typeof compileSchema>>,\n): Schema.Json =>\n unionOf(\n keyed([\n ...membersOf(Array.getSuccesses(compiled)).map(([, json]) => json),\n ...Array.getFailures(compiled).map((error) => ({\n kind: \"unsupported\",\n reason: error.message,\n })),\n ]),\n );\n\n/**\n * Compare the validators Convex would compile for the contract and for the host\n * function, both in the application's ID scope, so a component's IDs are\n * strings on both sides and the host's own IDs stay `v.id`. A host that is\n * itself a component registers its own IDs as `v.id` in its scope, which this\n * check cannot see and compares as strings. Args and returns must be equal.\n * Every error the host may fail with, its middleware's included, must be one\n * the contract declares: the same schema, or one compiling to the same\n * validator. The host may declare fewer errors.\n */\nconst verify = (\n contract: Callback.Any,\n ref: Ref.AnyConfect,\n): Result.Result<void, CallbackContractMismatch> => {\n const mismatch = (\n side: CallbackContractMismatch[\"side\"],\n expected: Schema.Json,\n actual: Schema.Json,\n ) =>\n Result.fail(\n new CallbackContractMismatch({\n contract: contract.id,\n side,\n expected,\n actual,\n }),\n );\n const provenance = contract.functionProvenance;\n\n for (const side of [\"args\", \"returns\"] as const) {\n const expected = compileSchema(provenance[side], side);\n const actual = compileSchema(ref[side], side);\n const expectedDescription = describeCompiled([expected]);\n const actualDescription = describeCompiled([actual]);\n if (\n Result.isFailure(expected) ||\n Result.isFailure(actual) ||\n JSON.stringify(expectedDescription) !== JSON.stringify(actualDescription)\n ) {\n return mismatch(side, expectedDescription, actualDescription);\n }\n }\n\n const declared = ownError(provenance).flatMap(errorAlternatives);\n const undeclared = [\n ...ownError(ref),\n ...MiddlewareSpec.errorSchemas(ref.middlewareSpecs),\n ]\n .flatMap(errorAlternatives)\n .filter((schema) => !declared.includes(schema));\n if (undeclared.length > 0) {\n const expectedErrors = declared.map((schema) => compileSchema(schema));\n const actualErrors = undeclared.map((schema) => compileSchema(schema));\n const keys = new Set(\n membersOf(Array.getSuccesses(expectedErrors)).map(([key]) => key),\n );\n if (\n Array.getFailures(actualErrors).length > 0 ||\n !membersOf(Array.getSuccesses(actualErrors)).every(([key]) =>\n keys.has(key),\n )\n ) {\n return mismatch(\n \"error\",\n describeCompiled(expectedErrors),\n describeCompiled(actualErrors),\n );\n }\n }\n\n return Result.void;\n};\n\n/**\n * Create a handle a component can store and run to call `ref` under `contract`.\n * A ref whose function type, args or returns visibly differ from the contract\n * on the wire, or whose errors are undeclared, is a type error. The host may\n * declare fewer errors. Before asking Convex for the handle, a Confect ref's\n * compiled validators are checked against the contract's. A mismatch or an\n * unsupported schema fails with `CallbackContractMismatch`. A plain Convex ref\n * has no codecs to compile, so only the type check applies to it. A ref to a\n * function that is not deployed is a defect.\n */\nexport const create = Effect.fn(\"Callback.create\")(function* <\n Contract_ extends Callback.Any,\n Ref_ extends Ref.Any,\n>(\n contract: Contract_,\n ref: Ref_ & Callback.Check<Contract_, Ref_>,\n): Effect.fn.Return<Callback.Handle<Contract_>, CallbackContractMismatch> {\n if (ref._tag === \"Confect\") {\n yield* Effect.fromResult(verify(contract, ref));\n }\n const text = yield* Effect.promise(() =>\n createFunctionHandle(Ref.getFunctionReference(ref)),\n );\n return yield* Schema.decodeEffect(Callback.handle(contract))(text).pipe(\n Effect.orDie,\n );\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"Callback.js","names":[],"sources":["../src/Callback.ts"],"sourcesContent":["import * as Callback from \"@confect/core/Callback\";\nimport * as MiddlewareSpec from \"@confect/core/MiddlewareSpec\";\nimport type * as Ref from \"@confect/core/Ref\";\nimport { getFunctionReference } from \"@confect/core/RefInternal\";\nimport {\n compileAst,\n UnsupportedPropertySignatureKeyTypeError,\n} from \"@confect/core/SchemaToValidator\";\nimport { createFunctionHandle } from \"convex/server\";\nimport { convexToJson, v, type GenericValidator } from \"convex/values\";\nimport * as Array from \"effect/Array\";\nimport * as Effect from \"effect/Effect\";\nimport { pipe } from \"effect/Function\";\nimport * as Number from \"effect/Number\";\nimport * as Option from \"effect/Option\";\nimport * as Order from \"effect/Order\";\nimport * as Predicate from \"effect/Predicate\";\nimport * as Result from \"effect/Result\";\nimport * as Schema from \"effect/Schema\";\nimport * as SchemaAST from \"effect/SchemaAST\";\n\n/**\n * The host function does not satisfy the contract on one side. `expected` and\n * `actual` describe the contract's and the host's validators, with union\n * members in a fixed order, or the reason a schema is unsupported.\n */\nexport class CallbackContractMismatch extends Schema.TaggedError<CallbackContractMismatch>()(\n \"CallbackContractMismatch\",\n {\n contract: Schema.String,\n side: Schema.Literals([\"args\", \"returns\", \"error\"]),\n expected: Schema.Json,\n actual: Schema.Json,\n },\n) {\n override get message(): string {\n return `The host function does not satisfy callback contract \"${this.contract}\": its ${this.side === \"error\" ? \"errors\" : this.side} compile to ${JSON.stringify(this.actual)}, the contract's to ${JSON.stringify(this.expected)}.`;\n }\n}\n\nconst alternatives = (\n validator: GenericValidator,\n): ReadonlyArray<GenericValidator> =>\n validator.kind === \"union\"\n ? validator.members.flatMap(alternatives)\n : [validator];\n\nconst literalKinds: Record<string, string> = {\n string: \"string\",\n number: \"float64\",\n bigint: \"int64\",\n boolean: \"boolean\",\n};\n\n/**\n * The alternatives `validators` accept, without those another alternative\n * already covers: everything under `v.any()`, and a literal under its base\n * kind. `true` and `false` together are `v.boolean()`.\n */\nconst alternativesOf = (\n validators: ReadonlyArray<GenericValidator>,\n): ReadonlyArray<GenericValidator> => {\n const flat = validators.flatMap(alternatives);\n if (flat.some(({ kind }) => kind === \"any\")) {\n return [v.any()];\n }\n const booleans = new Set(\n flat.flatMap((validator) =>\n validator.kind === \"literal\" && typeof validator.value === \"boolean\"\n ? [validator.value]\n : [],\n ),\n );\n const widened =\n booleans.has(true) && booleans.has(false) ? [...flat, v.boolean()] : flat;\n const kinds = new Set<string>(widened.map(({ kind }) => kind));\n return widened.filter(\n (validator) =>\n validator.kind !== \"literal\" ||\n !kinds.has(literalKinds[typeof validator.value] ?? \"\"),\n );\n};\n\nconst keyed = (\n described: ReadonlyArray<Schema.Json>,\n): ReadonlyArray<readonly [string, Schema.Json]> =>\n pipe(\n described,\n Array.map((json) => [JSON.stringify(json), json] as const),\n Array.dedupeWith(([a], [b]) => a === b),\n Array.sortWith(([key]) => key, Order.String),\n );\n\n/**\n * The distinct alternatives `validators` accept, keyed by their description and\n * sorted by it, so union order and repetition do not count as differences.\n */\nconst membersOf = (validators: ReadonlyArray<GenericValidator>) =>\n keyed(alternativesOf(validators).map(describe));\n\nconst unionOf = (\n members: ReadonlyArray<readonly [string, Schema.Json]>,\n): Schema.Json => {\n const [only, ...rest] = members;\n return only !== undefined && rest.length === 0\n ? only[1]\n : { kind: \"union\", members: members.map(([, described]) => described) };\n};\n\nconst describe = (validator: GenericValidator): Schema.Json => {\n switch (validator.kind) {\n case \"id\":\n return { kind: \"id\", tableName: validator.tableName };\n case \"literal\":\n return { kind: \"literal\", value: convexToJson(validator.value) };\n case \"array\":\n return { kind: \"array\", element: describe(validator.element) };\n case \"record\":\n return {\n kind: \"record\",\n key: describe(validator.key),\n value: describe(validator.value),\n };\n case \"object\":\n return {\n kind: \"object\",\n fields: Object.fromEntries(\n pipe(\n Object.entries(validator.fields),\n Array.sortWith(([name]) => name, Order.String),\n Array.map(([name, field]) => [\n name,\n field.isOptional === \"optional\"\n ? { kind: \"optional\", value: describe(field) }\n : describe(field),\n ]),\n ),\n ),\n };\n case \"union\":\n return unionOf(membersOf([validator]));\n default:\n return { kind: validator.kind };\n }\n};\n\nconst ownError = (provenance: {\n readonly error?: Schema.Codec<any, any>;\n}): ReadonlyArray<Schema.Codec<any, any>> =>\n \"error\" in provenance && provenance.error !== undefined\n ? [provenance.error]\n : [];\n\nconst errorAlternatives = (schema: Schema.Top): ReadonlyArray<Schema.Top> =>\n SchemaAST.isUnion(schema.ast) &&\n Predicate.hasProperty(schema, \"members\") &&\n Array.isArray(schema.members)\n ? schema.members.flatMap((member) =>\n Schema.isSchema(member) ? errorAlternatives(member) : [],\n )\n : [schema];\n\n/**\n * Compile args field by field, as registration does, so a recursive field does\n * not widen the entire args object to `v.any()`.\n */\nconst compileArgs = (ast: SchemaAST.Objects): ReturnType<typeof compileAst> =>\n Effect.forEach(ast.propertySignatures, ({ name, type }) => {\n if (typeof name !== \"string\") {\n return Effect.fail(\n new UnsupportedPropertySignatureKeyTypeError({ propertyKey: name }),\n );\n }\n return Option.match(Number.parse(name), {\n onSome: (propertyKey) =>\n Effect.fail(\n new UnsupportedPropertySignatureKeyTypeError({ propertyKey }),\n ),\n onNone: () => {\n const optional = SchemaAST.isOptional(type);\n return compileAst(type, optional).pipe(\n Effect.map(\n (validator) =>\n [name, optional ? v.optional(validator) : validator] as const,\n ),\n );\n },\n });\n }).pipe(Effect.map((fields) => v.object(Object.fromEntries(fields))));\n\nconst compileSchema = (schema: Schema.Top, side?: \"args\" | \"returns\") => {\n const ast = Schema.toEncoded(schema).ast;\n return Effect.runSync(\n Effect.result(\n side === \"args\" && SchemaAST.isObjects(ast)\n ? compileArgs(ast)\n : compileAst(ast),\n ),\n );\n};\n\nconst describeCompiled = (\n compiled: ReadonlyArray<ReturnType<typeof compileSchema>>,\n): Schema.Json =>\n unionOf(\n keyed([\n ...membersOf(Array.getSuccesses(compiled)).map(([, json]) => json),\n ...Array.getFailures(compiled).map((error) => ({\n kind: \"unsupported\",\n reason: error.message,\n })),\n ]),\n );\n\n/**\n * Compare the validators Convex would compile for the contract and for the host\n * function, both in the application's ID scope, so a component's IDs are\n * strings on both sides and the host's own IDs stay `v.id`. A host that is\n * itself a component registers its own IDs as `v.id` in its scope, which this\n * check cannot see and compares as strings. Args and returns must be equal.\n * Every error the host may fail with, its middleware's included, must be one\n * the contract declares: the same schema, or one compiling to the same\n * validator. The host may declare fewer errors.\n */\nconst verify = (\n contract: Callback.Any,\n ref: Ref.AnyConfect,\n): Result.Result<void, CallbackContractMismatch> => {\n const mismatch = (\n side: CallbackContractMismatch[\"side\"],\n expected: Schema.Json,\n actual: Schema.Json,\n ) =>\n Result.fail(\n new CallbackContractMismatch({\n contract: contract.id,\n side,\n expected,\n actual,\n }),\n );\n const provenance = contract.functionProvenance;\n\n for (const side of [\"args\", \"returns\"] as const) {\n const expected = compileSchema(provenance[side], side);\n const actual = compileSchema(ref[side], side);\n const expectedDescription = describeCompiled([expected]);\n const actualDescription = describeCompiled([actual]);\n if (\n Result.isFailure(expected) ||\n Result.isFailure(actual) ||\n JSON.stringify(expectedDescription) !== JSON.stringify(actualDescription)\n ) {\n return mismatch(side, expectedDescription, actualDescription);\n }\n }\n\n const declared = ownError(provenance).flatMap(errorAlternatives);\n const undeclared = [\n ...ownError(ref),\n ...MiddlewareSpec.errorSchemas(ref.middlewareSpecs),\n ]\n .flatMap(errorAlternatives)\n .filter((schema) => !declared.includes(schema));\n if (undeclared.length > 0) {\n const expectedErrors = declared.map((schema) => compileSchema(schema));\n const actualErrors = undeclared.map((schema) => compileSchema(schema));\n const keys = new Set(\n membersOf(Array.getSuccesses(expectedErrors)).map(([key]) => key),\n );\n if (\n Array.getFailures(actualErrors).length > 0 ||\n !membersOf(Array.getSuccesses(actualErrors)).every(([key]) =>\n keys.has(key),\n )\n ) {\n return mismatch(\n \"error\",\n describeCompiled(expectedErrors),\n describeCompiled(actualErrors),\n );\n }\n }\n\n return Result.void;\n};\n\n/**\n * Create a handle a component can store and run to call `ref` under `contract`.\n * A ref whose function type, args or returns visibly differ from the contract\n * on the wire, or whose errors are undeclared, is a type error. The host may\n * declare fewer errors. Before asking Convex for the handle, a Confect ref's\n * compiled validators are checked against the contract's. A mismatch or an\n * unsupported schema fails with `CallbackContractMismatch`. A plain Convex ref\n * has no codecs to compile, so only the type check applies to it. A ref to a\n * function that is not deployed is a defect.\n */\nexport const create = Effect.fn(\"Callback.create\")(function* <\n Contract_ extends Callback.Any,\n Ref_ extends Ref.Any,\n>(\n contract: Contract_,\n ref: Ref_ & Callback.Check<Contract_, Ref_>,\n): Effect.fn.Return<Callback.Handle<Contract_>, CallbackContractMismatch> {\n if (ref._tag === \"Confect\") {\n yield* Effect.fromResult(verify(contract, ref));\n }\n const text = yield* Effect.promise(() =>\n createFunctionHandle(getFunctionReference(ref)),\n );\n return yield* Schema.decodeEffect(Callback.handle(contract))(text).pipe(\n Effect.orDie,\n );\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BA,IAAa,2BAAb,cAA8C,OAAO,YAAsC,CAAC,CAC1F,4BACA;CACE,UAAU,OAAO;CACjB,MAAM,OAAO,SAAS;EAAC;EAAQ;EAAW;CAAO,CAAC;CAClD,UAAU,OAAO;CACjB,QAAQ,OAAO;AACjB,CACF,CAAC,CAAC;CACA,IAAa,UAAkB;EAC7B,OAAO,yDAAyD,KAAK,SAAS,SAAS,KAAK,SAAS,UAAU,WAAW,KAAK,KAAK,cAAc,KAAK,UAAU,KAAK,MAAM,EAAE,sBAAsB,KAAK,UAAU,KAAK,QAAQ,EAAE;CACpO;AACF;AAEA,MAAM,gBACJ,cAEA,UAAU,SAAS,UACf,UAAU,QAAQ,QAAQ,YAAY,IACtC,CAAC,SAAS;AAEhB,MAAM,eAAuC;CAC3C,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,SAAS;AACX;;;;;;AAOA,MAAM,kBACJ,eACoC;CACpC,MAAM,OAAO,WAAW,QAAQ,YAAY;CAC5C,IAAI,KAAK,MAAM,EAAE,WAAW,SAAS,KAAK,GACxC,OAAO,CAAC,EAAE,IAAI,CAAC;CAEjB,MAAM,WAAW,IAAI,IACnB,KAAK,SAAS,cACZ,UAAU,SAAS,aAAa,OAAO,UAAU,UAAU,YACvD,CAAC,UAAU,KAAK,IAChB,CAAC,CACP,CACF;CACA,MAAM,UACJ,SAAS,IAAI,IAAI,KAAK,SAAS,IAAI,KAAK,IAAI,CAAC,GAAG,MAAM,EAAE,QAAQ,CAAC,IAAI;CACvE,MAAM,QAAQ,IAAI,IAAY,QAAQ,KAAK,EAAE,WAAW,IAAI,CAAC;CAC7D,OAAO,QAAQ,QACZ,cACC,UAAU,SAAS,aACnB,CAAC,MAAM,IAAI,aAAa,OAAO,UAAU,UAAU,EAAE,CACzD;AACF;AAEA,MAAM,SACJ,cAEA,KACE,WACA,MAAM,KAAK,SAAS,CAAC,KAAK,UAAU,IAAI,GAAG,IAAI,CAAU,GACzD,MAAM,YAAY,CAAC,IAAI,CAAC,OAAO,MAAM,CAAC,GACtC,MAAM,UAAU,CAAC,SAAS,KAAK,MAAM,MAAM,CAC7C;;;;;AAMF,MAAM,aAAa,eACjB,MAAM,eAAe,UAAU,CAAC,CAAC,IAAI,QAAQ,CAAC;AAEhD,MAAM,WACJ,YACgB;CAChB,MAAM,CAAC,MAAM,GAAG,QAAQ;CACxB,OAAO,SAAS,KAAA,KAAa,KAAK,WAAW,IACzC,KAAK,KACL;EAAE,MAAM;EAAS,SAAS,QAAQ,KAAK,GAAG,eAAe,SAAS;CAAE;AAC1E;AAEA,MAAM,YAAY,cAA6C;CAC7D,QAAQ,UAAU,MAAlB;EACE,KAAK,MACH,OAAO;GAAE,MAAM;GAAM,WAAW,UAAU;EAAU;EACtD,KAAK,WACH,OAAO;GAAE,MAAM;GAAW,OAAO,aAAa,UAAU,KAAK;EAAE;EACjE,KAAK,SACH,OAAO;GAAE,MAAM;GAAS,SAAS,SAAS,UAAU,OAAO;EAAE;EAC/D,KAAK,UACH,OAAO;GACL,MAAM;GACN,KAAK,SAAS,UAAU,GAAG;GAC3B,OAAO,SAAS,UAAU,KAAK;EACjC;EACF,KAAK,UACH,OAAO;GACL,MAAM;GACN,QAAQ,OAAO,YACb,KACE,OAAO,QAAQ,UAAU,MAAM,GAC/B,MAAM,UAAU,CAAC,UAAU,MAAM,MAAM,MAAM,GAC7C,MAAM,KAAK,CAAC,MAAM,WAAW,CAC3B,MACA,MAAM,eAAe,aACjB;IAAE,MAAM;IAAY,OAAO,SAAS,KAAK;GAAE,IAC3C,SAAS,KAAK,CACpB,CAAC,CACH,CACF;EACF;EACF,KAAK,SACH,OAAO,QAAQ,UAAU,CAAC,SAAS,CAAC,CAAC;EACvC,SACE,OAAO,EAAE,MAAM,UAAU,KAAK;CAClC;AACF;AAEA,MAAM,YAAY,eAGhB,WAAW,cAAc,WAAW,UAAU,KAAA,IAC1C,CAAC,WAAW,KAAK,IACjB,CAAC;AAEP,MAAM,qBAAqB,WACzB,UAAU,QAAQ,OAAO,GAAG,KAC5B,UAAU,YAAY,QAAQ,SAAS,KACvC,MAAM,QAAQ,OAAO,OAAO,IACxB,OAAO,QAAQ,SAAS,WACtB,OAAO,SAAS,MAAM,IAAI,kBAAkB,MAAM,IAAI,CAAC,CACzD,IACA,CAAC,MAAM;;;;;AAMb,MAAM,eAAe,QACnB,OAAO,QAAQ,IAAI,qBAAqB,EAAE,MAAM,WAAW;CACzD,IAAI,OAAO,SAAS,UAClB,OAAO,OAAO,KACZ,IAAI,yCAAyC,EAAE,aAAa,KAAK,CAAC,CACpE;CAEF,OAAO,OAAO,MAAM,OAAO,MAAM,IAAI,GAAG;EACtC,SAAS,gBACP,OAAO,KACL,IAAI,yCAAyC,EAAE,YAAY,CAAC,CAC9D;EACF,cAAc;GACZ,MAAM,WAAW,UAAU,WAAW,IAAI;GAC1C,OAAO,WAAW,MAAM,QAAQ,CAAC,CAAC,KAChC,OAAO,KACJ,cACC,CAAC,MAAM,WAAW,EAAE,SAAS,SAAS,IAAI,SAAS,CACvD,CACF;EACF;CACF,CAAC;AACH,CAAC,CAAC,CAAC,KAAK,OAAO,KAAK,WAAW,EAAE,OAAO,OAAO,YAAY,MAAM,CAAC,CAAC,CAAC;AAEtE,MAAM,iBAAiB,QAAoB,SAA8B;CACvE,MAAM,MAAM,OAAO,UAAU,MAAM,CAAC,CAAC;CACrC,OAAO,OAAO,QACZ,OAAO,OACL,SAAS,UAAU,UAAU,UAAU,GAAG,IACtC,YAAY,GAAG,IACf,WAAW,GAAG,CACpB,CACF;AACF;AAEA,MAAM,oBACJ,aAEA,QACE,MAAM,CACJ,GAAG,UAAU,MAAM,aAAa,QAAQ,CAAC,CAAC,CAAC,KAAK,GAAG,UAAU,IAAI,GACjE,GAAG,MAAM,YAAY,QAAQ,CAAC,CAAC,KAAK,WAAW;CAC7C,MAAM;CACN,QAAQ,MAAM;AAChB,EAAE,CACJ,CAAC,CACH;;;;;;;;;;;AAYF,MAAM,UACJ,UACA,QACkD;CAClD,MAAM,YACJ,MACA,UACA,WAEA,OAAO,KACL,IAAI,yBAAyB;EAC3B,UAAU,SAAS;EACnB;EACA;EACA;CACF,CAAC,CACH;CACF,MAAM,aAAa,SAAS;CAE5B,KAAK,MAAM,QAAQ,CAAC,QAAQ,SAAS,GAAY;EAC/C,MAAM,WAAW,cAAc,WAAW,OAAO,IAAI;EACrD,MAAM,SAAS,cAAc,IAAI,OAAO,IAAI;EAC5C,MAAM,sBAAsB,iBAAiB,CAAC,QAAQ,CAAC;EACvD,MAAM,oBAAoB,iBAAiB,CAAC,MAAM,CAAC;EACnD,IACE,OAAO,UAAU,QAAQ,KACzB,OAAO,UAAU,MAAM,KACvB,KAAK,UAAU,mBAAmB,MAAM,KAAK,UAAU,iBAAiB,GAExE,OAAO,SAAS,MAAM,qBAAqB,iBAAiB;CAEhE;CAEA,MAAM,WAAW,SAAS,UAAU,CAAC,CAAC,QAAQ,iBAAiB;CAC/D,MAAM,aAAa,CACjB,GAAG,SAAS,GAAG,GACf,GAAG,eAAe,aAAa,IAAI,eAAe,CACpD,CAAC,CACE,QAAQ,iBAAiB,CAAC,CAC1B,QAAQ,WAAW,CAAC,SAAS,SAAS,MAAM,CAAC;CAChD,IAAI,WAAW,SAAS,GAAG;EACzB,MAAM,iBAAiB,SAAS,KAAK,WAAW,cAAc,MAAM,CAAC;EACrE,MAAM,eAAe,WAAW,KAAK,WAAW,cAAc,MAAM,CAAC;EACrE,MAAM,OAAO,IAAI,IACf,UAAU,MAAM,aAAa,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,GAAG,CAClE;EACA,IACE,MAAM,YAAY,YAAY,CAAC,CAAC,SAAS,KACzC,CAAC,UAAU,MAAM,aAAa,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,SACnD,KAAK,IAAI,GAAG,CACd,GAEA,OAAO,SACL,SACA,iBAAiB,cAAc,GAC/B,iBAAiB,YAAY,CAC/B;CAEJ;CAEA,OAAO,OAAO;AAChB;;;;;;;;;;;AAYA,MAAa,SAAS,OAAO,GAAG,iBAAiB,CAAC,CAAC,WAIjD,UACA,KACwE;CACxE,IAAI,IAAI,SAAS,WACf,OAAO,OAAO,WAAW,OAAO,UAAU,GAAG,CAAC;CAEhD,MAAM,OAAO,OAAO,OAAO,cACzB,qBAAqB,qBAAqB,GAAG,CAAC,CAChD;CACA,OAAO,OAAO,OAAO,aAAa,SAAS,OAAO,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,KACjE,OAAO,KACT;AACF,CAAC"}
@@ -1,8 +1,8 @@
1
1
  import { __exportAll } from "./_virtual/_rolldown/runtime.js";
2
- import * as Layer from "effect/Layer";
3
2
  import * as Effect from "effect/Effect";
4
- import { pipe } from "effect/Function";
3
+ import * as Layer from "effect/Layer";
5
4
  import * as Array from "effect/Array";
5
+ import { pipe } from "effect/Function";
6
6
  import * as ConfigProvider from "effect/ConfigProvider";
7
7
  //#region src/ConvexConfigProvider.ts
8
8
  var ConvexConfigProvider_exports = /* @__PURE__ */ __exportAll({
@@ -1 +1 @@
1
- {"version":3,"file":"ConvexFunctionDefinitions.d.ts","sourceRoot":"","sources":["../src/ConvexFunctionDefinitions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAC;AAG3C,OAAO,KAAK,KAAK,SAAS,MAAM,yBAAyB,CAAC;AAC1D,OAAO,KAAK,KAAK,YAAY,MAAM,4BAA4B,CAAC;AAChE,OAAO,KAAK,KAAK,cAAc,MAAM,qBAAqB,CAAC;AAC3D,OAAO,KAAK,KAAK,SAAS,MAAM,gBAAgB,CAAC;AAGjD,OAAO,KAAK,wBAAwB,MAAM,+BAA+B,CAAC;AAC1E,OAAO,KAAK,KAAK,mBAAmB,MAAM,0BAA0B,CAAC;AAIrE,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,wBAAwB,CAAC,UAAU,GAAG,WAAW,CAAC;CAC5E;AAED,KAAK,aAAa,CAChB,QAAQ,SAAS,YAAY,CAAC,YAAY,EAC1C,UAAU,GAAG,QAAQ,CAAC,oBAAoB,CAAC,IACzC,UAAU,SAAS;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,GAC9C,YAAY,GACZ,GAAG,UAAU,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC;AAErH,MAAM,MAAM,QAAQ,CAAC,KAAK,SAAS,SAAS,CAAC,YAAY,IAAI;IAC3D,QAAQ,EAAE,IAAI,IAAI,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,GAAG,OAAO,CACvE,wBAAwB,CAAC,UAAU,EACnC;QACE,QAAQ,CAAC,IAAI,EAAE,aAAa,CAC1B,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CACxD,CAAC;KACH,CACF;CACF,GAAG;IACF,QAAQ,EAAE,IAAI,IAAI,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAClE,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAClD;CACF,CAAC;AAEF,eAAO,MAAM,YAAY,UAChB,wBAAwB,CAAC,UAAU,GAAG,WAAW,KACvD,KAAK,IAAI,wBAAwB,CAAC,UACL,CAAC;AAWjC,eAAO,MAAM,QAAQ,GAAI,KAAK,SAAS,SAAS,CAAC,YAAY,eAC9C,WAAW,KACvB,mBAAmB,CAAC,+BAA+B,CAAC,KAAK,CAGK,CAAC;AAElE,eAAO,MAAM,aAAa,GAAI,KAAK,SAAS,SAAS,CAAC,YAAY,kBAChD,cAAc,CAAC,YAAY,cAC/B,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,KACxD,QAAQ,CAAC,KAAK,CA0BhB,CAAC"}
1
+ {"version":3,"file":"ConvexFunctionDefinitions.d.ts","sourceRoot":"","sources":["../src/ConvexFunctionDefinitions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAC;AAG3C,OAAO,KAAK,KAAK,SAAS,MAAM,yBAAyB,CAAC;AAC1D,OAAO,KAAK,KAAK,YAAY,MAAM,4BAA4B,CAAC;AAChE,OAAO,KAAK,KAAK,cAAc,MAAM,qBAAqB,CAAC;AAC3D,OAAO,KAAK,KAAK,SAAS,MAAM,gBAAgB,CAAC;AAGjD,OAAO,KAAK,wBAAwB,MAAM,+BAA+B,CAAC;AAC1E,OAAO,KAAK,KAAK,mBAAmB,MAAM,0BAA0B,CAAC;AAIrE,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,wBAAwB,CAAC,UAAU,GAAG,WAAW,CAAC;CAC5E;AAED,KAAK,aAAa,CAChB,QAAQ,SAAS,YAAY,CAAC,YAAY,EAC1C,UAAU,GAAG,QAAQ,CAAC,oBAAoB,CAAC,IACzC,UAAU,SAAS;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,GAC9C,YAAY,GACZ,GAAG,UAAU,CAAC,QAAQ,CAAC,oBAAoB,CAAC,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,wBAAwB,CAAC,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC;AAErH,MAAM,MAAM,QAAQ,CAAC,KAAK,SAAS,SAAS,CAAC,YAAY,IAAI;IAC3D,QAAQ,EAAE,IAAI,IAAI,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,GAAG,OAAO,CACvE,wBAAwB,CAAC,UAAU,EACnC;QACE,QAAQ,CAAC,IAAI,EAAE,aAAa,CAC1B,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CACxD,CAAC;KACH,CACF;CACF,GAAG;IACF,QAAQ,EAAE,IAAI,IAAI,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,QAAQ,CAClE,SAAS,CAAC,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,CAClD;CACF,CAAC;AAEF,eAAO,MAAM,YAAY,UAChB,wBAAwB,CAAC,UAAU,GAAG,WAAW,KACvD,KAAK,IAAI,wBAAwB,CAAC,UACL,CAAC;AAWjC,eAAO,MAAM,QAAQ,GAAI,KAAK,SAAS,SAAS,CAAC,YAAY,eAC9C,WAAW,KACvB,mBAAmB,CAAC,+BAA+B,CAAC,KAAK,CAGK,CAAC;AAElE,eAAO,MAAM,aAAa,GAAI,KAAK,SAAS,SAAS,CAAC,YAAY,kBAChD,cAAc,CAAC,YAAY,cAC/B,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,KACxD,QAAQ,CAAC,KAAK,CA2BhB,CAAC"}
@@ -1,11 +1,11 @@
1
1
  import { __exportAll } from "./_virtual/_rolldown/runtime.js";
2
+ import { mapLeaves } from "./internal/utils.js";
2
3
  import { make } from "./GroupRegistry.js";
3
4
  import { isFunctionRegistryItem } from "./FunctionRegistryItem.js";
4
5
  import { Definition, prepare, register as register$1 } from "./RegisteredConvexFunction.js";
5
6
  import { resolve } from "./ResolvedMiddleware.js";
6
- import { mapLeaves } from "./internal/utils.js";
7
- import * as Match from "effect/Match";
8
7
  import * as Record from "effect/Record";
8
+ import * as Match from "effect/Match";
9
9
  //#region src/ConvexFunctionDefinitions.ts
10
10
  var ConvexFunctionDefinitions_exports = /* @__PURE__ */ __exportAll({
11
11
  buildForGroup: () => buildForGroup,
@@ -16,8 +16,8 @@ const isDefinition = (value) => typeof value._tag === "string";
16
16
  const registerDefinitions = (definitions) => Record.map(definitions, (value) => isDefinition(value) ? register$1(value) : registerDefinitions(value));
17
17
  const register = (definitions) => registerDefinitions(definitions);
18
18
  const buildForGroup = (databaseSchema, groupLayer) => {
19
- const { functionRegistryItems, middlewareRegistryItems } = make(groupLayer);
20
- return mapLeaves(functionRegistryItems, isFunctionRegistryItem, (item) => Match.value(item).pipe(Match.tag("Convex", ({ handler }) => Definition.Registered({ handler })), Match.tag("Confect", (confect) => prepare(databaseSchema, confect, resolve(confect, middlewareRegistryItems))), Match.exhaustive));
19
+ const { functionRegistryItems, middlewareRegistryItems, observability } = make(groupLayer);
20
+ return mapLeaves(functionRegistryItems, isFunctionRegistryItem, (item) => Match.value(item).pipe(Match.tag("Convex", ({ handler }) => Definition.Registered({ handler })), Match.tag("Confect", (confect) => prepare(databaseSchema, confect, resolve(confect, middlewareRegistryItems), observability)), Match.exhaustive));
21
21
  };
22
22
  //#endregion
23
23
  export { ConvexFunctionDefinitions_exports, buildForGroup, isDefinition, register };
@@ -1 +1 @@
1
- {"version":3,"file":"ConvexFunctionDefinitions.js","names":["RegisteredConvexFunction.register","GroupRegistry.make","FunctionRegistryItem.isFunctionRegistryItem","RegisteredConvexFunction.prepare","ResolvedMiddleware.resolve"],"sources":["../src/ConvexFunctionDefinitions.ts"],"sourcesContent":["import type * as Layer from \"effect/Layer\";\nimport * as Match from \"effect/Match\";\nimport * as Record from \"effect/Record\";\nimport type * as GroupSpec from \"@confect/core/GroupSpec\";\nimport type * as FunctionSpec from \"@confect/core/FunctionSpec\";\nimport type * as DatabaseSchema from \"./DatabaseSchema.js\";\nimport type * as GroupImpl from \"./GroupImpl.js\";\nimport * as GroupRegistry from \"./GroupRegistry.js\";\nimport * as FunctionRegistryItem from \"./FunctionRegistryItem.js\";\nimport * as RegisteredConvexFunction from \"./RegisteredConvexFunction.js\";\nimport type * as RegisteredFunctions from \"./RegisteredFunctions.js\";\nimport * as ResolvedMiddleware from \"./ResolvedMiddleware.js\";\nimport { mapLeaves } from \"./internal/utils.js\";\n\nexport interface Definitions {\n readonly [name: string]: RegisteredConvexFunction.Definition | Definitions;\n}\n\ntype DefinitionTag<\n Function extends FunctionSpec.AnyWithProps,\n Provenance = Function[\"functionProvenance\"],\n> = Provenance extends { readonly _tag: \"Convex\" }\n ? \"Registered\"\n : `${Capitalize<Function[\"functionVisibility\"]>}${Capitalize<Function[\"runtimeAndFunctionType\"][\"functionType\"]>}`;\n\nexport type ForGroup<Group extends GroupSpec.AnyWithProps> = {\n readonly [Name in FunctionSpec.Name<GroupSpec.Functions<Group>>]: Extract<\n RegisteredConvexFunction.Definition,\n {\n readonly _tag: DefinitionTag<\n FunctionSpec.WithName<GroupSpec.Functions<Group>, Name>\n >;\n }\n >;\n} & {\n readonly [Name in GroupSpec.Name<GroupSpec.Groups<Group>>]: ForGroup<\n GroupSpec.WithName<GroupSpec.Groups<Group>, Name>\n >;\n};\n\nexport const isDefinition = (\n value: RegisteredConvexFunction.Definition | Definitions,\n): value is RegisteredConvexFunction.Definition =>\n typeof value._tag === \"string\";\n\nconst registerDefinitions = (\n definitions: Definitions,\n): RegisteredFunctions.AnyWithProps =>\n Record.map(definitions, (value) =>\n isDefinition(value)\n ? RegisteredConvexFunction.register(value)\n : registerDefinitions(value),\n );\n\nexport const register = <Group extends GroupSpec.AnyWithProps>(\n definitions: Definitions,\n): RegisteredFunctions.RegisteredFunctionsForGroupSpec<Group> =>\n registerDefinitions(\n definitions,\n ) as RegisteredFunctions.RegisteredFunctionsForGroupSpec<Group>;\n\nexport const buildForGroup = <Group extends GroupSpec.AnyWithProps>(\n databaseSchema: DatabaseSchema.AnyWithProps,\n groupLayer: Layer.Layer<GroupImpl.GroupImpl<\"Finalized\">>,\n): ForGroup<Group> => {\n const { functionRegistryItems, middlewareRegistryItems } =\n GroupRegistry.make(groupLayer);\n return mapLeaves<\n FunctionRegistryItem.AnyWithProps,\n RegisteredConvexFunction.Definition\n >(\n functionRegistryItems as {\n [key: string]: FunctionRegistryItem.AnyWithProps;\n },\n FunctionRegistryItem.isFunctionRegistryItem,\n (item) =>\n Match.value(item).pipe(\n Match.tag(\"Convex\", ({ handler }) =>\n RegisteredConvexFunction.Definition.Registered({ handler }),\n ),\n Match.tag(\"Confect\", (confect) =>\n RegisteredConvexFunction.prepare(\n databaseSchema,\n confect,\n ResolvedMiddleware.resolve(confect, middlewareRegistryItems),\n ),\n ),\n Match.exhaustive,\n ),\n ) as ForGroup<Group>;\n};\n"],"mappings":";;;;;;;;;;;;;;AAwCA,MAAa,gBACX,UAEA,OAAO,MAAM,SAAS;AAExB,MAAM,uBACJ,gBAEA,OAAO,IAAI,cAAc,UACvB,aAAa,KAAK,IACdA,WAAkC,KAAK,IACvC,oBAAoB,KAAK,CAC/B;AAEF,MAAa,YACX,gBAEA,oBACE,WACF;AAEF,MAAa,iBACX,gBACA,eACoB;CACpB,MAAM,EAAE,uBAAuB,4BAC7BC,KAAmB,UAAU;CAC/B,OAAO,UAIL,uBAGAC,yBACC,SACC,MAAM,MAAM,IAAI,CAAC,CAAC,KAChB,MAAM,IAAI,WAAW,EAAE,cAAA,WACe,WAAW,EAAE,QAAQ,CAAC,CAC5D,GACA,MAAM,IAAI,YAAY,YACpBC,QACE,gBACA,SACAC,QAA2B,SAAS,uBAAuB,CAC7D,CACF,GACA,MAAM,UACR,CACJ;AACF"}
1
+ {"version":3,"file":"ConvexFunctionDefinitions.js","names":["RegisteredConvexFunction.register","GroupRegistry.make","FunctionRegistryItem.isFunctionRegistryItem","RegisteredConvexFunction.prepare","ResolvedMiddleware.resolve"],"sources":["../src/ConvexFunctionDefinitions.ts"],"sourcesContent":["import type * as Layer from \"effect/Layer\";\nimport * as Match from \"effect/Match\";\nimport * as Record from \"effect/Record\";\nimport type * as GroupSpec from \"@confect/core/GroupSpec\";\nimport type * as FunctionSpec from \"@confect/core/FunctionSpec\";\nimport type * as DatabaseSchema from \"./DatabaseSchema.js\";\nimport type * as GroupImpl from \"./GroupImpl.js\";\nimport * as GroupRegistry from \"./GroupRegistry.js\";\nimport * as FunctionRegistryItem from \"./FunctionRegistryItem.js\";\nimport * as RegisteredConvexFunction from \"./RegisteredConvexFunction.js\";\nimport type * as RegisteredFunctions from \"./RegisteredFunctions.js\";\nimport * as ResolvedMiddleware from \"./ResolvedMiddleware.js\";\nimport { mapLeaves } from \"./internal/utils.js\";\n\nexport interface Definitions {\n readonly [name: string]: RegisteredConvexFunction.Definition | Definitions;\n}\n\ntype DefinitionTag<\n Function extends FunctionSpec.AnyWithProps,\n Provenance = Function[\"functionProvenance\"],\n> = Provenance extends { readonly _tag: \"Convex\" }\n ? \"Registered\"\n : `${Capitalize<Function[\"functionVisibility\"]>}${Capitalize<Function[\"runtimeAndFunctionType\"][\"functionType\"]>}`;\n\nexport type ForGroup<Group extends GroupSpec.AnyWithProps> = {\n readonly [Name in FunctionSpec.Name<GroupSpec.Functions<Group>>]: Extract<\n RegisteredConvexFunction.Definition,\n {\n readonly _tag: DefinitionTag<\n FunctionSpec.WithName<GroupSpec.Functions<Group>, Name>\n >;\n }\n >;\n} & {\n readonly [Name in GroupSpec.Name<GroupSpec.Groups<Group>>]: ForGroup<\n GroupSpec.WithName<GroupSpec.Groups<Group>, Name>\n >;\n};\n\nexport const isDefinition = (\n value: RegisteredConvexFunction.Definition | Definitions,\n): value is RegisteredConvexFunction.Definition =>\n typeof value._tag === \"string\";\n\nconst registerDefinitions = (\n definitions: Definitions,\n): RegisteredFunctions.AnyWithProps =>\n Record.map(definitions, (value) =>\n isDefinition(value)\n ? RegisteredConvexFunction.register(value)\n : registerDefinitions(value),\n );\n\nexport const register = <Group extends GroupSpec.AnyWithProps>(\n definitions: Definitions,\n): RegisteredFunctions.RegisteredFunctionsForGroupSpec<Group> =>\n registerDefinitions(\n definitions,\n ) as RegisteredFunctions.RegisteredFunctionsForGroupSpec<Group>;\n\nexport const buildForGroup = <Group extends GroupSpec.AnyWithProps>(\n databaseSchema: DatabaseSchema.AnyWithProps,\n groupLayer: Layer.Layer<GroupImpl.GroupImpl<\"Finalized\">>,\n): ForGroup<Group> => {\n const { functionRegistryItems, middlewareRegistryItems, observability } =\n GroupRegistry.make(groupLayer);\n return mapLeaves<\n FunctionRegistryItem.AnyWithProps,\n RegisteredConvexFunction.Definition\n >(\n functionRegistryItems as {\n [key: string]: FunctionRegistryItem.AnyWithProps;\n },\n FunctionRegistryItem.isFunctionRegistryItem,\n (item) =>\n Match.value(item).pipe(\n Match.tag(\"Convex\", ({ handler }) =>\n RegisteredConvexFunction.Definition.Registered({ handler }),\n ),\n Match.tag(\"Confect\", (confect) =>\n RegisteredConvexFunction.prepare(\n databaseSchema,\n confect,\n ResolvedMiddleware.resolve(confect, middlewareRegistryItems),\n observability,\n ),\n ),\n Match.exhaustive,\n ),\n ) as ForGroup<Group>;\n};\n"],"mappings":";;;;;;;;;;;;;;AAwCA,MAAa,gBACX,UAEA,OAAO,MAAM,SAAS;AAExB,MAAM,uBACJ,gBAEA,OAAO,IAAI,cAAc,UACvB,aAAa,KAAK,IACdA,WAAkC,KAAK,IACvC,oBAAoB,KAAK,CAC/B;AAEF,MAAa,YACX,gBAEA,oBACE,WACF;AAEF,MAAa,iBACX,gBACA,eACoB;CACpB,MAAM,EAAE,uBAAuB,yBAAyB,kBACtDC,KAAmB,UAAU;CAC/B,OAAO,UAIL,uBAGAC,yBACC,SACC,MAAM,MAAM,IAAI,CAAC,CAAC,KAChB,MAAM,IAAI,WAAW,EAAE,cAAA,WACe,WAAW,EAAE,QAAQ,CAAC,CAC5D,GACA,MAAM,IAAI,YAAY,YACpBC,QACE,gBACA,SACAC,QAA2B,SAAS,uBAAuB,GAC3D,aACF,CACF,GACA,MAAM,UACR,CACJ;AACF"}
@@ -1,6 +1,6 @@
1
1
  import { __exportAll } from "./_virtual/_rolldown/runtime.js";
2
- import * as Layer from "effect/Layer";
3
2
  import * as Effect from "effect/Effect";
3
+ import * as Layer from "effect/Layer";
4
4
  import * as Match from "effect/Match";
5
5
  import * as Console from "effect/Console";
6
6
  import * as Logger from "effect/Logger";
@@ -1 +1 @@
1
- {"version":3,"file":"CronJobs.d.ts","sourceRoot":"","sources":["../src/CronJobs.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAA+B,KAAK,KAAK,EAAE,MAAM,eAAe,CAAC;AAGxE,OAAO,KAAK,IAAI,MAAM,aAAa,CAAC;AAEpC,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAC;AAM5C,OAAO,KAAK,KAAK,OAAO,MAAM,cAAc,CAAC;AAE7C,eAAO,MAAM,MAAM,8BAA8B,CAAC;AAClD,MAAM,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC;AAEnC,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IACnD,QAAQ,CAAC,cAAc,EAAE,KAAK,CAAC;IAE/B,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,GAAG,QAAQ,CAAC;CACtC;AAED,eAAO,MAAM,UAAU,MAAO,OAAO,KAAG,CAAC,IAAI,QACX,CAAC;AAiDnC,eAAO,MAAM,IAAI,QAAO,QAA4C,CAAC;AAErE,eAAO,MAAM,sBAAsB,SAAU,IAAI,CAAC,IAAI,KAAG,MAwCxD,CAAC;AAYF,eAAO,MAAM,gCAAgC,aACjC,QAAQ,CAAC,QAAQ,KAC1B,gBA2BF,CAAC;AAEF,KAAK,gBAAgB,GAAG,OAAO,CAC7B,aAAa,CAAC,UAAU,CAAC,EACzB;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,CACrB,CAAC"}
1
+ {"version":3,"file":"CronJobs.d.ts","sourceRoot":"","sources":["../src/CronJobs.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAA+B,KAAK,KAAK,EAAE,MAAM,eAAe,CAAC;AAGxE,OAAO,KAAK,IAAI,MAAM,aAAa,CAAC;AAEpC,OAAO,KAAK,QAAQ,MAAM,iBAAiB,CAAC;AAM5C,OAAO,KAAK,KAAK,OAAO,MAAM,cAAc,CAAC;AAE7C,eAAO,MAAM,MAAM,8BAA8B,CAAC;AAClD,MAAM,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC;AAEnC,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IACnD,QAAQ,CAAC,cAAc,EAAE,KAAK,CAAC;IAE/B,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,GAAG,QAAQ,CAAC;CACtC;AAED,eAAO,MAAM,UAAU,MAAO,OAAO,KAAG,CAAC,IAAI,QACX,CAAC;AAiDnC,eAAO,MAAM,IAAI,QAAO,QAA4C,CAAC;AAErE,eAAO,MAAM,sBAAsB,SAAU,IAAI,CAAC,IAAI,KAAG,MAwCxD,CAAC;AAYF,eAAO,MAAM,gCAAgC,aACjC,QAAQ,CAAC,QAAQ,KAC1B,gBA2BF,CAAC;AAEF,KAAK,gBAAgB,GAAG,OAAO,CAC7B,aAAa,CAAC,UAAU,CAAC,EACzB;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,CACrB,CAAC"}
package/dist/CronJobs.js CHANGED
@@ -1,15 +1,16 @@
1
1
  import { __exportAll } from "./_virtual/_rolldown/runtime.js";
2
+ import * as Predicate from "effect/Predicate";
3
+ import * as Array from "effect/Array";
4
+ import * as Record from "effect/Record";
5
+ import { getFunctionReference } from "@confect/core/RefInternal";
6
+ import * as DateTime from "effect/DateTime";
7
+ import * as Duration from "effect/Duration";
2
8
  import { cronJobs } from "convex/server";
3
9
  import { pipe } from "effect/Function";
4
10
  import * as Match from "effect/Match";
5
11
  import * as Option from "effect/Option";
6
- import * as Array from "effect/Array";
7
12
  import * as Order from "effect/Order";
8
- import * as Predicate from "effect/Predicate";
9
- import * as Record from "effect/Record";
10
- import * as Duration from "effect/Duration";
11
13
  import { Ref } from "@confect/core";
12
- import * as DateTime from "effect/DateTime";
13
14
  import * as Cron from "effect/Cron";
14
15
  //#region src/CronJobs.ts
15
16
  var CronJobs_exports = /* @__PURE__ */ __exportAll({
@@ -25,7 +26,7 @@ const Proto = {
25
26
  [TypeId]: TypeId,
26
27
  add(cronJob) {
27
28
  const newConvexCrons = Object.assign(cronJobs(), { crons: { ...this.convexCronJobs.crons } });
28
- const functionReference = Ref.getFunctionReference(cronJob.ref);
29
+ const functionReference = getFunctionReference(cronJob.ref);
29
30
  const encodedArgs = Ref.encodeArgsSync(cronJob.ref, cronJob.args);
30
31
  Match.value(cronJob.schedule).pipe(Match.when(Cron.isCron, (cron) => {
31
32
  newConvexCrons.cron(cronJob.identifier, cronToConvexCronString(cron), functionReference, encodedArgs);
@@ -1 +1 @@
1
- {"version":3,"file":"CronJobs.js","names":["makeConvexCrons"],"sources":["../src/CronJobs.ts"],"sourcesContent":["import { Ref } from \"@confect/core\";\nimport type { CronJob as ConvexCronJob } from \"convex/server\";\nimport { cronJobs as makeConvexCrons, type Crons } from \"convex/server\";\nimport { pipe } from \"effect/Function\";\nimport * as Array from \"effect/Array\";\nimport * as Cron from \"effect/Cron\";\nimport * as DateTime from \"effect/DateTime\";\nimport * as Duration from \"effect/Duration\";\nimport * as Match from \"effect/Match\";\nimport * as Option from \"effect/Option\";\nimport * as Order from \"effect/Order\";\nimport * as Predicate from \"effect/Predicate\";\nimport * as Record from \"effect/Record\";\nimport type * as CronJob from \"./CronJob.js\";\n\nexport const TypeId = \"~@confect/server/CronJobs\";\nexport type TypeId = typeof TypeId;\n\nexport interface CronJobs {\n readonly [TypeId]: TypeId;\n readonly cronJobs: Record<string, CronJob.CronJob>;\n readonly convexCronJobs: Crons;\n\n add(cron: CronJob.CronJob): CronJobs;\n}\n\nexport const isCronJobs = (u: unknown): u is CronJobs =>\n Predicate.hasProperty(u, TypeId);\n\nconst Proto = {\n [TypeId]: TypeId,\n\n add(this: CronJobs, cronJob: CronJob.CronJob) {\n const newConvexCrons = Object.assign(makeConvexCrons(), {\n crons: { ...this.convexCronJobs.crons },\n });\n\n const functionReference = Ref.getFunctionReference(cronJob.ref);\n const encodedArgs = Ref.encodeArgsSync(cronJob.ref, cronJob.args);\n\n Match.value(cronJob.schedule).pipe(\n Match.when(Cron.isCron, (cron) => {\n newConvexCrons.cron(\n cronJob.identifier,\n cronToConvexCronString(cron),\n functionReference,\n encodedArgs,\n );\n }),\n Match.when(Duration.isDuration, (duration) => {\n newConvexCrons.interval(\n cronJob.identifier,\n durationToConvexIntervalSchedule(duration),\n functionReference,\n encodedArgs,\n );\n }),\n Match.exhaustive,\n );\n\n return makeProto(\n Record.set(this.cronJobs, cronJob.identifier, cronJob),\n newConvexCrons,\n );\n },\n};\n\nconst makeProto = (\n cronJobs: Record<string, CronJob.CronJob>,\n convexCronJobs: Crons,\n): CronJobs =>\n Object.assign(Object.create(Proto), {\n cronJobs,\n convexCronJobs,\n });\n\nexport const make = (): CronJobs => makeProto({}, makeConvexCrons());\n\nexport const cronToConvexCronString = (cron: Cron.Cron): string => {\n pipe(\n cron.tz,\n Option.filter((tz) =>\n pipe(\n tz,\n Match.value,\n Match.tag(\"Offset\", ({ offset }) => offset !== 0),\n Match.tag(\"Named\", ({ id }) => id !== \"UTC\" && id !== \"Etc/UTC\"),\n Match.exhaustive,\n ),\n ),\n Option.map((tz) => {\n throw new Error(\n `Convex cron expressions are always evaluated in UTC, but this cron ` +\n `specifies the time zone \"${DateTime.zoneToString(tz)}\". ` +\n `Either omit the timezone or specify UTC.`,\n );\n }),\n );\n\n const hasNonDefaultSeconds = cron.seconds.size !== 1 || !cron.seconds.has(0);\n if (hasNonDefaultSeconds) {\n throw new Error(\n \"Convex cron expressions do not support a seconds field. \" +\n \"The seconds field must be the default {0}. \" +\n \"Sub-minute scheduling is supported only by interval schedules defined using a Duration.\",\n );\n }\n\n return Array.join(\n [\n setToField(cron.minutes),\n setToField(cron.hours),\n setToField(cron.days),\n setToField(cron.months),\n setToField(cron.weekdays),\n ],\n \" \",\n );\n};\n\nconst setToField = (set: ReadonlySet<number>): string => {\n if (set.size === 0) return \"*\";\n return pipe(\n set,\n Array.sort(Order.Number),\n Array.map((n) => n.toString()),\n Array.join(\",\"),\n );\n};\n\nexport const durationToConvexIntervalSchedule = (\n duration: Duration.Duration,\n): IntervalSchedule => {\n const millis = Duration.toMillis(duration);\n if (millis <= 0) {\n throw new Error(\"Interval must be a positive duration.\");\n }\n\n const oneHourInMillis = Duration.hours(1).pipe(Duration.toMillis);\n const hours = millis / oneHourInMillis;\n if (Number.isInteger(hours)) {\n return { type: \"interval\", hours };\n }\n\n const oneMinuteInMillis = Duration.minutes(1).pipe(Duration.toMillis);\n const minutes = millis / oneMinuteInMillis;\n if (Number.isInteger(minutes)) {\n return { type: \"interval\", minutes };\n }\n\n const oneSecondInMillis = Duration.seconds(1).pipe(Duration.toMillis);\n const seconds = millis / oneSecondInMillis;\n if (Number.isInteger(seconds)) {\n return { type: \"interval\", seconds };\n }\n\n throw new Error(\n \"Interval must be a whole number of seconds, minutes, or hours.\",\n );\n};\n\ntype IntervalSchedule = Extract<\n ConvexCronJob[\"schedule\"],\n { type: \"interval\" }\n>;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAeA,MAAa,SAAS;AAWtB,MAAa,cAAc,MACzB,UAAU,YAAY,GAAG,MAAM;AAEjC,MAAM,QAAQ;EACX,SAAS;CAEV,IAAoB,SAA0B;EAC5C,MAAM,iBAAiB,OAAO,OAAOA,SAAgB,GAAG,EACtD,OAAO,EAAE,GAAG,KAAK,eAAe,MAAM,EACxC,CAAC;EAED,MAAM,oBAAoB,IAAI,qBAAqB,QAAQ,GAAG;EAC9D,MAAM,cAAc,IAAI,eAAe,QAAQ,KAAK,QAAQ,IAAI;EAEhE,MAAM,MAAM,QAAQ,QAAQ,CAAC,CAAC,KAC5B,MAAM,KAAK,KAAK,SAAS,SAAS;GAChC,eAAe,KACb,QAAQ,YACR,uBAAuB,IAAI,GAC3B,mBACA,WACF;EACF,CAAC,GACD,MAAM,KAAK,SAAS,aAAa,aAAa;GAC5C,eAAe,SACb,QAAQ,YACR,iCAAiC,QAAQ,GACzC,mBACA,WACF;EACF,CAAC,GACD,MAAM,UACR;EAEA,OAAO,UACL,OAAO,IAAI,KAAK,UAAU,QAAQ,YAAY,OAAO,GACrD,cACF;CACF;AACF;AAEA,MAAM,aACJ,UACA,mBAEA,OAAO,OAAO,OAAO,OAAO,KAAK,GAAG;CAClC;CACA;AACF,CAAC;AAEH,MAAa,aAAuB,UAAU,CAAC,GAAGA,SAAgB,CAAC;AAEnE,MAAa,0BAA0B,SAA4B;CACjE,KACE,KAAK,IACL,OAAO,QAAQ,OACb,KACE,IACA,MAAM,OACN,MAAM,IAAI,WAAW,EAAE,aAAa,WAAW,CAAC,GAChD,MAAM,IAAI,UAAU,EAAE,SAAS,OAAO,SAAS,OAAO,SAAS,GAC/D,MAAM,UACR,CACF,GACA,OAAO,KAAK,OAAO;EACjB,MAAM,IAAI,MACR,+FAC8B,SAAS,aAAa,EAAE,EAAE,4CAE1D;CACF,CAAC,CACH;CAGA,IAD6B,KAAK,QAAQ,SAAS,KAAK,CAAC,KAAK,QAAQ,IAAI,CAAC,GAEzE,MAAM,IAAI,MACR,4LAGF;CAGF,OAAO,MAAM,KACX;EACE,WAAW,KAAK,OAAO;EACvB,WAAW,KAAK,KAAK;EACrB,WAAW,KAAK,IAAI;EACpB,WAAW,KAAK,MAAM;EACtB,WAAW,KAAK,QAAQ;CAC1B,GACA,GACF;AACF;AAEA,MAAM,cAAc,QAAqC;CACvD,IAAI,IAAI,SAAS,GAAG,OAAO;CAC3B,OAAO,KACL,KACA,MAAM,KAAK,MAAM,MAAM,GACvB,MAAM,KAAK,MAAM,EAAE,SAAS,CAAC,GAC7B,MAAM,KAAK,GAAG,CAChB;AACF;AAEA,MAAa,oCACX,aACqB;CACrB,MAAM,SAAS,SAAS,SAAS,QAAQ;CACzC,IAAI,UAAU,GACZ,MAAM,IAAI,MAAM,uCAAuC;CAIzD,MAAM,QAAQ,SADU,SAAS,MAAM,CAAC,CAAC,CAAC,KAAK,SAAS,QACnB;CACrC,IAAI,OAAO,UAAU,KAAK,GACxB,OAAO;EAAE,MAAM;EAAY;CAAM;CAInC,MAAM,UAAU,SADU,SAAS,QAAQ,CAAC,CAAC,CAAC,KAAK,SAAS,QACnB;CACzC,IAAI,OAAO,UAAU,OAAO,GAC1B,OAAO;EAAE,MAAM;EAAY;CAAQ;CAIrC,MAAM,UAAU,SADU,SAAS,QAAQ,CAAC,CAAC,CAAC,KAAK,SAAS,QACnB;CACzC,IAAI,OAAO,UAAU,OAAO,GAC1B,OAAO;EAAE,MAAM;EAAY;CAAQ;CAGrC,MAAM,IAAI,MACR,gEACF;AACF"}
1
+ {"version":3,"file":"CronJobs.js","names":["makeConvexCrons"],"sources":["../src/CronJobs.ts"],"sourcesContent":["import { Ref } from \"@confect/core\";\nimport { getFunctionReference } from \"@confect/core/RefInternal\";\nimport type { CronJob as ConvexCronJob } from \"convex/server\";\nimport { cronJobs as makeConvexCrons, type Crons } from \"convex/server\";\nimport { pipe } from \"effect/Function\";\nimport * as Array from \"effect/Array\";\nimport * as Cron from \"effect/Cron\";\nimport * as DateTime from \"effect/DateTime\";\nimport * as Duration from \"effect/Duration\";\nimport * as Match from \"effect/Match\";\nimport * as Option from \"effect/Option\";\nimport * as Order from \"effect/Order\";\nimport * as Predicate from \"effect/Predicate\";\nimport * as Record from \"effect/Record\";\nimport type * as CronJob from \"./CronJob.js\";\n\nexport const TypeId = \"~@confect/server/CronJobs\";\nexport type TypeId = typeof TypeId;\n\nexport interface CronJobs {\n readonly [TypeId]: TypeId;\n readonly cronJobs: Record<string, CronJob.CronJob>;\n readonly convexCronJobs: Crons;\n\n add(cron: CronJob.CronJob): CronJobs;\n}\n\nexport const isCronJobs = (u: unknown): u is CronJobs =>\n Predicate.hasProperty(u, TypeId);\n\nconst Proto = {\n [TypeId]: TypeId,\n\n add(this: CronJobs, cronJob: CronJob.CronJob) {\n const newConvexCrons = Object.assign(makeConvexCrons(), {\n crons: { ...this.convexCronJobs.crons },\n });\n\n const functionReference = getFunctionReference(cronJob.ref);\n const encodedArgs = Ref.encodeArgsSync(cronJob.ref, cronJob.args);\n\n Match.value(cronJob.schedule).pipe(\n Match.when(Cron.isCron, (cron) => {\n newConvexCrons.cron(\n cronJob.identifier,\n cronToConvexCronString(cron),\n functionReference,\n encodedArgs,\n );\n }),\n Match.when(Duration.isDuration, (duration) => {\n newConvexCrons.interval(\n cronJob.identifier,\n durationToConvexIntervalSchedule(duration),\n functionReference,\n encodedArgs,\n );\n }),\n Match.exhaustive,\n );\n\n return makeProto(\n Record.set(this.cronJobs, cronJob.identifier, cronJob),\n newConvexCrons,\n );\n },\n};\n\nconst makeProto = (\n cronJobs: Record<string, CronJob.CronJob>,\n convexCronJobs: Crons,\n): CronJobs =>\n Object.assign(Object.create(Proto), {\n cronJobs,\n convexCronJobs,\n });\n\nexport const make = (): CronJobs => makeProto({}, makeConvexCrons());\n\nexport const cronToConvexCronString = (cron: Cron.Cron): string => {\n pipe(\n cron.tz,\n Option.filter((tz) =>\n pipe(\n tz,\n Match.value,\n Match.tag(\"Offset\", ({ offset }) => offset !== 0),\n Match.tag(\"Named\", ({ id }) => id !== \"UTC\" && id !== \"Etc/UTC\"),\n Match.exhaustive,\n ),\n ),\n Option.map((tz) => {\n throw new Error(\n `Convex cron expressions are always evaluated in UTC, but this cron ` +\n `specifies the time zone \"${DateTime.zoneToString(tz)}\". ` +\n `Either omit the timezone or specify UTC.`,\n );\n }),\n );\n\n const hasNonDefaultSeconds = cron.seconds.size !== 1 || !cron.seconds.has(0);\n if (hasNonDefaultSeconds) {\n throw new Error(\n \"Convex cron expressions do not support a seconds field. \" +\n \"The seconds field must be the default {0}. \" +\n \"Sub-minute scheduling is supported only by interval schedules defined using a Duration.\",\n );\n }\n\n return Array.join(\n [\n setToField(cron.minutes),\n setToField(cron.hours),\n setToField(cron.days),\n setToField(cron.months),\n setToField(cron.weekdays),\n ],\n \" \",\n );\n};\n\nconst setToField = (set: ReadonlySet<number>): string => {\n if (set.size === 0) return \"*\";\n return pipe(\n set,\n Array.sort(Order.Number),\n Array.map((n) => n.toString()),\n Array.join(\",\"),\n );\n};\n\nexport const durationToConvexIntervalSchedule = (\n duration: Duration.Duration,\n): IntervalSchedule => {\n const millis = Duration.toMillis(duration);\n if (millis <= 0) {\n throw new Error(\"Interval must be a positive duration.\");\n }\n\n const oneHourInMillis = Duration.hours(1).pipe(Duration.toMillis);\n const hours = millis / oneHourInMillis;\n if (Number.isInteger(hours)) {\n return { type: \"interval\", hours };\n }\n\n const oneMinuteInMillis = Duration.minutes(1).pipe(Duration.toMillis);\n const minutes = millis / oneMinuteInMillis;\n if (Number.isInteger(minutes)) {\n return { type: \"interval\", minutes };\n }\n\n const oneSecondInMillis = Duration.seconds(1).pipe(Duration.toMillis);\n const seconds = millis / oneSecondInMillis;\n if (Number.isInteger(seconds)) {\n return { type: \"interval\", seconds };\n }\n\n throw new Error(\n \"Interval must be a whole number of seconds, minutes, or hours.\",\n );\n};\n\ntype IntervalSchedule = Extract<\n ConvexCronJob[\"schedule\"],\n { type: \"interval\" }\n>;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAgBA,MAAa,SAAS;AAWtB,MAAa,cAAc,MACzB,UAAU,YAAY,GAAG,MAAM;AAEjC,MAAM,QAAQ;EACX,SAAS;CAEV,IAAoB,SAA0B;EAC5C,MAAM,iBAAiB,OAAO,OAAOA,SAAgB,GAAG,EACtD,OAAO,EAAE,GAAG,KAAK,eAAe,MAAM,EACxC,CAAC;EAED,MAAM,oBAAoB,qBAAqB,QAAQ,GAAG;EAC1D,MAAM,cAAc,IAAI,eAAe,QAAQ,KAAK,QAAQ,IAAI;EAEhE,MAAM,MAAM,QAAQ,QAAQ,CAAC,CAAC,KAC5B,MAAM,KAAK,KAAK,SAAS,SAAS;GAChC,eAAe,KACb,QAAQ,YACR,uBAAuB,IAAI,GAC3B,mBACA,WACF;EACF,CAAC,GACD,MAAM,KAAK,SAAS,aAAa,aAAa;GAC5C,eAAe,SACb,QAAQ,YACR,iCAAiC,QAAQ,GACzC,mBACA,WACF;EACF,CAAC,GACD,MAAM,UACR;EAEA,OAAO,UACL,OAAO,IAAI,KAAK,UAAU,QAAQ,YAAY,OAAO,GACrD,cACF;CACF;AACF;AAEA,MAAM,aACJ,UACA,mBAEA,OAAO,OAAO,OAAO,OAAO,KAAK,GAAG;CAClC;CACA;AACF,CAAC;AAEH,MAAa,aAAuB,UAAU,CAAC,GAAGA,SAAgB,CAAC;AAEnE,MAAa,0BAA0B,SAA4B;CACjE,KACE,KAAK,IACL,OAAO,QAAQ,OACb,KACE,IACA,MAAM,OACN,MAAM,IAAI,WAAW,EAAE,aAAa,WAAW,CAAC,GAChD,MAAM,IAAI,UAAU,EAAE,SAAS,OAAO,SAAS,OAAO,SAAS,GAC/D,MAAM,UACR,CACF,GACA,OAAO,KAAK,OAAO;EACjB,MAAM,IAAI,MACR,+FAC8B,SAAS,aAAa,EAAE,EAAE,4CAE1D;CACF,CAAC,CACH;CAGA,IAD6B,KAAK,QAAQ,SAAS,KAAK,CAAC,KAAK,QAAQ,IAAI,CAAC,GAEzE,MAAM,IAAI,MACR,4LAGF;CAGF,OAAO,MAAM,KACX;EACE,WAAW,KAAK,OAAO;EACvB,WAAW,KAAK,KAAK;EACrB,WAAW,KAAK,IAAI;EACpB,WAAW,KAAK,MAAM;EACtB,WAAW,KAAK,QAAQ;CAC1B,GACA,GACF;AACF;AAEA,MAAM,cAAc,QAAqC;CACvD,IAAI,IAAI,SAAS,GAAG,OAAO;CAC3B,OAAO,KACL,KACA,MAAM,KAAK,MAAM,MAAM,GACvB,MAAM,KAAK,MAAM,EAAE,SAAS,CAAC,GAC7B,MAAM,KAAK,GAAG,CAChB;AACF;AAEA,MAAa,oCACX,aACqB;CACrB,MAAM,SAAS,SAAS,SAAS,QAAQ;CACzC,IAAI,UAAU,GACZ,MAAM,IAAI,MAAM,uCAAuC;CAIzD,MAAM,QAAQ,SADU,SAAS,MAAM,CAAC,CAAC,CAAC,KAAK,SAAS,QACnB;CACrC,IAAI,OAAO,UAAU,KAAK,GACxB,OAAO;EAAE,MAAM;EAAY;CAAM;CAInC,MAAM,UAAU,SADU,SAAS,QAAQ,CAAC,CAAC,CAAC,KAAK,SAAS,QACnB;CACzC,IAAI,OAAO,UAAU,OAAO,GAC1B,OAAO;EAAE,MAAM;EAAY;CAAQ;CAIrC,MAAM,UAAU,SADU,SAAS,QAAQ,CAAC,CAAC,CAAC,KAAK,SAAS,QACnB;CACzC,IAAI,OAAO,UAAU,OAAO,GAC1B,OAAO;EAAE,MAAM;EAAY;CAAQ;CAGrC,MAAM,IAAI,MACR,gEACF;AACF"}
@@ -1,8 +1,8 @@
1
1
  import { __exportAll } from "./_virtual/_rolldown/runtime.js";
2
+ import * as Data from "effect/Data";
2
3
  import * as Predicate from "effect/Predicate";
3
- import * as Result from "effect/Result";
4
4
  import * as Record from "effect/Record";
5
- import * as Data from "effect/Data";
5
+ import * as Result from "effect/Result";
6
6
  import * as IdScope from "@confect/core/IdScope";
7
7
  //#region src/DatabaseSchema.ts
8
8
  var DatabaseSchema_exports = /* @__PURE__ */ __exportAll({