@formancy/server-core 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { CHALLENGE_TTL_SECONDS, Challenge, DEFAULT_MAX_NUMBER, Solution, VerifyOutcome, decodeSolution, encodeSolution, hashOf, mintChallenge, solveChallenge, verifySolution } from "@formancy/challenge";
2
2
  import { Change, FormSchema } from "@formancy/spec";
3
+ import { CapabilitySource, Check } from "@formancy/core";
3
4
  import { SchemaError } from "@formancy/spec/validate";
4
- import { CapabilitySource } from "@formancy/core";
5
5
  //#region src/options-membership.d.ts
6
6
  /**
7
7
  * Checking that a sourced answer is one the deployment's own source offers.
@@ -606,41 +606,6 @@ interface WebhookHealth {
606
606
  }
607
607
  export declare function healthOf(webhook: WebhookRecord, now: Date): WebhookHealth;
608
608
  //#endregion
609
- //#region src/redos.d.ts
610
- /**
611
- * Refuse a form whose `pattern` values can be made to backtrack.
612
- *
613
- * A form author supplies these, and the server runs them against whatever a
614
- * submitter typed. That makes a regular expression an author-side denial of
615
- * service vector: one bad pattern, published once, and every submission after
616
- * it can be turned into unbounded CPU by anyone who can reach the form.
617
- *
618
- * Checked at PUBLISH time rather than at match time, because there is no way
619
- * to time out a JavaScript regular expression once it has started. The only
620
- * moment the cost can be refused is before the pattern is stored.
621
- *
622
- * The check is static — `recheck` analyses the expression rather than running
623
- * it — so it costs nothing per submission, and it found a polynomial case in
624
- * formancy's own built-in email format before it was ever pointed at a user's.
625
- */
626
- interface UnsafePattern {
627
- /** Data path of the field carrying it, e.g. `contacts[].code`. */
628
- path: string;
629
- pattern: string;
630
- /** `exponential` or `polynomial`, with the degree where there is one. */
631
- complexity: string;
632
- }
633
- /**
634
- * The patterns in this schema that an attacker could exploit, or an empty array
635
- * when there are none.
636
- *
637
- * A pattern `recheck` cannot decide about is ACCEPTED. Refusing on `unknown`
638
- * would make publishing depend on an analysis timeout, which is a worse failure
639
- * than the one being prevented — an author whose legitimate form stops
640
- * publishing intermittently has no way to act on that.
641
- */
642
- export declare function unsafePatterns(schema: FormSchema): Promise<UnsafePattern[]>;
643
- //#endregion
644
609
  //#region src/use-cases.d.ts
645
610
  /**
646
611
  * The backend's use-cases, framework-free.
@@ -653,6 +618,15 @@ interface ServerDeps {
653
618
  storage: Storage;
654
619
  newId(): string;
655
620
  nowIso(): string;
621
+ /**
622
+ * Validators this deployment answers, by the name a `check` rule gives.
623
+ *
624
+ * The same shape `optionsSources` takes, and the same rule: the document names
625
+ * a check, the deployment says how to answer it, and nothing in the engine
626
+ * fetches anything. A check a document names and a deployment has not supplied
627
+ * fails the field closed.
628
+ */
629
+ checks?: Record<string, Check>;
656
630
  /** The clock/randomness the ENGINE sees during replay. */
657
631
  capabilities: CapabilitySource;
658
632
  /**
@@ -681,45 +655,6 @@ interface ServerDeps {
681
655
  */
682
656
  optionsSources?: ServerOptionsSources;
683
657
  }
684
- type PublishOutcome = {
685
- ok: true;
686
- formId: string;
687
- versionId: string;
688
- version: number;
689
- schemaHash: string;
690
- } | {
691
- ok: false;
692
- kind: 'invalid_schema';
693
- errors?: SchemaError[];
694
- } | {
695
- ok: false;
696
- kind: 'invalid_logic';
697
- message: string;
698
- } | {
699
- ok: false;
700
- kind: 'unsafe_pattern';
701
- patterns: UnsafePattern[];
702
- } |
703
- /** The document names a list this deployment has never heard of. */
704
- {
705
- ok: false;
706
- kind: 'unknown_options_source';
707
- sources: string[];
708
- };
709
- /**
710
- * Publish a schema as a form's next version.
711
- *
712
- * This is the save gate: structural validation, then the ENGINE's own compile
713
- * — type-checked expressions, kind policies and the cycle graph — so a form
714
- * that can loop or read a ghost field is refused here and never persisted.
715
- * Republishing the identical document is idempotent, because "deploy again"
716
- * must never manufacture a version.
717
- */
718
- export declare function publishForm(deps: ServerDeps, input: {
719
- path: string;
720
- schema: unknown;
721
- actor?: Actor;
722
- }): Promise<PublishOutcome>;
723
658
  interface ResolvedForm {
724
659
  formId: string;
725
660
  versionId: string;
@@ -889,6 +824,41 @@ interface ListedVersion {
889
824
  * view rendering fifty full schemas would be its own denial of service. */
890
825
  export declare function listVersions(deps: ServerDeps, path: string): Promise<ListedVersion[] | undefined>;
891
826
  //#endregion
827
+ //#region src/redos.d.ts
828
+ /**
829
+ * Refuse a form whose `pattern` values can be made to backtrack.
830
+ *
831
+ * A form author supplies these, and the server runs them against whatever a
832
+ * submitter typed. That makes a regular expression an author-side denial of
833
+ * service vector: one bad pattern, published once, and every submission after
834
+ * it can be turned into unbounded CPU by anyone who can reach the form.
835
+ *
836
+ * Checked at PUBLISH time rather than at match time, because there is no way
837
+ * to time out a JavaScript regular expression once it has started. The only
838
+ * moment the cost can be refused is before the pattern is stored.
839
+ *
840
+ * The check is static — `recheck` analyses the expression rather than running
841
+ * it — so it costs nothing per submission, and it found a polynomial case in
842
+ * formancy's own built-in email format before it was ever pointed at a user's.
843
+ */
844
+ interface UnsafePattern {
845
+ /** Data path of the field carrying it, e.g. `contacts[].code`. */
846
+ path: string;
847
+ pattern: string;
848
+ /** `exponential` or `polynomial`, with the degree where there is one. */
849
+ complexity: string;
850
+ }
851
+ /**
852
+ * The patterns in this schema that an attacker could exploit, or an empty array
853
+ * when there are none.
854
+ *
855
+ * A pattern `recheck` cannot decide about is ACCEPTED. Refusing on `unknown`
856
+ * would make publishing depend on an analysis timeout, which is a worse failure
857
+ * than the one being prevented — an author whose legitimate form stops
858
+ * publishing intermittently has no way to act on that.
859
+ */
860
+ export declare function unsafePatterns(schema: FormSchema): Promise<UnsafePattern[]>;
861
+ //#endregion
892
862
  //#region src/testing/memory-storage.d.ts
893
863
  /**
894
864
  * The in-memory Storage — the second implementation that keeps the port
@@ -1093,5 +1063,101 @@ export declare function collectAbandonedFiles(storage: Storage, now: Date, after
1093
1063
  /** Re-exported so a host can see which paths a schema's file fields live at. */
1094
1064
  export declare function fileFieldPaths(schema: FormSchema): string[];
1095
1065
  //#endregion
1066
+ //#region src/publishing.d.ts
1067
+ /**
1068
+ * Publishing a form: the save gate, and who may overwrite whom.
1069
+ *
1070
+ * Its own file because `use-cases.ts` had become the place every family went,
1071
+ * and the size budget refused the next thing added to it — the entry already
1072
+ * said the seam was one use-case family per file, and this is the family.
1073
+ */
1074
+ type PublishOutcome = {
1075
+ ok: true;
1076
+ formId: string;
1077
+ versionId: string;
1078
+ version: number;
1079
+ schemaHash: string;
1080
+ /**
1081
+ * Things worth telling the publisher that are not grounds to refuse.
1082
+ *
1083
+ * Always present, empty when there is nothing to say, so a caller reads a
1084
+ * list rather than branching on whether there is one. Sentences rather
1085
+ * than codes: the only consumers are a person reading a CLI, an admin
1086
+ * screen or a log, and a code would need a catalogue nobody would write
1087
+ * ([0097](../../../docs/decisions/0097-a-publish-may-warn.md)).
1088
+ */
1089
+ warnings: readonly string[];
1090
+ } | {
1091
+ ok: false;
1092
+ kind: 'invalid_schema';
1093
+ errors?: SchemaError[];
1094
+ } | {
1095
+ ok: false;
1096
+ kind: 'invalid_logic';
1097
+ message: string;
1098
+ } | {
1099
+ ok: false;
1100
+ kind: 'unsafe_pattern';
1101
+ patterns: UnsafePattern[];
1102
+ } |
1103
+ /** The document names a list this deployment has never heard of. */
1104
+ {
1105
+ ok: false;
1106
+ kind: 'unknown_options_source';
1107
+ sources: string[];
1108
+ } |
1109
+ /**
1110
+ * Somebody else published while this editor was editing.
1111
+ *
1112
+ * The same kind and the same body the submission path uses, deliberately: a
1113
+ * client that already knows how to handle one stale version handles both.
1114
+ */
1115
+ {
1116
+ ok: false;
1117
+ kind: 'version_changed';
1118
+ current?: ResolvedForm;
1119
+ } |
1120
+ /**
1121
+ * This exact document is already a version of this form, and not the current
1122
+ * one — somebody republishing an older version to undo a bad publish.
1123
+ *
1124
+ * `UNIQUE (form_id, schema_hash)` is what makes republishing the CURRENT
1125
+ * document idempotent rather than a version factory, and it refuses this too:
1126
+ * without this branch the insert raised and the route answered **500**. A
1127
+ * published version is immutable and cannot be published twice
1128
+ * ([0025](../../../docs/decisions/0025-immutability-in-the-database.md)), so
1129
+ * the honest answer names the version it already is.
1130
+ */
1131
+ {
1132
+ ok: false;
1133
+ kind: 'already_published';
1134
+ version: number;
1135
+ };
1136
+ /**
1137
+ * Publish a schema as a form's next version.
1138
+ *
1139
+ * This is the save gate: structural validation, then the ENGINE's own compile
1140
+ * — type-checked expressions, kind policies and the cycle graph — so a form
1141
+ * that can loop or read a ghost field is refused here and never persisted.
1142
+ * Republishing the identical document is idempotent, because "deploy again"
1143
+ * must never manufacture a version.
1144
+ */
1145
+ export declare function publishForm(deps: ServerDeps, input: {
1146
+ path: string;
1147
+ schema: unknown;
1148
+ actor?: Actor;
1149
+ /**
1150
+ * The hash of the version this edit started from, when there was one.
1151
+ *
1152
+ * **Optional, and that is the decision.** A script, the CLI and an agent
1153
+ * publish a document they composed rather than one they opened, and have
1154
+ * nothing to declare; requiring it would make every one of them read the
1155
+ * current version first to satisfy a rule about editors. What declares is
1156
+ * the thing that OPENED a version — the builder — and declaring is how it
1157
+ * asks to be told it has been overtaken.
1158
+ */
1159
+ basedOnSchemaHash?: string;
1160
+ }): Promise<PublishOutcome>;
1161
+ //#endregion
1096
1162
  export { type Action, type Actor, type AttemptOutcome, type AuditAction, type AuditDraft, type AuditEntry, type AuthDeps, type AuthOutcome, type BreakerState, CHALLENGE_TTL_SECONDS, type Challenge, type ClaimOutcome, DEFAULT_MAX_NUMBER, type DeliveryHeaders, type DeliveryRecord, type DraftMigration, type DraftRecord, type FileRecord, type FormRecord, type FormVersionRecord, type ListedForm, type ListedSubmission, type ListedVersion, type MembershipOutcome, type OfferDeps, type OfferInput, type OfferOutcome, type OutboxDeps, type PublishOutcome, type ReplayOutcome, type ResolvedForm, type ResumeOutcome, type Role, type ServerDeps, type ServerOptionsSource, type ServerOptionsSources, type Solution, type Storage, type SubmissionOutcome, type SubmissionRecord, type UnsafePattern, type VerifyOutcome, type WebhookHealth, type WebhookRecord, decodeSolution, encodeSolution, hashOf, mintChallenge, solveChallenge, verifySolution };
1097
1163
  //# sourceMappingURL=index.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../src/options-membership.ts","../src/ports.ts","../src/auth.ts","../src/audit.ts","../src/outbox.ts","../src/breaker.ts","../src/redos.ts","../src/use-cases.ts","../src/testing/memory-storage.ts","../src/address.ts","../src/webhook.ts","../src/uploads.ts"],"mappings":"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"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../src/options-membership.ts","../src/ports.ts","../src/auth.ts","../src/audit.ts","../src/outbox.ts","../src/breaker.ts","../src/use-cases.ts","../src/redos.ts","../src/testing/memory-storage.ts","../src/address.ts","../src/webhook.ts","../src/uploads.ts","../src/publishing.ts"],"mappings":"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"}