@abloatai/transaction 0.55.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/auth/hostedEndpoints.d.ts +21 -5
- package/dist/auth/hostedEndpoints.d.ts.map +1 -1
- package/dist/auth/hostedEndpoints.js +21 -5
- package/dist/auth/hostedEndpoints.js.map +1 -1
- package/dist/auth/index.d.ts +1 -1
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +1 -1
- package/dist/auth/index.js.map +1 -1
- 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 -3
- package/dist/coordination/schema.d.ts.map +1 -1
- package/dist/coordination/schema.js +4 -5
- 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/errors.d.ts.map +1 -1
- package/dist/errors.js +4 -1
- package/dist/errors.js.map +1 -1
- package/dist/log/syncDeltaRow.d.ts +3 -3
- 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 +23 -2
- 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 +45 -3
- package/dist/syncLog/contract.d.ts.map +1 -1
- package/dist/syncLog/contract.js +46 -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/auth.d.ts.map +1 -1
- package/dist/wire/auth.js +6 -3
- package/dist/wire/auth.js.map +1 -1
- package/dist/wire/commit.d.ts +74 -9
- package/dist/wire/commit.d.ts.map +1 -1
- package/dist/wire/commit.js +18 -5
- 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/modelMutations.js +3 -2
- package/dist/wire/modelMutations.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/auth/hostedEndpoints.ts +23 -5
- package/src/auth/index.ts +2 -0
- package/src/coordination/index.ts +0 -2
- package/src/coordination/schema.ts +4 -7
- package/src/errorCodes.ts +6 -0
- package/src/errors.ts +4 -1
- 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 +30 -2
- 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 +47 -5
- 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/auth.ts +6 -3
- package/src/wire/commit.ts +20 -5
- package/src/wire/index.ts +31 -0
- package/src/wire/modelMutations.ts +2 -2
- package/src/wire/rateLimit.ts +155 -0
package/dist/source/factory.d.ts
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import type { Schema, SchemaRecord, InferCreate } from '../schema/schema.js';
|
|
9
9
|
import type { DataSourceAdapter } from './adapter.js';
|
|
10
|
-
import type { SourceApiKey, SourceAuthorizeContext, SourceCommitHandler, SourceEventsHandler, SourceModelHandlers, SourceRequest, SourceScope } from './types.js';
|
|
10
|
+
import type { SourceApiKey, SourceAuthorizeContext, SourceCommitHandler, SourceEventsHandler, SourceModelHandlers, SourceRequest, SourceScope, SourceSubjectTransactionHandler } from './types.js';
|
|
11
11
|
type SourceModels<S extends SchemaRecord, TAuth> = Partial<{
|
|
12
12
|
readonly [K in keyof S & string]: SourceModelHandlers<InferCreate<Schema<S>, K> & {
|
|
13
13
|
readonly id: string;
|
|
@@ -55,6 +55,12 @@ export type DataSourceOptions<S extends SchemaRecord, TAuth = unknown> = {
|
|
|
55
55
|
* run inside one transaction you control.
|
|
56
56
|
*/
|
|
57
57
|
readonly commit?: SourceCommitHandler<TAuth>;
|
|
58
|
+
/**
|
|
59
|
+
* Required for a hand-written commit touching any subject-scoped model.
|
|
60
|
+
* The hook owns one customer-database transaction and calls `run` with a
|
|
61
|
+
* locking row loader and the batch commit bound to that same transaction.
|
|
62
|
+
*/
|
|
63
|
+
readonly subjectTransaction?: SourceSubjectTransactionHandler<TAuth>;
|
|
58
64
|
/**
|
|
59
65
|
* Reports changes that happened outside the SDK — cron jobs, dashboard edits,
|
|
60
66
|
* batch imports — which Ablo polls for. Each event you return becomes a delta and
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/source/factory.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,MAAM,EACN,YAAY,EACZ,WAAW,EACZ,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/source/factory.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,MAAM,EACN,YAAY,EACZ,WAAW,EACZ,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAgBtD,OAAO,KAAK,EACV,YAAY,EACZ,sBAAsB,EACtB,mBAAmB,EACnB,mBAAmB,EAInB,mBAAmB,EAEnB,aAAa,EAEb,WAAW,EACX,+BAA+B,EAChC,MAAM,YAAY,CAAC;AAEpB,KAAK,YAAY,CAAC,CAAC,SAAS,YAAY,EAAE,KAAK,IAAI,OAAO,CAAC;IACzD,QAAQ,EAAE,CAAC,IAAI,MAAM,CAAC,GAAG,MAAM,GAAG,mBAAmB,CACnD,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG;QAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7E,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EACzB,KAAK,CACN;CACF,CAAC,CAAC;AAEH,MAAM,MAAM,iBAAiB,CAAC,CAAC,SAAS,YAAY,EAAE,KAAK,GAAG,OAAO,IAAI;IACvE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;IAC3B;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B;;;OAGG;IACH,QAAQ,CAAC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IACvC;;;;;;OAMG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,CACnB,OAAO,EAAE,sBAAsB,KAC5B,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;IAC5B;;;;;;;;OAQG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE;QAChC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;QACrB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;QAC1B,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;KAC9B,KAAK,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,GAAG,SAAS,WAAW,EAAE,CAAC,GAC9D,WAAW,CAAC,WAAW,CAAC,GAAG,SAAS,WAAW,EAAE,CAAC;IACpD;;;;OAIG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAC7C;;;;OAIG;IACH,QAAQ,CAAC,kBAAkB,CAAC,EAAE,+BAA+B,CAAC,KAAK,CAAC,CAAC;IACrE;;;;;;;OAOG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAC7C;;;;OAIG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACzC;;;;;;;OAOG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,iBAAiB,CAAC;CACtC,GAAG,YAAY,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AAqM3B;;;;;;;GAOG;AACH,wBAAgB,UAAU,CAAC,KAAK,CAAC,CAAC,SAAS,YAAY,EAAE,KAAK,GAAG,OAAO,EACtE,OAAO,EAAE,iBAAiB,CAAC,CAAC,EAAE,KAAK,CAAC,GACnC,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAoPzC"}
|
package/dist/source/factory.js
CHANGED
|
@@ -6,6 +6,8 @@
|
|
|
6
6
|
* `list`, `commit`, and `events`) to whichever handlers you configured.
|
|
7
7
|
*/
|
|
8
8
|
import { changeSetSchema } from './contract.js';
|
|
9
|
+
import { AbloError, AbloPermissionError } from '../errors.js';
|
|
10
|
+
import { authorizeSourceChange, authorizeSourceRead, lockSourceSubjectCreates, sourceSubjectRule, sourceSubjectValues, } from './subjectAuthorization.js';
|
|
9
11
|
import { SourceSignatureError, verifyAbloSourceRequest, } from './signing.js';
|
|
10
12
|
function json(data, status = 200) {
|
|
11
13
|
return new Response(JSON.stringify(data), {
|
|
@@ -50,6 +52,7 @@ async function handleViaAdapter(adapter, body, scope) {
|
|
|
50
52
|
correlationId,
|
|
51
53
|
intentHash: body.intentHash,
|
|
52
54
|
echo: body.echo,
|
|
55
|
+
scope,
|
|
53
56
|
});
|
|
54
57
|
if (!parsed.success) {
|
|
55
58
|
return json({ error: 'source_commit_invalid', message: parsed.error.message }, 400);
|
|
@@ -73,6 +76,7 @@ async function handleViaAdapter(adapter, body, scope) {
|
|
|
73
76
|
entityId: event.entityId,
|
|
74
77
|
type: event.type,
|
|
75
78
|
...(event.data !== undefined && event.data !== null ? { data: event.data } : {}),
|
|
79
|
+
syncGroups: event.syncGroups,
|
|
76
80
|
...(event.organizationId ? { organizationId: event.organizationId } : {}),
|
|
77
81
|
...(event.clientTxId ? { clientTxId: event.clientTxId } : {}),
|
|
78
82
|
...(event.correlationId ? { correlationId: event.correlationId } : {}),
|
|
@@ -138,6 +142,29 @@ function sameModel(operations) {
|
|
|
138
142
|
return null;
|
|
139
143
|
return operations.every((op) => op.model === first) ? first : null;
|
|
140
144
|
}
|
|
145
|
+
function subjectDenial(error) {
|
|
146
|
+
return error instanceof AbloPermissionError && error.code === 'capability_scope_denied'
|
|
147
|
+
? json({ error: error.code, message: error.message }, error.httpStatus ?? 403)
|
|
148
|
+
: null;
|
|
149
|
+
}
|
|
150
|
+
function typedSourceError(error) {
|
|
151
|
+
const denial = subjectDenial(error);
|
|
152
|
+
if (denial)
|
|
153
|
+
return denial;
|
|
154
|
+
return error instanceof AbloError && error.code && error.httpStatus
|
|
155
|
+
? json({ error: error.code, message: error.message }, error.httpStatus)
|
|
156
|
+
: null;
|
|
157
|
+
}
|
|
158
|
+
function parseHandWrittenChange(body, context) {
|
|
159
|
+
const correlationId = body.correlationId ?? body.clientTxId;
|
|
160
|
+
return changeSetSchema.safeParse({
|
|
161
|
+
operations: body.operations,
|
|
162
|
+
correlationId,
|
|
163
|
+
intentHash: body.intentHash,
|
|
164
|
+
echo: body.echo,
|
|
165
|
+
scope: context.scope,
|
|
166
|
+
});
|
|
167
|
+
}
|
|
141
168
|
/**
|
|
142
169
|
* Creates a Data Source endpoint you host in front of your own database.
|
|
143
170
|
*
|
|
@@ -216,7 +243,15 @@ export function dataSource(options) {
|
|
|
216
243
|
// generic layer where rows are plain JSON, so there is no per-model handler
|
|
217
244
|
// lookup on this path.
|
|
218
245
|
if (options.adapter) {
|
|
219
|
-
|
|
246
|
+
try {
|
|
247
|
+
return await handleViaAdapter(options.adapter, body, context.scope);
|
|
248
|
+
}
|
|
249
|
+
catch (error) {
|
|
250
|
+
const typed = typedSourceError(error);
|
|
251
|
+
if (typed)
|
|
252
|
+
return typed;
|
|
253
|
+
throw error;
|
|
254
|
+
}
|
|
220
255
|
}
|
|
221
256
|
if (body.type === 'load') {
|
|
222
257
|
const handlers = getModelHandlers(options, body.model);
|
|
@@ -224,18 +259,94 @@ export function dataSource(options) {
|
|
|
224
259
|
return json({ error: 'source_load_not_configured', model: body.model }, 404);
|
|
225
260
|
}
|
|
226
261
|
const row = await handlers.load({ id: body.id, context });
|
|
227
|
-
|
|
262
|
+
try {
|
|
263
|
+
const authorized = authorizeSourceRead(options.schema, { kind: 'load', model: body.model, id: body.id, ...(context.scope ? { scope: context.scope } : {}) }, row ? [row] : []);
|
|
264
|
+
return json({ row: authorized[0] ?? null });
|
|
265
|
+
}
|
|
266
|
+
catch (error) {
|
|
267
|
+
const typed = typedSourceError(error);
|
|
268
|
+
if (typed)
|
|
269
|
+
return typed;
|
|
270
|
+
throw error;
|
|
271
|
+
}
|
|
228
272
|
}
|
|
229
273
|
if (body.type === 'list') {
|
|
230
274
|
const handlers = getModelHandlers(options, body.model);
|
|
231
|
-
|
|
275
|
+
const rule = sourceSubjectRule(options.schema, body.model);
|
|
276
|
+
if (rule && !handlers?.subjectList) {
|
|
277
|
+
return json({
|
|
278
|
+
error: 'source_subject_list_not_configured',
|
|
279
|
+
message: `Subject-scoped model "${body.model}" requires subjectList() so filtering occurs before pagination.`,
|
|
280
|
+
}, 403);
|
|
281
|
+
}
|
|
282
|
+
if (!rule && !handlers?.list) {
|
|
232
283
|
return json({ error: 'source_list_not_configured', model: body.model }, 404);
|
|
233
284
|
}
|
|
234
|
-
const result =
|
|
285
|
+
const result = rule
|
|
286
|
+
? await handlers.subjectList({
|
|
287
|
+
query: body.query ?? {},
|
|
288
|
+
subject: {
|
|
289
|
+
field: rule.field,
|
|
290
|
+
values: sourceSubjectValues(rule, context.scope?.syncGroups) ?? [],
|
|
291
|
+
},
|
|
292
|
+
context,
|
|
293
|
+
})
|
|
294
|
+
: await handlers.list({ query: body.query ?? {}, context });
|
|
235
295
|
const normalized = normalizeListResult(result);
|
|
236
|
-
|
|
296
|
+
const request = {
|
|
297
|
+
kind: 'list',
|
|
298
|
+
model: body.model,
|
|
299
|
+
...(body.query ? { query: body.query } : {}),
|
|
300
|
+
...(context.scope ? { scope: context.scope } : {}),
|
|
301
|
+
};
|
|
302
|
+
return json({
|
|
303
|
+
...normalized,
|
|
304
|
+
rows: authorizeSourceRead(options.schema, request, normalized.rows),
|
|
305
|
+
});
|
|
237
306
|
}
|
|
238
307
|
if (body.type === 'commit') {
|
|
308
|
+
const hasSubject = body.operations.some((operation) => sourceSubjectRule(options.schema, operation.model));
|
|
309
|
+
if (hasSubject) {
|
|
310
|
+
if (!options.subjectTransaction) {
|
|
311
|
+
return json({
|
|
312
|
+
error: 'source_subject_transaction_required',
|
|
313
|
+
message: 'Subject-scoped custom commits require subjectTransaction() so authorization and mutation share one transaction.',
|
|
314
|
+
}, 403);
|
|
315
|
+
}
|
|
316
|
+
const parsed = parseHandWrittenChange(body, context);
|
|
317
|
+
if (!parsed.success) {
|
|
318
|
+
return json({ error: 'source_commit_invalid', message: parsed.error.message }, 400);
|
|
319
|
+
}
|
|
320
|
+
try {
|
|
321
|
+
let ranBoundary = false;
|
|
322
|
+
const result = await options.subjectTransaction({
|
|
323
|
+
operations: body.operations,
|
|
324
|
+
correlationId: body.correlationId ?? body.clientTxId,
|
|
325
|
+
clientTxId: body.clientTxId,
|
|
326
|
+
intentHash: body.intentHash,
|
|
327
|
+
echo: body.echo,
|
|
328
|
+
context,
|
|
329
|
+
}, async ({ lockCreate, load, commit }) => {
|
|
330
|
+
if (ranBoundary) {
|
|
331
|
+
throw new Error('subjectTransaction run() may be called only once');
|
|
332
|
+
}
|
|
333
|
+
ranBoundary = true;
|
|
334
|
+
await lockSourceSubjectCreates(options.schema, parsed.data, (operation) => lockCreate(operation));
|
|
335
|
+
await authorizeSourceChange(options.schema, parsed.data, load);
|
|
336
|
+
return commit();
|
|
337
|
+
});
|
|
338
|
+
if (!ranBoundary) {
|
|
339
|
+
throw new Error('subjectTransaction must call run() inside its database transaction');
|
|
340
|
+
}
|
|
341
|
+
return json(result);
|
|
342
|
+
}
|
|
343
|
+
catch (error) {
|
|
344
|
+
const typed = typedSourceError(error);
|
|
345
|
+
if (typed)
|
|
346
|
+
return typed;
|
|
347
|
+
throw error;
|
|
348
|
+
}
|
|
349
|
+
}
|
|
239
350
|
if (options.commit) {
|
|
240
351
|
const result = await options.commit({
|
|
241
352
|
operations: body.operations,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/source/factory.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/source/factory.ts"],"names":[],"mappings":"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"}
|
package/dist/source/index.d.ts
CHANGED
|
@@ -8,9 +8,10 @@
|
|
|
8
8
|
*
|
|
9
9
|
* Import from here; the sibling modules import one another directly.
|
|
10
10
|
*/
|
|
11
|
-
export { sourceEventForOperation, ABLO_POSTGRES_COMMIT_ECHO_PREFIX, ABLO_SOURCE_CLIENT_TX_ID_MAX_LENGTH, ABLO_SOURCE_ECHO_MAX_OPERATIONS, ABLO_SOURCE_ECHO_MAX_PAYLOAD_BYTES, type SourcePrimitive, type SourceWhere, type SourceListQuery, type SourceListPage, type SourceListResult, type SourceRequestContext, type SourceOperation, type SourceDelta, type SourceEvent, type SourceEventForOperationOptions, type SourceCommitResult, type SourceCommitEcho, type SourceCommitEchoOperation, type SourceCommitEchoMarker, type SourceCommitParams, type SourceScope, type SourceEventsResult, type SourceEventsHandler, type SourceAuthorizeContext, type SourceHandlerContext, type SourceModelHandlers, type SourceCommitHandler, type SourceApiKey, type SourceLoadRequest, type SourceListRequest, type SourceCommitRequest, type SourceEventsRequest, type SourceRequest, type SourceResponse, } from './types.js';
|
|
11
|
+
export { sourceEventForOperation, ABLO_POSTGRES_COMMIT_ECHO_PREFIX, ABLO_SOURCE_CLIENT_TX_ID_MAX_LENGTH, ABLO_SOURCE_ECHO_MAX_OPERATIONS, ABLO_SOURCE_ECHO_MAX_PAYLOAD_BYTES, type SourcePrimitive, type SourceWhere, type SourceListQuery, type SourceListPage, type SourceListResult, type SourceRequestContext, type SourceOperation, type SourceDelta, type SourceEvent, type SourceEventForOperationOptions, type SourceCommitResult, type SourceCommitEcho, type SourceCommitEchoOperation, type SourceCommitEchoMarker, type SourceCommitParams, type SourceScope, type SourceEventsResult, type SourceEventsHandler, type SourceAuthorizeContext, type SourceHandlerContext, type SourceModelHandlers, type SourceCommitHandler, type SourceSubjectTransactionBoundary, type SourceSubjectTransactionHandler, type SourceApiKey, type SourceLoadRequest, type SourceListRequest, type SourceCommitRequest, type SourceEventsRequest, type SourceRequest, type SourceResponse, } from './types.js';
|
|
12
12
|
export { ABLO_SOURCE_HEADERS, SourceSignatureError, signAbloSourceRequest, verifyAbloSourceRequest, type SourceSignatureOptions, type SourceSignatureVerificationOptions, type SourceSignatureVerificationResult, } from './signing.js';
|
|
13
13
|
export { dataSource, type DataSourceOptions, } from './factory.js';
|
|
14
|
+
export { sourceSubjectCreateLockKey, } from './subjectAuthorization.js';
|
|
14
15
|
export { createPushQueue, InMemoryPushQueueStorage, STANDARD_WEBHOOKS_RETRY_SCHEDULE, type PushQueue, type PushQueueItem, type PushQueueOptions, type PushQueueStorage, } from './pushQueue.js';
|
|
15
16
|
export { createSourceConnector, DEFAULT_RECONNECT_SCHEDULE, type SourceConnector, type SourceConnectorOptions, type ConnectorWebSocket, type ConnectorWebSocketFactory, type ConnectorStatus, } from './connector.js';
|
|
16
17
|
export { SOURCE_CONNECTOR_PROTOCOL_VERSION, SOURCE_CONNECTOR_WS_PATH, WS_SOURCE_SUBPROTOCOL, sourceConnectorSubprotocols, encodeFrame, decodeFrame, ConnectorProtocolError, connectorFrameSchema, type ConnectorFrame, type RegisterFrame, type ReadyFrame, type RequestFrame, type ResponseFrame, type ErrorFrame, } from './connectorProtocol.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/source/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/source/index.ts"],"names":[],"mappings":"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"}
|
package/dist/source/index.js
CHANGED
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
export { sourceEventForOperation, ABLO_POSTGRES_COMMIT_ECHO_PREFIX, ABLO_SOURCE_CLIENT_TX_ID_MAX_LENGTH, ABLO_SOURCE_ECHO_MAX_OPERATIONS, ABLO_SOURCE_ECHO_MAX_PAYLOAD_BYTES, } from './types.js';
|
|
12
12
|
export { ABLO_SOURCE_HEADERS, SourceSignatureError, signAbloSourceRequest, verifyAbloSourceRequest, } from './signing.js';
|
|
13
13
|
export { dataSource, } from './factory.js';
|
|
14
|
+
export { sourceSubjectCreateLockKey, } from './subjectAuthorization.js';
|
|
14
15
|
export { createPushQueue, InMemoryPushQueueStorage, STANDARD_WEBHOOKS_RETRY_SCHEDULE, } from './pushQueue.js';
|
|
15
16
|
// The reverse-channel connector — an outbound transport for the load, list, and
|
|
16
17
|
// commit leg, and the dial-out counterpart to `createPushQueue`. It lets you serve
|
package/dist/source/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/source/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EACL,uBAAuB,EACvB,gCAAgC,EAChC,mCAAmC,EACnC,+BAA+B,EAC/B,kCAAkC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/source/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EACL,uBAAuB,EACvB,gCAAgC,EAChC,mCAAmC,EACnC,+BAA+B,EAC/B,kCAAkC,GAgCnC,MAAM,YAAY,CAAC;AAEpB,OAAO,EACL,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,EACrB,uBAAuB,GAIxB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,UAAU,GAEX,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,0BAA0B,GAC3B,MAAM,2BAA2B,CAAC;AAEnC,OAAO,EACL,eAAe,EACf,wBAAwB,EACxB,gCAAgC,GAKjC,MAAM,gBAAgB,CAAC;AAExB,gFAAgF;AAChF,mFAAmF;AACnF,+EAA+E;AAC/E,+DAA+D;AAC/D,OAAO,EACL,qBAAqB,EACrB,0BAA0B,GAM3B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,iCAAiC,EACjC,wBAAwB,EACxB,qBAAqB,EACrB,2BAA2B,EAC3B,WAAW,EACX,WAAW,EACX,sBAAsB,EACtB,oBAAoB,GAOrB,MAAM,wBAAwB,CAAC;AAUhC,OAAO,EACL,oBAAoB,EACpB,4BAA4B,EAC5B,kBAAkB,EAClB,oBAAoB,EACpB,wBAAwB,EACxB,sBAAsB,GAMvB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,sBAAsB,EACtB,+BAA+B,EAC/B,4BAA4B,EAC5B,4BAA4B,EAC5B,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,yBAAyB,GAS1B,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,gBAAgB,EAAiD,MAAM,sBAAsB,CAAC;AACvG,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,2BAA2B,GAC5B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,2BAA2B,EAC3B,wBAAwB,EACxB,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,GAYrB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,0BAA0B,EAC1B,sBAAsB,EACtB,6BAA6B,EAC7B,gCAAgC,EAChC,6BAA6B,EAC7B,6BAA6B,EAC7B,6BAA6B,GAE9B,MAAM,kBAAkB,CAAC;AAC1B,6EAA6E;AAC7E,0EAA0E;AAC1E,OAAO,EACL,cAAc,EACd,gBAAgB,EAChB,qBAAqB,EACrB,qBAAqB,EACrB,eAAe,EACf,sBAAsB,EACtB,iBAAiB,EACjB,qBAAqB,EACrB,0BAA0B,EAC1B,iBAAiB,GAKlB,MAAM,iBAAiB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrations.d.ts","sourceRoot":"","sources":["../../src/source/migrations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAsC/C;;;kCAGkC;AAClC,wBAAgB,2BAA2B,CAAC,MAAM,SAAW,GAAG,SAAS,SAAS,EAAE,CAiCnF;AAED,sEAAsE;AACtE,wBAAgB,wBAAwB,IAAI,SAAS,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"migrations.d.ts","sourceRoot":"","sources":["../../src/source/migrations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAsC/C;;;kCAGkC;AAClC,wBAAgB,2BAA2B,CAAC,MAAM,SAAW,GAAG,SAAS,SAAS,EAAE,CAiCnF;AAED,sEAAsE;AACtE,wBAAgB,wBAAwB,IAAI,SAAS,SAAS,EAAE,CAgD/D;AAED,0DAA0D;AAC1D,wBAAgB,sBAAsB,IAAI,SAAS,SAAS,EAAE,CAE7D"}
|
|
@@ -91,6 +91,7 @@ export function endpointOutboxMigrations() {
|
|
|
91
91
|
entity_id TEXT NOT NULL,
|
|
92
92
|
type TEXT NOT NULL,
|
|
93
93
|
data JSONB,
|
|
94
|
+
sync_groups TEXT[] NOT NULL,
|
|
94
95
|
organization_id TEXT,
|
|
95
96
|
client_tx_id TEXT,
|
|
96
97
|
correlation_id TEXT,
|
|
@@ -106,6 +107,26 @@ export function endpointOutboxMigrations() {
|
|
|
106
107
|
ALTER TABLE ablo_outbox
|
|
107
108
|
ADD COLUMN IF NOT EXISTS transaction_id TEXT;`,
|
|
108
109
|
},
|
|
110
|
+
{
|
|
111
|
+
name: 'ablo_outbox_sync_groups',
|
|
112
|
+
up: `DO $$
|
|
113
|
+
BEGIN
|
|
114
|
+
IF NOT EXISTS (
|
|
115
|
+
SELECT 1 FROM information_schema.columns
|
|
116
|
+
WHERE table_schema = current_schema()
|
|
117
|
+
AND table_name = 'ablo_outbox'
|
|
118
|
+
AND column_name = 'sync_groups'
|
|
119
|
+
) AND EXISTS (SELECT 1 FROM ablo_outbox) THEN
|
|
120
|
+
RAISE EXCEPTION USING
|
|
121
|
+
ERRCODE = '55000',
|
|
122
|
+
MESSAGE = 'ablo_outbox contains legacy events; verify the previous release consumed them, then purge those rows before adding sync_groups';
|
|
123
|
+
END IF;
|
|
124
|
+
END $$;
|
|
125
|
+
ALTER TABLE ablo_outbox
|
|
126
|
+
ADD COLUMN IF NOT EXISTS sync_groups TEXT[];
|
|
127
|
+
ALTER TABLE ablo_outbox
|
|
128
|
+
ALTER COLUMN sync_groups SET NOT NULL;`,
|
|
129
|
+
},
|
|
109
130
|
];
|
|
110
131
|
}
|
|
111
132
|
/** Full endpoint adapter migrations (ledger + outbox). */
|
|
@@ -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';
|