@abloatai/transaction 0.56.0 → 0.57.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/CONVENTIONS.md +34 -0
- package/dist/coordination/index.d.ts +2 -2
- package/dist/coordination/index.d.ts.map +1 -1
- package/dist/coordination/index.js +1 -1
- package/dist/coordination/index.js.map +1 -1
- package/dist/coordination/schema.d.ts +0 -7
- package/dist/coordination/schema.d.ts.map +1 -1
- package/dist/coordination/schema.js +0 -4
- package/dist/coordination/schema.js.map +1 -1
- package/dist/errorCodes.d.ts +1 -0
- package/dist/errorCodes.d.ts.map +1 -1
- package/dist/errorCodes.js +1 -0
- package/dist/errorCodes.js.map +1 -1
- package/dist/readSetContext.d.ts.map +1 -1
- package/dist/readSetContext.js +8 -3
- package/dist/readSetContext.js.map +1 -1
- package/dist/resources/httpResources.d.ts +43 -22
- package/dist/resources/httpResources.d.ts.map +1 -1
- package/dist/resources/httpResources.js +81 -4
- package/dist/resources/httpResources.js.map +1 -1
- package/dist/resources/modelCreate.d.ts +21 -0
- package/dist/resources/modelCreate.d.ts.map +1 -0
- package/dist/resources/modelCreate.js +49 -0
- package/dist/resources/modelCreate.js.map +1 -0
- package/dist/resources/modelOperations.d.ts +24 -2
- package/dist/resources/modelOperations.d.ts.map +1 -1
- package/dist/resources/modelOperations.js.map +1 -1
- package/dist/resources/writeOptionsSchema.d.ts +14 -0
- package/dist/resources/writeOptionsSchema.d.ts.map +1 -1
- package/dist/resources/writeOptionsSchema.js +20 -0
- package/dist/resources/writeOptionsSchema.js.map +1 -1
- package/dist/schema/audit.d.ts +15 -0
- package/dist/schema/audit.d.ts.map +1 -0
- package/dist/schema/audit.js +90 -0
- package/dist/schema/audit.js.map +1 -0
- package/dist/schema/ddl.d.ts.map +1 -1
- package/dist/schema/ddl.js +68 -1
- package/dist/schema/ddl.js.map +1 -1
- package/dist/schema/index.d.ts +3 -1
- package/dist/schema/index.d.ts.map +1 -1
- package/dist/schema/index.js +3 -1
- package/dist/schema/index.js.map +1 -1
- package/dist/schema/model.d.ts +14 -0
- package/dist/schema/model.d.ts.map +1 -1
- package/dist/schema/model.js +2 -0
- package/dist/schema/model.js.map +1 -1
- package/dist/schema/openapi.d.ts.map +1 -1
- package/dist/schema/openapi.js +104 -2
- package/dist/schema/openapi.js.map +1 -1
- package/dist/schema/roles.d.ts +27 -0
- package/dist/schema/roles.d.ts.map +1 -1
- package/dist/schema/roles.js +40 -0
- package/dist/schema/roles.js.map +1 -1
- package/dist/schema/schema.d.ts +23 -4
- package/dist/schema/schema.d.ts.map +1 -1
- package/dist/schema/schema.js +30 -1
- package/dist/schema/schema.js.map +1 -1
- package/dist/schema/serialize.d.ts +4 -1
- package/dist/schema/serialize.d.ts.map +1 -1
- package/dist/schema/serialize.js +5 -1
- package/dist/schema/serialize.js.map +1 -1
- package/dist/schema/subject.d.ts +18 -0
- package/dist/schema/subject.d.ts.map +1 -0
- package/dist/schema/subject.js +27 -0
- package/dist/schema/subject.js.map +1 -0
- package/dist/server/adapter.d.ts +2 -0
- package/dist/server/adapter.d.ts.map +1 -1
- package/dist/server/readConfig.d.ts +3 -0
- package/dist/server/readConfig.d.ts.map +1 -1
- package/dist/server/readConfig.js +0 -21
- package/dist/server/readConfig.js.map +1 -1
- package/dist/source/adapters/drizzle.d.ts.map +1 -1
- package/dist/source/adapters/drizzle.js +37 -6
- package/dist/source/adapters/drizzle.js.map +1 -1
- package/dist/source/adapters/kysely.d.ts +2 -0
- package/dist/source/adapters/kysely.d.ts.map +1 -1
- package/dist/source/adapters/kysely.js +33 -5
- package/dist/source/adapters/kysely.js.map +1 -1
- package/dist/source/adapters/kyselyMutationCore.d.ts +4 -1
- package/dist/source/adapters/kyselyMutationCore.d.ts.map +1 -1
- package/dist/source/adapters/kyselyMutationCore.js +17 -8
- package/dist/source/adapters/kyselyMutationCore.js.map +1 -1
- package/dist/source/adapters/memory.d.ts.map +1 -1
- package/dist/source/adapters/memory.js +1 -0
- package/dist/source/adapters/memory.js.map +1 -1
- package/dist/source/adapters/prisma.d.ts.map +1 -1
- package/dist/source/adapters/prisma.js +59 -7
- package/dist/source/adapters/prisma.js.map +1 -1
- package/dist/source/contract.d.ts +14 -0
- package/dist/source/contract.d.ts.map +1 -1
- package/dist/source/contract.js +10 -0
- package/dist/source/contract.js.map +1 -1
- package/dist/source/factory.d.ts +7 -1
- package/dist/source/factory.d.ts.map +1 -1
- package/dist/source/factory.js +116 -5
- package/dist/source/factory.js.map +1 -1
- package/dist/source/index.d.ts +2 -1
- package/dist/source/index.d.ts.map +1 -1
- package/dist/source/index.js +1 -0
- package/dist/source/index.js.map +1 -1
- package/dist/source/migrations.d.ts.map +1 -1
- package/dist/source/migrations.js +21 -0
- package/dist/source/migrations.js.map +1 -1
- package/dist/source/subjectAuthorization.d.ts +16 -0
- package/dist/source/subjectAuthorization.d.ts.map +1 -0
- package/dist/source/subjectAuthorization.js +126 -0
- package/dist/source/subjectAuthorization.js.map +1 -0
- package/dist/source/types.d.ts +52 -2
- package/dist/source/types.d.ts.map +1 -1
- package/dist/source/types.js +1 -0
- package/dist/source/types.js.map +1 -1
- package/dist/syncLog/contract.d.ts +0 -6
- package/dist/syncLog/contract.d.ts.map +1 -1
- package/dist/syncLog/contract.js +0 -4
- package/dist/syncLog/contract.js.map +1 -1
- package/dist/testing/fixtures/httpResponses.d.ts +6 -0
- package/dist/testing/fixtures/httpResponses.d.ts.map +1 -1
- package/dist/testing/fixtures/httpResponses.js +1 -0
- package/dist/testing/fixtures/httpResponses.js.map +1 -1
- package/dist/transport/httpClient.d.ts +8 -1
- package/dist/transport/httpClient.d.ts.map +1 -1
- package/dist/transport/httpClient.js +51 -20
- package/dist/transport/httpClient.js.map +1 -1
- package/dist/transport/httpCommitRequest.d.ts +45 -0
- package/dist/transport/httpCommitRequest.d.ts.map +1 -0
- package/dist/transport/httpCommitRequest.js +67 -0
- package/dist/transport/httpCommitRequest.js.map +1 -0
- package/dist/transport/httpTransport.d.ts.map +1 -1
- package/dist/transport/httpTransport.js +69 -106
- package/dist/transport/httpTransport.js.map +1 -1
- package/dist/transport/httpTransportHelpers.d.ts +10 -0
- package/dist/transport/httpTransportHelpers.d.ts.map +1 -0
- package/dist/transport/httpTransportHelpers.js +46 -0
- package/dist/transport/httpTransportHelpers.js.map +1 -0
- package/dist/wire/apiLifecycle.d.ts +63 -0
- package/dist/wire/apiLifecycle.d.ts.map +1 -0
- package/dist/wire/apiLifecycle.js +89 -0
- package/dist/wire/apiLifecycle.js.map +1 -0
- package/dist/wire/commit.d.ts +74 -9
- package/dist/wire/commit.d.ts.map +1 -1
- package/dist/wire/commit.js +13 -1
- package/dist/wire/commit.js.map +1 -1
- package/dist/wire/index.d.ts +5 -2
- package/dist/wire/index.d.ts.map +1 -1
- package/dist/wire/index.js +12 -1
- package/dist/wire/index.js.map +1 -1
- package/dist/wire/rateLimit.d.ts +82 -0
- package/dist/wire/rateLimit.d.ts.map +1 -0
- package/dist/wire/rateLimit.js +142 -0
- package/dist/wire/rateLimit.js.map +1 -0
- package/package.json +1 -1
- package/src/coordination/index.ts +0 -2
- package/src/coordination/schema.ts +0 -7
- package/src/errorCodes.ts +6 -0
- package/src/readSetContext.ts +8 -2
- package/src/resources/httpResources.ts +116 -25
- package/src/resources/modelCreate.ts +73 -0
- package/src/resources/modelOperations.ts +29 -2
- package/src/resources/writeOptionsSchema.ts +28 -0
- package/src/schema/audit.ts +121 -0
- package/src/schema/ddl.ts +71 -1
- package/src/schema/index.ts +16 -0
- package/src/schema/model.ts +17 -0
- package/src/schema/openapi.ts +123 -2
- package/src/schema/roles.ts +53 -0
- package/src/schema/schema.ts +68 -3
- package/src/schema/serialize.ts +8 -1
- package/src/schema/subject.ts +43 -0
- package/src/server/adapter.ts +2 -0
- package/src/server/readConfig.ts +4 -0
- package/src/source/adapters/drizzle.ts +50 -6
- package/src/source/adapters/kysely.ts +47 -4
- package/src/source/adapters/kyselyMutationCore.ts +21 -9
- package/src/source/adapters/memory.ts +1 -0
- package/src/source/adapters/prisma.ts +70 -7
- package/src/source/contract.ts +11 -0
- package/src/source/factory.ts +141 -5
- package/src/source/index.ts +6 -0
- package/src/source/migrations.ts +21 -0
- package/src/source/subjectAuthorization.ts +182 -0
- package/src/source/types.ts +56 -2
- package/src/syncLog/contract.ts +0 -7
- package/src/testing/fixtures/httpResponses.ts +7 -0
- package/src/transport/httpClient.ts +85 -23
- package/src/transport/httpCommitRequest.ts +104 -0
- package/src/transport/httpTransport.ts +92 -142
- package/src/transport/httpTransportHelpers.ts +63 -0
- package/src/wire/apiLifecycle.ts +94 -0
- package/src/wire/commit.ts +16 -1
- package/src/wire/index.ts +31 -0
- package/src/wire/rateLimit.ts +155 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrations.js","sourceRoot":"","sources":["../../src/source/migrations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH;;;;;;;;;GASG;AACH,SAAS,UAAU,CAAC,KAAa;IAC/B,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC;AAC1C,CAAC;AAED,SAAS,YAAY,CAAC,KAAa;IACjC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC;AAC1C,CAAC;AAED,SAAS,SAAS,CAAC,MAAc,EAAE,QAAgB;IACjD,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;AACzD,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAc,EAAE,MAAc,EAAE,UAAkB;IAC3E,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IACrD,OAAO;yCACgC,YAAY,CAAC,MAAM,CAAC;;;;6CAIhB,MAAM;;kBAEjC,MAAM,eAAe,UAAU,CAAC,MAAM,CAAC,IAAI,UAAU;;QAE/D,CAAC;AACT,CAAC;AAED;;;kCAGkC;AAClC,MAAM,UAAU,2BAA2B,CAAC,MAAM,GAAG,QAAQ;IAC3D,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IACrD,OAAO;QACL;YACE,IAAI,EAAE,kBAAkB;YACxB,EAAE,EAAE,8BAA8B,MAAM;;;;;;GAM3C;SACE;QACD;YACE,IAAI,EAAE,+BAA+B;YACrC,uEAAuE;YACvE,uEAAuE;YACvE,oDAAoD;YACpD,EAAE;YACF,mEAAmE;YACnE,mEAAmE;YACnE,sEAAsE;YACtE,sEAAsE;YACtE,0EAA0E;YAC1E,uEAAuE;YACvE,uEAAuE;YACvE,EAAE,EAAE,iBAAiB,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,CAAC;SACtD;QACD;YACE,IAAI,EAAE,sCAAsC;YAC5C,EAAE,EAAE,iBAAiB,CAAC,MAAM,EAAE,YAAY,EAAE,yCAAyC,CAAC;SACvF;KACF,CAAC;AACJ,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,wBAAwB;IACtC,OAAO;QACL;YACE,IAAI,EAAE,aAAa;YACnB,EAAE,EAAE
|
|
1
|
+
{"version":3,"file":"migrations.js","sourceRoot":"","sources":["../../src/source/migrations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH;;;;;;;;;GASG;AACH,SAAS,UAAU,CAAC,KAAa;IAC/B,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC;AAC1C,CAAC;AAED,SAAS,YAAY,CAAC,KAAa;IACjC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC;AAC1C,CAAC;AAED,SAAS,SAAS,CAAC,MAAc,EAAE,QAAgB;IACjD,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;AACzD,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAc,EAAE,MAAc,EAAE,UAAkB;IAC3E,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IACrD,OAAO;yCACgC,YAAY,CAAC,MAAM,CAAC;;;;6CAIhB,MAAM;;kBAEjC,MAAM,eAAe,UAAU,CAAC,MAAM,CAAC,IAAI,UAAU;;QAE/D,CAAC;AACT,CAAC;AAED;;;kCAGkC;AAClC,MAAM,UAAU,2BAA2B,CAAC,MAAM,GAAG,QAAQ;IAC3D,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IACrD,OAAO;QACL;YACE,IAAI,EAAE,kBAAkB;YACxB,EAAE,EAAE,8BAA8B,MAAM;;;;;;GAM3C;SACE;QACD;YACE,IAAI,EAAE,+BAA+B;YACrC,uEAAuE;YACvE,uEAAuE;YACvE,oDAAoD;YACpD,EAAE;YACF,mEAAmE;YACnE,mEAAmE;YACnE,sEAAsE;YACtE,sEAAsE;YACtE,0EAA0E;YAC1E,uEAAuE;YACvE,uEAAuE;YACvE,EAAE,EAAE,iBAAiB,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,CAAC;SACtD;QACD;YACE,IAAI,EAAE,sCAAsC;YAC5C,EAAE,EAAE,iBAAiB,CAAC,MAAM,EAAE,YAAY,EAAE,yCAAyC,CAAC;SACvF;KACF,CAAC;AACJ,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,wBAAwB;IACtC,OAAO;QACL;YACE,IAAI,EAAE,aAAa;YACnB,EAAE,EAAE;;;;;;;;;;;;;;GAcP;SACE;QACD;YACE,IAAI,EAAE,yBAAyB;YAC/B,EAAE,EAAE;;;gDAGsC;SAC3C;QACD;YACE,IAAI,EAAE,yBAAyB;YAC/B,EAAE,EAAE;;;;;;;;;;;;;;;;yCAgB+B;SACpC;KACF,CAAC;AACJ,CAAC;AAED,0DAA0D;AAC1D,MAAM,UAAU,sBAAsB;IACpC,OAAO,CAAC,GAAG,2BAA2B,EAAE,EAAE,GAAG,wBAAwB,EAAE,CAAC,CAAC;AAC3E,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type Schema, type SchemaRecord, type SubjectRule } from '../schema/index.js';
|
|
2
|
+
import type { AdapterReadRequest, Row } from './adapter.js';
|
|
3
|
+
import type { ChangeSet, Operation } from './contract.js';
|
|
4
|
+
export declare function sourceSubjectRule<S extends SchemaRecord>(schema: Schema<S>, model: string): SubjectRule | undefined;
|
|
5
|
+
/** Derive the durable record routes while the row is transactionally visible. */
|
|
6
|
+
export declare function sourceSyncGroups<S extends SchemaRecord>(schema: Schema<S>, model: string, row: Row): readonly string[];
|
|
7
|
+
/** Subject values represented by a trusted group set, preserving group order. */
|
|
8
|
+
export declare function sourceSubjectValues(rule: SubjectRule | undefined, groups: readonly string[] | undefined): readonly string[] | undefined;
|
|
9
|
+
export declare function sourceSubjectCreateLockKey(operation: Operation): string;
|
|
10
|
+
/** Acquire every absent-key CREATE lock in canonical order. */
|
|
11
|
+
export declare function lockSourceSubjectCreates<S extends SchemaRecord>(schema: Schema<S>, change: ChangeSet, acquire: (operation: Operation, key: string) => Promise<void>): Promise<void>;
|
|
12
|
+
/** Translate ORM/driver primary-key conflicts without exposing the winning row. */
|
|
13
|
+
export declare function rethrowStrictCreateConflict(error: unknown, operation: Operation): never;
|
|
14
|
+
export declare function authorizeSourceRead<S extends SchemaRecord>(schema: Schema<S>, req: AdapterReadRequest, rows: readonly Row[]): readonly Row[];
|
|
15
|
+
export declare function authorizeSourceChange<S extends SchemaRecord>(schema: Schema<S>, change: ChangeSet, load: (operation: Operation) => Promise<Row | null>): Promise<void>;
|
|
16
|
+
//# sourceMappingURL=subjectAuthorization.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subjectAuthorization.d.ts","sourceRoot":"","sources":["../../src/source/subjectAuthorization.ts"],"names":[],"mappings":"AACA,OAAO,EAML,KAAK,MAAM,EACX,KAAK,YAAY,EACjB,KAAK,WAAW,EACjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,kBAAkB,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAC5D,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAgB1D,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,YAAY,EACtD,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EACjB,KAAK,EAAE,MAAM,GACZ,WAAW,GAAG,SAAS,CAGzB;AAED,iFAAiF;AACjF,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,YAAY,EACrD,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EACjB,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,GAAG,GACP,SAAS,MAAM,EAAE,CA+BnB;AAED,iFAAiF;AACjF,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,WAAW,GAAG,SAAS,EAC7B,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,GACpC,SAAS,MAAM,EAAE,GAAG,SAAS,CAS/B;AAwBD,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,SAAS,GAAG,MAAM,CAEvE;AAED,+DAA+D;AAC/D,wBAAsB,wBAAwB,CAAC,CAAC,SAAS,YAAY,EACnE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EACjB,MAAM,EAAE,SAAS,EACjB,OAAO,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAC5D,OAAO,CAAC,IAAI,CAAC,CAIf;AAMD,mFAAmF;AACnF,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,GAAG,KAAK,CAWvF;AAED,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,YAAY,EACxD,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EACjB,GAAG,EAAE,kBAAkB,EACvB,IAAI,EAAE,SAAS,GAAG,EAAE,GACnB,SAAS,GAAG,EAAE,CAOhB;AAMD,wBAAsB,qBAAqB,CAAC,CAAC,SAAS,YAAY,EAChE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EACjB,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,GAClD,OAAO,CAAC,IAAI,CAAC,CAgBf"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { AbloPermissionError, AbloValidationError } from '../errors.js';
|
|
2
|
+
import { composeEntitySyncGroups, syncGroupsForRow, InvalidRecordSubjectError, scopeKindOf, subjectAuthorized, } from '../schema/index.js';
|
|
3
|
+
function sourceModelEntry(schema, model) {
|
|
4
|
+
return Object.entries(schema.models).find(([key, def]) => key === model || key.toLowerCase() === model.toLowerCase() ||
|
|
5
|
+
def.typename === model || def.typename?.toLowerCase() === model.toLowerCase());
|
|
6
|
+
}
|
|
7
|
+
function deny() {
|
|
8
|
+
throw new AbloPermissionError('The resolved scope does not cover the requested row.', {
|
|
9
|
+
code: 'capability_scope_denied',
|
|
10
|
+
httpStatus: 403,
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
export function sourceSubjectRule(schema, model) {
|
|
14
|
+
const entry = sourceModelEntry(schema, model);
|
|
15
|
+
return entry?.[1].subject;
|
|
16
|
+
}
|
|
17
|
+
/** Derive the durable record routes while the row is transactionally visible. */
|
|
18
|
+
export function sourceSyncGroups(schema, model, row) {
|
|
19
|
+
const entry = sourceModelEntry(schema, model);
|
|
20
|
+
if (!entry)
|
|
21
|
+
return [];
|
|
22
|
+
const [key, definition] = entry;
|
|
23
|
+
const parents = [];
|
|
24
|
+
const selfKind = scopeKindOf(definition, key);
|
|
25
|
+
for (const relation of Object.values(definition.relations ?? {})) {
|
|
26
|
+
if (relation.type !== 'belongsTo' || relation.options?.parent !== true)
|
|
27
|
+
continue;
|
|
28
|
+
const target = schema.models[relation.target];
|
|
29
|
+
const kind = target && scopeKindOf(target, relation.target);
|
|
30
|
+
if (kind)
|
|
31
|
+
parents.push({ kind, field: relation.foreignKey });
|
|
32
|
+
}
|
|
33
|
+
try {
|
|
34
|
+
return syncGroupsForRow({
|
|
35
|
+
selfKind,
|
|
36
|
+
parents,
|
|
37
|
+
...(definition.subject
|
|
38
|
+
? { subject: { kind: definition.subject.group, field: definition.subject.field } }
|
|
39
|
+
: {}),
|
|
40
|
+
}, row, composeEntitySyncGroups(row, definition));
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
if (!(error instanceof InvalidRecordSubjectError))
|
|
44
|
+
throw error;
|
|
45
|
+
throw new AbloValidationError(`Source row ${model}/${String(row.id ?? '')} lacks subject field "${error.field}".`, { code: 'source_event_invalid', cause: error });
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/** Subject values represented by a trusted group set, preserving group order. */
|
|
49
|
+
export function sourceSubjectValues(rule, groups) {
|
|
50
|
+
if (!rule)
|
|
51
|
+
return undefined;
|
|
52
|
+
const prefix = `${rule.group}:`;
|
|
53
|
+
return [...new Set((groups ?? [])
|
|
54
|
+
.filter((group) => group.startsWith(prefix))
|
|
55
|
+
.map((group) => group.slice(prefix.length))
|
|
56
|
+
.filter((value) => value.length > 0))];
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Stable absent-row lock keys for caller-selected subject-scoped CREATE ids.
|
|
60
|
+
* Adapters acquire these in sorted order before loading current rows, so two
|
|
61
|
+
* authorized writers cannot both observe an absent id. Database uniqueness is
|
|
62
|
+
* still the final boundary against external writers that ignore this lock.
|
|
63
|
+
*/
|
|
64
|
+
function sourceSubjectCreateLockOperations(schema, change) {
|
|
65
|
+
return change.operations
|
|
66
|
+
.filter((operation) => operation.type === 'CREATE' &&
|
|
67
|
+
typeof operation.id === 'string' &&
|
|
68
|
+
operation.id.length > 0 &&
|
|
69
|
+
sourceSubjectRule(schema, operation.model) !== undefined)
|
|
70
|
+
.sort((left, right) => `${left.model.toLowerCase()}\u0000${left.id}`.localeCompare(`${right.model.toLowerCase()}\u0000${right.id}`));
|
|
71
|
+
}
|
|
72
|
+
export function sourceSubjectCreateLockKey(operation) {
|
|
73
|
+
return `ablo:subject-create:${operation.model.toLowerCase()}:${operation.id ?? ''}`;
|
|
74
|
+
}
|
|
75
|
+
/** Acquire every absent-key CREATE lock in canonical order. */
|
|
76
|
+
export async function lockSourceSubjectCreates(schema, change, acquire) {
|
|
77
|
+
for (const operation of sourceSubjectCreateLockOperations(schema, change)) {
|
|
78
|
+
await acquire(operation, sourceSubjectCreateLockKey(operation));
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
function errorCode(error) {
|
|
82
|
+
return error && typeof error === 'object' ? error.code : undefined;
|
|
83
|
+
}
|
|
84
|
+
/** Translate ORM/driver primary-key conflicts without exposing the winning row. */
|
|
85
|
+
export function rethrowStrictCreateConflict(error, operation) {
|
|
86
|
+
const code = errorCode(error) ?? errorCode(error && typeof error === 'object' ? error.cause : undefined);
|
|
87
|
+
if (code === '23505' || code === 'P2002') {
|
|
88
|
+
throw new AbloValidationError(`A row already exists for ${operation.model}/${operation.id ?? ''}.`, { code: 'entity_already_exists', httpStatus: 409, cause: error });
|
|
89
|
+
}
|
|
90
|
+
throw error;
|
|
91
|
+
}
|
|
92
|
+
export function authorizeSourceRead(schema, req, rows) {
|
|
93
|
+
const rule = sourceSubjectRule(schema, req.model);
|
|
94
|
+
if (!rule)
|
|
95
|
+
return rows;
|
|
96
|
+
const groups = req.scope?.syncGroups;
|
|
97
|
+
const authorized = rows.filter((row) => subjectAuthorized(rule, row, groups));
|
|
98
|
+
if (req.kind === 'load' && rows.length > 0 && authorized.length === 0)
|
|
99
|
+
deny();
|
|
100
|
+
return authorized;
|
|
101
|
+
}
|
|
102
|
+
function authorizePayload(rule, row, groups) {
|
|
103
|
+
if (!subjectAuthorized(rule, row, groups))
|
|
104
|
+
deny();
|
|
105
|
+
}
|
|
106
|
+
export async function authorizeSourceChange(schema, change, load) {
|
|
107
|
+
for (const operation of change.operations) {
|
|
108
|
+
const rule = sourceSubjectRule(schema, operation.model);
|
|
109
|
+
if (!rule)
|
|
110
|
+
continue;
|
|
111
|
+
const current = operation.id ? await load(operation) : null;
|
|
112
|
+
if (current)
|
|
113
|
+
authorizePayload(rule, current, change.scope?.syncGroups);
|
|
114
|
+
if (operation.type === 'CREATE') {
|
|
115
|
+
authorizePayload(rule, operation.input ?? {}, change.scope?.syncGroups);
|
|
116
|
+
}
|
|
117
|
+
else if (!current) {
|
|
118
|
+
deny();
|
|
119
|
+
}
|
|
120
|
+
if (current && operation.input && Object.hasOwn(operation.input, rule.field) &&
|
|
121
|
+
!Object.is(current[rule.field], operation.input[rule.field])) {
|
|
122
|
+
deny();
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=subjectAuthorization.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subjectAuthorization.js","sourceRoot":"","sources":["../../src/source/subjectAuthorization.ts"],"names":[],"mappings":"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"}
|
package/dist/source/types.d.ts
CHANGED
|
@@ -54,8 +54,9 @@ export type SourceListResult<Row> = readonly Row[] | SourceListPage<Row>;
|
|
|
54
54
|
* see. Ablo attaches this so your `authorize` and model handlers can reject
|
|
55
55
|
* calls that fall outside the participant's permitted sync groups.
|
|
56
56
|
*
|
|
57
|
-
*
|
|
58
|
-
* handlers
|
|
57
|
+
* The ORM adapters enforce schema-declared subject rules from this trusted
|
|
58
|
+
* scope. Custom handlers receive the same signed facts; Ablo also checks their
|
|
59
|
+
* returned rows and preflights writes before forwarding the customer transaction.
|
|
59
60
|
*/
|
|
60
61
|
export interface SourceRequestContext {
|
|
61
62
|
readonly participantId?: string;
|
|
@@ -65,6 +66,14 @@ export interface SourceRequestContext {
|
|
|
65
66
|
readonly branchId?: string;
|
|
66
67
|
/** Trusted project selected by the authenticating credential. */
|
|
67
68
|
readonly projectId?: string;
|
|
69
|
+
readonly syncGroups?: readonly string[];
|
|
70
|
+
/**
|
|
71
|
+
* @deprecated Renamed to {@link SourceRequestContext.syncGroups}. Removed in
|
|
72
|
+
* 0.58.0. Ablo populates both spellings with the same value for this release,
|
|
73
|
+
* so an adapter still reading this one gets the groups rather than
|
|
74
|
+
* `undefined`, which on a routing field would read as "no groups" rather than
|
|
75
|
+
* as a missing field.
|
|
76
|
+
*/
|
|
68
77
|
readonly requiredSyncGroups?: readonly string[];
|
|
69
78
|
}
|
|
70
79
|
/**
|
|
@@ -94,6 +103,8 @@ export interface SourceDelta {
|
|
|
94
103
|
readonly type: SourceOperation['type'];
|
|
95
104
|
/** The changed row, in the key shape {@link SourceEvent.data} defines. */
|
|
96
105
|
readonly data?: Record<string, unknown> | null;
|
|
106
|
+
/** Exact record routes derived inside the write transaction. */
|
|
107
|
+
readonly syncGroups?: readonly string[];
|
|
97
108
|
readonly transactionId?: string | null;
|
|
98
109
|
}
|
|
99
110
|
/**
|
|
@@ -133,6 +144,8 @@ export interface SourceEvent {
|
|
|
133
144
|
* a tenant boundary.
|
|
134
145
|
*/
|
|
135
146
|
readonly data?: Record<string, unknown> | null;
|
|
147
|
+
/** Exact record routes captured while the changed row was transactionally visible. */
|
|
148
|
+
readonly syncGroups: readonly string[];
|
|
136
149
|
/**
|
|
137
150
|
* The tenant this event belongs to. Populate it from the row's organization
|
|
138
151
|
* column for multi-tenant data; a single-tenant source may omit it and let
|
|
@@ -176,6 +189,8 @@ export interface SourceEventForOperationOptions {
|
|
|
176
189
|
* valid but leaves less for clients to hydrate from in realtime.
|
|
177
190
|
*/
|
|
178
191
|
readonly data?: Record<string, unknown> | null;
|
|
192
|
+
/** Exact record routes derived inside the write transaction. */
|
|
193
|
+
readonly syncGroups: readonly string[];
|
|
179
194
|
/**
|
|
180
195
|
* @deprecated Legacy echo identity. Prefer the explicit correlation fields.
|
|
181
196
|
*/
|
|
@@ -341,6 +356,20 @@ export interface SourceModelHandlers<Row, CreateInput, TAuth = unknown> {
|
|
|
341
356
|
readonly query: SourceListQuery;
|
|
342
357
|
readonly context: SourceHandlerContext<TAuth>;
|
|
343
358
|
}): Promise<SourceListResult<Row>> | SourceListResult<Row>;
|
|
359
|
+
/**
|
|
360
|
+
* Subject-aware list boundary. The handler MUST apply `subject.values` in
|
|
361
|
+
* its database predicate before ordering, cursoring, or limiting. A model
|
|
362
|
+
* declaring `subject` is served only through this hook; plain `list()` is
|
|
363
|
+
* deliberately not accepted because post-page filtering is incomplete.
|
|
364
|
+
*/
|
|
365
|
+
subjectList?(params: {
|
|
366
|
+
readonly query: SourceListQuery;
|
|
367
|
+
readonly subject: {
|
|
368
|
+
readonly field: string;
|
|
369
|
+
readonly values: readonly string[];
|
|
370
|
+
};
|
|
371
|
+
readonly context: SourceHandlerContext<TAuth>;
|
|
372
|
+
}): Promise<SourceListResult<Row>> | SourceListResult<Row>;
|
|
344
373
|
/**
|
|
345
374
|
* Apply one or more operations for this model within your own database
|
|
346
375
|
* transaction. Your handler must be idempotent on the scoped server
|
|
@@ -360,6 +389,27 @@ export interface SourceModelHandlers<Row, CreateInput, TAuth = unknown> {
|
|
|
360
389
|
}): Promise<SourceCommitResult<Row>> | SourceCommitResult<Row>;
|
|
361
390
|
}
|
|
362
391
|
export type SourceCommitHandler<TAuth = unknown> = (params: SourceCommitParams<TAuth>) => Promise<SourceCommitResult> | SourceCommitResult;
|
|
392
|
+
export interface SourceSubjectTransactionBoundary {
|
|
393
|
+
/**
|
|
394
|
+
* Serialize a caller-selected CREATE id even when no row exists yet. This
|
|
395
|
+
* must be an absent-key-capable transaction lock (for example a Postgres
|
|
396
|
+
* transaction advisory lock), acquired on the SAME transaction as load and
|
|
397
|
+
* commit. It coordinates framework writers; `commit` must still reject a
|
|
398
|
+
* database uniqueness conflict as `entity_already_exists`, because external
|
|
399
|
+
* writers do not participate in advisory locking.
|
|
400
|
+
*/
|
|
401
|
+
readonly lockCreate: (operation: SourceOperation) => Promise<void>;
|
|
402
|
+
/** Lock and return the current row on the SAME transaction used by commit. */
|
|
403
|
+
readonly load: (operation: SourceOperation) => Promise<Record<string, unknown> | null>;
|
|
404
|
+
/** Apply the complete batch on that transaction after authorization succeeds. */
|
|
405
|
+
readonly commit: () => Promise<SourceCommitResult>;
|
|
406
|
+
}
|
|
407
|
+
/**
|
|
408
|
+
* Transaction owner for hand-written subject-scoped commits. Open one database
|
|
409
|
+
* transaction, then call `run` with load/commit functions bound to it. `run`
|
|
410
|
+
* performs authorization first and invokes commit only after it succeeds.
|
|
411
|
+
*/
|
|
412
|
+
export type SourceSubjectTransactionHandler<TAuth = unknown> = (params: SourceCommitParams<TAuth>, run: (boundary: SourceSubjectTransactionBoundary) => Promise<SourceCommitResult>) => Promise<SourceCommitResult>;
|
|
363
413
|
export type SourceApiKey = string | ((context: SourceAuthorizeContext) => Promise<string> | string);
|
|
364
414
|
export interface SourceLoadRequest {
|
|
365
415
|
readonly type: 'load';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/source/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAClF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE/D,yDAAyD;AACzD,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;AAE/D;;;;GAIG;AACH,MAAM,MAAM,WAAW,GACnB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,CAAC,GAChD,SAAS;IACP,KAAK,EAAE,MAAM;IACb,EAAE,EACE,GAAG,GACH,IAAI,GACJ,GAAG,GACH,IAAI,GACJ,GAAG,GACH,IAAI,GACJ,IAAI,GACJ,QAAQ,GACR,IAAI,GACJ,QAAQ,GACR,MAAM,GACN,UAAU,GACV,OAAO,GACP,WAAW;IACf,KAAK,EAAE,eAAe,GAAG,SAAS,eAAe,EAAE;CACpD,CAAC;AAEN,yGAAyG;AACzG,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,WAAW,EAAE,CAAC;IACxC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IAChC,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;GAIG;AACH,MAAM,WAAW,cAAc,CAAC,GAAG;IACjC,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,EAAE,CAAC;IAC9B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,+FAA+F;AAC/F,MAAM,MAAM,gBAAgB,CAAC,GAAG,IAC5B,SAAS,GAAG,EAAE,GACd,cAAc,CAAC,GAAG,CAAC,CAAC;AAExB
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/source/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,mBAAmB,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAClF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE/D,yDAAyD;AACzD,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;AAE/D;;;;GAIG;AACH,MAAM,MAAM,WAAW,GACnB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,CAAC,GAChD,SAAS;IACP,KAAK,EAAE,MAAM;IACb,EAAE,EACE,GAAG,GACH,IAAI,GACJ,GAAG,GACH,IAAI,GACJ,GAAG,GACH,IAAI,GACJ,IAAI,GACJ,QAAQ,GACR,IAAI,GACJ,QAAQ,GACR,MAAM,GACN,UAAU,GACV,OAAO,GACP,WAAW;IACf,KAAK,EAAE,eAAe,GAAG,SAAS,eAAe,EAAE;CACpD,CAAC;AAEN,yGAAyG;AACzG,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,WAAW,EAAE,CAAC;IACxC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IAChC,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;GAIG;AACH,MAAM,WAAW,cAAc,CAAC,GAAG;IACjC,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,EAAE,CAAC;IAC9B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,+FAA+F;AAC/F,MAAM,MAAM,gBAAgB,CAAC,GAAG,IAC5B,SAAS,GAAG,EAAE,GACd,cAAc,CAAC,GAAG,CAAC,CAAC;AAExB;;;;;;;;GAQG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,eAAe,CAAC,EAAE,eAAe,CAAC;IAC3C,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,kEAAkE;IAClE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,iEAAiE;IACjE,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC;;;;;;OAMG;IACH,QAAQ,CAAC,kBAAkB,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACjD;AAED;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,mBAAmB,CAAC;IACnC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAChD,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAChD,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,QAAQ,CAAC,OAAO,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;CACvC;AAED;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC;IACvC,0EAA0E;IAC1E,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC/C,gEAAgE;IAChE,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACxC;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,WAAW;IAC1B;;;OAGG;IACH,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC;IACvC;;;;;;;;;;;;;;;OAeG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC/C,sFAAsF;IACtF,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC;;;;;OAKG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC;;;OAGG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,qEAAqE;IACrE,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,kEAAkE;IAClE,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC;;;;OAIG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,iDAAiD;AACjD,MAAM,WAAW,8BAA8B;IAC7C;;;OAGG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,eAAe,CAAC;IACpC;;;OAGG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;;OAKG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC/C,gEAAgE;IAChE,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC;;OAEG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,0DAA0D;IAC1D,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACrC;AAED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,8BAA8B,GACtC,WAAW,CAuBb;AAUD,oEAAoE;AACpE,MAAM,WAAW,kBAAkB,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC/D;;;OAGG;IACH,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,GAAG,EAAE,CAAC;IAC/B;;;OAGG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,WAAW,EAAE,CAAC;CAC1C;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B;;;;OAIG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,wEAAwE;AACxE,eAAO,MAAM,gCAAgC,SAAS,CAAC;AAEvD;;;;;GAKG;AACH,eAAO,MAAM,mCAAmC,MAAM,CAAC;AAEvD,mFAAmF;AACnF,eAAO,MAAM,+BAA+B,MAAM,CAAC;AAEnD,6EAA6E;AAC7E,eAAO,MAAM,kCAAkC,QAAa,CAAC;AAE7D,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,MAAM,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IACjC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAED,oEAAoE;AACpE,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IACpB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,UAAU,EAAE,SAAS,yBAAyB,EAAE,CAAC;CAC3D;AAED,uEAAuE;AACvE,MAAM,WAAW,kBAAkB,CAAC,KAAK,GAAG,OAAO;IACjD,QAAQ,CAAC,UAAU,EAAE,SAAS,eAAe,EAAE,CAAC;IAChD,wDAAwD;IACxD,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,wDAAwD;IACxD,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,0EAA0E;IAC1E,QAAQ,CAAC,IAAI,CAAC,EAAE,gBAAgB,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,oBAAoB,CAAC,KAAK,CAAC,CAAC;CAC/C;AAED;;;;GAIG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEhE,0FAA0F;AAC1F,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,CAAC;IACxC;;;;OAIG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;;GAGG;AACH,MAAM,MAAM,mBAAmB,CAAC,KAAK,GAAG,OAAO,IAAI,CAAC,MAAM,EAAE;IAC1D;;;;OAIG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB;;;OAGG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,oBAAoB,CAAC,KAAK,CAAC,CAAC;CAC/C,KAAK,OAAO,CAAC,kBAAkB,CAAC,GAAG,kBAAkB,CAAC;AAEvD,2GAA2G;AAC3G,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,oBAAoB,CAAC,KAAK,GAAG,OAAO;IACnD,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IACrB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B;;;;;;OAMG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;;;;;;OASG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,oBAAoB,CAAC;CACvC;AAED,MAAM,WAAW,mBAAmB,CAAC,GAAG,EAAE,WAAW,EAAE,KAAK,GAAG,OAAO;IACpE,IAAI,CAAC,CAAC,MAAM,EAAE;QACZ,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,OAAO,EAAE,oBAAoB,CAAC,KAAK,CAAC,CAAC;KAC/C,GAAG,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC;IAErC,IAAI,CAAC,CAAC,MAAM,EAAE;QACZ,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAC;QAChC,QAAQ,CAAC,OAAO,EAAE,oBAAoB,CAAC,KAAK,CAAC,CAAC;KAC/C,GACG,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,GAC9B,gBAAgB,CAAC,GAAG,CAAC,CAAC;IAE1B;;;;;OAKG;IACH,WAAW,CAAC,CAAC,MAAM,EAAE;QACnB,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAC;QAChC,QAAQ,CAAC,OAAO,EAAE;YAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;YAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAA;SAAE,CAAC;QACjF,QAAQ,CAAC,OAAO,EAAE,oBAAoB,CAAC,KAAK,CAAC,CAAC;KAC/C,GAAG,OAAO,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;IAE3D;;;;OAIG;IACH,MAAM,CAAC,CAAC,MAAM,EAAE;QACd,QAAQ,CAAC,UAAU,EAAE,SAAS,eAAe,EAAE,CAAC;QAChD,wDAAwD;QACxD,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;QAChC,wDAAwD;QACxD,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAC7B,uEAAuE;QACvE,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;QAC7B,sEAAsE;QACtE,QAAQ,CAAC,IAAI,CAAC,EAAE,gBAAgB,CAAC;QACjC,QAAQ,CAAC,OAAO,EAAE,oBAAoB,CAAC,KAAK,CAAC,CAAC;KAC/C,GAAG,OAAO,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;CAChE;AAED,MAAM,MAAM,mBAAmB,CAAC,KAAK,GAAG,OAAO,IAAI,CACjD,MAAM,EAAE,kBAAkB,CAAC,KAAK,CAAC,KAC9B,OAAO,CAAC,kBAAkB,CAAC,GAAG,kBAAkB,CAAC;AAEtD,MAAM,WAAW,gCAAgC;IAC/C;;;;;;;OAOG;IACH,QAAQ,CAAC,UAAU,EAAE,CAAC,SAAS,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACnE,8EAA8E;IAC9E,QAAQ,CAAC,IAAI,EAAE,CAAC,SAAS,EAAE,eAAe,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;IACvF,iFAAiF;IACjF,QAAQ,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC,kBAAkB,CAAC,CAAC;CACpD;AAED;;;;GAIG;AACH,MAAM,MAAM,+BAA+B,CAAC,KAAK,GAAG,OAAO,IAAI,CAC7D,MAAM,EAAE,kBAAkB,CAAC,KAAK,CAAC,EACjC,GAAG,EAAE,CAAC,QAAQ,EAAE,gCAAgC,KAAK,OAAO,CAAC,kBAAkB,CAAC,KAC7E,OAAO,CAAC,kBAAkB,CAAC,CAAC;AAEjC,MAAM,MAAM,YAAY,GACpB,MAAM,GACN,CAAC,CAAC,OAAO,EAAE,sBAAsB,KAAK,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC;AAEpE,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,CAAC,EAAE,oBAAoB,CAAC;CACvC;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,eAAe,CAAC;IACjC,QAAQ,CAAC,KAAK,CAAC,EAAE,oBAAoB,CAAC;CACvC;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB;;;OAGG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,SAAS,eAAe,EAAE,CAAC;IAChD,wDAAwD;IACxD,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,wDAAwD;IACxD,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,uEAAuE;IACvE,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,0EAA0E;IAC1E,QAAQ,CAAC,IAAI,CAAC,EAAE,gBAAgB,CAAC;IACjC,QAAQ,CAAC,KAAK,CAAC,EAAE,oBAAoB,CAAC;CACvC;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,CAAC,EAAE,oBAAoB,CAAC;CACvC;AAED,MAAM,MAAM,aAAa,GACrB,iBAAiB,GACjB,iBAAiB,GACjB,mBAAmB,GACnB,mBAAmB,CAAC;AAExB,MAAM,MAAM,cAAc,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IACpD;IACE,QAAQ,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAAC;CAC1B,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,EAAE,CAAC;IAC9B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC9B,GACD;IACE,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,GAAG,EAAE,CAAC;IAC/B,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,WAAW,EAAE,CAAC;CAC1C,CAAC"}
|
package/dist/source/types.js
CHANGED
|
@@ -31,6 +31,7 @@ export function sourceEventForOperation(options) {
|
|
|
31
31
|
entityId,
|
|
32
32
|
type: options.operation.type,
|
|
33
33
|
...(options.data !== undefined ? { data: options.data } : {}),
|
|
34
|
+
syncGroups: options.syncGroups,
|
|
34
35
|
...(options.organizationId ? { organizationId: options.organizationId } : {}),
|
|
35
36
|
...(options.clientTxId ? { clientTxId: options.clientTxId } : {}),
|
|
36
37
|
...(options.correlationId ? { correlationId: options.correlationId } : {}),
|
package/dist/source/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/source/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/source/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AA8NnD;;;;;;;GAOG;AACH,MAAM,UAAU,uBAAuB,CACrC,OAAuC;IAEvC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;IAC1D,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1D,MAAM,IAAI,mBAAmB,CAC3B,uEAAuE,EACvE,EAAE,IAAI,EAAE,sBAAsB,EAAE,CACjC,CAAC;IACJ,CAAC;IACD,MAAM,UAAU,GAAG,wBAAwB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAChE,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,OAAO,CAAC,SAAS,CAAC,aAAa,IAAI,SAAS,CAAC;IAC5F,OAAO;QACL,EAAE,EAAE,OAAO,CAAC,OAAO;QACnB,KAAK,EAAE,OAAO,CAAC,SAAS,CAAC,KAAK;QAC9B,QAAQ;QACR,IAAI,EAAE,OAAO,CAAC,SAAS,CAAC,IAAI;QAC5B,GAAG,CAAC,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7D,UAAU,EAAE,OAAO,CAAC,UAAU;QAC9B,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7E,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACjE,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1E,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3C,GAAG,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACpD,CAAC;AACJ,CAAC;AAED,SAAS,wBAAwB,CAC/B,KAAgC;IAEhC,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,MAAM,SAAS,GAAG,KAAK,YAAY,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;IAClE,OAAO,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;AAC5D,CAAC;AAkCD,wEAAwE;AACxE,MAAM,CAAC,MAAM,gCAAgC,GAAG,MAAM,CAAC;AAEvD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,mCAAmC,GAAG,GAAG,CAAC;AAEvD,mFAAmF;AACnF,MAAM,CAAC,MAAM,+BAA+B,GAAG,GAAG,CAAC;AAEnD,6EAA6E;AAC7E,MAAM,CAAC,MAAM,kCAAkC,GAAG,GAAG,GAAG,IAAI,CAAC"}
|
|
@@ -44,12 +44,6 @@ import { z } from 'zod';
|
|
|
44
44
|
*/
|
|
45
45
|
export declare const logPositionSchema: z.ZodNumber;
|
|
46
46
|
export type LogPosition = z.infer<typeof logPositionSchema>;
|
|
47
|
-
/** @deprecated One position type, one name: use {@link logPositionSchema}.
|
|
48
|
-
* This spelling is removed in 0.57.0. It resolves to the definition above, so
|
|
49
|
-
* the two cannot drift while both are exported. */
|
|
50
|
-
export declare const deltaPositionSchema: z.ZodNumber;
|
|
51
|
-
/** @deprecated One position type, one name: use {@link LogPosition}. Removed in 0.57.0. */
|
|
52
|
-
export type DeltaPosition = LogPosition;
|
|
53
47
|
export declare const clientMutationIdSchema: z.ZodString;
|
|
54
48
|
export type ClientMutationId = z.infer<typeof clientMutationIdSchema>;
|
|
55
49
|
export declare const sourceCorrelationIdSchema: z.ZodString;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../../src/syncLog/contract.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;GAGG;AACH,eAAO,MAAM,iBAAiB,aAAiC,CAAC;AAChE,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D
|
|
1
|
+
{"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../../src/syncLog/contract.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;GAGG;AACH,eAAO,MAAM,iBAAiB,aAAiC,CAAC;AAChE,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAE5D,eAAO,MAAM,sBAAsB,aAA6B,CAAC;AACjE,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAEtE,eAAO,MAAM,yBAAyB,aAA6B,CAAC;AACpE,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAE5E,eAAO,MAAM,oBAAoB,aAA6B,CAAC;AAC/D,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE,eAAO,MAAM,oBAAoB,aAAmD,CAAC;AACrF,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE,eAAO,MAAM,0BAA0B;;;;;;kBAUrC,CAAC;AACH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC"}
|
package/dist/syncLog/contract.js
CHANGED
|
@@ -43,10 +43,6 @@ import { z } from 'zod';
|
|
|
43
43
|
* the codebase derives from this one rather than restating the primitive.
|
|
44
44
|
*/
|
|
45
45
|
export const logPositionSchema = z.number().int().nonnegative();
|
|
46
|
-
/** @deprecated One position type, one name: use {@link logPositionSchema}.
|
|
47
|
-
* This spelling is removed in 0.57.0. It resolves to the definition above, so
|
|
48
|
-
* the two cannot drift while both are exported. */
|
|
49
|
-
export const deltaPositionSchema = logPositionSchema;
|
|
50
46
|
export const clientMutationIdSchema = z.string().min(1).max(255);
|
|
51
47
|
export const sourceCorrelationIdSchema = z.string().min(1).max(255);
|
|
52
48
|
export const sourceChangeIdSchema = z.string().min(1).max(512);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract.js","sourceRoot":"","sources":["../../src/syncLog/contract.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC;AAGhE
|
|
1
|
+
{"version":3,"file":"contract.js","sourceRoot":"","sources":["../../src/syncLog/contract.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC;AAGhE,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAGjE,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAGpE,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAG/D,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;AAGrF,MAAM,CAAC,MAAM,0BAA0B,GAAG,CAAC,CAAC,YAAY,CAAC;IACvD,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC;IAC9B,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACjC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3B,WAAW,EAAE,iBAAiB;IAC9B,UAAU,EAAE,iBAAiB;CAC9B,CAAC,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;IAC5B,IAAI,KAAK,CAAC,WAAW,IAAI,CAAC,IAAI,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QACnE,GAAG,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,8BAA8B,EAAE,CAAC,CAAC;IAC5E,CAAC;AACH,CAAC,CAAC,CAAC"}
|
|
@@ -38,6 +38,12 @@ export declare function confirmedCommitReceiptResponse(args: {
|
|
|
38
38
|
lastSyncId?: number;
|
|
39
39
|
serverTxId?: string;
|
|
40
40
|
ops?: number;
|
|
41
|
+
/** The exact rows the writing transaction returned, one per operation. */
|
|
42
|
+
operationResults?: {
|
|
43
|
+
transactionId: string;
|
|
44
|
+
outcome: 'created' | 'updated' | 'deleted' | 'archived' | 'unarchived';
|
|
45
|
+
row: Record<string, unknown>;
|
|
46
|
+
}[];
|
|
41
47
|
}): CommitReceiptWire;
|
|
42
48
|
/** Canonical normalized acknowledgement for mutation-executor test doubles. */
|
|
43
49
|
export declare function confirmedCommitAck(lastSyncId?: number): CommitAck;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"httpResponses.d.ts","sourceRoot":"","sources":["../../../src/testing/fixtures/httpResponses.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,KAAK,EACV,SAAS,EACT,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,EACrB,mBAAmB,EACnB,iBAAiB,EACjB,mBAAmB,EACpB,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAC;AAGrE,uEAAuE;AACvE,eAAO,MAAM,oBAAoB;;;CAGvB,CAAC;AAEX,+EAA+E;AAC/E,eAAO,MAAM,2BAA2B;;;;;;;;;CASV,CAAC;AAE/B,qEAAqE;AACrE,wBAAgB,8BAA8B,CAAC,IAAI,EAAE;IACnD,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"httpResponses.d.ts","sourceRoot":"","sources":["../../../src/testing/fixtures/httpResponses.ts"],"names":[],"mappings":"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"}
|
|
@@ -44,6 +44,7 @@ export function confirmedCommitReceiptResponse(args) {
|
|
|
44
44
|
status: 'confirmed',
|
|
45
45
|
lastSyncId,
|
|
46
46
|
ops: args.ops ?? 1,
|
|
47
|
+
...(args.operationResults ? { operationResults: args.operationResults } : {}),
|
|
47
48
|
};
|
|
48
49
|
}
|
|
49
50
|
/** Canonical normalized acknowledgement for mutation-executor test doubles. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"httpResponses.js","sourceRoot":"","sources":["../../../src/testing/fixtures/httpResponses.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAc1D,uEAAuE;AACvE,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,SAAS,EAAE,0BAA0B;IACrC,QAAQ,EAAE,0BAA0B;CAC5B,CAAC;AAEX,+EAA+E;AAC/E,MAAM,CAAC,MAAM,2BAA2B,GAAG;IACzC,cAAc,EAAE,OAAO;IACvB,SAAS,EAAE,WAAW;IACtB,QAAQ,EAAE,UAAU;IACpB,UAAU,EAAE,CAAC,WAAW,CAAC;IACzB,UAAU,EAAE,EAAE;IACd,eAAe,EAAE,OAAO;IACxB,aAAa,EAAE,SAAS;IACxB,iBAAiB,EAAE,IAAI;CACK,CAAC;AAE/B,qEAAqE;AACrE,MAAM,UAAU,8BAA8B,CAAC,
|
|
1
|
+
{"version":3,"file":"httpResponses.js","sourceRoot":"","sources":["../../../src/testing/fixtures/httpResponses.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { HttpClientConfig } from './httpOptions.js';
|
|
2
2
|
import type { CommitResource, HttpClaimApi, HttpClaimsResource, HttpLogsResource, ModelReadOptions, ModelList, SessionResource } from '../resources/httpResources.js';
|
|
3
|
-
import type { ModelCreateParams, ModelDeleteParams, ServerReadOptions, ModelRetrieveParams, ModelTrackParams, ModelTrackResult, ModelUpdateParams } from '../resources/modelOperations.js';
|
|
3
|
+
import type { ModelCreateParams, ModelCreateManyParams, ModelDeleteParams, ServerReadOptions, ListAllOptions, ModelRetrieveParams, ModelTrackParams, ModelTrackResult, ModelUpdateParams } from '../resources/modelOperations.js';
|
|
4
4
|
import type { Schema, SchemaRecord, InferModel, InferCreate } from '../schema/schema.js';
|
|
5
5
|
import { type ModelUpdater, type FunctionalUpdateOptions } from '../resources/functionalUpdate.js';
|
|
6
6
|
import type { ReadDependency } from '../coordination/schema.js';
|
|
@@ -67,6 +67,8 @@ export interface HttpModelClient<T, C = T> {
|
|
|
67
67
|
* back as `cursor`, with the same `where` and `orderBy`, to walk it.
|
|
68
68
|
*/
|
|
69
69
|
list(options?: ServerReadOptions<T>): Promise<ModelList<CapturedRow<T>>>;
|
|
70
|
+
/** Reads every matching row, following cursors with a bounded traversal. */
|
|
71
|
+
listAll(options?: ListAllOptions<T>): Promise<CapturedRow<T>[]>;
|
|
70
72
|
/**
|
|
71
73
|
* Creates a row and returns it, including any framework-applied defaults.
|
|
72
74
|
* Passing an id that already exists is idempotent: the existing row is
|
|
@@ -79,6 +81,11 @@ export interface HttpModelClient<T, C = T> {
|
|
|
79
81
|
* of `update` and `delete`.
|
|
80
82
|
*/
|
|
81
83
|
create(params: HttpModelMutationParams<ModelCreateParams<T, C>>): Promise<T>;
|
|
84
|
+
/**
|
|
85
|
+
* Creates many rows as one atomic commit, and resolves to them in the order
|
|
86
|
+
* they were given. One rejected row declines the batch.
|
|
87
|
+
*/
|
|
88
|
+
create(params: HttpModelMutationParams<ModelCreateManyParams<C>>): Promise<T[]>;
|
|
82
89
|
update(params: HttpModelMutationParams<ModelUpdateParams<T, C>>): Promise<T>;
|
|
83
90
|
/**
|
|
84
91
|
* Updates a row with a function of its latest value — `update(id, current =>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"httpClient.d.ts","sourceRoot":"","sources":["../../src/transport/httpClient.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,KAAK,EACV,cAAc,EAEd,YAAY,EACZ,kBAAkB,EAClB,gBAAgB,EAEhB,gBAAgB,EAEhB,SAAS,EAGT,eAAe,EAChB,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"httpClient.d.ts","sourceRoot":"","sources":["../../src/transport/httpClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,7 +19,8 @@
|
|
|
19
19
|
*/
|
|
20
20
|
import { createHttpTransport, } from './httpTransport.js';
|
|
21
21
|
import { modelWireNames } from '../auth/capability.js';
|
|
22
|
-
import { modelList } from '../resources/httpResources.js';
|
|
22
|
+
import { collectModelList, modelList } from '../resources/httpResources.js';
|
|
23
|
+
import { resolveCreateId } from '../resources/modelCreate.js';
|
|
23
24
|
import { omittedModelError } from '../schema/select.js';
|
|
24
25
|
import { reconcileFunctionalUpdate, } from '../resources/functionalUpdate.js';
|
|
25
26
|
import { AbloConnectionError, AbloValidationError } from '../errors.js';
|
|
@@ -146,9 +147,49 @@ function createHttpModelClient(protocol, modelName, clientIdentity, readSetConte
|
|
|
146
147
|
capturePointRead(readSetContext, clientIdentity, modelName, params.id, read.data, read.stamp);
|
|
147
148
|
return read.data;
|
|
148
149
|
};
|
|
150
|
+
async function createModel(params) {
|
|
151
|
+
const prepared = preparedMutation(params);
|
|
152
|
+
try {
|
|
153
|
+
// The list form is one atomic commit through the protocol's batch door.
|
|
154
|
+
// Same verb because it is the same act; the argument says how many.
|
|
155
|
+
if (Array.isArray(params.data)) {
|
|
156
|
+
const rows = await protocol.createMany({
|
|
157
|
+
data: params.data,
|
|
158
|
+
...(prepared.options.idempotencyKey
|
|
159
|
+
? { idempotencyKey: prepared.options.idempotencyKey }
|
|
160
|
+
: {}),
|
|
161
|
+
...(prepared.options.reads
|
|
162
|
+
? { reads: [...prepared.options.reads] }
|
|
163
|
+
: {}),
|
|
164
|
+
...(prepared.options.track
|
|
165
|
+
? { track: [...prepared.options.track] }
|
|
166
|
+
: {}),
|
|
167
|
+
});
|
|
168
|
+
consumeReadSet(readSetContext, clientIdentity, prepared.consumed, prepared.automaticCommit);
|
|
169
|
+
return rows;
|
|
170
|
+
}
|
|
171
|
+
const single = params;
|
|
172
|
+
const resolvedId = resolveCreateId(single.id, single.data);
|
|
173
|
+
const row = await protocol.create({
|
|
174
|
+
...prepared.options,
|
|
175
|
+
...(resolvedId !== undefined ? { id: resolvedId } : {}),
|
|
176
|
+
data: single.data,
|
|
177
|
+
});
|
|
178
|
+
consumeReadSet(readSetContext, clientIdentity, prepared.consumed, prepared.automaticCommit);
|
|
179
|
+
return row;
|
|
180
|
+
}
|
|
181
|
+
catch (error) {
|
|
182
|
+
abortReadSetCommit(readSetContext, prepared.automaticCommit);
|
|
183
|
+
throw error;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
149
186
|
const list = async (options) => {
|
|
150
187
|
const snapshot = await protocol.list(options);
|
|
151
|
-
const page = modelList(snapshot.data, snapshot
|
|
188
|
+
const page = modelList(snapshot.data, snapshot,
|
|
189
|
+
// Following pages re-enter this same read, so each one is captured into
|
|
190
|
+
// the read set exactly as the first was. A `for await` over the result
|
|
191
|
+
// therefore carries the same evidence a manual cursor walk would.
|
|
192
|
+
(cursor) => list({ ...options, cursor }));
|
|
152
193
|
const registry = readSetContext?.getStore();
|
|
153
194
|
if (!registry)
|
|
154
195
|
return page;
|
|
@@ -168,6 +209,12 @@ function createHttpModelClient(protocol, modelName, clientIdentity, readSetConte
|
|
|
168
209
|
}
|
|
169
210
|
return page;
|
|
170
211
|
};
|
|
212
|
+
const listAll = async (options = {}) => {
|
|
213
|
+
const { maxPages, signal, ...readOptions } = options;
|
|
214
|
+
signal?.throwIfAborted();
|
|
215
|
+
const first = await list(readOptions);
|
|
216
|
+
return collectModelList(first, { maxPages, signal });
|
|
217
|
+
};
|
|
171
218
|
// Claim acquisition performs its authoritative read only after the grant.
|
|
172
219
|
// Preserve that exact post-grant watermark while retaining the callable
|
|
173
220
|
// namespace and all of its state/queue/release members through the proxy.
|
|
@@ -186,24 +233,8 @@ function createHttpModelClient(protocol, modelName, clientIdentity, readSetConte
|
|
|
186
233
|
get,
|
|
187
234
|
retrieve: get,
|
|
188
235
|
list,
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
const prepared = preparedMutation(params);
|
|
192
|
-
let row;
|
|
193
|
-
try {
|
|
194
|
-
row = await protocol.create({
|
|
195
|
-
...prepared.options,
|
|
196
|
-
...(params.id !== undefined ? { id: params.id } : {}),
|
|
197
|
-
data: params.data,
|
|
198
|
-
});
|
|
199
|
-
}
|
|
200
|
-
catch (error) {
|
|
201
|
-
abortReadSetCommit(readSetContext, prepared.automaticCommit);
|
|
202
|
-
throw error;
|
|
203
|
-
}
|
|
204
|
-
consumeReadSet(readSetContext, clientIdentity, prepared.consumed, prepared.automaticCommit);
|
|
205
|
-
return row;
|
|
206
|
-
},
|
|
236
|
+
listAll,
|
|
237
|
+
create: createModel,
|
|
207
238
|
update,
|
|
208
239
|
async delete(params) {
|
|
209
240
|
const prepared = preparedMutation(params);
|