@de-otio/trellis 0.10.11 → 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/env.d.ts +232 -0
- package/dist/env.d.ts.map +1 -1
- package/dist/env.js +221 -0
- package/dist/env.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/lambda/media-completion-worker.d.ts +175 -0
- package/dist/lambda/media-completion-worker.d.ts.map +1 -0
- package/dist/lambda/media-completion-worker.js +373 -0
- package/dist/lambda/media-completion-worker.js.map +1 -0
- package/dist/lambda/media-processing-worker.d.ts +172 -1
- package/dist/lambda/media-processing-worker.d.ts.map +1 -1
- package/dist/lambda/media-processing-worker.js +343 -49
- package/dist/lambda/media-processing-worker.js.map +1 -1
- package/dist/lib/app.d.ts.map +1 -1
- package/dist/lib/app.js +5 -0
- package/dist/lib/app.js.map +1 -1
- package/dist/lib/encrypted-settings/config.d.ts +13 -0
- package/dist/lib/encrypted-settings/config.d.ts.map +1 -0
- package/dist/lib/encrypted-settings/config.js +19 -0
- package/dist/lib/encrypted-settings/config.js.map +1 -0
- package/dist/lib/encrypted-settings/encrypted-settings-handler.d.ts +57 -0
- package/dist/lib/encrypted-settings/encrypted-settings-handler.d.ts.map +1 -0
- package/dist/lib/encrypted-settings/encrypted-settings-handler.js +178 -0
- package/dist/lib/encrypted-settings/encrypted-settings-handler.js.map +1 -0
- package/dist/lib/encrypted-settings/encrypted-settings-store.d.ts +110 -0
- package/dist/lib/encrypted-settings/encrypted-settings-store.d.ts.map +1 -0
- package/dist/lib/encrypted-settings/encrypted-settings-store.js +103 -0
- package/dist/lib/encrypted-settings/encrypted-settings-store.js.map +1 -0
- package/dist/lib/encrypted-settings/types.d.ts +26 -0
- package/dist/lib/encrypted-settings/types.d.ts.map +1 -0
- package/dist/lib/encrypted-settings/types.js +27 -0
- package/dist/lib/encrypted-settings/types.js.map +1 -0
- package/dist/lib/exif-stripper.d.ts +37 -22
- package/dist/lib/exif-stripper.d.ts.map +1 -1
- package/dist/lib/exif-stripper.js +101 -41
- package/dist/lib/exif-stripper.js.map +1 -1
- package/dist/lib/media/cas-keys.d.ts +63 -0
- package/dist/lib/media/cas-keys.d.ts.map +1 -0
- package/dist/lib/media/cas-keys.js +102 -0
- package/dist/lib/media/cas-keys.js.map +1 -0
- package/dist/lib/media/classify-worker-error.d.ts +48 -0
- package/dist/lib/media/classify-worker-error.d.ts.map +1 -0
- package/dist/lib/media/classify-worker-error.js +319 -0
- package/dist/lib/media/classify-worker-error.js.map +1 -0
- package/dist/lib/media/dedupe-key.d.ts +29 -0
- package/dist/lib/media/dedupe-key.d.ts.map +1 -0
- package/dist/lib/media/dedupe-key.js +49 -0
- package/dist/lib/media/dedupe-key.js.map +1 -0
- package/dist/lib/media/duration-cap.d.ts +30 -0
- package/dist/lib/media/duration-cap.d.ts.map +1 -0
- package/dist/lib/media/duration-cap.js +37 -0
- package/dist/lib/media/duration-cap.js.map +1 -0
- package/dist/lib/media/ffmpeg-args.d.ts +83 -0
- package/dist/lib/media/ffmpeg-args.d.ts.map +1 -0
- package/dist/lib/media/ffmpeg-args.js +119 -0
- package/dist/lib/media/ffmpeg-args.js.map +1 -0
- package/dist/lib/media/media-ports.d.ts +126 -0
- package/dist/lib/media/media-ports.d.ts.map +1 -0
- package/dist/lib/media/media-ports.js +129 -0
- package/dist/lib/media/media-ports.js.map +1 -0
- package/dist/lib/media/media-upsert.d.ts +55 -0
- package/dist/lib/media/media-upsert.d.ts.map +1 -0
- package/dist/lib/media/media-upsert.js +38 -0
- package/dist/lib/media/media-upsert.js.map +1 -0
- package/dist/lib/media/moderation-provider.d.ts +111 -0
- package/dist/lib/media/moderation-provider.d.ts.map +1 -0
- package/dist/lib/media/moderation-provider.js +130 -0
- package/dist/lib/media/moderation-provider.js.map +1 -0
- package/dist/lib/media/moderation-resolved-payload.d.ts +48 -0
- package/dist/lib/media/moderation-resolved-payload.d.ts.map +1 -0
- package/dist/lib/media/moderation-resolved-payload.js +37 -0
- package/dist/lib/media/moderation-resolved-payload.js.map +1 -0
- package/dist/lib/media/moderation-status.d.ts +98 -0
- package/dist/lib/media/moderation-status.d.ts.map +1 -0
- package/dist/lib/media/moderation-status.js +122 -0
- package/dist/lib/media/moderation-status.js.map +1 -0
- package/dist/lib/media/processing-types.d.ts +45 -0
- package/dist/lib/media/processing-types.d.ts.map +1 -0
- package/dist/lib/media/processing-types.js +9 -0
- package/dist/lib/media/processing-types.js.map +1 -0
- package/dist/lib/media/promote-decision.d.ts +64 -0
- package/dist/lib/media/promote-decision.d.ts.map +1 -0
- package/dist/lib/media/promote-decision.js +76 -0
- package/dist/lib/media/promote-decision.js.map +1 -0
- package/dist/lib/media/quota-check.d.ts +22 -0
- package/dist/lib/media/quota-check.d.ts.map +1 -0
- package/dist/lib/media/quota-check.js +42 -0
- package/dist/lib/media/quota-check.js.map +1 -0
- package/dist/lib/media/quota-types.d.ts +15 -0
- package/dist/lib/media/quota-types.d.ts.map +1 -0
- package/dist/lib/media/quota-types.js +9 -0
- package/dist/lib/media/quota-types.js.map +1 -0
- package/dist/lib/media/route-upload.d.ts +58 -0
- package/dist/lib/media/route-upload.d.ts.map +1 -0
- package/dist/lib/media/route-upload.js +80 -0
- package/dist/lib/media/route-upload.js.map +1 -0
- package/dist/lib/media/serve-gate.d.ts +51 -0
- package/dist/lib/media/serve-gate.d.ts.map +1 -0
- package/dist/lib/media/serve-gate.js +68 -0
- package/dist/lib/media/serve-gate.js.map +1 -0
- package/dist/lib/media/tenant-resolution.d.ts +42 -0
- package/dist/lib/media/tenant-resolution.d.ts.map +1 -0
- package/dist/lib/media/tenant-resolution.js +45 -0
- package/dist/lib/media/tenant-resolution.js.map +1 -0
- package/dist/lib/media/text-moderation.d.ts +28 -0
- package/dist/lib/media/text-moderation.d.ts.map +1 -0
- package/dist/lib/media/text-moderation.js +62 -0
- package/dist/lib/media/text-moderation.js.map +1 -0
- package/dist/lib/media/track-verdict.d.ts +45 -0
- package/dist/lib/media/track-verdict.d.ts.map +1 -0
- package/dist/lib/media/track-verdict.js +52 -0
- package/dist/lib/media/track-verdict.js.map +1 -0
- package/dist/lib/media/transcript-moderation.d.ts +47 -0
- package/dist/lib/media/transcript-moderation.d.ts.map +1 -0
- package/dist/lib/media/transcript-moderation.js +70 -0
- package/dist/lib/media/transcript-moderation.js.map +1 -0
- package/dist/lib/media-handler.d.ts.map +1 -1
- package/dist/lib/media-handler.js +15 -9
- package/dist/lib/media-handler.js.map +1 -1
- package/dist/lib/notification-handler.d.ts +11 -4
- package/dist/lib/notification-handler.d.ts.map +1 -1
- package/dist/lib/notification-handler.js +161 -29
- package/dist/lib/notification-handler.js.map +1 -1
- package/dist/lib/post-handler.d.ts.map +1 -1
- package/dist/lib/post-handler.js +4 -1
- package/dist/lib/post-handler.js.map +1 -1
- package/dist/lib/realtime/block-store.d.ts +61 -0
- package/dist/lib/realtime/block-store.d.ts.map +1 -0
- package/dist/lib/realtime/block-store.js +0 -0
- package/dist/lib/realtime/block-store.js.map +1 -0
- package/dist/lib/realtime/channel.d.ts +34 -0
- package/dist/lib/realtime/channel.d.ts.map +1 -0
- package/dist/lib/realtime/channel.js +100 -0
- package/dist/lib/realtime/channel.js.map +1 -0
- package/dist/lib/realtime/delivery-policy.d.ts +51 -0
- package/dist/lib/realtime/delivery-policy.d.ts.map +1 -0
- package/dist/lib/realtime/delivery-policy.js +98 -0
- package/dist/lib/realtime/delivery-policy.js.map +1 -0
- package/dist/lib/realtime/index.d.ts +21 -0
- package/dist/lib/realtime/index.d.ts.map +1 -0
- package/dist/lib/realtime/index.js +39 -0
- package/dist/lib/realtime/index.js.map +1 -0
- package/dist/lib/realtime/no-op-transport.d.ts +10 -0
- package/dist/lib/realtime/no-op-transport.d.ts.map +1 -0
- package/dist/lib/realtime/no-op-transport.js +44 -0
- package/dist/lib/realtime/no-op-transport.js.map +1 -0
- package/dist/lib/realtime/poll-transport.d.ts +11 -0
- package/dist/lib/realtime/poll-transport.d.ts.map +1 -0
- package/dist/lib/realtime/poll-transport.js +68 -0
- package/dist/lib/realtime/poll-transport.js.map +1 -0
- package/dist/lib/realtime/push-notifier.d.ts +39 -0
- package/dist/lib/realtime/push-notifier.d.ts.map +1 -0
- package/dist/lib/realtime/push-notifier.js +76 -0
- package/dist/lib/realtime/push-notifier.js.map +1 -0
- package/dist/lib/realtime/realtime-transport.d.ts +2 -0
- package/dist/lib/realtime/realtime-transport.d.ts.map +1 -0
- package/dist/lib/realtime/realtime-transport.js +23 -0
- package/dist/lib/realtime/realtime-transport.js.map +1 -0
- package/dist/lib/realtime/setting-store.d.ts +30 -0
- package/dist/lib/realtime/setting-store.d.ts.map +1 -0
- package/dist/lib/realtime/setting-store.js +0 -0
- package/dist/lib/realtime/setting-store.js.map +1 -0
- package/dist/lib/realtime/types.d.ts +200 -0
- package/dist/lib/realtime/types.d.ts.map +1 -0
- package/dist/lib/realtime/types.js +61 -0
- package/dist/lib/realtime/types.js.map +1 -0
- package/dist/lib/routes/index.d.ts.map +1 -1
- package/dist/lib/routes/index.js +3 -0
- package/dist/lib/routes/index.js.map +1 -1
- package/dist/lib/routes/media.d.ts +21 -0
- package/dist/lib/routes/media.d.ts.map +1 -1
- package/dist/lib/routes/media.js +584 -483
- package/dist/lib/routes/media.js.map +1 -1
- package/dist/lib/routes/settings.d.ts +17 -0
- package/dist/lib/routes/settings.d.ts.map +1 -0
- package/dist/lib/routes/settings.js +187 -0
- package/dist/lib/routes/settings.js.map +1 -0
- package/dist/lib/services/image-normalizer.d.ts +64 -6
- package/dist/lib/services/image-normalizer.d.ts.map +1 -1
- package/dist/lib/services/image-normalizer.js +88 -6
- package/dist/lib/services/image-normalizer.js.map +1 -1
- package/dist/lib/services/media-upload-service.d.ts +2 -2
- package/dist/lib/services/media-upload-service.d.ts.map +1 -1
- package/dist/lib/services/media-upload-service.js +22 -21
- package/dist/lib/services/media-upload-service.js.map +1 -1
- package/dist/lib/tenant-scope.d.ts.map +1 -1
- package/dist/lib/tenant-scope.js +18 -1
- package/dist/lib/tenant-scope.js.map +1 -1
- package/package.json +23 -22
- package/prisma/migrations/20260620051144_add_encrypted_user_settings/migration.sql +24 -0
- package/prisma/migrations/20260620120000_add_blocked_users/migration.sql +29 -0
- package/prisma/migrations/20260625000000_media_tenant_scope_and_moderation_status/migration.sql +49 -0
- package/prisma/migrations/20260625000001_p0b_moderation_jobs/migration.sql +73 -0
- package/prisma/schema.prisma +133 -15
- package/src/lambda/media-completion-worker.ts +567 -0
- package/src/lambda/media-processing-worker.ts +508 -59
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
// CONTRACT: stable — coordinate changes.
|
|
2
|
+
//
|
|
3
|
+
// The RealtimeTransport capability interface — THE seam every other workstream
|
|
4
|
+
// and the Skybber client binds to. The interface body lives in types.ts (single
|
|
5
|
+
// source of truth for the frozen type set); this module re-exports it under its
|
|
6
|
+
// own name so consumers can import the contract from a file whose name states
|
|
7
|
+
// what it is, and so the CONTRACT banner sits with the interface.
|
|
8
|
+
//
|
|
9
|
+
// Binding rules for every transport implementor (poll, noop, appsync-events):
|
|
10
|
+
// - deliver() is BEST-EFFORT and NEVER rolls back a persisted write. It
|
|
11
|
+
// resolves with a DeliveryResult; it must catch its own transport errors
|
|
12
|
+
// and surface them as { delivered: false, reason: "transport_error" }.
|
|
13
|
+
// - The policy fence (the safety floor) runs INSIDE every deliver(), never at
|
|
14
|
+
// the call site. A transport author MUST call the resolver and honor a
|
|
15
|
+
// { deliver: false } by NOT sending. PollTransport, NoopRealtimeTransport,
|
|
16
|
+
// and Skybber's AppSyncEventsTransport all obey this.
|
|
17
|
+
// - payload is OPAQUE bytes the transport never parses (blind relay). Anything
|
|
18
|
+
// sensitive is client-side ciphertext; content-free wakeups use
|
|
19
|
+
// encodeWakeup().
|
|
20
|
+
// - Implementations MUST NOT durably log connection/delivery metadata as
|
|
21
|
+
// ordinary operational data (CLAUDE.md rule 7; retention is runtime config).
|
|
22
|
+
export {};
|
|
23
|
+
//# sourceMappingURL=realtime-transport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"realtime-transport.js","sourceRoot":"","sources":["../../../src/lib/realtime/realtime-transport.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,EAAE;AACF,+EAA+E;AAC/E,gFAAgF;AAChF,gFAAgF;AAChF,8EAA8E;AAC9E,kEAAkE;AAClE,EAAE;AACF,8EAA8E;AAC9E,0EAA0E;AAC1E,6EAA6E;AAC7E,2EAA2E;AAC3E,gFAAgF;AAChF,2EAA2E;AAC3E,+EAA+E;AAC/E,0DAA0D;AAC1D,iFAAiF;AACjF,oEAAoE;AACpE,sBAAsB;AACtB,2EAA2E;AAC3E,iFAAiF"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { ChangeCursorStore, ChangedSettingMeta, EncryptedBlob, PutResult, SettingStore } from "./types.js";
|
|
2
|
+
export type { SettingStore };
|
|
3
|
+
/**
|
|
4
|
+
* In-memory `SettingStore` with optimistic-concurrency semantics. Keyed by
|
|
5
|
+
* `userId \0 namespace`. The server NEVER parses `ciphertext`.
|
|
6
|
+
*
|
|
7
|
+
* Optimistic concurrency:
|
|
8
|
+
* - First write of a (user, namespace) requires `expectVersion === 0`; a
|
|
9
|
+
* non-zero `expectVersion` against an absent record => `not_found`.
|
|
10
|
+
* - A write whose `expectVersion` does not equal the stored version =>
|
|
11
|
+
* `version_conflict` carrying the current blob for client-side merge.
|
|
12
|
+
* - On success the stored version is set to `expectVersion + 1` and
|
|
13
|
+
* `updatedAt` is server-assigned from the injectable clock.
|
|
14
|
+
*/
|
|
15
|
+
export declare class InMemorySettingStore implements SettingStore, ChangeCursorStore {
|
|
16
|
+
private readonly now;
|
|
17
|
+
private readonly store;
|
|
18
|
+
constructor(now?: () => Date);
|
|
19
|
+
private key;
|
|
20
|
+
get(userId: string, namespace: string): Promise<EncryptedBlob | null>;
|
|
21
|
+
put(userId: string, namespace: string, blob: EncryptedBlob, expectVersion: number): Promise<PutResult>;
|
|
22
|
+
/**
|
|
23
|
+
* Track C — offline backfill. Returns metadata for this user's namespaces whose
|
|
24
|
+
* `version` advanced strictly past `sinceVersion`. METADATA ONLY: never carries
|
|
25
|
+
* `ciphertext`. Sorted by ascending `version` so the caller can advance its
|
|
26
|
+
* cursor to the last entry's `version`.
|
|
27
|
+
*/
|
|
28
|
+
listChangedSince(userId: string, sinceVersion: number): Promise<ChangedSettingMeta[]>;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=setting-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setting-store.d.ts","sourceRoot":"","sources":["../../../src/lib/realtime/setting-store.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EACV,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,EACb,SAAS,EACT,YAAY,EACb,MAAM,YAAY,CAAC;AAEpB,YAAY,EAAE,YAAY,EAAE,CAAC;AAE7B;;;;;;;;;;;GAWG;AACH,qBAAa,oBAAqB,YAAW,YAAY,EAAE,iBAAiB;IAQ9D,OAAO,CAAC,QAAQ,CAAC,GAAG;IALhC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAGlB;gBAEyB,GAAG,GAAE,MAAM,IAAuB;IAE/D,OAAO,CAAC,GAAG;IAIL,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAIrE,GAAG,CACP,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,aAAa,EACnB,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,SAAS,CAAC;IAgCrB;;;;;OAKG;IACG,gBAAgB,CACpB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,kBAAkB,EAAE,CAAC;CAcjC"}
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setting-store.js","sourceRoot":"","sources":["../../../src/lib/realtime/setting-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
import type { NotificationType, AgeTier } from "@prisma/client";
|
|
2
|
+
/**
|
|
3
|
+
* Coarse class of realtime traffic. Lets policy/transport route and rate-shape.
|
|
4
|
+
* v1 ships ONLY the user-scoped kinds (`wakeup`, `setting_sync`, `safety`);
|
|
5
|
+
* `message` and `thread` are taxonomy-reserved but unused (DEFERRED).
|
|
6
|
+
*/
|
|
7
|
+
export type ChannelKind = "wakeup" | "setting_sync" | "safety" | "message" | "thread";
|
|
8
|
+
/** The scope a channel addresses. v1 ships only `"user"`. */
|
|
9
|
+
export type ScopeType = "user" | "conversation" | "thread";
|
|
10
|
+
/**
|
|
11
|
+
* A push-delivery channel — a content-free routing address, ALWAYS tenant- and
|
|
12
|
+
* scope-bound and server-verified. The canonical string form is produced ONLY
|
|
13
|
+
* by `channelName()` and parsed ONLY by `parseChannel()` (and the Skybber
|
|
14
|
+
* `@skybber/realtime-channels` parser, which must round-trip them).
|
|
15
|
+
*
|
|
16
|
+
* FROZEN kind→scopeType map (v1 ships ONLY user-scoped kinds):
|
|
17
|
+
* wakeup | setting_sync | safety -> scopeType "user", scopeId = recipient userId
|
|
18
|
+
* message -> scopeType "conversation" (DEFERRED)
|
|
19
|
+
* thread -> scopeType "thread" (DEFERRED)
|
|
20
|
+
*/
|
|
21
|
+
export interface Channel {
|
|
22
|
+
kind: ChannelKind;
|
|
23
|
+
/** Server-resolved tenant scope. */
|
|
24
|
+
tenantId: string;
|
|
25
|
+
scopeType: ScopeType;
|
|
26
|
+
/** userId (v1) | conversationId | threadId (deferred). */
|
|
27
|
+
scopeId: string;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Verified identity. Derived ONLY from Cognito claims (custom:userId,
|
|
31
|
+
* custom:activeTenantId) — by the in-core handler AND the Skybber authorizer
|
|
32
|
+
* Lambda — so both call the SAME function. Never an ambient Session, never a
|
|
33
|
+
* client-asserted path.
|
|
34
|
+
*/
|
|
35
|
+
export interface VerifiedIdentity {
|
|
36
|
+
userId: string;
|
|
37
|
+
tenantId: string;
|
|
38
|
+
}
|
|
39
|
+
/** Recipient address for `deliver()`. Both fields server-resolved. */
|
|
40
|
+
export interface DeliveryTarget {
|
|
41
|
+
userId: string;
|
|
42
|
+
tenantId: string;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Result of a `deliver()` attempt. `deliver()` is BEST-EFFORT: it NEVER rejects
|
|
46
|
+
* in a way that rolls back a persisted write. It resolves with this result;
|
|
47
|
+
* transports catch their own errors. The policy fence runs INSIDE every
|
|
48
|
+
* transport's `deliver()`.
|
|
49
|
+
*/
|
|
50
|
+
export type DeliveryResult = {
|
|
51
|
+
delivered: true;
|
|
52
|
+
} | {
|
|
53
|
+
delivered: false;
|
|
54
|
+
reason: "policy_denied" | "no_transport" | "transport_error";
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* Input the policy resolver sees. Built by the caller from its own args
|
|
58
|
+
* (`createNotification` has no Session), enriched with recipient ageTier /
|
|
59
|
+
* blocked-sender as needed for the floor.
|
|
60
|
+
*/
|
|
61
|
+
export interface DeliveryContext {
|
|
62
|
+
type: NotificationType;
|
|
63
|
+
recipientUserId: string;
|
|
64
|
+
tenantId: string;
|
|
65
|
+
/** blocked-sender floor input. */
|
|
66
|
+
senderUserId?: string;
|
|
67
|
+
/** minor-protection floor input. */
|
|
68
|
+
recipientAgeTier?: AgeTier;
|
|
69
|
+
now: Date;
|
|
70
|
+
quietHours?: QuietHoursConfig | null;
|
|
71
|
+
}
|
|
72
|
+
/** What the resolver decided for ONE delivery attempt. */
|
|
73
|
+
export type DeliveryDecision = {
|
|
74
|
+
deliver: true;
|
|
75
|
+
} | {
|
|
76
|
+
deliver: false;
|
|
77
|
+
reason: "preference" | "quiet_hours" | "blocked_sender" | "floor";
|
|
78
|
+
};
|
|
79
|
+
/**
|
|
80
|
+
* Quiet-hours window. `start`/`end` are opaque to the contract; the resolver
|
|
81
|
+
* that produced the context owns their interpretation. (The core resolver
|
|
82
|
+
* encodes minutes-since-midnight as decimal strings to reproduce the existing
|
|
83
|
+
* `User.quietHoursStart/End` integer behavior byte-identically.)
|
|
84
|
+
*/
|
|
85
|
+
export interface QuietHoursConfig {
|
|
86
|
+
enabled: boolean;
|
|
87
|
+
start: string;
|
|
88
|
+
end: string;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* The ONLY shape push payloads for wakeup/setting_sync may take. It has NO
|
|
92
|
+
* free-form field — content-free is a property of the TYPE, not a test
|
|
93
|
+
* heuristic. WS4/WS5 are FORBIDDEN from constructing arbitrary Uint8Array for
|
|
94
|
+
* these kinds; they must use `encodeWakeup()`.
|
|
95
|
+
*/
|
|
96
|
+
export interface WakeupEnvelope {
|
|
97
|
+
v: 1;
|
|
98
|
+
kind: ChannelKind;
|
|
99
|
+
/** opaque version pointer for setting_sync (NOT ciphertext). */
|
|
100
|
+
changeToken?: string;
|
|
101
|
+
}
|
|
102
|
+
/** Encode a wakeup envelope to its canonical content-free byte form. */
|
|
103
|
+
export declare function encodeWakeup(e: WakeupEnvelope): Uint8Array;
|
|
104
|
+
/** Decode a wakeup envelope. Throws on unknown fields or malformed input. */
|
|
105
|
+
export declare function decodeWakeup(b: Uint8Array): WakeupEnvelope;
|
|
106
|
+
/**
|
|
107
|
+
* Opaque AEAD ciphertext + plaintext sync metadata. The server NEVER reads
|
|
108
|
+
* `ciphertext`. `version`/`updatedAt` are deliberately plaintext (they leak
|
|
109
|
+
* only THAT/WHEN a setting changed, not WHAT).
|
|
110
|
+
*/
|
|
111
|
+
export interface EncryptedBlob {
|
|
112
|
+
/** Base64url AEAD ciphertext of the client's JSON document. */
|
|
113
|
+
ciphertext: string;
|
|
114
|
+
/** Monotonic per (userId, namespace). Drives optimistic concurrency. */
|
|
115
|
+
version: number;
|
|
116
|
+
/** ISO-8601; server-assigned on write. */
|
|
117
|
+
updatedAt: string;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Result of `putSetting` — optimistic-concurrency outcome. Never throws on
|
|
121
|
+
* conflict; the caller (and ultimately the client) reconciles against
|
|
122
|
+
* `current`.
|
|
123
|
+
*/
|
|
124
|
+
export type PutResult = {
|
|
125
|
+
ok: true;
|
|
126
|
+
stored: EncryptedBlob;
|
|
127
|
+
} | {
|
|
128
|
+
ok: false;
|
|
129
|
+
reason: "version_conflict";
|
|
130
|
+
current: EncryptedBlob;
|
|
131
|
+
} | {
|
|
132
|
+
ok: false;
|
|
133
|
+
reason: "not_found";
|
|
134
|
+
current: null;
|
|
135
|
+
};
|
|
136
|
+
/**
|
|
137
|
+
* Minimal store port the transports use for blob sync. WS5 supplies
|
|
138
|
+
* `PrismaEncryptedSettingsStore`; WS1 ships `InMemorySettingStore` so core
|
|
139
|
+
* runs/tests with zero infra. Holds CIPHERTEXT ONLY.
|
|
140
|
+
*
|
|
141
|
+
* FROZEN (§2.5): do NOT add methods here. Offline-backfill (Track C) is layered
|
|
142
|
+
* as the SEPARATE optional `ChangeCursorStore` capability below so this contract
|
|
143
|
+
* stays byte-stable for every consumer bound to it.
|
|
144
|
+
*/
|
|
145
|
+
export interface SettingStore {
|
|
146
|
+
get(userId: string, namespace: string): Promise<EncryptedBlob | null>;
|
|
147
|
+
put(userId: string, namespace: string, blob: EncryptedBlob, expectVersion: number): Promise<PutResult>;
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Metadata for ONE namespace whose version advanced past a client's cursor.
|
|
151
|
+
*
|
|
152
|
+
* SERVER-BLIND: deliberately carries NO `ciphertext`. It leaks only THAT/WHEN a
|
|
153
|
+
* namespace changed (already-plaintext sync metadata), never WHAT. A client that
|
|
154
|
+
* sees its namespace here re-pulls the blob over the authenticated GET. The
|
|
155
|
+
* absence of `ciphertext` is a TYPE-level guarantee, asserted by the tests.
|
|
156
|
+
*/
|
|
157
|
+
export interface ChangedSettingMeta {
|
|
158
|
+
namespace: string;
|
|
159
|
+
/** Monotonic per (userId, namespace) — the new high-watermark for this row. */
|
|
160
|
+
version: number;
|
|
161
|
+
/** ISO-8601 server-assigned write time. */
|
|
162
|
+
updatedAt: string;
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* OPTIONAL offline-backfill capability (Track C), layered ALONGSIDE the frozen
|
|
166
|
+
* `SettingStore` rather than baked into it. A store MAY also implement this to
|
|
167
|
+
* answer "which of my namespaces changed since I was last online?".
|
|
168
|
+
*
|
|
169
|
+
* The cursor (`sinceVersion`) is an opaque per-user version high-watermark: the
|
|
170
|
+
* largest `version` the client has already observed across ALL its namespaces.
|
|
171
|
+
* `listChangedSince` returns metadata for every namespace whose stored `version`
|
|
172
|
+
* is strictly greater than that watermark — METADATA ONLY, never `ciphertext`.
|
|
173
|
+
*/
|
|
174
|
+
export interface ChangeCursorStore {
|
|
175
|
+
listChangedSince(userId: string, sinceVersion: number): Promise<ChangedSettingMeta[]>;
|
|
176
|
+
}
|
|
177
|
+
/** Narrowing helper: does this store also provide the change-cursor capability? */
|
|
178
|
+
export declare function supportsChangeCursor(store: SettingStore): store is SettingStore & ChangeCursorStore;
|
|
179
|
+
/**
|
|
180
|
+
* The capability seam. Core ships `PollTransport` (default) + `NoopRealtimeTransport`
|
|
181
|
+
* (CI); a consuming app injects a concrete transport (e.g. Skybber's
|
|
182
|
+
* `AppSyncEventsTransport`) via `setRealtimeProvider()` WITHOUT core ever
|
|
183
|
+
* importing an AWS SDK.
|
|
184
|
+
*
|
|
185
|
+
* `subscribeInContext` is intentionally NOT part of the v1 freeze (in-context
|
|
186
|
+
* liveness is messaging-era; adding an optional method later is non-breaking).
|
|
187
|
+
*/
|
|
188
|
+
export interface RealtimeTransport {
|
|
189
|
+
readonly kind: "poll" | "appsync-events" | "noop";
|
|
190
|
+
/** Best-effort push. Runs the policy fence (floor) internally, every transport. */
|
|
191
|
+
deliver(target: DeliveryTarget, channel: Channel, payload: Uint8Array): Promise<DeliveryResult>;
|
|
192
|
+
getSetting(userId: string, namespace: string): Promise<EncryptedBlob | null>;
|
|
193
|
+
putSetting(userId: string, namespace: string, blob: EncryptedBlob, expectVersion: number): Promise<PutResult>;
|
|
194
|
+
shutdown?(): Promise<void>;
|
|
195
|
+
}
|
|
196
|
+
/** The policy port. WS1 ships `CalmDeliveryResolver`; WS3 may layer it. */
|
|
197
|
+
export interface DeliveryPolicyResolver {
|
|
198
|
+
decide(ctx: DeliveryContext): DeliveryDecision;
|
|
199
|
+
}
|
|
200
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/realtime/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
// CONTRACT: stable — coordinate changes.
|
|
2
|
+
//
|
|
3
|
+
// This file is the FROZEN WS1 contract for the Trellis RealtimeTransport seam.
|
|
4
|
+
// Every other workstream (WS2 AppSync infra, WS3 authorizer, WS4 push, WS5
|
|
5
|
+
// settings-sync, WS7 conformance) and the Skybber Flutter client bind to the
|
|
6
|
+
// exact signatures below. Any change after WS1 merges is a BREAKING change
|
|
7
|
+
// requiring a coordinated version bump and re-fan-out. See
|
|
8
|
+
// plans/appsync-skybber/00b-integration-and-frozen-contract.md §2.
|
|
9
|
+
//
|
|
10
|
+
// HARD RULE: nothing in apps/api/src/lib/realtime/** may import an AWS SDK
|
|
11
|
+
// (`@aws-sdk/*`, `aws-appsync`, `aws-amplify`) or a socket library. Enforced by
|
|
12
|
+
// test/unit/realtime/no-aws-import.test.ts.
|
|
13
|
+
/** Encode a wakeup envelope to its canonical content-free byte form. */
|
|
14
|
+
export function encodeWakeup(e) {
|
|
15
|
+
if (e.v !== 1) {
|
|
16
|
+
throw new Error(`encodeWakeup: unsupported version ${String(e.v)}`);
|
|
17
|
+
}
|
|
18
|
+
// Canonical, field-ordered JSON — no free-form passthrough.
|
|
19
|
+
const canonical = { v: 1, kind: e.kind };
|
|
20
|
+
if (e.changeToken !== undefined)
|
|
21
|
+
canonical.changeToken = e.changeToken;
|
|
22
|
+
return new TextEncoder().encode(JSON.stringify(canonical));
|
|
23
|
+
}
|
|
24
|
+
/** Decode a wakeup envelope. Throws on unknown fields or malformed input. */
|
|
25
|
+
export function decodeWakeup(b) {
|
|
26
|
+
let parsed;
|
|
27
|
+
try {
|
|
28
|
+
parsed = JSON.parse(new TextDecoder().decode(b));
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
throw new Error("decodeWakeup: not valid JSON");
|
|
32
|
+
}
|
|
33
|
+
if (typeof parsed !== "object" || parsed === null) {
|
|
34
|
+
throw new Error("decodeWakeup: not an object");
|
|
35
|
+
}
|
|
36
|
+
const obj = parsed;
|
|
37
|
+
const allowed = new Set(["v", "kind", "changeToken"]);
|
|
38
|
+
for (const key of Object.keys(obj)) {
|
|
39
|
+
if (!allowed.has(key)) {
|
|
40
|
+
throw new Error(`decodeWakeup: unknown field "${key}"`);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
if (obj.v !== 1) {
|
|
44
|
+
throw new Error("decodeWakeup: unsupported version");
|
|
45
|
+
}
|
|
46
|
+
if (typeof obj.kind !== "string") {
|
|
47
|
+
throw new Error("decodeWakeup: missing/invalid kind");
|
|
48
|
+
}
|
|
49
|
+
if (obj.changeToken !== undefined && typeof obj.changeToken !== "string") {
|
|
50
|
+
throw new Error("decodeWakeup: invalid changeToken");
|
|
51
|
+
}
|
|
52
|
+
const env = { v: 1, kind: obj.kind };
|
|
53
|
+
if (obj.changeToken !== undefined)
|
|
54
|
+
env.changeToken = obj.changeToken;
|
|
55
|
+
return env;
|
|
56
|
+
}
|
|
57
|
+
/** Narrowing helper: does this store also provide the change-cursor capability? */
|
|
58
|
+
export function supportsChangeCursor(store) {
|
|
59
|
+
return (typeof store.listChangedSince === "function");
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/lib/realtime/types.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,EAAE;AACF,+EAA+E;AAC/E,2EAA2E;AAC3E,6EAA6E;AAC7E,2EAA2E;AAC3E,2DAA2D;AAC3D,mEAAmE;AACnE,EAAE;AACF,2EAA2E;AAC3E,gFAAgF;AAChF,4CAA4C;AAuI5C,wEAAwE;AACxE,MAAM,UAAU,YAAY,CAAC,CAAiB;IAC5C,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,qCAAqC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACtE,CAAC;IACD,4DAA4D;IAC5D,MAAM,SAAS,GAA4B,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAClE,IAAI,CAAC,CAAC,WAAW,KAAK,SAAS;QAAE,SAAS,CAAC,WAAW,GAAG,CAAC,CAAC,WAAW,CAAC;IACvE,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;AAC7D,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,YAAY,CAAC,CAAa;IACxC,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACnD,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAClD,CAAC;IACD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QAClD,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACjD,CAAC;IACD,MAAM,GAAG,GAAG,MAAiC,CAAC;IAC9C,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC;IACtD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACnC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,gCAAgC,GAAG,GAAG,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IACD,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACvD,CAAC;IACD,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACjC,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACxD,CAAC;IACD,IAAI,GAAG,CAAC,WAAW,KAAK,SAAS,IAAI,OAAO,GAAG,CAAC,WAAW,KAAK,QAAQ,EAAE,CAAC;QACzE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACvD,CAAC;IACD,MAAM,GAAG,GAAmB,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAmB,EAAE,CAAC;IACpE,IAAI,GAAG,CAAC,WAAW,KAAK,SAAS;QAAE,GAAG,CAAC,WAAW,GAAG,GAAG,CAAC,WAAW,CAAC;IACrE,OAAO,GAAG,CAAC;AACb,CAAC;AAkFD,mFAAmF;AACnF,MAAM,UAAU,oBAAoB,CAClC,KAAmB;IAEnB,OAAO,CACL,OAAQ,KAAoC,CAAC,gBAAgB,KAAK,UAAU,CAC7E,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/routes/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/routes/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAyDH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAwPxC,eAAO,MAAM,MAAM,EAAE,KAAK,EAkBzB,CAAC;AAGF,YAAY,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/lib/routes/index.js
CHANGED
|
@@ -62,6 +62,7 @@ import { productTaxonomyRoutes } from "./products.js";
|
|
|
62
62
|
import { notificationsRoutes } from "./notifications.js";
|
|
63
63
|
import { parentalControlRoutes } from "./parental-controls.js";
|
|
64
64
|
import { sentimentsRoutes } from "./sentiments.js";
|
|
65
|
+
import { settingsRoutes } from "./settings.js";
|
|
65
66
|
import { taxonomyRoutes } from "./taxonomy.js";
|
|
66
67
|
import { taxonomyAnalyticsRoutes } from "./taxonomy-analytics.js";
|
|
67
68
|
import { tenantRoutes } from "./tenants.js";
|
|
@@ -169,6 +170,8 @@ const coreRoutes = [
|
|
|
169
170
|
...commentsRoutes,
|
|
170
171
|
// Sentiments/Reactions
|
|
171
172
|
...sentimentsRoutes,
|
|
173
|
+
// Realtime / server-blind settings sync
|
|
174
|
+
...settingsRoutes,
|
|
172
175
|
// Media uploads
|
|
173
176
|
...mediaRoutes,
|
|
174
177
|
// Media metadata privacy controls
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/routes/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/routes/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,5 +5,26 @@
|
|
|
5
5
|
* Implements content-addressed storage (CAS) with SHA-256 hashing for deduplication.
|
|
6
6
|
*/
|
|
7
7
|
import type { Route } from "./types.js";
|
|
8
|
+
/**
|
|
9
|
+
* Serve media file by content hash (T5: fail-closed APPROVED-only gate).
|
|
10
|
+
*
|
|
11
|
+
* Shared function used by both /api/media/:mediaId and /api/media/:hash routes.
|
|
12
|
+
*
|
|
13
|
+
* Decision flow (functional core in `media/serve-gate.ts`):
|
|
14
|
+
* 1. Validate the inbound URL hash via `validateContentHash` BEFORE any lookup.
|
|
15
|
+
* 2. Look up the DB record (the ONLY source of a servable key — the no-DB
|
|
16
|
+
* storage-probe maze was deleted in T9; storage is never probed for
|
|
17
|
+
* un-recorded bytes).
|
|
18
|
+
* 3. `isServable` gate: serve ONLY when `moderationStatus === "APPROVED"` AND
|
|
19
|
+
* not `hidden` AND not soft-deleted — for EVERY viewer incl. the owner.
|
|
20
|
+
* 4. Every other outcome (incl. not-found / DB-error / invalid-hash / error
|
|
21
|
+
* path) returns the single byte-identical {@link mediaDenyResponse}.
|
|
22
|
+
*
|
|
23
|
+
* `variant` is retained for call-site compatibility but never influences the
|
|
24
|
+
* gate; the served key is always the canonical `originalKey` from the DB record.
|
|
25
|
+
*/
|
|
26
|
+
export declare function serveMediaByHash(contentHash: string, variant: string, request: Request, env: any, session: {
|
|
27
|
+
userId: string;
|
|
28
|
+
}): Promise<Response>;
|
|
8
29
|
export declare const mediaRoutes: Route[];
|
|
9
30
|
//# sourceMappingURL=media.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../../../src/lib/routes/media.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../../../src/lib/routes/media.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA+BH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAoPxC;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,gBAAgB,CACpC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,OAAO,EAChB,GAAG,EAAE,GAAG,EACR,OAAO,EAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GAC1B,OAAO,CAAC,QAAQ,CAAC,CA+HnB;AAoDD,eAAO,MAAM,WAAW,EAAE,KAAK,EA8xE9B,CAAC"}
|