@nlabs/reaktor 1.9.0 → 1.10.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/README.md +59 -73
- package/docs/GENERATION.md +63 -0
- package/lib/actions/analytics.js +1 -1
- package/lib/actions/apps.d.ts +2 -2
- package/lib/actions/apps.js +1 -1
- package/lib/actions/connections.js +1 -1
- package/lib/actions/content.js +1 -1
- package/lib/actions/contentGeneration.d.ts +40 -0
- package/lib/actions/contentGeneration.js +206 -0
- package/lib/actions/conversations.js +1 -1
- package/lib/actions/crm.js +1 -1
- package/lib/actions/crud.d.ts +2 -2
- package/lib/actions/crud.js +1 -1
- package/lib/actions/dynamodb.js +1 -1
- package/lib/actions/email.js +1 -1
- package/lib/actions/files.d.ts +42 -4
- package/lib/actions/files.js +1 -1
- package/lib/actions/flags.js +1 -1
- package/lib/actions/geminiVideo.d.ts +19 -0
- package/lib/actions/geminiVideo.js +161 -0
- package/lib/actions/groups.js +1 -1
- package/lib/actions/higgsfield.d.ts +20 -0
- package/lib/actions/higgsfield.js +148 -0
- package/lib/actions/imageGeneration.d.ts +37 -0
- package/lib/actions/imageGeneration.js +121 -0
- package/lib/actions/images.js +1 -1
- package/lib/actions/index.d.ts +5 -0
- package/lib/actions/index.js +6 -1
- package/lib/actions/ios.js +1 -1
- package/lib/actions/locations.js +1 -1
- package/lib/actions/messages.js +1 -1
- package/lib/actions/notifications.js +1 -1
- package/lib/actions/payments.js +27 -26
- package/lib/actions/personas.d.ts +4 -4
- package/lib/actions/personas.js +1 -1
- package/lib/actions/posts.js +1 -1
- package/lib/actions/query.js +1 -1
- package/lib/actions/reactions.d.ts +6 -6
- package/lib/actions/reactions.js +1 -1
- package/lib/actions/rum.js +1 -1
- package/lib/actions/s3.d.ts +4 -4
- package/lib/actions/s3.js +22 -6
- package/lib/actions/search.js +1 -1
- package/lib/actions/sms.js +1 -1
- package/lib/actions/statistics.js +1 -1
- package/lib/actions/subscriptions.js +1 -1
- package/lib/actions/tags.d.ts +2 -2
- package/lib/actions/tags.js +1 -1
- package/lib/actions/users.d.ts +2 -2
- package/lib/actions/users.js +1 -1
- package/lib/actions/videoGeneration.d.ts +20 -0
- package/lib/actions/videoGeneration.js +32 -0
- package/lib/actions/videos.js +1 -1
- package/lib/adapters/arangoAdapter.js +1 -1
- package/lib/adapters/contentAdapter.js +1 -1
- package/lib/adapters/fileAdapter.js +1 -1
- package/lib/adapters/geminiGenerationAdapter.d.ts +34 -0
- package/lib/adapters/geminiGenerationAdapter.js +41 -0
- package/lib/adapters/higgsfieldAdapter.d.ts +120 -0
- package/lib/adapters/higgsfieldAdapter.js +131 -0
- package/lib/adapters/imageAdapter.js +1 -1
- package/lib/adapters/imageGenerationAdapter.d.ts +17 -0
- package/lib/adapters/imageGenerationAdapter.js +18 -0
- package/lib/adapters/index.d.ts +3 -0
- package/lib/adapters/index.js +4 -1
- package/lib/adapters/messageAdapter.js +1 -1
- package/lib/adapters/postAdapter.js +1 -1
- package/lib/adapters/reaktorAdapter.js +1 -1
- package/lib/adapters/tagAdapter.js +1 -1
- package/lib/adapters/userAdapter.d.ts +76 -1
- package/lib/adapters/userAdapter.js +1 -1
- package/lib/config.d.ts +19 -14
- package/lib/config.js +9 -1
- package/lib/constants/collections.js +1 -1
- package/lib/handlers/graphqlHandler.js +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.js +2 -2
- package/lib/lambdas/actions/websockets.d.ts +5 -0
- package/lib/lambdas/actions/websockets.js +16 -1
- package/lib/lambdas/authorizer.js +1 -1
- package/lib/lambdas/connection.d.ts +2 -2
- package/lib/lambdas/connection.js +1 -1
- package/lib/lambdas/utils/message.js +1 -1
- package/lib/lambdas/utils/websocket.d.ts +4 -4
- package/lib/lambdas/utils/websocket.js +1 -1
- package/lib/mocks/conversation.js +1 -1
- package/lib/mocks/file.js +1 -1
- package/lib/mocks/group.js +1 -1
- package/lib/mocks/image.js +1 -1
- package/lib/mocks/post.js +1 -1
- package/lib/mocks/tag.js +1 -1
- package/lib/mocks/user.js +1 -1
- package/lib/mocks/video.js +1 -1
- package/lib/mutations/analytics/analytics.js +1 -1
- package/lib/mutations/content/content.js +15 -1
- package/lib/mutations/crm/crm.js +1 -1
- package/lib/mutations/events/events.js +1 -1
- package/lib/mutations/flags/flags.js +1 -1
- package/lib/mutations/groups/groups.js +1 -1
- package/lib/mutations/higgsfield/higgsfield.d.ts +1 -0
- package/lib/mutations/higgsfield/higgsfield.js +62 -0
- package/lib/mutations/images/images.js +10 -1
- package/lib/mutations/index.d.ts +2 -1
- package/lib/mutations/index.js +11 -2
- package/lib/mutations/locations/locations.js +1 -1
- package/lib/mutations/messages/messages.js +1 -1
- package/lib/mutations/personas/personas.js +1 -1
- package/lib/mutations/posts/posts.js +1 -1
- package/lib/mutations/reactions/reactions.js +1 -1
- package/lib/mutations/rum/rum.js +1 -1
- package/lib/mutations/statistics/statistics.js +1 -1
- package/lib/mutations/subscriptions/subscriptions.js +1 -1
- package/lib/mutations/tags/tags.js +1 -1
- package/lib/mutations/users/users.js +1 -1
- package/lib/mutations/videos/videos.js +24 -10
- package/lib/objectTypes/analytics.js +1 -1
- package/lib/objectTypes/app.js +1 -1
- package/lib/objectTypes/bankAccount.js +1 -1
- package/lib/objectTypes/connection.js +1 -1
- package/lib/objectTypes/content.js +1 -1
- package/lib/objectTypes/contentGeneration.d.ts +2 -0
- package/lib/objectTypes/contentGeneration.js +30 -0
- package/lib/objectTypes/conversation.js +1 -1
- package/lib/objectTypes/creditCard.js +1 -1
- package/lib/objectTypes/crm.js +1 -1
- package/lib/objectTypes/document.js +1 -1
- package/lib/objectTypes/error.js +1 -1
- package/lib/objectTypes/event.js +1 -1
- package/lib/objectTypes/external.js +1 -1
- package/lib/objectTypes/file.js +1 -1
- package/lib/objectTypes/filter.js +1 -1
- package/lib/objectTypes/flag.js +1 -1
- package/lib/objectTypes/group.js +1 -1
- package/lib/objectTypes/higgsfield.d.ts +5 -0
- package/lib/objectTypes/higgsfield.js +149 -0
- package/lib/objectTypes/iapSubscription.js +1 -1
- package/lib/objectTypes/image.js +1 -1
- package/lib/objectTypes/imageGeneration.d.ts +2 -0
- package/lib/objectTypes/imageGeneration.js +33 -0
- package/lib/objectTypes/index.d.ts +2 -0
- package/lib/objectTypes/index.js +3 -1
- package/lib/objectTypes/location.js +1 -1
- package/lib/objectTypes/message.js +1 -1
- package/lib/objectTypes/passcode.js +1 -1
- package/lib/objectTypes/persona.d.ts +37 -2
- package/lib/objectTypes/persona.js +1 -1
- package/lib/objectTypes/plan.js +1 -1
- package/lib/objectTypes/post.js +1 -1
- package/lib/objectTypes/query.js +1 -1
- package/lib/objectTypes/reaction.js +1 -1
- package/lib/objectTypes/relation.js +1 -1
- package/lib/objectTypes/rum.js +1 -1
- package/lib/objectTypes/search.js +1 -1
- package/lib/objectTypes/statistics.js +1 -1
- package/lib/objectTypes/subscription.js +1 -1
- package/lib/objectTypes/tag.js +1 -1
- package/lib/objectTypes/user.js +1 -1
- package/lib/objectTypes/video.js +1 -1
- package/lib/objectTypes/videoGeneration.d.ts +2 -0
- package/lib/objectTypes/videoGeneration.js +31 -0
- package/lib/queries/analytics/analytics.js +1 -1
- package/lib/queries/content/content.js +1 -1
- package/lib/queries/crm/crm.js +1 -1
- package/lib/queries/events/events.js +1 -1
- package/lib/queries/flags/flags.js +1 -1
- package/lib/queries/groups/groups.js +1 -1
- package/lib/queries/higgsfield/higgsfield.d.ts +1 -0
- package/lib/queries/higgsfield/higgsfield.js +22 -0
- package/lib/queries/images/images.js +1 -1
- package/lib/queries/index.d.ts +2 -1
- package/lib/queries/index.js +7 -2
- package/lib/queries/locations/locations.js +1 -1
- package/lib/queries/messages/messages.js +1 -1
- package/lib/queries/personas/personas.js +1 -1
- package/lib/queries/posts/posts.js +1 -1
- package/lib/queries/query/query.js +1 -1
- package/lib/queries/reactions/reactions.js +1 -1
- package/lib/queries/statistics/statistics.js +1 -1
- package/lib/queries/subscriptions/subscriptions.js +1 -1
- package/lib/queries/tags/tags.js +1 -1
- package/lib/queries/users/users.js +1 -1
- package/lib/queries/videos/videos.js +1 -1
- package/lib/templates/email/layout.js +1 -1
- package/lib/templates/email/passwordForgot.js +1 -1
- package/lib/templates/email/passwordRecovery.js +1 -1
- package/lib/templates/email/verifyEmail.js +1 -1
- package/lib/templates/email/welcome.js +1 -1
- package/lib/templates/sms/passwordForgot.js +1 -1
- package/lib/templates/sms/passwordRecovery.js +1 -1
- package/lib/templates/sms/verifyEmail.js +1 -1
- package/lib/templates/sms/verifyPhone.js +1 -1
- package/lib/templates/sms/welcome.js +1 -1
- package/lib/types/analytics.types.d.ts +16 -16
- package/lib/types/analytics.types.js +1 -1
- package/lib/types/apps.types.d.ts +4 -4
- package/lib/types/apps.types.js +1 -1
- package/lib/types/arangodb.types.d.ts +20 -20
- package/lib/types/arangodb.types.js +1 -1
- package/lib/types/auth.types.js +1 -1
- package/lib/types/connections.types.d.ts +2 -2
- package/lib/types/connections.types.js +1 -1
- package/lib/types/content.types.d.ts +6 -6
- package/lib/types/content.types.js +1 -1
- package/lib/types/conversations.types.d.ts +2 -2
- package/lib/types/conversations.types.js +1 -1
- package/lib/types/crm.types.d.ts +30 -30
- package/lib/types/crm.types.js +1 -1
- package/lib/types/email.types.d.ts +2 -2
- package/lib/types/email.types.js +1 -1
- package/lib/types/error.types.d.ts +1 -0
- package/lib/types/error.types.js +2 -1
- package/lib/types/files.types.d.ts +2 -2
- package/lib/types/files.types.js +1 -1
- package/lib/types/flags.types.d.ts +8 -8
- package/lib/types/flags.types.js +1 -1
- package/lib/types/google.types.js +1 -1
- package/lib/types/groups.types.d.ts +2 -2
- package/lib/types/groups.types.js +1 -1
- package/lib/types/images.types.d.ts +2 -2
- package/lib/types/images.types.js +1 -1
- package/lib/types/index.js +1 -1
- package/lib/types/locations.types.d.ts +2 -2
- package/lib/types/locations.types.js +1 -1
- package/lib/types/messages.types.d.ts +2 -2
- package/lib/types/messages.types.js +1 -1
- package/lib/types/notifications.types.js +1 -1
- package/lib/types/payments.types.d.ts +14 -14
- package/lib/types/payments.types.js +1 -1
- package/lib/types/personas.types.d.ts +2 -2
- package/lib/types/personas.types.js +1 -1
- package/lib/types/posts.types.d.ts +2 -2
- package/lib/types/posts.types.js +1 -1
- package/lib/types/rum.types.d.ts +6 -6
- package/lib/types/rum.types.js +1 -1
- package/lib/types/statistics.types.js +1 -1
- package/lib/types/tags.types.d.ts +4 -4
- package/lib/types/tags.types.js +1 -1
- package/lib/types/users.types.d.ts +2 -2
- package/lib/types/users.types.js +1 -1
- package/lib/types/videos.types.d.ts +2 -2
- package/lib/types/videos.types.js +1 -1
- package/lib/types/websockets.types.d.ts +4 -4
- package/lib/types/websockets.types.js +1 -1
- package/lib/upload.js +1 -1
- package/lib/utils/adapterUtils.js +1 -1
- package/lib/utils/analyticsUtils.js +1 -1
- package/lib/utils/appContext.js +1 -1
- package/lib/utils/aqlHelpers.js +1 -1
- package/lib/utils/arangodbUtils.js +1 -1
- package/lib/utils/authUtils.js +1 -1
- package/lib/utils/awsUtils.js +1 -1
- package/lib/utils/collectionRegistry.d.ts +2 -2
- package/lib/utils/collectionRegistry.js +1 -1
- package/lib/utils/contextUtils.js +1 -1
- package/lib/utils/dbI18n.example.js +1 -1
- package/lib/utils/dbI18n.js +1 -1
- package/lib/utils/googleTranslate.js +1 -1
- package/lib/utils/graphqlUtils.js +1 -1
- package/lib/utils/imageUtils.js +1 -1
- package/lib/utils/index.d.ts +3 -0
- package/lib/utils/index.js +4 -1
- package/lib/utils/languageDetection.js +1 -1
- package/lib/utils/localeUtils.example.js +1 -1
- package/lib/utils/localeUtils.js +1 -1
- package/lib/utils/mediaAccess.d.ts +5 -0
- package/lib/utils/mediaAccess.js +57 -0
- package/lib/utils/middlewareUtils.js +1 -1
- package/lib/utils/nodeRealtime.d.ts +14 -0
- package/lib/utils/nodeRealtime.js +84 -0
- package/lib/utils/opaqueToken.d.ts +4 -0
- package/lib/utils/opaqueToken.js +7 -0
- package/lib/utils/queryBuilder.js +1 -1
- package/lib/utils/schemaUtils.js +1 -1
- package/lib/utils/sessionUtils.js +1 -1
- package/lib/utils/stripeUtils.d.ts +1 -1
- package/lib/utils/stripeUtils.js +2 -3
- package/lib/utils/stripeUtils.ts.bak +12 -0
- package/lib/utils/templateUtils.js +1 -1
- package/lib/utils/testUtils.js +1 -1
- package/lib/utils/translationQueue.example.js +1 -1
- package/lib/utils/translationQueue.js +1 -1
- package/lib/videoProcessing.js +1 -1
- package/package.json +24 -23
- package/lib/durableChat/conversations.d.ts +0 -62
- package/lib/durableChat/conversations.js +0 -729
- package/lib/durableChat/errors.d.ts +0 -6
- package/lib/durableChat/errors.js +0 -11
- package/lib/durableChat/events.d.ts +0 -22
- package/lib/durableChat/events.js +0 -50
- package/lib/durableChat/index.d.ts +0 -8
- package/lib/durableChat/index.js +0 -10
- package/lib/durableChat/membership.d.ts +0 -24
- package/lib/durableChat/membership.js +0 -85
- package/lib/durableChat/messageTypes.d.ts +0 -76
- package/lib/durableChat/messageTypes.js +0 -3
- package/lib/durableChat/messages.d.ts +0 -16
- package/lib/durableChat/messages.js +0 -257
- package/lib/durableChat/transaction.d.ts +0 -10
- package/lib/durableChat/transaction.js +0 -53
- package/lib/durableChat/types.d.ts +0 -81
- package/lib/durableChat/types.js +0 -3
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
export type ChatErrorCode = 'conflict' | 'forbidden' | 'invalid_request' | 'rate_limited' | 'unavailable';
|
|
2
|
-
export declare class DurableChatError extends Error {
|
|
3
|
-
readonly code: ChatErrorCode;
|
|
4
|
-
constructor(code: ChatErrorCode);
|
|
5
|
-
}
|
|
6
|
-
export { DurableChatError as ChatError };
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
export class DurableChatError extends Error {
|
|
2
|
-
code;
|
|
3
|
-
constructor(code){
|
|
4
|
-
super(code);
|
|
5
|
-
this.code = code;
|
|
6
|
-
this.name = 'ChatError';
|
|
7
|
-
}
|
|
8
|
-
}
|
|
9
|
-
export { DurableChatError as ChatError };
|
|
10
|
-
|
|
11
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50Ly5jb2RleC13b3JrdHJlZXMvcmVha3Rvci1waGFudGF6ZS1jaGF0L3BhY2thZ2VzL3JlYWt0b3Ivc3JjL2R1cmFibGVDaGF0L2Vycm9ycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSBDaGF0RXJyb3JDb2RlID0gJ2NvbmZsaWN0JyB8ICdmb3JiaWRkZW4nIHwgJ2ludmFsaWRfcmVxdWVzdCcgfCAncmF0ZV9saW1pdGVkJyB8ICd1bmF2YWlsYWJsZSc7XG5cbmV4cG9ydCBjbGFzcyBEdXJhYmxlQ2hhdEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICByZWFkb25seSBjb2RlOiBDaGF0RXJyb3JDb2RlO1xuXG4gIGNvbnN0cnVjdG9yKGNvZGU6IENoYXRFcnJvckNvZGUpIHtcbiAgICBzdXBlcihjb2RlKTtcbiAgICB0aGlzLmNvZGUgPSBjb2RlO1xuICAgIHRoaXMubmFtZSA9ICdDaGF0RXJyb3InO1xuICB9XG59XG5cbmV4cG9ydCB7RHVyYWJsZUNoYXRFcnJvciBhcyBDaGF0RXJyb3J9O1xuIl0sIm5hbWVzIjpbIkR1cmFibGVDaGF0RXJyb3IiLCJFcnJvciIsImNvZGUiLCJuYW1lIiwiQ2hhdEVycm9yIl0sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLE1BQU1BLHlCQUF5QkM7SUFDM0JDLEtBQW9CO0lBRTdCLFlBQVlBLElBQW1CLENBQUU7UUFDL0IsS0FBSyxDQUFDQTtRQUNOLElBQUksQ0FBQ0EsSUFBSSxHQUFHQTtRQUNaLElBQUksQ0FBQ0MsSUFBSSxHQUFHO0lBQ2Q7QUFDRjtBQUVBLFNBQVFILG9CQUFvQkksU0FBUyxHQUFFIn0=
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import type { ChatQuery } from './membership.js';
|
|
2
|
-
import type { ChatEvent } from './types.js';
|
|
3
|
-
export interface AppendChatEventInput {
|
|
4
|
-
readonly actorPersonaId: string;
|
|
5
|
-
readonly conversationId: string;
|
|
6
|
-
readonly kind: ChatEvent['kind'];
|
|
7
|
-
readonly membershipEpoch?: string;
|
|
8
|
-
readonly resourceId: string;
|
|
9
|
-
readonly revision: number;
|
|
10
|
-
}
|
|
11
|
-
export interface StoredChatEvent extends ChatEvent {
|
|
12
|
-
readonly _key: string;
|
|
13
|
-
readonly actorPersonaId: string;
|
|
14
|
-
readonly createdAt: number;
|
|
15
|
-
readonly leaseUntil: number;
|
|
16
|
-
readonly membershipEpoch?: string;
|
|
17
|
-
readonly nextAttemptAt: number;
|
|
18
|
-
readonly status: 'pending';
|
|
19
|
-
readonly type: ChatEvent['kind'];
|
|
20
|
-
}
|
|
21
|
-
/** Requires the caller's exclusive conversations/chatOutbox locks; never commits independently. */
|
|
22
|
-
export declare const appendChatEvent: (read: ChatQuery, input: AppendChatEventInput) => Promise<StoredChatEvent>;
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import { randomUUID } from 'node:crypto';
|
|
2
|
-
import { ChatError } from './errors.js';
|
|
3
|
-
import { isChatIdentifier } from './membership.js';
|
|
4
|
-
/** Requires the caller's exclusive conversations/chatOutbox locks; never commits independently. */ export const appendChatEvent = async (read, input)=>{
|
|
5
|
-
if (!input || !isChatIdentifier(input.actorPersonaId) || !isChatIdentifier(input.conversationId) || !isChatIdentifier(input.resourceId) || !Number.isSafeInteger(input.revision) || input.revision < 1 || input.membershipEpoch !== undefined && !isChatIdentifier(input.membershipEpoch) || ![
|
|
6
|
-
'membership.changed',
|
|
7
|
-
'message.changed',
|
|
8
|
-
'receipt.changed'
|
|
9
|
-
].includes(input.kind)) {
|
|
10
|
-
throw new ChatError('invalid_request');
|
|
11
|
-
}
|
|
12
|
-
const sequence = await read(`LET conversation = DOCUMENT('conversations', @id)
|
|
13
|
-
FILTER conversation != null AND conversation.chatSchemaVersion == 1
|
|
14
|
-
AND (conversation.lastEventSequence == null OR
|
|
15
|
-
(IS_NUMBER(conversation.lastEventSequence) AND conversation.lastEventSequence >= 0
|
|
16
|
-
AND FLOOR(conversation.lastEventSequence) == conversation.lastEventSequence
|
|
17
|
-
AND conversation.lastEventSequence < 9007199254740991))
|
|
18
|
-
UPDATE @id WITH {lastEventSequence: (conversation.lastEventSequence == null ? 0 : conversation.lastEventSequence) + 1}
|
|
19
|
-
IN conversations RETURN NEW.lastEventSequence`, {
|
|
20
|
-
id: input.conversationId
|
|
21
|
-
});
|
|
22
|
-
if (!Number.isSafeInteger(sequence) || Number(sequence) < 1) {
|
|
23
|
-
throw new ChatError('unavailable');
|
|
24
|
-
}
|
|
25
|
-
const id = randomUUID();
|
|
26
|
-
const record = {
|
|
27
|
-
_key: id,
|
|
28
|
-
actorPersonaId: input.actorPersonaId,
|
|
29
|
-
conversationId: input.conversationId,
|
|
30
|
-
createdAt: Date.now(),
|
|
31
|
-
eventId: id,
|
|
32
|
-
eventSequence: sequence,
|
|
33
|
-
kind: input.kind,
|
|
34
|
-
leaseUntil: 0,
|
|
35
|
-
membershipEpoch: input.membershipEpoch,
|
|
36
|
-
nextAttemptAt: 0,
|
|
37
|
-
resourceId: input.resourceId,
|
|
38
|
-
revision: input.revision,
|
|
39
|
-
status: 'pending',
|
|
40
|
-
type: input.kind
|
|
41
|
-
};
|
|
42
|
-
if (await read('INSERT @record IN chatOutbox RETURN true', {
|
|
43
|
-
record
|
|
44
|
-
}) !== true) {
|
|
45
|
-
throw new ChatError('unavailable');
|
|
46
|
-
}
|
|
47
|
-
return record;
|
|
48
|
-
};
|
|
49
|
-
|
|
50
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50Ly5jb2RleC13b3JrdHJlZXMvcmVha3Rvci1waGFudGF6ZS1jaGF0L3BhY2thZ2VzL3JlYWt0b3Ivc3JjL2R1cmFibGVDaGF0L2V2ZW50cy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge3JhbmRvbVVVSUR9IGZyb20gJ25vZGU6Y3J5cHRvJztcblxuaW1wb3J0IHtDaGF0RXJyb3J9IGZyb20gJy4vZXJyb3JzLmpzJztcbmltcG9ydCB7aXNDaGF0SWRlbnRpZmllcn0gZnJvbSAnLi9tZW1iZXJzaGlwLmpzJztcblxuaW1wb3J0IHR5cGUge0NoYXRRdWVyeX0gZnJvbSAnLi9tZW1iZXJzaGlwLmpzJztcbmltcG9ydCB0eXBlIHtDaGF0RXZlbnR9IGZyb20gJy4vdHlwZXMuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEFwcGVuZENoYXRFdmVudElucHV0IHtcbiAgcmVhZG9ubHkgYWN0b3JQZXJzb25hSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgY29udmVyc2F0aW9uSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkga2luZDogQ2hhdEV2ZW50WydraW5kJ107XG4gIHJlYWRvbmx5IG1lbWJlcnNoaXBFcG9jaD86IHN0cmluZztcbiAgcmVhZG9ubHkgcmVzb3VyY2VJZDogc3RyaW5nO1xuICByZWFkb25seSByZXZpc2lvbjogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFN0b3JlZENoYXRFdmVudCBleHRlbmRzIENoYXRFdmVudCB7XG4gIHJlYWRvbmx5IF9rZXk6IHN0cmluZztcbiAgcmVhZG9ubHkgYWN0b3JQZXJzb25hSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgY3JlYXRlZEF0OiBudW1iZXI7XG4gIHJlYWRvbmx5IGxlYXNlVW50aWw6IG51bWJlcjtcbiAgcmVhZG9ubHkgbWVtYmVyc2hpcEVwb2NoPzogc3RyaW5nO1xuICByZWFkb25seSBuZXh0QXR0ZW1wdEF0OiBudW1iZXI7XG4gIHJlYWRvbmx5IHN0YXR1czogJ3BlbmRpbmcnO1xuICByZWFkb25seSB0eXBlOiBDaGF0RXZlbnRbJ2tpbmQnXTtcbn1cblxuLyoqIFJlcXVpcmVzIHRoZSBjYWxsZXIncyBleGNsdXNpdmUgY29udmVyc2F0aW9ucy9jaGF0T3V0Ym94IGxvY2tzOyBuZXZlciBjb21taXRzIGluZGVwZW5kZW50bHkuICovXG5leHBvcnQgY29uc3QgYXBwZW5kQ2hhdEV2ZW50ID0gYXN5bmMgKHJlYWQ6IENoYXRRdWVyeSwgaW5wdXQ6IEFwcGVuZENoYXRFdmVudElucHV0KTogUHJvbWlzZTxTdG9yZWRDaGF0RXZlbnQ+ID0+IHtcbiAgaWYoIWlucHV0IHx8ICFpc0NoYXRJZGVudGlmaWVyKGlucHV0LmFjdG9yUGVyc29uYUlkKSB8fCAhaXNDaGF0SWRlbnRpZmllcihpbnB1dC5jb252ZXJzYXRpb25JZClcbiAgICB8fCAhaXNDaGF0SWRlbnRpZmllcihpbnB1dC5yZXNvdXJjZUlkKSB8fCAhTnVtYmVyLmlzU2FmZUludGVnZXIoaW5wdXQucmV2aXNpb24pIHx8IGlucHV0LnJldmlzaW9uIDwgMVxuICAgIHx8IChpbnB1dC5tZW1iZXJzaGlwRXBvY2ggIT09IHVuZGVmaW5lZCAmJiAhaXNDaGF0SWRlbnRpZmllcihpbnB1dC5tZW1iZXJzaGlwRXBvY2gpKVxuICAgIHx8ICFbJ21lbWJlcnNoaXAuY2hhbmdlZCcsICdtZXNzYWdlLmNoYW5nZWQnLCAncmVjZWlwdC5jaGFuZ2VkJ10uaW5jbHVkZXMoaW5wdXQua2luZCkpIHtcbiAgICB0aHJvdyBuZXcgQ2hhdEVycm9yKCdpbnZhbGlkX3JlcXVlc3QnKTtcbiAgfVxuICBjb25zdCBzZXF1ZW5jZSA9IGF3YWl0IHJlYWQ8bnVtYmVyPihgTEVUIGNvbnZlcnNhdGlvbiA9IERPQ1VNRU5UKCdjb252ZXJzYXRpb25zJywgQGlkKVxuICAgIEZJTFRFUiBjb252ZXJzYXRpb24gIT0gbnVsbCBBTkQgY29udmVyc2F0aW9uLmNoYXRTY2hlbWFWZXJzaW9uID09IDFcbiAgICAgIEFORCAoY29udmVyc2F0aW9uLmxhc3RFdmVudFNlcXVlbmNlID09IG51bGwgT1JcbiAgICAgICAgKElTX05VTUJFUihjb252ZXJzYXRpb24ubGFzdEV2ZW50U2VxdWVuY2UpIEFORCBjb252ZXJzYXRpb24ubGFzdEV2ZW50U2VxdWVuY2UgPj0gMFxuICAgICAgICAgIEFORCBGTE9PUihjb252ZXJzYXRpb24ubGFzdEV2ZW50U2VxdWVuY2UpID09IGNvbnZlcnNhdGlvbi5sYXN0RXZlbnRTZXF1ZW5jZVxuICAgICAgICAgIEFORCBjb252ZXJzYXRpb24ubGFzdEV2ZW50U2VxdWVuY2UgPCA5MDA3MTk5MjU0NzQwOTkxKSlcbiAgICBVUERBVEUgQGlkIFdJVEgge2xhc3RFdmVudFNlcXVlbmNlOiAoY29udmVyc2F0aW9uLmxhc3RFdmVudFNlcXVlbmNlID09IG51bGwgPyAwIDogY29udmVyc2F0aW9uLmxhc3RFdmVudFNlcXVlbmNlKSArIDF9XG4gICAgICBJTiBjb252ZXJzYXRpb25zIFJFVFVSTiBORVcubGFzdEV2ZW50U2VxdWVuY2VgLCB7aWQ6IGlucHV0LmNvbnZlcnNhdGlvbklkfSk7XG4gIGlmKCFOdW1iZXIuaXNTYWZlSW50ZWdlcihzZXF1ZW5jZSkgfHwgTnVtYmVyKHNlcXVlbmNlKSA8IDEpIHtcbiAgICB0aHJvdyBuZXcgQ2hhdEVycm9yKCd1bmF2YWlsYWJsZScpO1xuICB9XG4gIGNvbnN0IGlkID0gcmFuZG9tVVVJRCgpO1xuICBjb25zdCByZWNvcmQ6IFN0b3JlZENoYXRFdmVudCA9IHtcbiAgICBfa2V5OiBpZCwgYWN0b3JQZXJzb25hSWQ6IGlucHV0LmFjdG9yUGVyc29uYUlkLCBjb252ZXJzYXRpb25JZDogaW5wdXQuY29udmVyc2F0aW9uSWQsIGNyZWF0ZWRBdDogRGF0ZS5ub3coKSxcbiAgICBldmVudElkOiBpZCwgZXZlbnRTZXF1ZW5jZTogc2VxdWVuY2UhLCBraW5kOiBpbnB1dC5raW5kLCBsZWFzZVVudGlsOiAwLFxuICAgIG1lbWJlcnNoaXBFcG9jaDogaW5wdXQubWVtYmVyc2hpcEVwb2NoLCBuZXh0QXR0ZW1wdEF0OiAwLCByZXNvdXJjZUlkOiBpbnB1dC5yZXNvdXJjZUlkLFxuICAgIHJldmlzaW9uOiBpbnB1dC5yZXZpc2lvbiwgc3RhdHVzOiAncGVuZGluZycsIHR5cGU6IGlucHV0LmtpbmRcbiAgfTtcbiAgaWYoYXdhaXQgcmVhZDxib29sZWFuPignSU5TRVJUIEByZWNvcmQgSU4gY2hhdE91dGJveCBSRVRVUk4gdHJ1ZScsIHtyZWNvcmR9KSAhPT0gdHJ1ZSkge1xuICAgIHRocm93IG5ldyBDaGF0RXJyb3IoJ3VuYXZhaWxhYmxlJyk7XG4gIH1cbiAgcmV0dXJuIHJlY29yZDtcbn07XG4iXSwibmFtZXMiOlsicmFuZG9tVVVJRCIsIkNoYXRFcnJvciIsImlzQ2hhdElkZW50aWZpZXIiLCJhcHBlbmRDaGF0RXZlbnQiLCJyZWFkIiwiaW5wdXQiLCJhY3RvclBlcnNvbmFJZCIsImNvbnZlcnNhdGlvbklkIiwicmVzb3VyY2VJZCIsIk51bWJlciIsImlzU2FmZUludGVnZXIiLCJyZXZpc2lvbiIsIm1lbWJlcnNoaXBFcG9jaCIsInVuZGVmaW5lZCIsImluY2x1ZGVzIiwia2luZCIsInNlcXVlbmNlIiwiaWQiLCJyZWNvcmQiLCJfa2V5IiwiY3JlYXRlZEF0IiwiRGF0ZSIsIm5vdyIsImV2ZW50SWQiLCJldmVudFNlcXVlbmNlIiwibGVhc2VVbnRpbCIsIm5leHRBdHRlbXB0QXQiLCJzdGF0dXMiLCJ0eXBlIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFRQSxVQUFVLFFBQU8sY0FBYztBQUV2QyxTQUFRQyxTQUFTLFFBQU8sY0FBYztBQUN0QyxTQUFRQyxnQkFBZ0IsUUFBTyxrQkFBa0I7QUF5QmpELGlHQUFpRyxHQUNqRyxPQUFPLE1BQU1DLGtCQUFrQixPQUFPQyxNQUFpQkM7SUFDckQsSUFBRyxDQUFDQSxTQUFTLENBQUNILGlCQUFpQkcsTUFBTUMsY0FBYyxLQUFLLENBQUNKLGlCQUFpQkcsTUFBTUUsY0FBYyxLQUN6RixDQUFDTCxpQkFBaUJHLE1BQU1HLFVBQVUsS0FBSyxDQUFDQyxPQUFPQyxhQUFhLENBQUNMLE1BQU1NLFFBQVEsS0FBS04sTUFBTU0sUUFBUSxHQUFHLEtBQ2hHTixNQUFNTyxlQUFlLEtBQUtDLGFBQWEsQ0FBQ1gsaUJBQWlCRyxNQUFNTyxlQUFlLEtBQy9FLENBQUM7UUFBQztRQUFzQjtRQUFtQjtLQUFrQixDQUFDRSxRQUFRLENBQUNULE1BQU1VLElBQUksR0FBRztRQUN2RixNQUFNLElBQUlkLFVBQVU7SUFDdEI7SUFDQSxNQUFNZSxXQUFXLE1BQU1aLEtBQWEsQ0FBQzs7Ozs7OzttREFPWSxDQUFDLEVBQUU7UUFBQ2EsSUFBSVosTUFBTUUsY0FBYztJQUFBO0lBQzdFLElBQUcsQ0FBQ0UsT0FBT0MsYUFBYSxDQUFDTSxhQUFhUCxPQUFPTyxZQUFZLEdBQUc7UUFDMUQsTUFBTSxJQUFJZixVQUFVO0lBQ3RCO0lBQ0EsTUFBTWdCLEtBQUtqQjtJQUNYLE1BQU1rQixTQUEwQjtRQUM5QkMsTUFBTUY7UUFBSVgsZ0JBQWdCRCxNQUFNQyxjQUFjO1FBQUVDLGdCQUFnQkYsTUFBTUUsY0FBYztRQUFFYSxXQUFXQyxLQUFLQyxHQUFHO1FBQ3pHQyxTQUFTTjtRQUFJTyxlQUFlUjtRQUFXRCxNQUFNVixNQUFNVSxJQUFJO1FBQUVVLFlBQVk7UUFDckViLGlCQUFpQlAsTUFBTU8sZUFBZTtRQUFFYyxlQUFlO1FBQUdsQixZQUFZSCxNQUFNRyxVQUFVO1FBQ3RGRyxVQUFVTixNQUFNTSxRQUFRO1FBQUVnQixRQUFRO1FBQVdDLE1BQU12QixNQUFNVSxJQUFJO0lBQy9EO0lBQ0EsSUFBRyxNQUFNWCxLQUFjLDRDQUE0QztRQUFDYztJQUFNLE9BQU8sTUFBTTtRQUNyRixNQUFNLElBQUlqQixVQUFVO0lBQ3RCO0lBQ0EsT0FBT2lCO0FBQ1QsRUFBRSJ9
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
export * from './conversations.js';
|
|
2
|
-
export * from './errors.js';
|
|
3
|
-
export * from './events.js';
|
|
4
|
-
export * from './membership.js';
|
|
5
|
-
export * from './transaction.js';
|
|
6
|
-
export * from './types.js';
|
|
7
|
-
export * from './messages.js';
|
|
8
|
-
export * from './messageTypes.js';
|
package/lib/durableChat/index.js
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
export * from './conversations.js';
|
|
2
|
-
export * from './errors.js';
|
|
3
|
-
export * from './events.js';
|
|
4
|
-
export * from './membership.js';
|
|
5
|
-
export * from './transaction.js';
|
|
6
|
-
export * from './types.js';
|
|
7
|
-
export * from './messages.js';
|
|
8
|
-
export * from './messageTypes.js';
|
|
9
|
-
|
|
10
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50Ly5jb2RleC13b3JrdHJlZXMvcmVha3Rvci1waGFudGF6ZS1jaGF0L3BhY2thZ2VzL3JlYWt0b3Ivc3JjL2R1cmFibGVDaGF0L2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vY29udmVyc2F0aW9ucy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2Vycm9ycy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2V2ZW50cy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL21lbWJlcnNoaXAuanMnO1xuZXhwb3J0ICogZnJvbSAnLi90cmFuc2FjdGlvbi5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3R5cGVzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vbWVzc2FnZXMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9tZXNzYWdlVHlwZXMuanMnO1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMscUJBQXFCO0FBQ25DLGNBQWMsY0FBYztBQUM1QixjQUFjLGNBQWM7QUFDNUIsY0FBYyxrQkFBa0I7QUFDaEMsY0FBYyxtQkFBbUI7QUFDakMsY0FBYyxhQUFhO0FBQzNCLGNBQWMsZ0JBQWdCO0FBQzlCLGNBQWMsb0JBQW9CIn0=
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import type { ApiContext } from '../types/auth.types.js';
|
|
2
|
-
import type { ConversationKind, ConversationMembership, ConversationState } from './types.js';
|
|
3
|
-
export interface ChatIdentity {
|
|
4
|
-
readonly personaId: string;
|
|
5
|
-
readonly userId: string;
|
|
6
|
-
}
|
|
7
|
-
export interface MembershipAccessInput {
|
|
8
|
-
readonly conversationId: string;
|
|
9
|
-
readonly membershipEpoch?: string;
|
|
10
|
-
readonly messageSequence?: number;
|
|
11
|
-
readonly purpose: 'history' | 'invite' | 'participants' | 'report' | 'send' | 'socket';
|
|
12
|
-
}
|
|
13
|
-
export interface AuthorizedMembership extends ConversationMembership {
|
|
14
|
-
readonly activeMemberCount: number;
|
|
15
|
-
readonly conversationState: ConversationState;
|
|
16
|
-
readonly kind: ConversationKind;
|
|
17
|
-
readonly lastSequence: number;
|
|
18
|
-
readonly membershipRevision: number;
|
|
19
|
-
}
|
|
20
|
-
/** Inject the transaction's query adapter when this check guards a write. */
|
|
21
|
-
export type ChatQuery = <T>(query: string, bindVars: Record<string, unknown>) => Promise<T | undefined>;
|
|
22
|
-
export declare const isChatIdentifier: (value: unknown) => value is string;
|
|
23
|
-
export declare const createMembershipAuthorizer: (read: ChatQuery) => (identity: ChatIdentity, input: MembershipAccessInput) => Promise<AuthorizedMembership>;
|
|
24
|
-
export declare const authorizeConversationAccess: (context: ApiContext, identity: ChatIdentity, input: MembershipAccessInput) => Promise<AuthorizedMembership>;
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
import { ChatError } from './errors.js';
|
|
2
|
-
import { createDurableQuery } from './transaction.js';
|
|
3
|
-
export const isChatIdentifier = (value)=>typeof value === 'string' && /^[a-zA-Z0-9_-]{1,128}$/.test(value);
|
|
4
|
-
const purposes = [
|
|
5
|
-
'history',
|
|
6
|
-
'invite',
|
|
7
|
-
'participants',
|
|
8
|
-
'report',
|
|
9
|
-
'send',
|
|
10
|
-
'socket'
|
|
11
|
-
];
|
|
12
|
-
export const createMembershipAuthorizer = (read)=>async (identity, input)=>{
|
|
13
|
-
if (!identity || !isChatIdentifier(identity.userId) || !isChatIdentifier(identity.personaId)) {
|
|
14
|
-
throw new ChatError('forbidden');
|
|
15
|
-
}
|
|
16
|
-
if (!input || !isChatIdentifier(input.conversationId) || !purposes.includes(input.purpose) || input.membershipEpoch !== undefined && !isChatIdentifier(input.membershipEpoch) || input.messageSequence !== undefined && (!Number.isSafeInteger(input.messageSequence) || input.messageSequence < 1) || input.purpose === 'report' && input.messageSequence === undefined) {
|
|
17
|
-
throw new ChatError('invalid_request');
|
|
18
|
-
}
|
|
19
|
-
const result = await read(`
|
|
20
|
-
LET user = DOCUMENT('users', @userId)
|
|
21
|
-
LET persona = DOCUMENT('personas', @personaId)
|
|
22
|
-
LET conversation = DOCUMENT('conversations', @conversationId)
|
|
23
|
-
FILTER user != null AND user.active != false AND persona != null AND persona.active != false
|
|
24
|
-
AND persona.userId == @userId AND conversation != null AND conversation.chatSchemaVersion == 1
|
|
25
|
-
AND conversation.kind IN ['direct', 'group'] AND conversation.state IN ['active', 'forming', 'closed']
|
|
26
|
-
LET membership = FIRST(FOR member IN hasChatMembership
|
|
27
|
-
FILTER member.conversationId == @conversationId AND member.personaId == @personaId
|
|
28
|
-
AND member.userId == @userId AND member._from == CONCAT('personas/', @personaId)
|
|
29
|
-
AND member._to == CONCAT('conversations/', @conversationId)
|
|
30
|
-
AND (@epoch == null OR member.epoch == @epoch)
|
|
31
|
-
AND (@purpose == 'report' ? member.state IN ['active', 'left', 'removed'] : member.state == 'active')
|
|
32
|
-
AND (@sequence == null OR (IS_NUMBER(member.joinSequence) AND @sequence >= member.joinSequence
|
|
33
|
-
AND @sequence <= conversation.lastSequence
|
|
34
|
-
AND (member.state == 'active' OR (IS_NUMBER(member.leftSequence) AND @sequence <= member.leftSequence))))
|
|
35
|
-
SORT member.acceptedAt DESC, member._key DESC LIMIT 1 RETURN member)
|
|
36
|
-
FILTER membership != null
|
|
37
|
-
LET peers = (FOR member IN hasChatMembership
|
|
38
|
-
FILTER member.conversationId == @conversationId AND member.state == 'active'
|
|
39
|
-
AND member.personaId != @personaId RETURN member)
|
|
40
|
-
LET peer = FIRST(peers)
|
|
41
|
-
LET peerPersona = peer == null ? null : DOCUMENT('personas', peer.personaId)
|
|
42
|
-
LET peerUser = peer == null ? null : DOCUMENT('users', peer.userId)
|
|
43
|
-
LET blocked = peer == null ? false : FIRST(FOR edge IN hasConnection FILTER edge.type == 'block'
|
|
44
|
-
AND ((edge._from IN [CONCAT('personas/', @personaId), CONCAT('users/', @userId)]
|
|
45
|
-
AND edge._to IN [CONCAT('personas/', peer.personaId), CONCAT('users/', peer.userId)])
|
|
46
|
-
OR (edge._to IN [CONCAT('personas/', @personaId), CONCAT('users/', @userId)]
|
|
47
|
-
AND edge._from IN [CONCAT('personas/', peer.personaId), CONCAT('users/', peer.userId)])) LIMIT 1 RETURN true)
|
|
48
|
-
LET following = peer == null ? false : FIRST(FOR edge IN hasConnection
|
|
49
|
-
FILTER edge.type == 'follow' AND edge.active != false AND edge._from == CONCAT('personas/', @personaId)
|
|
50
|
-
AND edge._to == CONCAT('personas/', peer.personaId) LIMIT 1 RETURN true)
|
|
51
|
-
LET followed = peer == null ? false : FIRST(FOR edge IN hasConnection
|
|
52
|
-
FILTER edge.type == 'follow' AND edge.active != false AND edge._to == CONCAT('personas/', @personaId)
|
|
53
|
-
AND edge._from == CONCAT('personas/', peer.personaId) LIMIT 1 RETURN true)
|
|
54
|
-
FILTER @purpose NOT IN ['send', 'socket'] OR (conversation.state == 'active'
|
|
55
|
-
AND (conversation.kind != 'direct' OR (LENGTH(peers) == 1 AND peerPersona != null AND peerUser != null
|
|
56
|
-
AND peerPersona.active != false AND peerUser.active != false AND peerPersona.userId == peer.userId
|
|
57
|
-
AND blocked != true AND following == true AND followed == true)))
|
|
58
|
-
FILTER @purpose != 'invite' OR (conversation.kind == 'group' AND conversation.state != 'closed'
|
|
59
|
-
AND membership.role IN ['owner', 'admin'])
|
|
60
|
-
FILTER @purpose == 'report' OR conversation.state != 'closed'
|
|
61
|
-
RETURN {activeMemberCount: conversation.activeMemberCount, conversationId: @conversationId,
|
|
62
|
-
conversationState: conversation.state, epoch: membership.epoch, joinSequence: membership.joinSequence,
|
|
63
|
-
kind: conversation.kind, lastSequence: conversation.lastSequence, leftSequence: membership.leftSequence,
|
|
64
|
-
membershipRevision: conversation.membershipRevision, personaId: @personaId, revision: membership.revision,
|
|
65
|
-
role: membership.role, state: membership.state}
|
|
66
|
-
`, {
|
|
67
|
-
conversationId: input.conversationId,
|
|
68
|
-
epoch: input.membershipEpoch ?? null,
|
|
69
|
-
personaId: identity.personaId,
|
|
70
|
-
purpose: input.purpose,
|
|
71
|
-
sequence: input.messageSequence ?? null,
|
|
72
|
-
userId: identity.userId
|
|
73
|
-
});
|
|
74
|
-
if (!result || !isChatIdentifier(result.epoch) || !Number.isSafeInteger(result.joinSequence) || result.joinSequence < 0 || !Number.isSafeInteger(result.lastSequence) || result.lastSequence < 0 || !Number.isSafeInteger(result.revision) || result.revision < 1 || !Number.isSafeInteger(result.membershipRevision) || result.membershipRevision < 1 || !Number.isSafeInteger(result.activeMemberCount) || result.activeMemberCount < 0 || result.activeMemberCount > 25 || ![
|
|
75
|
-
'owner',
|
|
76
|
-
'admin',
|
|
77
|
-
'member'
|
|
78
|
-
].includes(result.role)) {
|
|
79
|
-
throw new ChatError('forbidden');
|
|
80
|
-
}
|
|
81
|
-
return result;
|
|
82
|
-
};
|
|
83
|
-
export const authorizeConversationAccess = (context, identity, input)=>createMembershipAuthorizer(createDurableQuery(context))(identity, input);
|
|
84
|
-
|
|
85
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50Ly5jb2RleC13b3JrdHJlZXMvcmVha3Rvci1waGFudGF6ZS1jaGF0L3BhY2thZ2VzL3JlYWt0b3Ivc3JjL2R1cmFibGVDaGF0L21lbWJlcnNoaXAudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDaGF0RXJyb3J9IGZyb20gJy4vZXJyb3JzLmpzJztcbmltcG9ydCB7Y3JlYXRlRHVyYWJsZVF1ZXJ5fSBmcm9tICcuL3RyYW5zYWN0aW9uLmpzJztcblxuaW1wb3J0IHR5cGUge0FwaUNvbnRleHR9IGZyb20gJy4uL3R5cGVzL2F1dGgudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge0NvbnZlcnNhdGlvbktpbmQsIENvbnZlcnNhdGlvbk1lbWJlcnNoaXAsIENvbnZlcnNhdGlvblN0YXRlfSBmcm9tICcuL3R5cGVzLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBDaGF0SWRlbnRpdHkge1xuICByZWFkb25seSBwZXJzb25hSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgdXNlcklkOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWVtYmVyc2hpcEFjY2Vzc0lucHV0IHtcbiAgcmVhZG9ubHkgY29udmVyc2F0aW9uSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgbWVtYmVyc2hpcEVwb2NoPzogc3RyaW5nO1xuICByZWFkb25seSBtZXNzYWdlU2VxdWVuY2U/OiBudW1iZXI7XG4gIHJlYWRvbmx5IHB1cnBvc2U6ICdoaXN0b3J5JyB8ICdpbnZpdGUnIHwgJ3BhcnRpY2lwYW50cycgfCAncmVwb3J0JyB8ICdzZW5kJyB8ICdzb2NrZXQnO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEF1dGhvcml6ZWRNZW1iZXJzaGlwIGV4dGVuZHMgQ29udmVyc2F0aW9uTWVtYmVyc2hpcCB7XG4gIHJlYWRvbmx5IGFjdGl2ZU1lbWJlckNvdW50OiBudW1iZXI7XG4gIHJlYWRvbmx5IGNvbnZlcnNhdGlvblN0YXRlOiBDb252ZXJzYXRpb25TdGF0ZTtcbiAgcmVhZG9ubHkga2luZDogQ29udmVyc2F0aW9uS2luZDtcbiAgcmVhZG9ubHkgbGFzdFNlcXVlbmNlOiBudW1iZXI7XG4gIHJlYWRvbmx5IG1lbWJlcnNoaXBSZXZpc2lvbjogbnVtYmVyO1xufVxuXG4vKiogSW5qZWN0IHRoZSB0cmFuc2FjdGlvbidzIHF1ZXJ5IGFkYXB0ZXIgd2hlbiB0aGlzIGNoZWNrIGd1YXJkcyBhIHdyaXRlLiAqL1xuZXhwb3J0IHR5cGUgQ2hhdFF1ZXJ5ID0gPFQ+KHF1ZXJ5OiBzdHJpbmcsIGJpbmRWYXJzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4gUHJvbWlzZTxUIHwgdW5kZWZpbmVkPjtcblxuZXhwb3J0IGNvbnN0IGlzQ2hhdElkZW50aWZpZXIgPSAodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBzdHJpbmcgPT5cbiAgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiAvXlthLXpBLVowLTlfLV17MSwxMjh9JC8udGVzdCh2YWx1ZSk7XG5cbmNvbnN0IHB1cnBvc2VzOiByZWFkb25seSBNZW1iZXJzaGlwQWNjZXNzSW5wdXRbJ3B1cnBvc2UnXVtdID0gWydoaXN0b3J5JywgJ2ludml0ZScsICdwYXJ0aWNpcGFudHMnLCAncmVwb3J0JywgJ3NlbmQnLCAnc29ja2V0J107XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVNZW1iZXJzaGlwQXV0aG9yaXplciA9IChyZWFkOiBDaGF0UXVlcnkpID0+IGFzeW5jIChcbiAgaWRlbnRpdHk6IENoYXRJZGVudGl0eSwgaW5wdXQ6IE1lbWJlcnNoaXBBY2Nlc3NJbnB1dFxuKTogUHJvbWlzZTxBdXRob3JpemVkTWVtYmVyc2hpcD4gPT4ge1xuICBpZighaWRlbnRpdHkgfHwgIWlzQ2hhdElkZW50aWZpZXIoaWRlbnRpdHkudXNlcklkKSB8fCAhaXNDaGF0SWRlbnRpZmllcihpZGVudGl0eS5wZXJzb25hSWQpKSB7XG4gICAgdGhyb3cgbmV3IENoYXRFcnJvcignZm9yYmlkZGVuJyk7XG4gIH1cbiAgaWYoIWlucHV0IHx8ICFpc0NoYXRJZGVudGlmaWVyKGlucHV0LmNvbnZlcnNhdGlvbklkKSB8fCAhcHVycG9zZXMuaW5jbHVkZXMoaW5wdXQucHVycG9zZSlcbiAgICB8fCAoaW5wdXQubWVtYmVyc2hpcEVwb2NoICE9PSB1bmRlZmluZWQgJiYgIWlzQ2hhdElkZW50aWZpZXIoaW5wdXQubWVtYmVyc2hpcEVwb2NoKSlcbiAgICB8fCAoaW5wdXQubWVzc2FnZVNlcXVlbmNlICE9PSB1bmRlZmluZWRcbiAgICAgICYmICghTnVtYmVyLmlzU2FmZUludGVnZXIoaW5wdXQubWVzc2FnZVNlcXVlbmNlKSB8fCBpbnB1dC5tZXNzYWdlU2VxdWVuY2UgPCAxKSlcbiAgICB8fCAoaW5wdXQucHVycG9zZSA9PT0gJ3JlcG9ydCcgJiYgaW5wdXQubWVzc2FnZVNlcXVlbmNlID09PSB1bmRlZmluZWQpKSB7XG4gICAgdGhyb3cgbmV3IENoYXRFcnJvcignaW52YWxpZF9yZXF1ZXN0Jyk7XG4gIH1cbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVhZDxBdXRob3JpemVkTWVtYmVyc2hpcD4oYFxuICAgIExFVCB1c2VyID0gRE9DVU1FTlQoJ3VzZXJzJywgQHVzZXJJZClcbiAgICBMRVQgcGVyc29uYSA9IERPQ1VNRU5UKCdwZXJzb25hcycsIEBwZXJzb25hSWQpXG4gICAgTEVUIGNvbnZlcnNhdGlvbiA9IERPQ1VNRU5UKCdjb252ZXJzYXRpb25zJywgQGNvbnZlcnNhdGlvbklkKVxuICAgIEZJTFRFUiB1c2VyICE9IG51bGwgQU5EIHVzZXIuYWN0aXZlICE9IGZhbHNlIEFORCBwZXJzb25hICE9IG51bGwgQU5EIHBlcnNvbmEuYWN0aXZlICE9IGZhbHNlXG4gICAgICBBTkQgcGVyc29uYS51c2VySWQgPT0gQHVzZXJJZCBBTkQgY29udmVyc2F0aW9uICE9IG51bGwgQU5EIGNvbnZlcnNhdGlvbi5jaGF0U2NoZW1hVmVyc2lvbiA9PSAxXG4gICAgICBBTkQgY29udmVyc2F0aW9uLmtpbmQgSU4gWydkaXJlY3QnLCAnZ3JvdXAnXSBBTkQgY29udmVyc2F0aW9uLnN0YXRlIElOIFsnYWN0aXZlJywgJ2Zvcm1pbmcnLCAnY2xvc2VkJ11cbiAgICBMRVQgbWVtYmVyc2hpcCA9IEZJUlNUKEZPUiBtZW1iZXIgSU4gaGFzQ2hhdE1lbWJlcnNoaXBcbiAgICAgIEZJTFRFUiBtZW1iZXIuY29udmVyc2F0aW9uSWQgPT0gQGNvbnZlcnNhdGlvbklkIEFORCBtZW1iZXIucGVyc29uYUlkID09IEBwZXJzb25hSWRcbiAgICAgICAgQU5EIG1lbWJlci51c2VySWQgPT0gQHVzZXJJZCBBTkQgbWVtYmVyLl9mcm9tID09IENPTkNBVCgncGVyc29uYXMvJywgQHBlcnNvbmFJZClcbiAgICAgICAgQU5EIG1lbWJlci5fdG8gPT0gQ09OQ0FUKCdjb252ZXJzYXRpb25zLycsIEBjb252ZXJzYXRpb25JZClcbiAgICAgICAgQU5EIChAZXBvY2ggPT0gbnVsbCBPUiBtZW1iZXIuZXBvY2ggPT0gQGVwb2NoKVxuICAgICAgICBBTkQgKEBwdXJwb3NlID09ICdyZXBvcnQnID8gbWVtYmVyLnN0YXRlIElOIFsnYWN0aXZlJywgJ2xlZnQnLCAncmVtb3ZlZCddIDogbWVtYmVyLnN0YXRlID09ICdhY3RpdmUnKVxuICAgICAgICBBTkQgKEBzZXF1ZW5jZSA9PSBudWxsIE9SIChJU19OVU1CRVIobWVtYmVyLmpvaW5TZXF1ZW5jZSkgQU5EIEBzZXF1ZW5jZSA+PSBtZW1iZXIuam9pblNlcXVlbmNlXG4gICAgICAgICAgQU5EIEBzZXF1ZW5jZSA8PSBjb252ZXJzYXRpb24ubGFzdFNlcXVlbmNlXG4gICAgICAgICAgQU5EIChtZW1iZXIuc3RhdGUgPT0gJ2FjdGl2ZScgT1IgKElTX05VTUJFUihtZW1iZXIubGVmdFNlcXVlbmNlKSBBTkQgQHNlcXVlbmNlIDw9IG1lbWJlci5sZWZ0U2VxdWVuY2UpKSkpXG4gICAgICBTT1JUIG1lbWJlci5hY2NlcHRlZEF0IERFU0MsIG1lbWJlci5fa2V5IERFU0MgTElNSVQgMSBSRVRVUk4gbWVtYmVyKVxuICAgIEZJTFRFUiBtZW1iZXJzaGlwICE9IG51bGxcbiAgICBMRVQgcGVlcnMgPSAoRk9SIG1lbWJlciBJTiBoYXNDaGF0TWVtYmVyc2hpcFxuICAgICAgRklMVEVSIG1lbWJlci5jb252ZXJzYXRpb25JZCA9PSBAY29udmVyc2F0aW9uSWQgQU5EIG1lbWJlci5zdGF0ZSA9PSAnYWN0aXZlJ1xuICAgICAgICBBTkQgbWVtYmVyLnBlcnNvbmFJZCAhPSBAcGVyc29uYUlkIFJFVFVSTiBtZW1iZXIpXG4gICAgTEVUIHBlZXIgPSBGSVJTVChwZWVycylcbiAgICBMRVQgcGVlclBlcnNvbmEgPSBwZWVyID09IG51bGwgPyBudWxsIDogRE9DVU1FTlQoJ3BlcnNvbmFzJywgcGVlci5wZXJzb25hSWQpXG4gICAgTEVUIHBlZXJVc2VyID0gcGVlciA9PSBudWxsID8gbnVsbCA6IERPQ1VNRU5UKCd1c2VycycsIHBlZXIudXNlcklkKVxuICAgIExFVCBibG9ja2VkID0gcGVlciA9PSBudWxsID8gZmFsc2UgOiBGSVJTVChGT1IgZWRnZSBJTiBoYXNDb25uZWN0aW9uIEZJTFRFUiBlZGdlLnR5cGUgPT0gJ2Jsb2NrJ1xuICAgICAgQU5EICgoZWRnZS5fZnJvbSBJTiBbQ09OQ0FUKCdwZXJzb25hcy8nLCBAcGVyc29uYUlkKSwgQ09OQ0FUKCd1c2Vycy8nLCBAdXNlcklkKV1cbiAgICAgICAgQU5EIGVkZ2UuX3RvIElOIFtDT05DQVQoJ3BlcnNvbmFzLycsIHBlZXIucGVyc29uYUlkKSwgQ09OQ0FUKCd1c2Vycy8nLCBwZWVyLnVzZXJJZCldKVxuICAgICAgICBPUiAoZWRnZS5fdG8gSU4gW0NPTkNBVCgncGVyc29uYXMvJywgQHBlcnNvbmFJZCksIENPTkNBVCgndXNlcnMvJywgQHVzZXJJZCldXG4gICAgICAgIEFORCBlZGdlLl9mcm9tIElOIFtDT05DQVQoJ3BlcnNvbmFzLycsIHBlZXIucGVyc29uYUlkKSwgQ09OQ0FUKCd1c2Vycy8nLCBwZWVyLnVzZXJJZCldKSkgTElNSVQgMSBSRVRVUk4gdHJ1ZSlcbiAgICBMRVQgZm9sbG93aW5nID0gcGVlciA9PSBudWxsID8gZmFsc2UgOiBGSVJTVChGT1IgZWRnZSBJTiBoYXNDb25uZWN0aW9uXG4gICAgICBGSUxURVIgZWRnZS50eXBlID09ICdmb2xsb3cnIEFORCBlZGdlLmFjdGl2ZSAhPSBmYWxzZSBBTkQgZWRnZS5fZnJvbSA9PSBDT05DQVQoJ3BlcnNvbmFzLycsIEBwZXJzb25hSWQpXG4gICAgICAgIEFORCBlZGdlLl90byA9PSBDT05DQVQoJ3BlcnNvbmFzLycsIHBlZXIucGVyc29uYUlkKSBMSU1JVCAxIFJFVFVSTiB0cnVlKVxuICAgIExFVCBmb2xsb3dlZCA9IHBlZXIgPT0gbnVsbCA/IGZhbHNlIDogRklSU1QoRk9SIGVkZ2UgSU4gaGFzQ29ubmVjdGlvblxuICAgICAgRklMVEVSIGVkZ2UudHlwZSA9PSAnZm9sbG93JyBBTkQgZWRnZS5hY3RpdmUgIT0gZmFsc2UgQU5EIGVkZ2UuX3RvID09IENPTkNBVCgncGVyc29uYXMvJywgQHBlcnNvbmFJZClcbiAgICAgICAgQU5EIGVkZ2UuX2Zyb20gPT0gQ09OQ0FUKCdwZXJzb25hcy8nLCBwZWVyLnBlcnNvbmFJZCkgTElNSVQgMSBSRVRVUk4gdHJ1ZSlcbiAgICBGSUxURVIgQHB1cnBvc2UgTk9UIElOIFsnc2VuZCcsICdzb2NrZXQnXSBPUiAoY29udmVyc2F0aW9uLnN0YXRlID09ICdhY3RpdmUnXG4gICAgICBBTkQgKGNvbnZlcnNhdGlvbi5raW5kICE9ICdkaXJlY3QnIE9SIChMRU5HVEgocGVlcnMpID09IDEgQU5EIHBlZXJQZXJzb25hICE9IG51bGwgQU5EIHBlZXJVc2VyICE9IG51bGxcbiAgICAgICAgQU5EIHBlZXJQZXJzb25hLmFjdGl2ZSAhPSBmYWxzZSBBTkQgcGVlclVzZXIuYWN0aXZlICE9IGZhbHNlIEFORCBwZWVyUGVyc29uYS51c2VySWQgPT0gcGVlci51c2VySWRcbiAgICAgICAgQU5EIGJsb2NrZWQgIT0gdHJ1ZSBBTkQgZm9sbG93aW5nID09IHRydWUgQU5EIGZvbGxvd2VkID09IHRydWUpKSlcbiAgICBGSUxURVIgQHB1cnBvc2UgIT0gJ2ludml0ZScgT1IgKGNvbnZlcnNhdGlvbi5raW5kID09ICdncm91cCcgQU5EIGNvbnZlcnNhdGlvbi5zdGF0ZSAhPSAnY2xvc2VkJ1xuICAgICAgQU5EIG1lbWJlcnNoaXAucm9sZSBJTiBbJ293bmVyJywgJ2FkbWluJ10pXG4gICAgRklMVEVSIEBwdXJwb3NlID09ICdyZXBvcnQnIE9SIGNvbnZlcnNhdGlvbi5zdGF0ZSAhPSAnY2xvc2VkJ1xuICAgIFJFVFVSTiB7YWN0aXZlTWVtYmVyQ291bnQ6IGNvbnZlcnNhdGlvbi5hY3RpdmVNZW1iZXJDb3VudCwgY29udmVyc2F0aW9uSWQ6IEBjb252ZXJzYXRpb25JZCxcbiAgICAgIGNvbnZlcnNhdGlvblN0YXRlOiBjb252ZXJzYXRpb24uc3RhdGUsIGVwb2NoOiBtZW1iZXJzaGlwLmVwb2NoLCBqb2luU2VxdWVuY2U6IG1lbWJlcnNoaXAuam9pblNlcXVlbmNlLFxuICAgICAga2luZDogY29udmVyc2F0aW9uLmtpbmQsIGxhc3RTZXF1ZW5jZTogY29udmVyc2F0aW9uLmxhc3RTZXF1ZW5jZSwgbGVmdFNlcXVlbmNlOiBtZW1iZXJzaGlwLmxlZnRTZXF1ZW5jZSxcbiAgICAgIG1lbWJlcnNoaXBSZXZpc2lvbjogY29udmVyc2F0aW9uLm1lbWJlcnNoaXBSZXZpc2lvbiwgcGVyc29uYUlkOiBAcGVyc29uYUlkLCByZXZpc2lvbjogbWVtYmVyc2hpcC5yZXZpc2lvbixcbiAgICAgIHJvbGU6IG1lbWJlcnNoaXAucm9sZSwgc3RhdGU6IG1lbWJlcnNoaXAuc3RhdGV9XG4gIGAsIHtcbiAgICBjb252ZXJzYXRpb25JZDogaW5wdXQuY29udmVyc2F0aW9uSWQsIGVwb2NoOiBpbnB1dC5tZW1iZXJzaGlwRXBvY2ggPz8gbnVsbCwgcGVyc29uYUlkOiBpZGVudGl0eS5wZXJzb25hSWQsXG4gICAgcHVycG9zZTogaW5wdXQucHVycG9zZSwgc2VxdWVuY2U6IGlucHV0Lm1lc3NhZ2VTZXF1ZW5jZSA/PyBudWxsLCB1c2VySWQ6IGlkZW50aXR5LnVzZXJJZFxuICB9KTtcbiAgaWYoIXJlc3VsdCB8fCAhaXNDaGF0SWRlbnRpZmllcihyZXN1bHQuZXBvY2gpIHx8ICFOdW1iZXIuaXNTYWZlSW50ZWdlcihyZXN1bHQuam9pblNlcXVlbmNlKVxuICAgIHx8IHJlc3VsdC5qb2luU2VxdWVuY2UgPCAwIHx8ICFOdW1iZXIuaXNTYWZlSW50ZWdlcihyZXN1bHQubGFzdFNlcXVlbmNlKSB8fCByZXN1bHQubGFzdFNlcXVlbmNlIDwgMFxuICAgIHx8ICFOdW1iZXIuaXNTYWZlSW50ZWdlcihyZXN1bHQucmV2aXNpb24pIHx8IHJlc3VsdC5yZXZpc2lvbiA8IDFcbiAgICB8fCAhTnVtYmVyLmlzU2FmZUludGVnZXIocmVzdWx0Lm1lbWJlcnNoaXBSZXZpc2lvbikgfHwgcmVzdWx0Lm1lbWJlcnNoaXBSZXZpc2lvbiA8IDFcbiAgICB8fCAhTnVtYmVyLmlzU2FmZUludGVnZXIocmVzdWx0LmFjdGl2ZU1lbWJlckNvdW50KSB8fCByZXN1bHQuYWN0aXZlTWVtYmVyQ291bnQgPCAwXG4gICAgfHwgcmVzdWx0LmFjdGl2ZU1lbWJlckNvdW50ID4gMjUgfHwgIVsnb3duZXInLCAnYWRtaW4nLCAnbWVtYmVyJ10uaW5jbHVkZXMocmVzdWx0LnJvbGUpKSB7XG4gICAgdGhyb3cgbmV3IENoYXRFcnJvcignZm9yYmlkZGVuJyk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbmV4cG9ydCBjb25zdCBhdXRob3JpemVDb252ZXJzYXRpb25BY2Nlc3MgPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsIGlkZW50aXR5OiBDaGF0SWRlbnRpdHksIGlucHV0OiBNZW1iZXJzaGlwQWNjZXNzSW5wdXRcbik6IFByb21pc2U8QXV0aG9yaXplZE1lbWJlcnNoaXA+ID0+IGNyZWF0ZU1lbWJlcnNoaXBBdXRob3JpemVyKFxuICBjcmVhdGVEdXJhYmxlUXVlcnkoY29udGV4dClcbikoaWRlbnRpdHksIGlucHV0KTtcbiJdLCJuYW1lcyI6WyJDaGF0RXJyb3IiLCJjcmVhdGVEdXJhYmxlUXVlcnkiLCJpc0NoYXRJZGVudGlmaWVyIiwidmFsdWUiLCJ0ZXN0IiwicHVycG9zZXMiLCJjcmVhdGVNZW1iZXJzaGlwQXV0aG9yaXplciIsInJlYWQiLCJpZGVudGl0eSIsImlucHV0IiwidXNlcklkIiwicGVyc29uYUlkIiwiY29udmVyc2F0aW9uSWQiLCJpbmNsdWRlcyIsInB1cnBvc2UiLCJtZW1iZXJzaGlwRXBvY2giLCJ1bmRlZmluZWQiLCJtZXNzYWdlU2VxdWVuY2UiLCJOdW1iZXIiLCJpc1NhZmVJbnRlZ2VyIiwicmVzdWx0IiwiZXBvY2giLCJzZXF1ZW5jZSIsImpvaW5TZXF1ZW5jZSIsImxhc3RTZXF1ZW5jZSIsInJldmlzaW9uIiwibWVtYmVyc2hpcFJldmlzaW9uIiwiYWN0aXZlTWVtYmVyQ291bnQiLCJyb2xlIiwiYXV0aG9yaXplQ29udmVyc2F0aW9uQWNjZXNzIiwiY29udGV4dCJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUUEsU0FBUyxRQUFPLGNBQWM7QUFDdEMsU0FBUUMsa0JBQWtCLFFBQU8sbUJBQW1CO0FBNEJwRCxPQUFPLE1BQU1DLG1CQUFtQixDQUFDQyxRQUMvQixPQUFPQSxVQUFVLFlBQVkseUJBQXlCQyxJQUFJLENBQUNELE9BQU87QUFFcEUsTUFBTUUsV0FBd0Q7SUFBQztJQUFXO0lBQVU7SUFBZ0I7SUFBVTtJQUFRO0NBQVM7QUFFL0gsT0FBTyxNQUFNQyw2QkFBNkIsQ0FBQ0MsT0FBb0IsT0FDN0RDLFVBQXdCQztRQUV4QixJQUFHLENBQUNELFlBQVksQ0FBQ04saUJBQWlCTSxTQUFTRSxNQUFNLEtBQUssQ0FBQ1IsaUJBQWlCTSxTQUFTRyxTQUFTLEdBQUc7WUFDM0YsTUFBTSxJQUFJWCxVQUFVO1FBQ3RCO1FBQ0EsSUFBRyxDQUFDUyxTQUFTLENBQUNQLGlCQUFpQk8sTUFBTUcsY0FBYyxLQUFLLENBQUNQLFNBQVNRLFFBQVEsQ0FBQ0osTUFBTUssT0FBTyxLQUNsRkwsTUFBTU0sZUFBZSxLQUFLQyxhQUFhLENBQUNkLGlCQUFpQk8sTUFBTU0sZUFBZSxLQUM5RU4sTUFBTVEsZUFBZSxLQUFLRCxhQUN4QixDQUFBLENBQUNFLE9BQU9DLGFBQWEsQ0FBQ1YsTUFBTVEsZUFBZSxLQUFLUixNQUFNUSxlQUFlLEdBQUcsQ0FBQSxLQUMxRVIsTUFBTUssT0FBTyxLQUFLLFlBQVlMLE1BQU1RLGVBQWUsS0FBS0QsV0FBWTtZQUN4RSxNQUFNLElBQUloQixVQUFVO1FBQ3RCO1FBQ0EsTUFBTW9CLFNBQVMsTUFBTWIsS0FBMkIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUErQ2pELENBQUMsRUFBRTtZQUNESyxnQkFBZ0JILE1BQU1HLGNBQWM7WUFBRVMsT0FBT1osTUFBTU0sZUFBZSxJQUFJO1lBQU1KLFdBQVdILFNBQVNHLFNBQVM7WUFDekdHLFNBQVNMLE1BQU1LLE9BQU87WUFBRVEsVUFBVWIsTUFBTVEsZUFBZSxJQUFJO1lBQU1QLFFBQVFGLFNBQVNFLE1BQU07UUFDMUY7UUFDQSxJQUFHLENBQUNVLFVBQVUsQ0FBQ2xCLGlCQUFpQmtCLE9BQU9DLEtBQUssS0FBSyxDQUFDSCxPQUFPQyxhQUFhLENBQUNDLE9BQU9HLFlBQVksS0FDckZILE9BQU9HLFlBQVksR0FBRyxLQUFLLENBQUNMLE9BQU9DLGFBQWEsQ0FBQ0MsT0FBT0ksWUFBWSxLQUFLSixPQUFPSSxZQUFZLEdBQUcsS0FDL0YsQ0FBQ04sT0FBT0MsYUFBYSxDQUFDQyxPQUFPSyxRQUFRLEtBQUtMLE9BQU9LLFFBQVEsR0FBRyxLQUM1RCxDQUFDUCxPQUFPQyxhQUFhLENBQUNDLE9BQU9NLGtCQUFrQixLQUFLTixPQUFPTSxrQkFBa0IsR0FBRyxLQUNoRixDQUFDUixPQUFPQyxhQUFhLENBQUNDLE9BQU9PLGlCQUFpQixLQUFLUCxPQUFPTyxpQkFBaUIsR0FBRyxLQUM5RVAsT0FBT08saUJBQWlCLEdBQUcsTUFBTSxDQUFDO1lBQUM7WUFBUztZQUFTO1NBQVMsQ0FBQ2QsUUFBUSxDQUFDTyxPQUFPUSxJQUFJLEdBQUc7WUFDekYsTUFBTSxJQUFJNUIsVUFBVTtRQUN0QjtRQUNBLE9BQU9vQjtJQUNULEVBQUU7QUFFRixPQUFPLE1BQU1TLDhCQUE4QixDQUN6Q0MsU0FBcUJ0QixVQUF3QkMsUUFDWEgsMkJBQ2xDTCxtQkFBbUI2QixVQUNuQnRCLFVBQVVDLE9BQU8ifQ==
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
import type { AppendChatEventInput } from './events.js';
|
|
2
|
-
import type { AuthorizedMembership, ChatIdentity, ChatQuery } from './membership.js';
|
|
3
|
-
export interface DurableChatAttachment {
|
|
4
|
-
readonly contentVersion: string;
|
|
5
|
-
readonly imageId: string;
|
|
6
|
-
}
|
|
7
|
-
export interface DurableChatMessage<TDecision = unknown> {
|
|
8
|
-
readonly _key: string;
|
|
9
|
-
readonly added: number;
|
|
10
|
-
readonly attachmentIds: readonly string[];
|
|
11
|
-
readonly attachments: readonly DurableChatAttachment[];
|
|
12
|
-
readonly chatSchemaVersion: 1;
|
|
13
|
-
readonly clientMessageId: string;
|
|
14
|
-
readonly content: string;
|
|
15
|
-
readonly contentRevision: number;
|
|
16
|
-
readonly conversationId: string;
|
|
17
|
-
readonly deleted: boolean;
|
|
18
|
-
readonly deletedAuthorProofId?: string;
|
|
19
|
-
readonly mobileContentVersion: string;
|
|
20
|
-
readonly mobileDecision: TDecision;
|
|
21
|
-
readonly mobilePlatformDisposition: string;
|
|
22
|
-
readonly modified: number;
|
|
23
|
-
readonly replyToMessageId?: string;
|
|
24
|
-
readonly revision: number;
|
|
25
|
-
readonly senderPersonaId: string;
|
|
26
|
-
readonly sequence: number;
|
|
27
|
-
readonly userId: string;
|
|
28
|
-
}
|
|
29
|
-
export interface DurableSendMessageInput {
|
|
30
|
-
readonly attachmentIds: readonly string[];
|
|
31
|
-
readonly clientMessageId: string;
|
|
32
|
-
readonly content: string;
|
|
33
|
-
readonly conversationId: string;
|
|
34
|
-
readonly replyToMessageId?: string;
|
|
35
|
-
readonly senderPersonaId: string;
|
|
36
|
-
}
|
|
37
|
-
export interface DurableEditMessageInput {
|
|
38
|
-
readonly content: string;
|
|
39
|
-
readonly conversationId: string;
|
|
40
|
-
readonly expectedRevision: number;
|
|
41
|
-
readonly idempotencyKey: string;
|
|
42
|
-
readonly messageId: string;
|
|
43
|
-
}
|
|
44
|
-
export type DurableDeleteMessageInput = Omit<DurableEditMessageInput, 'content'>;
|
|
45
|
-
export interface DurableMessageAcknowledgement {
|
|
46
|
-
readonly clientMessageId: string;
|
|
47
|
-
readonly messageId: string;
|
|
48
|
-
readonly revision: number;
|
|
49
|
-
readonly sequence: number;
|
|
50
|
-
}
|
|
51
|
-
export interface DurableMessageMutationResult {
|
|
52
|
-
readonly messageId: string;
|
|
53
|
-
readonly revision: number;
|
|
54
|
-
readonly sequence: number;
|
|
55
|
-
}
|
|
56
|
-
export interface DurableContentProjection<TDecision> {
|
|
57
|
-
readonly decision: TDecision;
|
|
58
|
-
readonly platformDisposition?: string;
|
|
59
|
-
}
|
|
60
|
-
export type DurableMessageRun = <T>(operation: (read: ChatQuery) => Promise<T>, write?: boolean) => Promise<T>;
|
|
61
|
-
export interface DurableMessageHooks<TDecision> {
|
|
62
|
-
readonly appendEvent: (read: ChatQuery, input: AppendChatEventInput) => Promise<unknown>;
|
|
63
|
-
readonly authorizeAttachment: (read: ChatQuery, imageId: string) => Promise<DurableChatAttachment>;
|
|
64
|
-
readonly authorizeIdentity: (read: ChatQuery, identity: ChatIdentity) => Promise<void>;
|
|
65
|
-
readonly authorizeMembership: (read: ChatQuery, identity: ChatIdentity, conversationId: string, purpose: 'history' | 'send') => Promise<AuthorizedMembership>;
|
|
66
|
-
readonly authorizeMessageVisible: (read: ChatQuery, identity: ChatIdentity, message: DurableChatMessage<TDecision>, membership: AuthorizedMembership) => Promise<void>;
|
|
67
|
-
readonly classifyContent: (input: {
|
|
68
|
-
readonly content: string;
|
|
69
|
-
readonly contentVersion: string;
|
|
70
|
-
}) => DurableContentProjection<TDecision> | Promise<DurableContentProjection<TDecision>>;
|
|
71
|
-
readonly hash?: (value: unknown) => string;
|
|
72
|
-
readonly identity: ChatIdentity;
|
|
73
|
-
readonly now?: () => number;
|
|
74
|
-
readonly run: DurableMessageRun;
|
|
75
|
-
readonly uuid?: () => string;
|
|
76
|
-
}
|
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
export { };
|
|
2
|
-
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50Ly5jb2RleC13b3JrdHJlZXMvcmVha3Rvci1waGFudGF6ZS1jaGF0L3BhY2thZ2VzL3JlYWt0b3Ivc3JjL2R1cmFibGVDaGF0L21lc3NhZ2VUeXBlcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7QXBwZW5kQ2hhdEV2ZW50SW5wdXR9IGZyb20gJy4vZXZlbnRzLmpzJztcbmltcG9ydCB0eXBlIHtBdXRob3JpemVkTWVtYmVyc2hpcCwgQ2hhdElkZW50aXR5LCBDaGF0UXVlcnl9IGZyb20gJy4vbWVtYmVyc2hpcC5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRHVyYWJsZUNoYXRBdHRhY2htZW50IHtcbiAgcmVhZG9ubHkgY29udGVudFZlcnNpb246IHN0cmluZztcbiAgcmVhZG9ubHkgaW1hZ2VJZDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIER1cmFibGVDaGF0TWVzc2FnZTxURGVjaXNpb24gPSB1bmtub3duPiB7XG4gIHJlYWRvbmx5IF9rZXk6IHN0cmluZztcbiAgcmVhZG9ubHkgYWRkZWQ6IG51bWJlcjtcbiAgcmVhZG9ubHkgYXR0YWNobWVudElkczogcmVhZG9ubHkgc3RyaW5nW107XG4gIHJlYWRvbmx5IGF0dGFjaG1lbnRzOiByZWFkb25seSBEdXJhYmxlQ2hhdEF0dGFjaG1lbnRbXTtcbiAgcmVhZG9ubHkgY2hhdFNjaGVtYVZlcnNpb246IDE7XG4gIHJlYWRvbmx5IGNsaWVudE1lc3NhZ2VJZDogc3RyaW5nO1xuICByZWFkb25seSBjb250ZW50OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNvbnRlbnRSZXZpc2lvbjogbnVtYmVyO1xuICByZWFkb25seSBjb252ZXJzYXRpb25JZDogc3RyaW5nO1xuICByZWFkb25seSBkZWxldGVkOiBib29sZWFuO1xuICByZWFkb25seSBkZWxldGVkQXV0aG9yUHJvb2ZJZD86IHN0cmluZztcbiAgcmVhZG9ubHkgbW9iaWxlQ29udGVudFZlcnNpb246IHN0cmluZztcbiAgcmVhZG9ubHkgbW9iaWxlRGVjaXNpb246IFREZWNpc2lvbjtcbiAgcmVhZG9ubHkgbW9iaWxlUGxhdGZvcm1EaXNwb3NpdGlvbjogc3RyaW5nO1xuICByZWFkb25seSBtb2RpZmllZDogbnVtYmVyO1xuICByZWFkb25seSByZXBseVRvTWVzc2FnZUlkPzogc3RyaW5nO1xuICByZWFkb25seSByZXZpc2lvbjogbnVtYmVyO1xuICByZWFkb25seSBzZW5kZXJQZXJzb25hSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgc2VxdWVuY2U6IG51bWJlcjtcbiAgcmVhZG9ubHkgdXNlcklkOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRHVyYWJsZVNlbmRNZXNzYWdlSW5wdXQge1xuICByZWFkb25seSBhdHRhY2htZW50SWRzOiByZWFkb25seSBzdHJpbmdbXTtcbiAgcmVhZG9ubHkgY2xpZW50TWVzc2FnZUlkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNvbnRlbnQ6IHN0cmluZztcbiAgcmVhZG9ubHkgY29udmVyc2F0aW9uSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgcmVwbHlUb01lc3NhZ2VJZD86IHN0cmluZztcbiAgcmVhZG9ubHkgc2VuZGVyUGVyc29uYUlkOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRHVyYWJsZUVkaXRNZXNzYWdlSW5wdXQge1xuICByZWFkb25seSBjb250ZW50OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNvbnZlcnNhdGlvbklkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGV4cGVjdGVkUmV2aXNpb246IG51bWJlcjtcbiAgcmVhZG9ubHkgaWRlbXBvdGVuY3lLZXk6IHN0cmluZztcbiAgcmVhZG9ubHkgbWVzc2FnZUlkOiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIER1cmFibGVEZWxldGVNZXNzYWdlSW5wdXQgPSBPbWl0PER1cmFibGVFZGl0TWVzc2FnZUlucHV0LCAnY29udGVudCc+O1xuXG5leHBvcnQgaW50ZXJmYWNlIER1cmFibGVNZXNzYWdlQWNrbm93bGVkZ2VtZW50IHtcbiAgcmVhZG9ubHkgY2xpZW50TWVzc2FnZUlkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IG1lc3NhZ2VJZDogc3RyaW5nO1xuICByZWFkb25seSByZXZpc2lvbjogbnVtYmVyO1xuICByZWFkb25seSBzZXF1ZW5jZTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIER1cmFibGVNZXNzYWdlTXV0YXRpb25SZXN1bHQge1xuICByZWFkb25seSBtZXNzYWdlSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgcmV2aXNpb246IG51bWJlcjtcbiAgcmVhZG9ubHkgc2VxdWVuY2U6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEdXJhYmxlQ29udGVudFByb2plY3Rpb248VERlY2lzaW9uPiB7XG4gIHJlYWRvbmx5IGRlY2lzaW9uOiBURGVjaXNpb247XG4gIHJlYWRvbmx5IHBsYXRmb3JtRGlzcG9zaXRpb24/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIER1cmFibGVNZXNzYWdlUnVuID0gPFQ+KG9wZXJhdGlvbjogKHJlYWQ6IENoYXRRdWVyeSkgPT4gUHJvbWlzZTxUPiwgd3JpdGU/OiBib29sZWFuKSA9PiBQcm9taXNlPFQ+O1xuXG5leHBvcnQgaW50ZXJmYWNlIER1cmFibGVNZXNzYWdlSG9va3M8VERlY2lzaW9uPiB7XG4gIHJlYWRvbmx5IGFwcGVuZEV2ZW50OiAocmVhZDogQ2hhdFF1ZXJ5LCBpbnB1dDogQXBwZW5kQ2hhdEV2ZW50SW5wdXQpID0+IFByb21pc2U8dW5rbm93bj47XG4gIHJlYWRvbmx5IGF1dGhvcml6ZUF0dGFjaG1lbnQ6IChyZWFkOiBDaGF0UXVlcnksIGltYWdlSWQ6IHN0cmluZykgPT4gUHJvbWlzZTxEdXJhYmxlQ2hhdEF0dGFjaG1lbnQ+O1xuICByZWFkb25seSBhdXRob3JpemVJZGVudGl0eTogKHJlYWQ6IENoYXRRdWVyeSwgaWRlbnRpdHk6IENoYXRJZGVudGl0eSkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgcmVhZG9ubHkgYXV0aG9yaXplTWVtYmVyc2hpcDogKFxuICAgIHJlYWQ6IENoYXRRdWVyeSwgaWRlbnRpdHk6IENoYXRJZGVudGl0eSwgY29udmVyc2F0aW9uSWQ6IHN0cmluZywgcHVycG9zZTogJ2hpc3RvcnknIHwgJ3NlbmQnXG4gICkgPT4gUHJvbWlzZTxBdXRob3JpemVkTWVtYmVyc2hpcD47XG4gIHJlYWRvbmx5IGF1dGhvcml6ZU1lc3NhZ2VWaXNpYmxlOiAoXG4gICAgcmVhZDogQ2hhdFF1ZXJ5LCBpZGVudGl0eTogQ2hhdElkZW50aXR5LCBtZXNzYWdlOiBEdXJhYmxlQ2hhdE1lc3NhZ2U8VERlY2lzaW9uPiwgbWVtYmVyc2hpcDogQXV0aG9yaXplZE1lbWJlcnNoaXBcbiAgKSA9PiBQcm9taXNlPHZvaWQ+O1xuICByZWFkb25seSBjbGFzc2lmeUNvbnRlbnQ6IChpbnB1dDoge1xuICAgIHJlYWRvbmx5IGNvbnRlbnQ6IHN0cmluZztcbiAgICByZWFkb25seSBjb250ZW50VmVyc2lvbjogc3RyaW5nO1xuICB9KSA9PiBEdXJhYmxlQ29udGVudFByb2plY3Rpb248VERlY2lzaW9uPiB8IFByb21pc2U8RHVyYWJsZUNvbnRlbnRQcm9qZWN0aW9uPFREZWNpc2lvbj4+O1xuICByZWFkb25seSBoYXNoPzogKHZhbHVlOiB1bmtub3duKSA9PiBzdHJpbmc7XG4gIHJlYWRvbmx5IGlkZW50aXR5OiBDaGF0SWRlbnRpdHk7XG4gIHJlYWRvbmx5IG5vdz86ICgpID0+IG51bWJlcjtcbiAgcmVhZG9ubHkgcnVuOiBEdXJhYmxlTWVzc2FnZVJ1bjtcbiAgcmVhZG9ubHkgdXVpZD86ICgpID0+IHN0cmluZztcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFzRUEsV0FtQkMifQ==
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import type { ChatQuery } from './membership.js';
|
|
2
|
-
import type { DurableChatMessage, DurableDeleteMessageInput, DurableEditMessageInput, DurableMessageAcknowledgement, DurableMessageHooks, DurableMessageMutationResult, DurableSendMessageInput } from './messageTypes.js';
|
|
3
|
-
export declare const readDurableMessage: <TDecision>(read: ChatQuery, conversationId: string, messageId: string) => Promise<DurableChatMessage<TDecision>>;
|
|
4
|
-
export declare const createDurableMessagePersistence: <TDecision>(hooks: DurableMessageHooks<TDecision>) => {
|
|
5
|
-
authorize: (read: ChatQuery, conversationId: string, purpose?: 'history' | 'send') => Promise<import("./membership.js").AuthorizedMembership>;
|
|
6
|
-
deleteMessage: (input: DurableDeleteMessageInput) => Promise<DurableMessageMutationResult>;
|
|
7
|
-
editMessage: (input: DurableEditMessageInput) => Promise<DurableMessageMutationResult>;
|
|
8
|
-
rateLimit: (read: ChatQuery, action: string, limit: number, interval?: number) => Promise<void>;
|
|
9
|
-
receipt: <T>(read: ChatQuery, action: string, conversationId: string, key: string, payload: unknown) => Promise<{
|
|
10
|
-
prior: T;
|
|
11
|
-
save: (result: T) => Promise<boolean>;
|
|
12
|
-
}>;
|
|
13
|
-
run: <T>(operation: (read: ChatQuery) => Promise<T>, write?: boolean) => Promise<T>;
|
|
14
|
-
sendMessage: (input: DurableSendMessageInput) => Promise<DurableMessageAcknowledgement>;
|
|
15
|
-
};
|
|
16
|
-
export type DurableMessagePersistence<TDecision = unknown> = ReturnType<typeof createDurableMessagePersistence<TDecision>>;
|