@ttt-productions/ttt-core 0.14.1 → 0.14.3
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/doc-schemas/chat-sync.d.ts +173 -0
- package/dist/doc-schemas/chat-sync.d.ts.map +1 -0
- package/dist/doc-schemas/chat-sync.js +130 -0
- package/dist/doc-schemas/chat-sync.js.map +1 -0
- package/dist/doc-schemas/commissions.js +1 -1
- package/dist/doc-schemas/commissions.js.map +1 -1
- package/dist/doc-schemas/content.js +1 -1
- package/dist/doc-schemas/content.js.map +1 -1
- package/dist/doc-schemas/firestore-primitives.d.ts +11 -0
- package/dist/doc-schemas/firestore-primitives.d.ts.map +1 -0
- package/dist/doc-schemas/firestore-primitives.js +27 -0
- package/dist/doc-schemas/firestore-primitives.js.map +1 -0
- package/dist/doc-schemas/index.d.ts +4 -0
- package/dist/doc-schemas/index.d.ts.map +1 -1
- package/dist/doc-schemas/index.js +4 -0
- package/dist/doc-schemas/index.js.map +1 -1
- package/dist/doc-schemas/media-activation-jobs.d.ts +120 -0
- package/dist/doc-schemas/media-activation-jobs.d.ts.map +1 -0
- package/dist/doc-schemas/media-activation-jobs.js +53 -0
- package/dist/doc-schemas/media-activation-jobs.js.map +1 -0
- package/dist/doc-schemas/media-assets.d.ts +136 -0
- package/dist/doc-schemas/media-assets.d.ts.map +1 -1
- package/dist/doc-schemas/media-assets.js +76 -0
- package/dist/doc-schemas/media-assets.js.map +1 -1
- package/dist/doc-schemas/moderation.d.ts +7 -0
- package/dist/doc-schemas/moderation.d.ts.map +1 -1
- package/dist/doc-schemas/notification-ledger.d.ts +78 -0
- package/dist/doc-schemas/notification-ledger.d.ts.map +1 -0
- package/dist/doc-schemas/notification-ledger.js +63 -0
- package/dist/doc-schemas/notification-ledger.js.map +1 -0
- package/dist/doc-schemas/notifications.d.ts +4 -0
- package/dist/doc-schemas/notifications.d.ts.map +1 -1
- package/dist/doc-schemas/notifications.js +5 -0
- package/dist/doc-schemas/notifications.js.map +1 -1
- package/dist/doc-schemas/registry.d.ts +444 -0
- package/dist/doc-schemas/registry.d.ts.map +1 -1
- package/dist/doc-schemas/registry.js +15 -0
- package/dist/doc-schemas/registry.js.map +1 -1
- package/dist/doc-schemas/social.js +5 -5
- package/dist/doc-schemas/social.js.map +1 -1
- package/dist/doc-schemas/user.d.ts +6 -0
- package/dist/doc-schemas/user.d.ts.map +1 -1
- package/dist/doc-schemas/user.js +8 -1
- package/dist/doc-schemas/user.js.map +1 -1
- package/dist/doc-schemas/work-project.d.ts +1 -0
- package/dist/doc-schemas/work-project.d.ts.map +1 -1
- package/dist/doc-schemas/work-project.js +9 -0
- package/dist/doc-schemas/work-project.js.map +1 -1
- package/dist/ids/chat-ids.d.ts +67 -0
- package/dist/ids/chat-ids.d.ts.map +1 -0
- package/dist/ids/chat-ids.js +119 -0
- package/dist/ids/chat-ids.js.map +1 -0
- package/dist/ids/index.d.ts +2 -0
- package/dist/ids/index.d.ts.map +1 -0
- package/dist/ids/index.js +2 -0
- package/dist/ids/index.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/media/pending-media.d.ts +112 -0
- package/dist/media/pending-media.d.ts.map +1 -1
- package/dist/paths/collections.d.ts +10 -0
- package/dist/paths/collections.d.ts.map +1 -1
- package/dist/paths/collections.js +13 -0
- package/dist/paths/collections.js.map +1 -1
- package/dist/paths/path-builders.d.ts +10 -0
- package/dist/paths/path-builders.d.ts.map +1 -1
- package/dist/paths/path-builders.js +13 -0
- package/dist/paths/path-builders.js.map +1 -1
- package/dist/types/audit.d.ts +1 -1
- package/dist/types/audit.d.ts.map +1 -1
- package/package.json +3 -2
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
// mediaActivationJobs/{jobId} — the durable job that drives the three-stage
|
|
2
|
+
// finalize (prepare → activate → publish) and its crash recovery. Created in the
|
|
3
|
+
// SAME private prepare transaction as mediaAssets/{assetId}; attempted
|
|
4
|
+
// immediately and re-driven by a scheduled recovery worker. Server-only
|
|
5
|
+
// (`allow read, write: if false`); NO client access.
|
|
6
|
+
//
|
|
7
|
+
// See MEDIA_AUTHORITY_DO_DESIGN.md §9 (job), §10 (three-stage finalize),
|
|
8
|
+
// §11 (publication adapters), §17 (reconcile).
|
|
9
|
+
//
|
|
10
|
+
// jobId = hash('media-activation', assetId, authorityVersion) (edge-protocol-core
|
|
11
|
+
// canonical hash family; collision-safe per the frozen ID rules).
|
|
12
|
+
import { z } from 'zod';
|
|
13
|
+
import { StructuredErrorSchema } from '@ttt-productions/edge-protocol-core';
|
|
14
|
+
import { FileOriginSchema } from '../media/file-origin.js';
|
|
15
|
+
import { FirestoreTimestampSchema } from './firestore-primitives.js';
|
|
16
|
+
import { MediaPublicationKindSchema, MediaServingAuthorityRecordSchema, } from './media-assets.js';
|
|
17
|
+
export const MediaActivationJobStatusSchema = z.enum([
|
|
18
|
+
'pending', // call the signed activation endpoint, verify the ack, CAS → authorityApplied
|
|
19
|
+
'authorityApplied', // call the typed publication adapter, on success CAS → complete
|
|
20
|
+
'complete', // owner published; TTL eligible
|
|
21
|
+
'deadLetter', // retries exhausted — retained for operator replay; user sees publication-failed
|
|
22
|
+
]);
|
|
23
|
+
export const MediaActivationJobSchema = z
|
|
24
|
+
.object({
|
|
25
|
+
jobId: z.string().min(1),
|
|
26
|
+
schemaVersion: z.number().int().positive(),
|
|
27
|
+
assetId: z.string().min(1),
|
|
28
|
+
pendingMediaId: z.string().min(1),
|
|
29
|
+
fileOrigin: FileOriginSchema,
|
|
30
|
+
// The exact serving record this job activates — the DO must ack this exact
|
|
31
|
+
// version + payloadHash before publication may proceed.
|
|
32
|
+
authorityVersion: z.number().int().nonnegative(),
|
|
33
|
+
payloadHash: z.string().min(1),
|
|
34
|
+
authorityPayload: MediaServingAuthorityRecordSchema,
|
|
35
|
+
// Typed publication adapter. `publicationArgs` is forward-validated by the
|
|
36
|
+
// per-kind adapter registry (§11, built in M2) — NEVER arbitrary Firestore
|
|
37
|
+
// writes; the job carries typed data, not serialized writes.
|
|
38
|
+
publicationKind: MediaPublicationKindSchema,
|
|
39
|
+
publicationArgs: z.unknown(),
|
|
40
|
+
status: MediaActivationJobStatusSchema,
|
|
41
|
+
attemptCount: z.number().int().nonnegative(),
|
|
42
|
+
nextAttemptAt: FirestoreTimestampSchema,
|
|
43
|
+
lastError: StructuredErrorSchema.optional(),
|
|
44
|
+
createdAt: FirestoreTimestampSchema,
|
|
45
|
+
authorityAppliedAt: FirestoreTimestampSchema.optional(),
|
|
46
|
+
completedAt: FirestoreTimestampSchema.optional(),
|
|
47
|
+
deadLetteredAt: FirestoreTimestampSchema.optional(),
|
|
48
|
+
// TTL set ONLY at `complete`; NEVER on pending/authorityApplied/deadLetter.
|
|
49
|
+
// Replay clears terminal/TTL fields (frozen matrix rule).
|
|
50
|
+
expireAt: FirestoreTimestampSchema.optional(),
|
|
51
|
+
})
|
|
52
|
+
.strict();
|
|
53
|
+
//# sourceMappingURL=media-activation-jobs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media-activation-jobs.js","sourceRoot":"","sources":["../../src/doc-schemas/media-activation-jobs.ts"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E,iFAAiF;AACjF,uEAAuE;AACvE,wEAAwE;AACxE,qDAAqD;AACrD,EAAE;AACF,yEAAyE;AACzE,+CAA+C;AAC/C,EAAE;AACF,mFAAmF;AACnF,kEAAkE;AAElE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAC5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EACL,0BAA0B,EAC1B,iCAAiC,GAClC,MAAM,mBAAmB,CAAC;AAE3B,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,CAAC,IAAI,CAAC;IACnD,SAAS,EAAE,8EAA8E;IACzF,kBAAkB,EAAE,gEAAgE;IACpF,UAAU,EAAE,gCAAgC;IAC5C,YAAY,EAAE,iFAAiF;CAChG,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC;KACtC,MAAM,CAAC;IACN,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACxB,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IAE1C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACjC,UAAU,EAAE,gBAAgB;IAE5B,2EAA2E;IAC3E,wDAAwD;IACxD,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;IAChD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9B,gBAAgB,EAAE,iCAAiC;IAEnD,2EAA2E;IAC3E,2EAA2E;IAC3E,6DAA6D;IAC7D,eAAe,EAAE,0BAA0B;IAC3C,eAAe,EAAE,CAAC,CAAC,OAAO,EAAE;IAE5B,MAAM,EAAE,8BAA8B;IACtC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE;IAC5C,aAAa,EAAE,wBAAwB;IACvC,SAAS,EAAE,qBAAqB,CAAC,QAAQ,EAAE;IAE3C,SAAS,EAAE,wBAAwB;IACnC,kBAAkB,EAAE,wBAAwB,CAAC,QAAQ,EAAE;IACvD,WAAW,EAAE,wBAAwB,CAAC,QAAQ,EAAE;IAChD,cAAc,EAAE,wBAAwB,CAAC,QAAQ,EAAE;IACnD,4EAA4E;IAC5E,0DAA0D;IAC1D,QAAQ,EAAE,wBAAwB,CAAC,QAAQ,EAAE;CAC9C,CAAC;KACD,MAAM,EAAE,CAAC"}
|
|
@@ -56,6 +56,113 @@ export declare const RealmPromotionStatusSchema: z.ZodEnum<{
|
|
|
56
56
|
promoted: "promoted";
|
|
57
57
|
}>;
|
|
58
58
|
export type RealmPromotionStatus = z.infer<typeof RealmPromotionStatusSchema>;
|
|
59
|
+
/** Whether the canonical serving record has been applied to the DO authority. */
|
|
60
|
+
export declare const MediaAuthoritySyncStateSchema: z.ZodEnum<{
|
|
61
|
+
pending: "pending";
|
|
62
|
+
deadLetter: "deadLetter";
|
|
63
|
+
applied: "applied";
|
|
64
|
+
}>;
|
|
65
|
+
export type MediaAuthoritySyncState = z.infer<typeof MediaAuthoritySyncStateSchema>;
|
|
66
|
+
/** Whether the asset is referenced by a visible owner doc. Orthogonal to the
|
|
67
|
+
* upload's processing outcome (`pendingMedia.status`) and to `servingStatus`. */
|
|
68
|
+
export declare const MediaAssetPublicationStateSchema: z.ZodEnum<{
|
|
69
|
+
unpublished: "unpublished";
|
|
70
|
+
published: "published";
|
|
71
|
+
retired: "retired";
|
|
72
|
+
}>;
|
|
73
|
+
export type MediaAssetPublicationState = z.infer<typeof MediaAssetPublicationStateSchema>;
|
|
74
|
+
/**
|
|
75
|
+
* Typed immutable serving scope for scoped-tier assets. Guild-chat attachments
|
|
76
|
+
* carry an EXACT channel/invite scope — NEVER a bare matchable `workProjectId`
|
|
77
|
+
* (a whole-Work `{w}` grant must not match a restricted channel's attachment).
|
|
78
|
+
* Frozen in chat-realtime-system.md Contract E ("Chat attachment authorization").
|
|
79
|
+
* `null` scope = no scope match required beyond the access tier (e.g. broad).
|
|
80
|
+
*/
|
|
81
|
+
export declare const MediaServingScopeSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
82
|
+
kind: z.ZodLiteral<"guildChannel">;
|
|
83
|
+
workProjectId: z.ZodString;
|
|
84
|
+
guildChatChannelId: z.ZodString;
|
|
85
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
86
|
+
kind: z.ZodLiteral<"guildInvite">;
|
|
87
|
+
guildInviteId: z.ZodString;
|
|
88
|
+
}, z.core.$strict>], "kind">;
|
|
89
|
+
export type MediaServingScope = z.infer<typeof MediaServingScopeSchema>;
|
|
90
|
+
/**
|
|
91
|
+
* The typed owner adapter a publication goes through (§11). The activation job
|
|
92
|
+
* carries this kind; a server-side registry validates per-kind `publicationArgs`
|
|
93
|
+
* and performs the idempotent owner write. Chat is the non-Firestore-owner
|
|
94
|
+
* adapter (publishes via its durable attachmentFlip ack, not an owner txn).
|
|
95
|
+
*/
|
|
96
|
+
export declare const MediaPublicationKindSchema: z.ZodEnum<{
|
|
97
|
+
profilePicture: "profilePicture";
|
|
98
|
+
squarePostMedia: "squarePostMedia";
|
|
99
|
+
workAsset: "workAsset";
|
|
100
|
+
hallCover: "hallCover";
|
|
101
|
+
auditionMedia: "auditionMedia";
|
|
102
|
+
commissionListingMedia: "commissionListingMedia";
|
|
103
|
+
commissionProposalMedia: "commissionProposalMedia";
|
|
104
|
+
craftSkillMedia: "craftSkillMedia";
|
|
105
|
+
chatAttachment: "chatAttachment";
|
|
106
|
+
}>;
|
|
107
|
+
export type MediaPublicationKind = z.infer<typeof MediaPublicationKindSchema>;
|
|
108
|
+
/**
|
|
109
|
+
* The normalized serving record (§7) — the SAME contract used to generate both
|
|
110
|
+
* the DO authority row and the KV cache payload (one function, so they can't
|
|
111
|
+
* drift). The R2 object key stays deterministic (`mediaAssets/{assetId}/{key}`)
|
|
112
|
+
* and is NOT persisted here. `payloadHash` is computed over the canonical
|
|
113
|
+
* payload EXCLUDING the hash itself (see edge-protocol-core `hashPayload`).
|
|
114
|
+
*/
|
|
115
|
+
export declare const MediaServingAuthorityRecordSchema: z.ZodObject<{
|
|
116
|
+
schemaVersion: z.ZodNumber;
|
|
117
|
+
assetId: z.ZodString;
|
|
118
|
+
authorityVersion: z.ZodNumber;
|
|
119
|
+
operationId: z.ZodString;
|
|
120
|
+
payloadHash: z.ZodString;
|
|
121
|
+
servingStatus: z.ZodEnum<{
|
|
122
|
+
hidden: "hidden";
|
|
123
|
+
servable: "servable";
|
|
124
|
+
quarantined: "quarantined";
|
|
125
|
+
deleted: "deleted";
|
|
126
|
+
}>;
|
|
127
|
+
accessTier: z.ZodEnum<{
|
|
128
|
+
broad: "broad";
|
|
129
|
+
scoped: "scoped";
|
|
130
|
+
artisan: "artisan";
|
|
131
|
+
adminOnly: "adminOnly";
|
|
132
|
+
}>;
|
|
133
|
+
ownerType: z.ZodEnum<{
|
|
134
|
+
workProject: "workProject";
|
|
135
|
+
audition: "audition";
|
|
136
|
+
craftSkill: "craftSkill";
|
|
137
|
+
hallItem: "hallItem";
|
|
138
|
+
userProfile: "userProfile";
|
|
139
|
+
squareStreetzPost: "squareStreetzPost";
|
|
140
|
+
workContent: "workContent";
|
|
141
|
+
commissionListing: "commissionListing";
|
|
142
|
+
commissionProposal: "commissionProposal";
|
|
143
|
+
auditionEntry: "auditionEntry";
|
|
144
|
+
guildChatAttachment: "guildChatAttachment";
|
|
145
|
+
realmFile: "realmFile";
|
|
146
|
+
}>;
|
|
147
|
+
ownerId: z.ZodString;
|
|
148
|
+
scope: z.ZodNullable<z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
149
|
+
kind: z.ZodLiteral<"guildChannel">;
|
|
150
|
+
workProjectId: z.ZodString;
|
|
151
|
+
guildChatChannelId: z.ZodString;
|
|
152
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
153
|
+
kind: z.ZodLiteral<"guildInvite">;
|
|
154
|
+
guildInviteId: z.ZodString;
|
|
155
|
+
}, z.core.$strict>], "kind">>;
|
|
156
|
+
variants: z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
157
|
+
contentType: z.ZodString;
|
|
158
|
+
sizeBytes: z.ZodNumber;
|
|
159
|
+
width: z.ZodOptional<z.ZodNumber>;
|
|
160
|
+
height: z.ZodOptional<z.ZodNumber>;
|
|
161
|
+
durationSec: z.ZodOptional<z.ZodNumber>;
|
|
162
|
+
}, z.core.$strict>>;
|
|
163
|
+
updatedAtMs: z.ZodNumber;
|
|
164
|
+
}, z.core.$strict>;
|
|
165
|
+
export type MediaServingAuthorityRecord = z.infer<typeof MediaServingAuthorityRecordSchema>;
|
|
59
166
|
export declare const MediaAssetSchema: z.ZodObject<{
|
|
60
167
|
mediaAssetId: z.ZodString;
|
|
61
168
|
mediaKind: z.ZodEnum<{
|
|
@@ -141,6 +248,35 @@ export declare const MediaAssetSchema: z.ZodObject<{
|
|
|
141
248
|
realmPromotionNote: z.ZodOptional<z.ZodString>;
|
|
142
249
|
realmPromotionRequestedByUid: z.ZodOptional<z.ZodString>;
|
|
143
250
|
realmPromotionRequestedAt: z.ZodOptional<z.ZodNumber>;
|
|
251
|
+
authorityVersion: z.ZodOptional<z.ZodNumber>;
|
|
252
|
+
authorityPayloadHash: z.ZodOptional<z.ZodString>;
|
|
253
|
+
authoritySyncState: z.ZodOptional<z.ZodEnum<{
|
|
254
|
+
pending: "pending";
|
|
255
|
+
deadLetter: "deadLetter";
|
|
256
|
+
applied: "applied";
|
|
257
|
+
}>>;
|
|
258
|
+
publicationState: z.ZodOptional<z.ZodEnum<{
|
|
259
|
+
unpublished: "unpublished";
|
|
260
|
+
published: "published";
|
|
261
|
+
retired: "retired";
|
|
262
|
+
}>>;
|
|
263
|
+
scope: z.ZodOptional<z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
264
|
+
kind: z.ZodLiteral<"guildChannel">;
|
|
265
|
+
workProjectId: z.ZodString;
|
|
266
|
+
guildChatChannelId: z.ZodString;
|
|
267
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
268
|
+
kind: z.ZodLiteral<"guildInvite">;
|
|
269
|
+
guildInviteId: z.ZodString;
|
|
270
|
+
}, z.core.$strict>], "kind">>;
|
|
271
|
+
authorityAppliedAt: z.ZodOptional<z.ZodNumber>;
|
|
272
|
+
publishedAt: z.ZodOptional<z.ZodNumber>;
|
|
273
|
+
lastAuthorityError: z.ZodOptional<z.ZodObject<{
|
|
274
|
+
code: z.ZodString;
|
|
275
|
+
message: z.ZodString;
|
|
276
|
+
retryable: z.ZodOptional<z.ZodBoolean>;
|
|
277
|
+
details: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
278
|
+
at: z.ZodOptional<z.ZodNumber>;
|
|
279
|
+
}, z.core.$strict>>;
|
|
144
280
|
createdAt: z.ZodNumber;
|
|
145
281
|
updatedAt: z.ZodNumber;
|
|
146
282
|
}, z.core.$strict>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"media-assets.d.ts","sourceRoot":"","sources":["../../src/doc-schemas/media-assets.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"media-assets.d.ts","sourceRoot":"","sources":["../../src/doc-schemas/media-assets.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,6DAA6D;AAC7D,eAAO,MAAM,qBAAqB;;;;;EAAsD,CAAC;AACzF,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE;4DAC4D;AAC5D,eAAO,MAAM,wBAAwB;;;;;EAA2D,CAAC;AACjG,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE1E;;uCAEuC;AACvC,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;EAapC,CAAC;AACH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAE5E,eAAO,MAAM,uBAAuB;;;;;;kBAMzB,CAAC;AACZ,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE,eAAO,MAAM,0BAA0B;;;;EAIrC,CAAC;AACH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAE9E,eAAO,MAAM,0BAA0B;;;;;;EAErC,CAAC;AACH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAK9E,iFAAiF;AACjF,eAAO,MAAM,6BAA6B;;;;EAA+C,CAAC;AAC1F,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAC;AAEpF;iFACiF;AACjF,eAAO,MAAM,gCAAgC;;;;EAAkD,CAAC;AAChG,MAAM,MAAM,0BAA0B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gCAAgC,CAAC,CAAC;AAE1F;;;;;;GAMG;AACH,eAAO,MAAM,uBAAuB;;;;;;;4BAUlC,CAAC;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE;;;;;GAKG;AACH,eAAO,MAAM,0BAA0B;;;;;;;;;;EAUrC,CAAC;AACH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAE9E;;;;;;GAMG;AACH,eAAO,MAAM,iCAAiC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAiBnC,CAAC;AACZ,MAAM,MAAM,2BAA2B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iCAAiC,CAAC,CAAC;AAE5F,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAgDlB,CAAC;AACZ,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC"}
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
// truth the edge records derive from. NO client reads, NO client writes.
|
|
6
6
|
// See ttt-prod docs/design/media-assets-and-protected-serving.md.
|
|
7
7
|
import { z } from 'zod';
|
|
8
|
+
import { StructuredErrorSchema } from '@ttt-productions/edge-protocol-core';
|
|
8
9
|
import { FileOriginSchema } from '../media/file-origin.js';
|
|
9
10
|
/** Who may be served the bytes (the Worker's tier check). */
|
|
10
11
|
export const MediaAccessTierSchema = z.enum(['broad', 'scoped', 'artisan', 'adminOnly']);
|
|
@@ -43,6 +44,69 @@ export const MediaRetentionPolicySchema = z.enum([
|
|
|
43
44
|
export const RealmPromotionStatusSchema = z.enum([
|
|
44
45
|
'none', 'candidate', 'pendingReview', 'promoted', 'rejected',
|
|
45
46
|
]);
|
|
47
|
+
// ===== Serving authority (Durable Object) + publication gating =====
|
|
48
|
+
// See MEDIA_AUTHORITY_DO_DESIGN.md §6–§9/§13 and media-assets-and-protected-serving.md.
|
|
49
|
+
/** Whether the canonical serving record has been applied to the DO authority. */
|
|
50
|
+
export const MediaAuthoritySyncStateSchema = z.enum(['pending', 'applied', 'deadLetter']);
|
|
51
|
+
/** Whether the asset is referenced by a visible owner doc. Orthogonal to the
|
|
52
|
+
* upload's processing outcome (`pendingMedia.status`) and to `servingStatus`. */
|
|
53
|
+
export const MediaAssetPublicationStateSchema = z.enum(['unpublished', 'published', 'retired']);
|
|
54
|
+
/**
|
|
55
|
+
* Typed immutable serving scope for scoped-tier assets. Guild-chat attachments
|
|
56
|
+
* carry an EXACT channel/invite scope — NEVER a bare matchable `workProjectId`
|
|
57
|
+
* (a whole-Work `{w}` grant must not match a restricted channel's attachment).
|
|
58
|
+
* Frozen in chat-realtime-system.md Contract E ("Chat attachment authorization").
|
|
59
|
+
* `null` scope = no scope match required beyond the access tier (e.g. broad).
|
|
60
|
+
*/
|
|
61
|
+
export const MediaServingScopeSchema = z.discriminatedUnion('kind', [
|
|
62
|
+
z.object({
|
|
63
|
+
kind: z.literal('guildChannel'),
|
|
64
|
+
workProjectId: z.string().min(1),
|
|
65
|
+
guildChatChannelId: z.string().min(1),
|
|
66
|
+
}).strict(),
|
|
67
|
+
z.object({
|
|
68
|
+
kind: z.literal('guildInvite'),
|
|
69
|
+
guildInviteId: z.string().min(1),
|
|
70
|
+
}).strict(),
|
|
71
|
+
]);
|
|
72
|
+
/**
|
|
73
|
+
* The typed owner adapter a publication goes through (§11). The activation job
|
|
74
|
+
* carries this kind; a server-side registry validates per-kind `publicationArgs`
|
|
75
|
+
* and performs the idempotent owner write. Chat is the non-Firestore-owner
|
|
76
|
+
* adapter (publishes via its durable attachmentFlip ack, not an owner txn).
|
|
77
|
+
*/
|
|
78
|
+
export const MediaPublicationKindSchema = z.enum([
|
|
79
|
+
'profilePicture',
|
|
80
|
+
'squarePostMedia',
|
|
81
|
+
'workAsset',
|
|
82
|
+
'hallCover',
|
|
83
|
+
'auditionMedia',
|
|
84
|
+
'commissionListingMedia',
|
|
85
|
+
'commissionProposalMedia',
|
|
86
|
+
'craftSkillMedia',
|
|
87
|
+
'chatAttachment',
|
|
88
|
+
]);
|
|
89
|
+
/**
|
|
90
|
+
* The normalized serving record (§7) — the SAME contract used to generate both
|
|
91
|
+
* the DO authority row and the KV cache payload (one function, so they can't
|
|
92
|
+
* drift). The R2 object key stays deterministic (`mediaAssets/{assetId}/{key}`)
|
|
93
|
+
* and is NOT persisted here. `payloadHash` is computed over the canonical
|
|
94
|
+
* payload EXCLUDING the hash itself (see edge-protocol-core `hashPayload`).
|
|
95
|
+
*/
|
|
96
|
+
export const MediaServingAuthorityRecordSchema = z.object({
|
|
97
|
+
schemaVersion: z.number().int().positive(),
|
|
98
|
+
assetId: z.string().min(1),
|
|
99
|
+
authorityVersion: z.number().int().nonnegative(),
|
|
100
|
+
operationId: z.string().min(1),
|
|
101
|
+
payloadHash: z.string().min(1),
|
|
102
|
+
servingStatus: MediaServingStatusSchema,
|
|
103
|
+
accessTier: MediaAccessTierSchema,
|
|
104
|
+
ownerType: MediaAssetOwnerTypeSchema,
|
|
105
|
+
ownerId: z.string().min(1),
|
|
106
|
+
scope: MediaServingScopeSchema.nullable(),
|
|
107
|
+
variants: z.record(z.string(), MediaAssetVariantSchema),
|
|
108
|
+
updatedAtMs: z.number(),
|
|
109
|
+
}).strict();
|
|
46
110
|
export const MediaAssetSchema = z.object({
|
|
47
111
|
mediaAssetId: z.string().min(1),
|
|
48
112
|
mediaKind: z.enum(['image', 'video', 'audio']),
|
|
@@ -70,6 +134,18 @@ export const MediaAssetSchema = z.object({
|
|
|
70
134
|
realmPromotionNote: z.string().max(2000).optional(),
|
|
71
135
|
realmPromotionRequestedByUid: z.string().optional(),
|
|
72
136
|
realmPromotionRequestedAt: z.number().optional(),
|
|
137
|
+
// Serving authority + publication gating (§13). Additive/optional so assets
|
|
138
|
+
// written before the authority build still parse: absent authorityVersion ⇒
|
|
139
|
+
// 0/never-applied, absent publicationState ⇒ 'unpublished'. Every
|
|
140
|
+
// serving-record mutation increments authorityVersion in an authoritative txn.
|
|
141
|
+
authorityVersion: z.number().int().nonnegative().optional(),
|
|
142
|
+
authorityPayloadHash: z.string().optional(),
|
|
143
|
+
authoritySyncState: MediaAuthoritySyncStateSchema.optional(),
|
|
144
|
+
publicationState: MediaAssetPublicationStateSchema.optional(),
|
|
145
|
+
scope: MediaServingScopeSchema.optional(),
|
|
146
|
+
authorityAppliedAt: z.number().optional(),
|
|
147
|
+
publishedAt: z.number().optional(),
|
|
148
|
+
lastAuthorityError: StructuredErrorSchema.optional(),
|
|
73
149
|
createdAt: z.number(),
|
|
74
150
|
updatedAt: z.number(),
|
|
75
151
|
}).strict();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"media-assets.js","sourceRoot":"","sources":["../../src/doc-schemas/media-assets.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"media-assets.js","sourceRoot":"","sources":["../../src/doc-schemas/media-assets.ts"],"names":[],"mappings":"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"}
|
|
@@ -58,6 +58,13 @@ export declare const ContentViolationSchema: z.ZodObject<{
|
|
|
58
58
|
surface: z.ZodString;
|
|
59
59
|
targetIds: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
60
60
|
}, z.core.$strict>>;
|
|
61
|
+
publicationState: z.ZodOptional<z.ZodOptional<z.ZodEnum<{
|
|
62
|
+
notStarted: "notStarted";
|
|
63
|
+
activating: "activating";
|
|
64
|
+
publishing: "publishing";
|
|
65
|
+
live: "live";
|
|
66
|
+
publicationFailed: "publicationFailed";
|
|
67
|
+
}>>>;
|
|
61
68
|
createdAt: z.ZodOptional<z.ZodNumber>;
|
|
62
69
|
updatedAt: z.ZodOptional<z.ZodNumber>;
|
|
63
70
|
processingStartedAt: z.ZodOptional<z.ZodOptional<z.ZodNumber>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"moderation.d.ts","sourceRoot":"","sources":["../../src/doc-schemas/moderation.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,sBAAsB
|
|
1
|
+
{"version":3,"file":"moderation.d.ts","sourceRoot":"","sources":["../../src/doc-schemas/moderation.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA+BjC,CAAC;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAItE,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAQlC,CAAC;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE,eAAO,MAAM,6BAA6B;;;;;EAAmE,CAAC;AAC9G,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAC;AAEpF,eAAO,MAAM,6BAA6B;;;;EAA4C,CAAC;AACvF,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAC;AAEpF,eAAO,MAAM,wCAAwC;;;;;EAKnD,CAAC;AACH,MAAM,MAAM,kCAAkC,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wCAAwC,CAAC,CAAC;AAI1G,eAAO,MAAM,yCAAyC;;;EAAuC,CAAC;AAC9F,MAAM,MAAM,mCAAmC,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yCAAyC,CAAC,CAAC;AAE5G,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;;;;;;;;;iBAU1C,CAAC;AACH,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,+BAA+B,CAAC,CAAC;AAExF,eAAO,MAAM,iCAAiC;;;;;;;;;;;;;iBAQ5C,CAAC;AACH,MAAM,MAAM,2BAA2B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iCAAiC,CAAC,CAAC"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/** The materialization payload carried on every delivery row. */
|
|
3
|
+
export declare const NotificationDeliveryPayloadSchema: z.ZodObject<{
|
|
4
|
+
actorId: z.ZodString;
|
|
5
|
+
metadata: z.ZodRecord<z.ZodString, z.ZodUnknown>;
|
|
6
|
+
occurrenceAt: z.ZodNumber;
|
|
7
|
+
}, z.core.$strip>;
|
|
8
|
+
export declare const NotificationDeliverySchema: z.ZodObject<{
|
|
9
|
+
deliveryId: z.ZodString;
|
|
10
|
+
state: z.ZodEnum<{
|
|
11
|
+
deadLetter: "deadLetter";
|
|
12
|
+
queued: "queued";
|
|
13
|
+
materialized: "materialized";
|
|
14
|
+
}>;
|
|
15
|
+
notificationType: z.ZodString;
|
|
16
|
+
eventId: z.ZodString;
|
|
17
|
+
recipientUid: z.ZodNullable<z.ZodString>;
|
|
18
|
+
aggregationKey: z.ZodString;
|
|
19
|
+
strategy: z.ZodEnum<{
|
|
20
|
+
increment: "increment";
|
|
21
|
+
staticRelight: "staticRelight";
|
|
22
|
+
}>;
|
|
23
|
+
payload: z.ZodObject<{
|
|
24
|
+
actorId: z.ZodString;
|
|
25
|
+
metadata: z.ZodRecord<z.ZodString, z.ZodUnknown>;
|
|
26
|
+
occurrenceAt: z.ZodNumber;
|
|
27
|
+
}, z.core.$strip>;
|
|
28
|
+
payloadVersion: z.ZodNumber;
|
|
29
|
+
materializationClass: z.ZodEnum<{
|
|
30
|
+
directQueued: "directQueued";
|
|
31
|
+
realtimeFallback: "realtimeFallback";
|
|
32
|
+
fanoutOrphan: "fanoutOrphan";
|
|
33
|
+
retry: "retry";
|
|
34
|
+
}>;
|
|
35
|
+
createdAt: z.ZodNumber;
|
|
36
|
+
attemptCount: z.ZodNumber;
|
|
37
|
+
nextAttemptAt: z.ZodNumber;
|
|
38
|
+
lastError: z.ZodNullable<z.ZodString>;
|
|
39
|
+
materializedAt: z.ZodNullable<z.ZodNumber>;
|
|
40
|
+
deadLetteredAt: z.ZodNullable<z.ZodNumber>;
|
|
41
|
+
expireAt: z.ZodOptional<z.ZodUnknown>;
|
|
42
|
+
}, z.core.$strip>;
|
|
43
|
+
export type NotificationDelivery = z.infer<typeof NotificationDeliverySchema>;
|
|
44
|
+
export declare const NotificationFanoutPhaseSchema: z.ZodObject<{
|
|
45
|
+
selector: z.ZodRecord<z.ZodString, z.ZodUnknown>;
|
|
46
|
+
cursor: z.ZodNullable<z.ZodUnknown>;
|
|
47
|
+
done: z.ZodBoolean;
|
|
48
|
+
}, z.core.$strip>;
|
|
49
|
+
export declare const NotificationFanoutJobSchema: z.ZodObject<{
|
|
50
|
+
jobId: z.ZodString;
|
|
51
|
+
schemaVersion: z.ZodNumber;
|
|
52
|
+
notificationType: z.ZodString;
|
|
53
|
+
eventId: z.ZodString;
|
|
54
|
+
priority: z.ZodUnion<readonly [z.ZodLiteral<0>, z.ZodLiteral<1>, z.ZodLiteral<2>]>;
|
|
55
|
+
payload: z.ZodRecord<z.ZodString, z.ZodUnknown>;
|
|
56
|
+
phases: z.ZodArray<z.ZodObject<{
|
|
57
|
+
selector: z.ZodRecord<z.ZodString, z.ZodUnknown>;
|
|
58
|
+
cursor: z.ZodNullable<z.ZodUnknown>;
|
|
59
|
+
done: z.ZodBoolean;
|
|
60
|
+
}, z.core.$strip>>;
|
|
61
|
+
phaseIndex: z.ZodNumber;
|
|
62
|
+
revision: z.ZodNumber;
|
|
63
|
+
status: z.ZodEnum<{
|
|
64
|
+
pending: "pending";
|
|
65
|
+
complete: "complete";
|
|
66
|
+
deadLetter: "deadLetter";
|
|
67
|
+
}>;
|
|
68
|
+
attemptCount: z.ZodNumber;
|
|
69
|
+
nextAttemptAt: z.ZodNumber;
|
|
70
|
+
lastError: z.ZodNullable<z.ZodString>;
|
|
71
|
+
createdAt: z.ZodNumber;
|
|
72
|
+
updatedAt: z.ZodNumber;
|
|
73
|
+
completedAt: z.ZodNullable<z.ZodNumber>;
|
|
74
|
+
deadLetteredAt: z.ZodNullable<z.ZodNumber>;
|
|
75
|
+
expireAt: z.ZodOptional<z.ZodUnknown>;
|
|
76
|
+
}, z.core.$strip>;
|
|
77
|
+
export type NotificationFanoutJob = z.infer<typeof NotificationFanoutJobSchema>;
|
|
78
|
+
//# sourceMappingURL=notification-ledger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notification-ledger.d.ts","sourceRoot":"","sources":["../../src/doc-schemas/notification-ledger.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,iEAAiE;AACjE,eAAO,MAAM,iCAAiC;;;;iBAI5C,CAAC;AAKH,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAkBrC,CAAC;AACH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAI9E,eAAO,MAAM,6BAA6B;;;;iBAIxC,CAAC;AAEH,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAmBtC,CAAC;AACH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
// Notification redesign ledger Firestore schemas (chat-edge-rebuild P1).
|
|
2
|
+
// Frozen field lists from IMPLEMENTATION_MATRIX.md "Notifications". Admin-SDK-only.
|
|
3
|
+
// `expireAt` is the only Firestore `Timestamp` field (native TTL); every other
|
|
4
|
+
// time field is epoch-ms `number`.
|
|
5
|
+
import { z } from 'zod';
|
|
6
|
+
/** Native-TTL Timestamp (set only at the resolved-success terminal). */
|
|
7
|
+
const expireAtField = z.unknown().optional();
|
|
8
|
+
/** The materialization payload carried on every delivery row. */
|
|
9
|
+
export const NotificationDeliveryPayloadSchema = z.object({
|
|
10
|
+
actorId: z.string(),
|
|
11
|
+
metadata: z.record(z.string(), z.unknown()),
|
|
12
|
+
occurrenceAt: z.number(),
|
|
13
|
+
});
|
|
14
|
+
// ── notificationDeliveries/{deliveryId} ─────────────────────────────────────
|
|
15
|
+
// BOTH the recipient ledger AND the occurrence ledger. Shared-admin rows set
|
|
16
|
+
// recipientUid=null (the deliveryId hash uses the literal 'shared').
|
|
17
|
+
export const NotificationDeliverySchema = z.object({
|
|
18
|
+
deliveryId: z.string(),
|
|
19
|
+
state: z.enum(['queued', 'materialized', 'deadLetter']),
|
|
20
|
+
notificationType: z.string(),
|
|
21
|
+
eventId: z.string(),
|
|
22
|
+
recipientUid: z.string().nullable(),
|
|
23
|
+
aggregationKey: z.string(),
|
|
24
|
+
strategy: z.enum(['increment', 'staticRelight']),
|
|
25
|
+
payload: NotificationDeliveryPayloadSchema,
|
|
26
|
+
payloadVersion: z.number(),
|
|
27
|
+
materializationClass: z.enum(['directQueued', 'realtimeFallback', 'fanoutOrphan', 'retry']),
|
|
28
|
+
createdAt: z.number(),
|
|
29
|
+
attemptCount: z.number(),
|
|
30
|
+
nextAttemptAt: z.number(),
|
|
31
|
+
lastError: z.string().nullable(),
|
|
32
|
+
materializedAt: z.number().nullable(),
|
|
33
|
+
deadLetteredAt: z.number().nullable(),
|
|
34
|
+
expireAt: expireAtField,
|
|
35
|
+
});
|
|
36
|
+
// ── notificationFanoutJobs/{jobId} ──────────────────────────────────────────
|
|
37
|
+
// jobId = `${eventId}:${notificationType}`. No `running` state (no leases).
|
|
38
|
+
export const NotificationFanoutPhaseSchema = z.object({
|
|
39
|
+
selector: z.record(z.string(), z.unknown()),
|
|
40
|
+
cursor: z.unknown().nullable(),
|
|
41
|
+
done: z.boolean(),
|
|
42
|
+
});
|
|
43
|
+
export const NotificationFanoutJobSchema = z.object({
|
|
44
|
+
jobId: z.string(),
|
|
45
|
+
schemaVersion: z.number(),
|
|
46
|
+
notificationType: z.string(),
|
|
47
|
+
eventId: z.string(),
|
|
48
|
+
priority: z.union([z.literal(0), z.literal(1), z.literal(2)]),
|
|
49
|
+
payload: z.record(z.string(), z.unknown()),
|
|
50
|
+
phases: z.array(NotificationFanoutPhaseSchema),
|
|
51
|
+
phaseIndex: z.number(),
|
|
52
|
+
revision: z.number(),
|
|
53
|
+
status: z.enum(['pending', 'complete', 'deadLetter']),
|
|
54
|
+
attemptCount: z.number(),
|
|
55
|
+
nextAttemptAt: z.number(),
|
|
56
|
+
lastError: z.string().nullable(),
|
|
57
|
+
createdAt: z.number(),
|
|
58
|
+
updatedAt: z.number(),
|
|
59
|
+
completedAt: z.number().nullable(),
|
|
60
|
+
deadLetteredAt: z.number().nullable(),
|
|
61
|
+
expireAt: expireAtField,
|
|
62
|
+
});
|
|
63
|
+
//# sourceMappingURL=notification-ledger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notification-ledger.js","sourceRoot":"","sources":["../../src/doc-schemas/notification-ledger.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,6 +12,8 @@ export declare const NotificationDocSchema: z.ZodObject<{
|
|
|
12
12
|
targetPath: z.ZodString;
|
|
13
13
|
metadata: z.ZodRecord<z.ZodString, z.ZodUnknown>;
|
|
14
14
|
seenAt: z.ZodNumber;
|
|
15
|
+
activityGeneration: z.ZodOptional<z.ZodString>;
|
|
16
|
+
seenAtGeneration: z.ZodOptional<z.ZodString>;
|
|
15
17
|
createdAt: z.ZodNumber;
|
|
16
18
|
updatedAt: z.ZodNumber;
|
|
17
19
|
}, z.core.$strip>;
|
|
@@ -32,6 +34,8 @@ export declare const NotificationHistoryDocSchema: z.ZodObject<{
|
|
|
32
34
|
targetPath: z.ZodString;
|
|
33
35
|
metadata: z.ZodRecord<z.ZodString, z.ZodUnknown>;
|
|
34
36
|
seenAt: z.ZodNumber;
|
|
37
|
+
activityGeneration: z.ZodOptional<z.ZodString>;
|
|
38
|
+
seenAtGeneration: z.ZodOptional<z.ZodString>;
|
|
35
39
|
createdAt: z.ZodNumber;
|
|
36
40
|
updatedAt: z.ZodNumber;
|
|
37
41
|
archival: z.ZodObject<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notifications.d.ts","sourceRoot":"","sources":["../../src/doc-schemas/notifications.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,qBAAqB
|
|
1
|
+
{"version":3,"file":"notifications.d.ts","sourceRoot":"","sources":["../../src/doc-schemas/notifications.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;iBAoBhC,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;iBAG7B,CAAC;AAEH,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;iBAIvC,CAAC;AAEH,eAAO,MAAM,yBAAyB;;;;;;;;iBAQpC,CAAC;AAKH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;iBAenC,CAAC;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAK1E,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAazC,CAAC;AACH,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,8BAA8B,CAAC,CAAC"}
|
|
@@ -19,6 +19,11 @@ export const NotificationDocSchema = z.object({
|
|
|
19
19
|
targetPath: z.string(),
|
|
20
20
|
metadata: z.record(z.string(), z.unknown()),
|
|
21
21
|
seenAt: z.number(),
|
|
22
|
+
// Opaque per-generation token rotated on create / material re-light; the
|
|
23
|
+
// SEEN/ARCHIVE precondition (notification redesign). Optional on the legacy
|
|
24
|
+
// doc shape; the ledger materializer always sets it.
|
|
25
|
+
activityGeneration: z.string().optional(),
|
|
26
|
+
seenAtGeneration: z.string().optional(),
|
|
22
27
|
createdAt: z.number(),
|
|
23
28
|
updatedAt: z.number(),
|
|
24
29
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notifications.js","sourceRoot":"","sources":["../../src/doc-schemas/notifications.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"notifications.js","sourceRoot":"","sources":["../../src/doc-schemas/notifications.ts"],"names":[],"mappings":"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"}
|