@nlabs/reaktor 1.8.0 → 1.9.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 +75 -0
- package/lib/actions/analytics.js +1 -1
- package/lib/actions/apps.js +1 -1
- package/lib/actions/connections.js +1 -1
- package/lib/actions/content.js +1 -1
- package/lib/actions/conversations.js +1 -1
- package/lib/actions/crm.js +1 -1
- 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.js +1 -1
- package/lib/actions/flags.js +1 -1
- package/lib/actions/groups.js +1 -1
- package/lib/actions/images.js +1 -1
- package/lib/actions/index.js +1 -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 +1 -1
- 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.js +1 -1
- package/lib/actions/rum.js +1 -1
- package/lib/actions/s3.js +1 -1
- 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.js +1 -1
- package/lib/actions/users.js +1 -1
- 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/imageAdapter.js +1 -1
- package/lib/adapters/index.js +1 -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.js +1 -1
- package/lib/config.js +1 -1
- package/lib/constants/collections.js +1 -1
- package/lib/durableChat/conversations.d.ts +62 -0
- package/lib/durableChat/conversations.js +729 -0
- package/lib/durableChat/errors.d.ts +6 -0
- package/lib/durableChat/errors.js +11 -0
- package/lib/durableChat/events.d.ts +22 -0
- package/lib/durableChat/events.js +50 -0
- package/lib/durableChat/index.d.ts +8 -0
- package/lib/durableChat/index.js +10 -0
- package/lib/durableChat/membership.d.ts +24 -0
- package/lib/durableChat/membership.js +85 -0
- package/lib/durableChat/messageTypes.d.ts +76 -0
- package/lib/durableChat/messageTypes.js +3 -0
- package/lib/durableChat/messages.d.ts +16 -0
- package/lib/durableChat/messages.js +257 -0
- package/lib/durableChat/transaction.d.ts +10 -0
- package/lib/durableChat/transaction.js +53 -0
- package/lib/durableChat/types.d.ts +81 -0
- package/lib/durableChat/types.js +3 -0
- package/lib/handlers/graphqlHandler.js +1 -1
- package/lib/index.d.ts +1 -0
- package/lib/index.js +2 -1
- package/lib/lambdas/actions/websockets.js +1 -1
- package/lib/lambdas/authorizer.js +1 -1
- package/lib/lambdas/connection.js +1 -1
- package/lib/lambdas/utils/message.js +1 -1
- 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 +1 -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/images/images.js +1 -1
- package/lib/mutations/index.js +1 -1
- 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 +1 -1
- 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/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/iapSubscription.js +1 -1
- package/lib/objectTypes/image.js +1 -1
- package/lib/objectTypes/index.js +1 -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.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/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/images/images.js +1 -1
- package/lib/queries/index.js +1 -1
- 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.js +1 -1
- package/lib/types/apps.types.js +1 -1
- package/lib/types/arangodb.types.js +1 -1
- package/lib/types/auth.types.js +1 -1
- package/lib/types/connections.types.js +1 -1
- package/lib/types/content.types.js +1 -1
- package/lib/types/conversations.types.js +1 -1
- package/lib/types/crm.types.js +1 -1
- package/lib/types/email.types.js +1 -1
- package/lib/types/error.types.js +1 -1
- package/lib/types/files.types.js +1 -1
- package/lib/types/flags.types.js +1 -1
- package/lib/types/google.types.js +1 -1
- package/lib/types/groups.types.js +1 -1
- package/lib/types/images.types.js +1 -1
- package/lib/types/index.js +1 -1
- package/lib/types/locations.types.js +1 -1
- package/lib/types/messages.types.js +1 -1
- package/lib/types/notifications.types.js +1 -1
- package/lib/types/payments.types.js +1 -1
- package/lib/types/personas.types.js +1 -1
- package/lib/types/posts.types.js +1 -1
- package/lib/types/rum.types.js +1 -1
- package/lib/types/statistics.types.js +1 -1
- package/lib/types/tags.types.js +1 -1
- package/lib/types/users.types.js +1 -1
- package/lib/types/videos.types.js +1 -1
- 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.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.js +1 -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/middlewareUtils.js +1 -1
- 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.js +2 -1
- 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 +3 -3
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
/* eslint-disable no-await-in-loop, no-underscore-dangle -- Ordered checks and Arango document identities. */ import { createHash, randomUUID } from 'node:crypto';
|
|
2
|
+
import { ChatError } from './errors.js';
|
|
3
|
+
import { isChatIdentifier } from './membership.js';
|
|
4
|
+
const defaultHash = (value)=>createHash('sha256').update(JSON.stringify(value)).digest('hex');
|
|
5
|
+
const validText = (content)=>typeof content === 'string' && Array.from(content).length <= 4000 && !/[\u0000\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?<![\uD800-\uDBFF])[\uDC00-\uDFFF]/u.test(content);
|
|
6
|
+
const requireValid = (valid)=>{
|
|
7
|
+
if (!valid) {
|
|
8
|
+
throw new ChatError('invalid_request');
|
|
9
|
+
}
|
|
10
|
+
};
|
|
11
|
+
export const readDurableMessage = async (read, conversationId, messageId)=>{
|
|
12
|
+
const message = await read('RETURN DOCUMENT("messages", @messageId)', {
|
|
13
|
+
messageId
|
|
14
|
+
});
|
|
15
|
+
if (!message || message.conversationId !== conversationId || message.chatSchemaVersion !== 1) {
|
|
16
|
+
throw new ChatError('forbidden');
|
|
17
|
+
}
|
|
18
|
+
return message;
|
|
19
|
+
};
|
|
20
|
+
export const createDurableMessagePersistence = (hooks)=>{
|
|
21
|
+
const hash = hooks.hash || defaultHash;
|
|
22
|
+
const now = hooks.now || Date.now;
|
|
23
|
+
const uuid = hooks.uuid || randomUUID;
|
|
24
|
+
const authorize = async (read, conversationId, purpose = 'history')=>{
|
|
25
|
+
const membership = await hooks.authorizeMembership(read, hooks.identity, conversationId, purpose);
|
|
26
|
+
const legacy = await read(`RETURN FIRST(FOR message IN messages
|
|
27
|
+
FILTER message.conversationId == @conversationId
|
|
28
|
+
AND (message.chatSchemaVersion != 1 OR !IS_NUMBER(message.sequence) OR message.sequence < 1)
|
|
29
|
+
LIMIT 1 RETURN true)`, {
|
|
30
|
+
conversationId
|
|
31
|
+
});
|
|
32
|
+
if (legacy === true) {
|
|
33
|
+
throw new ChatError('conflict');
|
|
34
|
+
}
|
|
35
|
+
return membership;
|
|
36
|
+
};
|
|
37
|
+
const receipt = async (read, action, conversationId, key, payload)=>{
|
|
38
|
+
const requestId = hash([
|
|
39
|
+
action,
|
|
40
|
+
conversationId,
|
|
41
|
+
hooks.identity.personaId,
|
|
42
|
+
key
|
|
43
|
+
]);
|
|
44
|
+
const payloadHash = hash(payload);
|
|
45
|
+
const record = await read('RETURN DOCUMENT("chatMessageRequests", @key)', {
|
|
46
|
+
key: requestId
|
|
47
|
+
});
|
|
48
|
+
if (record && (record.payloadHash !== payloadHash || record.userId !== hooks.identity.userId)) {
|
|
49
|
+
throw new ChatError('conflict');
|
|
50
|
+
}
|
|
51
|
+
return {
|
|
52
|
+
prior: record?.result,
|
|
53
|
+
save: (result)=>read('INSERT @record IN chatMessageRequests RETURN true', {
|
|
54
|
+
record: {
|
|
55
|
+
_key: requestId,
|
|
56
|
+
added: now(),
|
|
57
|
+
conversationId,
|
|
58
|
+
payloadHash,
|
|
59
|
+
personaId: hooks.identity.personaId,
|
|
60
|
+
result,
|
|
61
|
+
userId: hooks.identity.userId
|
|
62
|
+
}
|
|
63
|
+
})
|
|
64
|
+
};
|
|
65
|
+
};
|
|
66
|
+
const rateLimit = async (read, action, limit, interval = 60000)=>{
|
|
67
|
+
const key = hash([
|
|
68
|
+
hooks.identity.userId,
|
|
69
|
+
hooks.identity.personaId,
|
|
70
|
+
action,
|
|
71
|
+
Math.floor(now() / interval)
|
|
72
|
+
]);
|
|
73
|
+
const allowed = await read(`LET bucket = DOCUMENT('chatRateLimits', @key)
|
|
74
|
+
FILTER bucket == null OR bucket.count < @limit
|
|
75
|
+
UPSERT {_key: @key} INSERT {_key: @key, count: 1, personaId: @personaId, userId: @userId}
|
|
76
|
+
UPDATE {count: OLD.count + 1, personaId: @personaId, userId: @userId}
|
|
77
|
+
IN chatRateLimits RETURN true`, {
|
|
78
|
+
key,
|
|
79
|
+
limit,
|
|
80
|
+
personaId: hooks.identity.personaId,
|
|
81
|
+
userId: hooks.identity.userId
|
|
82
|
+
});
|
|
83
|
+
if (allowed !== true) {
|
|
84
|
+
throw new ChatError('rate_limited');
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
const run = (operation, write = true)=>hooks.run(async (read)=>{
|
|
88
|
+
await hooks.authorizeIdentity(read, hooks.identity);
|
|
89
|
+
return operation(read);
|
|
90
|
+
}, write);
|
|
91
|
+
const sendMessage = (input)=>run(async (read)=>{
|
|
92
|
+
requireValid(Boolean(input) && isChatIdentifier(input.conversationId) && isChatIdentifier(input.clientMessageId) && input.senderPersonaId === hooks.identity.personaId && validText(input.content) && Array.isArray(input.attachmentIds) && input.attachmentIds.length <= 4 && input.attachmentIds.every(isChatIdentifier) && new Set(input.attachmentIds).size === input.attachmentIds.length && (input.content.trim().length > 0 || input.attachmentIds.length > 0) && (input.replyToMessageId === undefined || isChatIdentifier(input.replyToMessageId)));
|
|
93
|
+
const request = await receipt(read, 'send', input.conversationId, input.clientMessageId, input);
|
|
94
|
+
if (request.prior) {
|
|
95
|
+
return request.prior;
|
|
96
|
+
}
|
|
97
|
+
const membership = await authorize(read, input.conversationId, 'send');
|
|
98
|
+
await rateLimit(read, 'send', 60);
|
|
99
|
+
const attachments = [];
|
|
100
|
+
for (const imageId of input.attachmentIds){
|
|
101
|
+
attachments.push(await hooks.authorizeAttachment(read, imageId));
|
|
102
|
+
}
|
|
103
|
+
if (input.replyToMessageId) {
|
|
104
|
+
const quoted = await readDurableMessage(read, input.conversationId, input.replyToMessageId);
|
|
105
|
+
await hooks.authorizeMessageVisible(read, hooks.identity, quoted, membership);
|
|
106
|
+
if (quoted.deleted || quoted.mobilePlatformDisposition !== 'allowed') {
|
|
107
|
+
throw new ChatError('forbidden');
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
const timestamp = now();
|
|
111
|
+
const sequence = await read(`FOR conversation IN conversations FILTER conversation._key == @id
|
|
112
|
+
AND conversation.chatSchemaVersion == 1 AND conversation.state == 'active'
|
|
113
|
+
AND IS_NUMBER(conversation.lastSequence) AND conversation.lastSequence < 9007199254740991
|
|
114
|
+
UPDATE conversation WITH {lastSequence: conversation.lastSequence + 1, modified: @now}
|
|
115
|
+
IN conversations RETURN NEW.lastSequence`, {
|
|
116
|
+
id: input.conversationId,
|
|
117
|
+
now: timestamp
|
|
118
|
+
});
|
|
119
|
+
if (!Number.isSafeInteger(sequence) || Number(sequence) < 1) {
|
|
120
|
+
throw new ChatError('unavailable');
|
|
121
|
+
}
|
|
122
|
+
const messageId = uuid();
|
|
123
|
+
const contentVersion = hash([
|
|
124
|
+
messageId,
|
|
125
|
+
1,
|
|
126
|
+
input.content
|
|
127
|
+
]);
|
|
128
|
+
const projection = await hooks.classifyContent({
|
|
129
|
+
content: input.content || ' ',
|
|
130
|
+
contentVersion
|
|
131
|
+
});
|
|
132
|
+
const record = {
|
|
133
|
+
_key: messageId,
|
|
134
|
+
added: timestamp,
|
|
135
|
+
attachmentIds: input.attachmentIds,
|
|
136
|
+
attachments,
|
|
137
|
+
chatSchemaVersion: 1,
|
|
138
|
+
clientMessageId: input.clientMessageId,
|
|
139
|
+
content: input.content,
|
|
140
|
+
contentRevision: 1,
|
|
141
|
+
conversationId: input.conversationId,
|
|
142
|
+
deleted: false,
|
|
143
|
+
mobileContentVersion: contentVersion,
|
|
144
|
+
mobileDecision: projection.decision,
|
|
145
|
+
mobilePlatformDisposition: projection.platformDisposition || 'allowed',
|
|
146
|
+
modified: timestamp,
|
|
147
|
+
replyToMessageId: input.replyToMessageId,
|
|
148
|
+
revision: 1,
|
|
149
|
+
senderPersonaId: hooks.identity.personaId,
|
|
150
|
+
sequence: sequence,
|
|
151
|
+
userId: hooks.identity.userId
|
|
152
|
+
};
|
|
153
|
+
if (await read('INSERT @record IN messages RETURN true', {
|
|
154
|
+
record
|
|
155
|
+
}) !== true) {
|
|
156
|
+
throw new ChatError('unavailable');
|
|
157
|
+
}
|
|
158
|
+
await hooks.appendEvent(read, {
|
|
159
|
+
actorPersonaId: hooks.identity.personaId,
|
|
160
|
+
conversationId: input.conversationId,
|
|
161
|
+
kind: 'message.changed',
|
|
162
|
+
membershipEpoch: membership.epoch,
|
|
163
|
+
resourceId: messageId,
|
|
164
|
+
revision: 1
|
|
165
|
+
});
|
|
166
|
+
const result = {
|
|
167
|
+
clientMessageId: input.clientMessageId,
|
|
168
|
+
messageId,
|
|
169
|
+
revision: 1,
|
|
170
|
+
sequence: sequence
|
|
171
|
+
};
|
|
172
|
+
if (await request.save(result) !== true) {
|
|
173
|
+
throw new ChatError('unavailable');
|
|
174
|
+
}
|
|
175
|
+
return result;
|
|
176
|
+
});
|
|
177
|
+
const mutateMessage = (input, remove)=>run(async (read)=>{
|
|
178
|
+
requireValid(Boolean(input) && isChatIdentifier(input.conversationId) && isChatIdentifier(input.messageId) && isChatIdentifier(input.idempotencyKey) && Number.isSafeInteger(input.expectedRevision) && input.expectedRevision >= 1 && (remove || 'content' in input && validText(input.content)));
|
|
179
|
+
const request = await receipt(read, remove ? 'delete' : 'edit', input.conversationId, input.idempotencyKey, input);
|
|
180
|
+
if (request.prior) {
|
|
181
|
+
return request.prior;
|
|
182
|
+
}
|
|
183
|
+
const membership = await authorize(read, input.conversationId, 'send');
|
|
184
|
+
const message = await readDurableMessage(read, input.conversationId, input.messageId);
|
|
185
|
+
if (message.senderPersonaId !== hooks.identity.personaId || message.userId !== hooks.identity.userId || message.sequence < membership.joinSequence || message.deleted || message.mobilePlatformDisposition !== 'allowed') {
|
|
186
|
+
throw new ChatError('forbidden');
|
|
187
|
+
}
|
|
188
|
+
if (message.revision !== input.expectedRevision || !remove && now() - message.added > 15 * 60000) {
|
|
189
|
+
throw new ChatError('conflict');
|
|
190
|
+
}
|
|
191
|
+
await rateLimit(read, remove ? 'delete' : 'edit', 60);
|
|
192
|
+
const content = !remove && 'content' in input ? input.content : '';
|
|
193
|
+
const revision = message.revision + 1;
|
|
194
|
+
const contentRevision = message.contentRevision + 1;
|
|
195
|
+
const contentVersion = hash([
|
|
196
|
+
message._key,
|
|
197
|
+
contentRevision,
|
|
198
|
+
content
|
|
199
|
+
]);
|
|
200
|
+
const projection = await hooks.classifyContent({
|
|
201
|
+
content: content || ' ',
|
|
202
|
+
contentVersion
|
|
203
|
+
});
|
|
204
|
+
const updated = await read(`FOR current IN messages
|
|
205
|
+
FILTER current._key == @id AND current.revision == @expectedRevision
|
|
206
|
+
UPDATE current WITH {content: @content, contentRevision: @contentRevision, deleted: @deleted,
|
|
207
|
+
attachmentIds: @attachmentIds, attachments: @attachments, replyToMessageId: @reply,
|
|
208
|
+
mobileContentVersion: @contentVersion, mobileDecision: @decision,
|
|
209
|
+
mobilePlatformDisposition: @platformDisposition, modified: @now, revision: @revision}
|
|
210
|
+
IN messages RETURN true`, {
|
|
211
|
+
attachmentIds: remove ? [] : message.attachmentIds,
|
|
212
|
+
attachments: remove ? [] : message.attachments,
|
|
213
|
+
content,
|
|
214
|
+
contentRevision,
|
|
215
|
+
contentVersion,
|
|
216
|
+
decision: projection.decision,
|
|
217
|
+
deleted: remove,
|
|
218
|
+
expectedRevision: input.expectedRevision,
|
|
219
|
+
id: message._key,
|
|
220
|
+
now: now(),
|
|
221
|
+
platformDisposition: projection.platformDisposition || 'allowed',
|
|
222
|
+
reply: remove ? null : message.replyToMessageId || null,
|
|
223
|
+
revision
|
|
224
|
+
});
|
|
225
|
+
if (updated !== true) {
|
|
226
|
+
throw new ChatError('conflict');
|
|
227
|
+
}
|
|
228
|
+
await hooks.appendEvent(read, {
|
|
229
|
+
actorPersonaId: hooks.identity.personaId,
|
|
230
|
+
conversationId: input.conversationId,
|
|
231
|
+
kind: 'message.changed',
|
|
232
|
+
membershipEpoch: membership.epoch,
|
|
233
|
+
resourceId: message._key,
|
|
234
|
+
revision
|
|
235
|
+
});
|
|
236
|
+
const result = {
|
|
237
|
+
messageId: message._key,
|
|
238
|
+
revision,
|
|
239
|
+
sequence: message.sequence
|
|
240
|
+
};
|
|
241
|
+
if (await request.save(result) !== true) {
|
|
242
|
+
throw new ChatError('unavailable');
|
|
243
|
+
}
|
|
244
|
+
return result;
|
|
245
|
+
});
|
|
246
|
+
return {
|
|
247
|
+
authorize,
|
|
248
|
+
deleteMessage: (input)=>mutateMessage(input, true),
|
|
249
|
+
editMessage: (input)=>mutateMessage(input, false),
|
|
250
|
+
rateLimit,
|
|
251
|
+
receipt,
|
|
252
|
+
run,
|
|
253
|
+
sendMessage
|
|
254
|
+
};
|
|
255
|
+
};
|
|
256
|
+
|
|
257
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50Ly5jb2RleC13b3JrdHJlZXMvcmVha3Rvci1waGFudGF6ZS1jaGF0L3BhY2thZ2VzL3JlYWt0b3Ivc3JjL2R1cmFibGVDaGF0L21lc3NhZ2VzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLWF3YWl0LWluLWxvb3AsIG5vLXVuZGVyc2NvcmUtZGFuZ2xlIC0tIE9yZGVyZWQgY2hlY2tzIGFuZCBBcmFuZ28gZG9jdW1lbnQgaWRlbnRpdGllcy4gKi9cbmltcG9ydCB7Y3JlYXRlSGFzaCwgcmFuZG9tVVVJRH0gZnJvbSAnbm9kZTpjcnlwdG8nO1xuXG5pbXBvcnQge0NoYXRFcnJvcn0gZnJvbSAnLi9lcnJvcnMuanMnO1xuaW1wb3J0IHtpc0NoYXRJZGVudGlmaWVyfSBmcm9tICcuL21lbWJlcnNoaXAuanMnO1xuXG5pbXBvcnQgdHlwZSB7Q2hhdFF1ZXJ5fSBmcm9tICcuL21lbWJlcnNoaXAuanMnO1xuaW1wb3J0IHR5cGUge1xuICBEdXJhYmxlQ2hhdEF0dGFjaG1lbnQsIER1cmFibGVDaGF0TWVzc2FnZSwgRHVyYWJsZURlbGV0ZU1lc3NhZ2VJbnB1dCwgRHVyYWJsZUVkaXRNZXNzYWdlSW5wdXQsXG4gIER1cmFibGVNZXNzYWdlQWNrbm93bGVkZ2VtZW50LCBEdXJhYmxlTWVzc2FnZUhvb2tzLCBEdXJhYmxlTWVzc2FnZU11dGF0aW9uUmVzdWx0LCBEdXJhYmxlU2VuZE1lc3NhZ2VJbnB1dFxufSBmcm9tICcuL21lc3NhZ2VUeXBlcy5qcyc7XG5cbmNvbnN0IGRlZmF1bHRIYXNoID0gKHZhbHVlOiB1bmtub3duKTogc3RyaW5nID0+IGNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZShKU09OLnN0cmluZ2lmeSh2YWx1ZSkpLmRpZ2VzdCgnaGV4Jyk7XG5jb25zdCB2YWxpZFRleHQgPSAoY29udGVudDogdW5rbm93bik6IGNvbnRlbnQgaXMgc3RyaW5nID0+IHR5cGVvZiBjb250ZW50ID09PSAnc3RyaW5nJ1xuICAmJiBBcnJheS5mcm9tKGNvbnRlbnQpLmxlbmd0aCA8PSA0MDAwXG4gICYmICEvW1xcdTAwMDBcXHVEODAwLVxcdURCRkZdKD8hW1xcdURDMDAtXFx1REZGRl0pfCg/PCFbXFx1RDgwMC1cXHVEQkZGXSlbXFx1REMwMC1cXHVERkZGXS91LnRlc3QoY29udGVudCk7XG5jb25zdCByZXF1aXJlVmFsaWQgPSAodmFsaWQ6IGJvb2xlYW4pOiB2b2lkID0+IHtcbiAgaWYoIXZhbGlkKSB7XG4gICAgdGhyb3cgbmV3IENoYXRFcnJvcignaW52YWxpZF9yZXF1ZXN0Jyk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCByZWFkRHVyYWJsZU1lc3NhZ2UgPSBhc3luYyA8VERlY2lzaW9uPihcbiAgcmVhZDogQ2hhdFF1ZXJ5LCBjb252ZXJzYXRpb25JZDogc3RyaW5nLCBtZXNzYWdlSWQ6IHN0cmluZ1xuKTogUHJvbWlzZTxEdXJhYmxlQ2hhdE1lc3NhZ2U8VERlY2lzaW9uPj4gPT4ge1xuICBjb25zdCBtZXNzYWdlID0gYXdhaXQgcmVhZDxEdXJhYmxlQ2hhdE1lc3NhZ2U8VERlY2lzaW9uPj4oJ1JFVFVSTiBET0NVTUVOVChcIm1lc3NhZ2VzXCIsIEBtZXNzYWdlSWQpJywge21lc3NhZ2VJZH0pO1xuICBpZighbWVzc2FnZSB8fCBtZXNzYWdlLmNvbnZlcnNhdGlvbklkICE9PSBjb252ZXJzYXRpb25JZCB8fCBtZXNzYWdlLmNoYXRTY2hlbWFWZXJzaW9uICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IENoYXRFcnJvcignZm9yYmlkZGVuJyk7XG4gIH1cbiAgcmV0dXJuIG1lc3NhZ2U7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlRHVyYWJsZU1lc3NhZ2VQZXJzaXN0ZW5jZSA9IDxURGVjaXNpb24+KGhvb2tzOiBEdXJhYmxlTWVzc2FnZUhvb2tzPFREZWNpc2lvbj4pID0+IHtcbiAgY29uc3QgaGFzaCA9IGhvb2tzLmhhc2ggfHwgZGVmYXVsdEhhc2g7XG4gIGNvbnN0IG5vdyA9IGhvb2tzLm5vdyB8fCBEYXRlLm5vdztcbiAgY29uc3QgdXVpZCA9IGhvb2tzLnV1aWQgfHwgcmFuZG9tVVVJRDtcbiAgY29uc3QgYXV0aG9yaXplID0gYXN5bmMgKHJlYWQ6IENoYXRRdWVyeSwgY29udmVyc2F0aW9uSWQ6IHN0cmluZywgcHVycG9zZTogJ2hpc3RvcnknIHwgJ3NlbmQnID0gJ2hpc3RvcnknKSA9PiB7XG4gICAgY29uc3QgbWVtYmVyc2hpcCA9IGF3YWl0IGhvb2tzLmF1dGhvcml6ZU1lbWJlcnNoaXAocmVhZCwgaG9va3MuaWRlbnRpdHksIGNvbnZlcnNhdGlvbklkLCBwdXJwb3NlKTtcbiAgICBjb25zdCBsZWdhY3kgPSBhd2FpdCByZWFkPGJvb2xlYW4+KGBSRVRVUk4gRklSU1QoRk9SIG1lc3NhZ2UgSU4gbWVzc2FnZXNcbiAgICAgIEZJTFRFUiBtZXNzYWdlLmNvbnZlcnNhdGlvbklkID09IEBjb252ZXJzYXRpb25JZFxuICAgICAgICBBTkQgKG1lc3NhZ2UuY2hhdFNjaGVtYVZlcnNpb24gIT0gMSBPUiAhSVNfTlVNQkVSKG1lc3NhZ2Uuc2VxdWVuY2UpIE9SIG1lc3NhZ2Uuc2VxdWVuY2UgPCAxKVxuICAgICAgTElNSVQgMSBSRVRVUk4gdHJ1ZSlgLCB7Y29udmVyc2F0aW9uSWR9KTtcbiAgICBpZihsZWdhY3kgPT09IHRydWUpIHtcbiAgICAgIHRocm93IG5ldyBDaGF0RXJyb3IoJ2NvbmZsaWN0Jyk7XG4gICAgfVxuICAgIHJldHVybiBtZW1iZXJzaGlwO1xuICB9O1xuICBjb25zdCByZWNlaXB0ID0gYXN5bmMgPFQ+KFxuICAgIHJlYWQ6IENoYXRRdWVyeSwgYWN0aW9uOiBzdHJpbmcsIGNvbnZlcnNhdGlvbklkOiBzdHJpbmcsIGtleTogc3RyaW5nLCBwYXlsb2FkOiB1bmtub3duXG4gICkgPT4ge1xuICAgIGNvbnN0IHJlcXVlc3RJZCA9IGhhc2goW2FjdGlvbiwgY29udmVyc2F0aW9uSWQsIGhvb2tzLmlkZW50aXR5LnBlcnNvbmFJZCwga2V5XSk7XG4gICAgY29uc3QgcGF5bG9hZEhhc2ggPSBoYXNoKHBheWxvYWQpO1xuICAgIGNvbnN0IHJlY29yZCA9IGF3YWl0IHJlYWQ8e3JlYWRvbmx5IHBheWxvYWRIYXNoOiBzdHJpbmc7IHJlYWRvbmx5IHJlc3VsdDogVDsgcmVhZG9ubHkgdXNlcklkOiBzdHJpbmd9PihcbiAgICAgICdSRVRVUk4gRE9DVU1FTlQoXCJjaGF0TWVzc2FnZVJlcXVlc3RzXCIsIEBrZXkpJywge2tleTogcmVxdWVzdElkfSk7XG4gICAgaWYocmVjb3JkICYmIChyZWNvcmQucGF5bG9hZEhhc2ggIT09IHBheWxvYWRIYXNoIHx8IHJlY29yZC51c2VySWQgIT09IGhvb2tzLmlkZW50aXR5LnVzZXJJZCkpIHtcbiAgICAgIHRocm93IG5ldyBDaGF0RXJyb3IoJ2NvbmZsaWN0Jyk7XG4gICAgfVxuICAgIHJldHVybiB7cHJpb3I6IHJlY29yZD8ucmVzdWx0LCBzYXZlOiAocmVzdWx0OiBUKSA9PiByZWFkPGJvb2xlYW4+KFxuICAgICAgJ0lOU0VSVCBAcmVjb3JkIElOIGNoYXRNZXNzYWdlUmVxdWVzdHMgUkVUVVJOIHRydWUnLCB7cmVjb3JkOiB7X2tleTogcmVxdWVzdElkLCBhZGRlZDogbm93KCksIGNvbnZlcnNhdGlvbklkLFxuICAgICAgICBwYXlsb2FkSGFzaCwgcGVyc29uYUlkOiBob29rcy5pZGVudGl0eS5wZXJzb25hSWQsIHJlc3VsdCwgdXNlcklkOiBob29rcy5pZGVudGl0eS51c2VySWR9fSl9O1xuICB9O1xuICBjb25zdCByYXRlTGltaXQgPSBhc3luYyAocmVhZDogQ2hhdFF1ZXJ5LCBhY3Rpb246IHN0cmluZywgbGltaXQ6IG51bWJlciwgaW50ZXJ2YWwgPSA2MDAwMCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgIGNvbnN0IGtleSA9IGhhc2goW2hvb2tzLmlkZW50aXR5LnVzZXJJZCwgaG9va3MuaWRlbnRpdHkucGVyc29uYUlkLCBhY3Rpb24sIE1hdGguZmxvb3Iobm93KCkgLyBpbnRlcnZhbCldKTtcbiAgICBjb25zdCBhbGxvd2VkID0gYXdhaXQgcmVhZDxib29sZWFuPihgTEVUIGJ1Y2tldCA9IERPQ1VNRU5UKCdjaGF0UmF0ZUxpbWl0cycsIEBrZXkpXG4gICAgICBGSUxURVIgYnVja2V0ID09IG51bGwgT1IgYnVja2V0LmNvdW50IDwgQGxpbWl0XG4gICAgICBVUFNFUlQge19rZXk6IEBrZXl9IElOU0VSVCB7X2tleTogQGtleSwgY291bnQ6IDEsIHBlcnNvbmFJZDogQHBlcnNvbmFJZCwgdXNlcklkOiBAdXNlcklkfVxuICAgICAgVVBEQVRFIHtjb3VudDogT0xELmNvdW50ICsgMSwgcGVyc29uYUlkOiBAcGVyc29uYUlkLCB1c2VySWQ6IEB1c2VySWR9XG4gICAgICBJTiBjaGF0UmF0ZUxpbWl0cyBSRVRVUk4gdHJ1ZWAsIHtrZXksIGxpbWl0LCBwZXJzb25hSWQ6IGhvb2tzLmlkZW50aXR5LnBlcnNvbmFJZCwgdXNlcklkOiBob29rcy5pZGVudGl0eS51c2VySWR9KTtcbiAgICBpZihhbGxvd2VkICE9PSB0cnVlKSB7XG4gICAgICB0aHJvdyBuZXcgQ2hhdEVycm9yKCdyYXRlX2xpbWl0ZWQnKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IHJ1biA9IDxUPihvcGVyYXRpb246IChyZWFkOiBDaGF0UXVlcnkpID0+IFByb21pc2U8VD4sIHdyaXRlID0gdHJ1ZSk6IFByb21pc2U8VD4gPT4gaG9va3MucnVuKGFzeW5jIChyZWFkKSA9PiB7XG4gICAgYXdhaXQgaG9va3MuYXV0aG9yaXplSWRlbnRpdHkocmVhZCwgaG9va3MuaWRlbnRpdHkpO1xuICAgIHJldHVybiBvcGVyYXRpb24ocmVhZCk7XG4gIH0sIHdyaXRlKTtcbiAgY29uc3Qgc2VuZE1lc3NhZ2UgPSAoaW5wdXQ6IER1cmFibGVTZW5kTWVzc2FnZUlucHV0KTogUHJvbWlzZTxEdXJhYmxlTWVzc2FnZUFja25vd2xlZGdlbWVudD4gPT4gcnVuKGFzeW5jIChyZWFkKSA9PiB7XG4gICAgcmVxdWlyZVZhbGlkKEJvb2xlYW4oaW5wdXQpICYmIGlzQ2hhdElkZW50aWZpZXIoaW5wdXQuY29udmVyc2F0aW9uSWQpICYmIGlzQ2hhdElkZW50aWZpZXIoaW5wdXQuY2xpZW50TWVzc2FnZUlkKVxuICAgICAgJiYgaW5wdXQuc2VuZGVyUGVyc29uYUlkID09PSBob29rcy5pZGVudGl0eS5wZXJzb25hSWQgJiYgdmFsaWRUZXh0KGlucHV0LmNvbnRlbnQpXG4gICAgICAmJiBBcnJheS5pc0FycmF5KGlucHV0LmF0dGFjaG1lbnRJZHMpICYmIGlucHV0LmF0dGFjaG1lbnRJZHMubGVuZ3RoIDw9IDRcbiAgICAgICYmIGlucHV0LmF0dGFjaG1lbnRJZHMuZXZlcnkoaXNDaGF0SWRlbnRpZmllcikgJiYgbmV3IFNldChpbnB1dC5hdHRhY2htZW50SWRzKS5zaXplID09PSBpbnB1dC5hdHRhY2htZW50SWRzLmxlbmd0aFxuICAgICAgJiYgKGlucHV0LmNvbnRlbnQudHJpbSgpLmxlbmd0aCA+IDAgfHwgaW5wdXQuYXR0YWNobWVudElkcy5sZW5ndGggPiAwKVxuICAgICAgJiYgKGlucHV0LnJlcGx5VG9NZXNzYWdlSWQgPT09IHVuZGVmaW5lZCB8fCBpc0NoYXRJZGVudGlmaWVyKGlucHV0LnJlcGx5VG9NZXNzYWdlSWQpKSk7XG4gICAgY29uc3QgcmVxdWVzdCA9IGF3YWl0IHJlY2VpcHQ8RHVyYWJsZU1lc3NhZ2VBY2tub3dsZWRnZW1lbnQ+KFxuICAgICAgcmVhZCwgJ3NlbmQnLCBpbnB1dC5jb252ZXJzYXRpb25JZCwgaW5wdXQuY2xpZW50TWVzc2FnZUlkLCBpbnB1dCk7XG4gICAgaWYocmVxdWVzdC5wcmlvcikge1xuICAgICAgcmV0dXJuIHJlcXVlc3QucHJpb3I7XG4gICAgfVxuICAgIGNvbnN0IG1lbWJlcnNoaXAgPSBhd2FpdCBhdXRob3JpemUocmVhZCwgaW5wdXQuY29udmVyc2F0aW9uSWQsICdzZW5kJyk7XG4gICAgYXdhaXQgcmF0ZUxpbWl0KHJlYWQsICdzZW5kJywgNjApO1xuICAgIGNvbnN0IGF0dGFjaG1lbnRzOiBEdXJhYmxlQ2hhdEF0dGFjaG1lbnRbXSA9IFtdO1xuICAgIGZvcihjb25zdCBpbWFnZUlkIG9mIGlucHV0LmF0dGFjaG1lbnRJZHMpIHtcbiAgICAgIGF0dGFjaG1lbnRzLnB1c2goYXdhaXQgaG9va3MuYXV0aG9yaXplQXR0YWNobWVudChyZWFkLCBpbWFnZUlkKSk7XG4gICAgfVxuICAgIGlmKGlucHV0LnJlcGx5VG9NZXNzYWdlSWQpIHtcbiAgICAgIGNvbnN0IHF1b3RlZCA9IGF3YWl0IHJlYWREdXJhYmxlTWVzc2FnZTxURGVjaXNpb24+KHJlYWQsIGlucHV0LmNvbnZlcnNhdGlvbklkLCBpbnB1dC5yZXBseVRvTWVzc2FnZUlkKTtcbiAgICAgIGF3YWl0IGhvb2tzLmF1dGhvcml6ZU1lc3NhZ2VWaXNpYmxlKHJlYWQsIGhvb2tzLmlkZW50aXR5LCBxdW90ZWQsIG1lbWJlcnNoaXApO1xuICAgICAgaWYocXVvdGVkLmRlbGV0ZWQgfHwgcXVvdGVkLm1vYmlsZVBsYXRmb3JtRGlzcG9zaXRpb24gIT09ICdhbGxvd2VkJykge1xuICAgICAgICB0aHJvdyBuZXcgQ2hhdEVycm9yKCdmb3JiaWRkZW4nKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgdGltZXN0YW1wID0gbm93KCk7XG4gICAgY29uc3Qgc2VxdWVuY2UgPSBhd2FpdCByZWFkPG51bWJlcj4oYEZPUiBjb252ZXJzYXRpb24gSU4gY29udmVyc2F0aW9ucyBGSUxURVIgY29udmVyc2F0aW9uLl9rZXkgPT0gQGlkXG4gICAgICBBTkQgY29udmVyc2F0aW9uLmNoYXRTY2hlbWFWZXJzaW9uID09IDEgQU5EIGNvbnZlcnNhdGlvbi5zdGF0ZSA9PSAnYWN0aXZlJ1xuICAgICAgQU5EIElTX05VTUJFUihjb252ZXJzYXRpb24ubGFzdFNlcXVlbmNlKSBBTkQgY29udmVyc2F0aW9uLmxhc3RTZXF1ZW5jZSA8IDkwMDcxOTkyNTQ3NDA5OTFcbiAgICAgIFVQREFURSBjb252ZXJzYXRpb24gV0lUSCB7bGFzdFNlcXVlbmNlOiBjb252ZXJzYXRpb24ubGFzdFNlcXVlbmNlICsgMSwgbW9kaWZpZWQ6IEBub3d9XG4gICAgICBJTiBjb252ZXJzYXRpb25zIFJFVFVSTiBORVcubGFzdFNlcXVlbmNlYCwge2lkOiBpbnB1dC5jb252ZXJzYXRpb25JZCwgbm93OiB0aW1lc3RhbXB9KTtcbiAgICBpZighTnVtYmVyLmlzU2FmZUludGVnZXIoc2VxdWVuY2UpIHx8IE51bWJlcihzZXF1ZW5jZSkgPCAxKSB7XG4gICAgICB0aHJvdyBuZXcgQ2hhdEVycm9yKCd1bmF2YWlsYWJsZScpO1xuICAgIH1cbiAgICBjb25zdCBtZXNzYWdlSWQgPSB1dWlkKCk7XG4gICAgY29uc3QgY29udGVudFZlcnNpb24gPSBoYXNoKFttZXNzYWdlSWQsIDEsIGlucHV0LmNvbnRlbnRdKTtcbiAgICBjb25zdCBwcm9qZWN0aW9uID0gYXdhaXQgaG9va3MuY2xhc3NpZnlDb250ZW50KHtjb250ZW50OiBpbnB1dC5jb250ZW50IHx8ICcgJywgY29udGVudFZlcnNpb259KTtcbiAgICBjb25zdCByZWNvcmQ6IER1cmFibGVDaGF0TWVzc2FnZTxURGVjaXNpb24+ID0ge19rZXk6IG1lc3NhZ2VJZCwgYWRkZWQ6IHRpbWVzdGFtcCxcbiAgICAgIGF0dGFjaG1lbnRJZHM6IGlucHV0LmF0dGFjaG1lbnRJZHMsIGF0dGFjaG1lbnRzLCBjaGF0U2NoZW1hVmVyc2lvbjogMSwgY2xpZW50TWVzc2FnZUlkOiBpbnB1dC5jbGllbnRNZXNzYWdlSWQsXG4gICAgICBjb250ZW50OiBpbnB1dC5jb250ZW50LCBjb250ZW50UmV2aXNpb246IDEsIGNvbnZlcnNhdGlvbklkOiBpbnB1dC5jb252ZXJzYXRpb25JZCwgZGVsZXRlZDogZmFsc2UsXG4gICAgICBtb2JpbGVDb250ZW50VmVyc2lvbjogY29udGVudFZlcnNpb24sIG1vYmlsZURlY2lzaW9uOiBwcm9qZWN0aW9uLmRlY2lzaW9uLFxuICAgICAgbW9iaWxlUGxhdGZvcm1EaXNwb3NpdGlvbjogcHJvamVjdGlvbi5wbGF0Zm9ybURpc3Bvc2l0aW9uIHx8ICdhbGxvd2VkJywgbW9kaWZpZWQ6IHRpbWVzdGFtcCxcbiAgICAgIHJlcGx5VG9NZXNzYWdlSWQ6IGlucHV0LnJlcGx5VG9NZXNzYWdlSWQsIHJldmlzaW9uOiAxLCBzZW5kZXJQZXJzb25hSWQ6IGhvb2tzLmlkZW50aXR5LnBlcnNvbmFJZCxcbiAgICAgIHNlcXVlbmNlOiBzZXF1ZW5jZSEsIHVzZXJJZDogaG9va3MuaWRlbnRpdHkudXNlcklkfTtcbiAgICBpZihhd2FpdCByZWFkPGJvb2xlYW4+KCdJTlNFUlQgQHJlY29yZCBJTiBtZXNzYWdlcyBSRVRVUk4gdHJ1ZScsIHtyZWNvcmR9KSAhPT0gdHJ1ZSkge1xuICAgICAgdGhyb3cgbmV3IENoYXRFcnJvcigndW5hdmFpbGFibGUnKTtcbiAgICB9XG4gICAgYXdhaXQgaG9va3MuYXBwZW5kRXZlbnQocmVhZCwge2FjdG9yUGVyc29uYUlkOiBob29rcy5pZGVudGl0eS5wZXJzb25hSWQsIGNvbnZlcnNhdGlvbklkOiBpbnB1dC5jb252ZXJzYXRpb25JZCxcbiAgICAgIGtpbmQ6ICdtZXNzYWdlLmNoYW5nZWQnLCBtZW1iZXJzaGlwRXBvY2g6IG1lbWJlcnNoaXAuZXBvY2gsIHJlc291cmNlSWQ6IG1lc3NhZ2VJZCwgcmV2aXNpb246IDF9KTtcbiAgICBjb25zdCByZXN1bHQgPSB7Y2xpZW50TWVzc2FnZUlkOiBpbnB1dC5jbGllbnRNZXNzYWdlSWQsIG1lc3NhZ2VJZCwgcmV2aXNpb246IDEsIHNlcXVlbmNlOiBzZXF1ZW5jZSF9O1xuICAgIGlmKGF3YWl0IHJlcXVlc3Quc2F2ZShyZXN1bHQpICE9PSB0cnVlKSB7XG4gICAgICB0aHJvdyBuZXcgQ2hhdEVycm9yKCd1bmF2YWlsYWJsZScpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9KTtcbiAgY29uc3QgbXV0YXRlTWVzc2FnZSA9IChcbiAgICBpbnB1dDogRHVyYWJsZUVkaXRNZXNzYWdlSW5wdXQgfCBEdXJhYmxlRGVsZXRlTWVzc2FnZUlucHV0LCByZW1vdmU6IGJvb2xlYW5cbiAgKTogUHJvbWlzZTxEdXJhYmxlTWVzc2FnZU11dGF0aW9uUmVzdWx0PiA9PiBydW4oYXN5bmMgKHJlYWQpID0+IHtcbiAgICByZXF1aXJlVmFsaWQoQm9vbGVhbihpbnB1dCkgJiYgaXNDaGF0SWRlbnRpZmllcihpbnB1dC5jb252ZXJzYXRpb25JZCkgJiYgaXNDaGF0SWRlbnRpZmllcihpbnB1dC5tZXNzYWdlSWQpXG4gICAgICAmJiBpc0NoYXRJZGVudGlmaWVyKGlucHV0LmlkZW1wb3RlbmN5S2V5KSAmJiBOdW1iZXIuaXNTYWZlSW50ZWdlcihpbnB1dC5leHBlY3RlZFJldmlzaW9uKVxuICAgICAgJiYgaW5wdXQuZXhwZWN0ZWRSZXZpc2lvbiA+PSAxICYmIChyZW1vdmUgfHwgKCdjb250ZW50JyBpbiBpbnB1dCAmJiB2YWxpZFRleHQoaW5wdXQuY29udGVudCkpKSk7XG4gICAgY29uc3QgcmVxdWVzdCA9IGF3YWl0IHJlY2VpcHQ8RHVyYWJsZU1lc3NhZ2VNdXRhdGlvblJlc3VsdD4ocmVhZCwgcmVtb3ZlID8gJ2RlbGV0ZScgOiAnZWRpdCcsXG4gICAgICBpbnB1dC5jb252ZXJzYXRpb25JZCwgaW5wdXQuaWRlbXBvdGVuY3lLZXksIGlucHV0KTtcbiAgICBpZihyZXF1ZXN0LnByaW9yKSB7XG4gICAgICByZXR1cm4gcmVxdWVzdC5wcmlvcjtcbiAgICB9XG4gICAgY29uc3QgbWVtYmVyc2hpcCA9IGF3YWl0IGF1dGhvcml6ZShyZWFkLCBpbnB1dC5jb252ZXJzYXRpb25JZCwgJ3NlbmQnKTtcbiAgICBjb25zdCBtZXNzYWdlID0gYXdhaXQgcmVhZER1cmFibGVNZXNzYWdlPFREZWNpc2lvbj4ocmVhZCwgaW5wdXQuY29udmVyc2F0aW9uSWQsIGlucHV0Lm1lc3NhZ2VJZCk7XG4gICAgaWYobWVzc2FnZS5zZW5kZXJQZXJzb25hSWQgIT09IGhvb2tzLmlkZW50aXR5LnBlcnNvbmFJZCB8fCBtZXNzYWdlLnVzZXJJZCAhPT0gaG9va3MuaWRlbnRpdHkudXNlcklkXG4gICAgICB8fCBtZXNzYWdlLnNlcXVlbmNlIDwgbWVtYmVyc2hpcC5qb2luU2VxdWVuY2UgfHwgbWVzc2FnZS5kZWxldGVkIHx8IG1lc3NhZ2UubW9iaWxlUGxhdGZvcm1EaXNwb3NpdGlvbiAhPT0gJ2FsbG93ZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgQ2hhdEVycm9yKCdmb3JiaWRkZW4nKTtcbiAgICB9XG4gICAgaWYobWVzc2FnZS5yZXZpc2lvbiAhPT0gaW5wdXQuZXhwZWN0ZWRSZXZpc2lvbiB8fCAoIXJlbW92ZSAmJiBub3coKSAtIG1lc3NhZ2UuYWRkZWQgPiAxNSAqIDYwMDAwKSkge1xuICAgICAgdGhyb3cgbmV3IENoYXRFcnJvcignY29uZmxpY3QnKTtcbiAgICB9XG4gICAgYXdhaXQgcmF0ZUxpbWl0KHJlYWQsIHJlbW92ZSA/ICdkZWxldGUnIDogJ2VkaXQnLCA2MCk7XG4gICAgY29uc3QgY29udGVudCA9ICFyZW1vdmUgJiYgJ2NvbnRlbnQnIGluIGlucHV0ID8gaW5wdXQuY29udGVudCA6ICcnO1xuICAgIGNvbnN0IHJldmlzaW9uID0gbWVzc2FnZS5yZXZpc2lvbiArIDE7XG4gICAgY29uc3QgY29udGVudFJldmlzaW9uID0gbWVzc2FnZS5jb250ZW50UmV2aXNpb24gKyAxO1xuICAgIGNvbnN0IGNvbnRlbnRWZXJzaW9uID0gaGFzaChbbWVzc2FnZS5fa2V5LCBjb250ZW50UmV2aXNpb24sIGNvbnRlbnRdKTtcbiAgICBjb25zdCBwcm9qZWN0aW9uID0gYXdhaXQgaG9va3MuY2xhc3NpZnlDb250ZW50KHtjb250ZW50OiBjb250ZW50IHx8ICcgJywgY29udGVudFZlcnNpb259KTtcbiAgICBjb25zdCB1cGRhdGVkID0gYXdhaXQgcmVhZDxib29sZWFuPihgRk9SIGN1cnJlbnQgSU4gbWVzc2FnZXNcbiAgICAgIEZJTFRFUiBjdXJyZW50Ll9rZXkgPT0gQGlkIEFORCBjdXJyZW50LnJldmlzaW9uID09IEBleHBlY3RlZFJldmlzaW9uXG4gICAgICBVUERBVEUgY3VycmVudCBXSVRIIHtjb250ZW50OiBAY29udGVudCwgY29udGVudFJldmlzaW9uOiBAY29udGVudFJldmlzaW9uLCBkZWxldGVkOiBAZGVsZXRlZCxcbiAgICAgICAgYXR0YWNobWVudElkczogQGF0dGFjaG1lbnRJZHMsIGF0dGFjaG1lbnRzOiBAYXR0YWNobWVudHMsIHJlcGx5VG9NZXNzYWdlSWQ6IEByZXBseSxcbiAgICAgICAgbW9iaWxlQ29udGVudFZlcnNpb246IEBjb250ZW50VmVyc2lvbiwgbW9iaWxlRGVjaXNpb246IEBkZWNpc2lvbixcbiAgICAgICAgbW9iaWxlUGxhdGZvcm1EaXNwb3NpdGlvbjogQHBsYXRmb3JtRGlzcG9zaXRpb24sIG1vZGlmaWVkOiBAbm93LCByZXZpc2lvbjogQHJldmlzaW9ufVxuICAgICAgSU4gbWVzc2FnZXMgUkVUVVJOIHRydWVgLCB7YXR0YWNobWVudElkczogcmVtb3ZlID8gW10gOiBtZXNzYWdlLmF0dGFjaG1lbnRJZHMsXG4gICAgICBhdHRhY2htZW50czogcmVtb3ZlID8gW10gOiBtZXNzYWdlLmF0dGFjaG1lbnRzLCBjb250ZW50LCBjb250ZW50UmV2aXNpb24sIGNvbnRlbnRWZXJzaW9uLFxuICAgICAgZGVjaXNpb246IHByb2plY3Rpb24uZGVjaXNpb24sIGRlbGV0ZWQ6IHJlbW92ZSwgZXhwZWN0ZWRSZXZpc2lvbjogaW5wdXQuZXhwZWN0ZWRSZXZpc2lvbiwgaWQ6IG1lc3NhZ2UuX2tleSxcbiAgICAgIG5vdzogbm93KCksIHBsYXRmb3JtRGlzcG9zaXRpb246IHByb2plY3Rpb24ucGxhdGZvcm1EaXNwb3NpdGlvbiB8fCAnYWxsb3dlZCcsXG4gICAgICByZXBseTogcmVtb3ZlID8gbnVsbCA6IG1lc3NhZ2UucmVwbHlUb01lc3NhZ2VJZCB8fCBudWxsLCByZXZpc2lvbn0pO1xuICAgIGlmKHVwZGF0ZWQgIT09IHRydWUpIHtcbiAgICAgIHRocm93IG5ldyBDaGF0RXJyb3IoJ2NvbmZsaWN0Jyk7XG4gICAgfVxuICAgIGF3YWl0IGhvb2tzLmFwcGVuZEV2ZW50KHJlYWQsIHthY3RvclBlcnNvbmFJZDogaG9va3MuaWRlbnRpdHkucGVyc29uYUlkLCBjb252ZXJzYXRpb25JZDogaW5wdXQuY29udmVyc2F0aW9uSWQsXG4gICAgICBraW5kOiAnbWVzc2FnZS5jaGFuZ2VkJywgbWVtYmVyc2hpcEVwb2NoOiBtZW1iZXJzaGlwLmVwb2NoLCByZXNvdXJjZUlkOiBtZXNzYWdlLl9rZXksIHJldmlzaW9ufSk7XG4gICAgY29uc3QgcmVzdWx0ID0ge21lc3NhZ2VJZDogbWVzc2FnZS5fa2V5LCByZXZpc2lvbiwgc2VxdWVuY2U6IG1lc3NhZ2Uuc2VxdWVuY2V9O1xuICAgIGlmKGF3YWl0IHJlcXVlc3Quc2F2ZShyZXN1bHQpICE9PSB0cnVlKSB7XG4gICAgICB0aHJvdyBuZXcgQ2hhdEVycm9yKCd1bmF2YWlsYWJsZScpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9KTtcbiAgcmV0dXJuIHthdXRob3JpemUsIGRlbGV0ZU1lc3NhZ2U6IChpbnB1dDogRHVyYWJsZURlbGV0ZU1lc3NhZ2VJbnB1dCkgPT4gbXV0YXRlTWVzc2FnZShpbnB1dCwgdHJ1ZSksXG4gICAgZWRpdE1lc3NhZ2U6IChpbnB1dDogRHVyYWJsZUVkaXRNZXNzYWdlSW5wdXQpID0+IG11dGF0ZU1lc3NhZ2UoaW5wdXQsIGZhbHNlKSwgcmF0ZUxpbWl0LCByZWNlaXB0LCBydW4sIHNlbmRNZXNzYWdlfTtcbn07XG5cbmV4cG9ydCB0eXBlIER1cmFibGVNZXNzYWdlUGVyc2lzdGVuY2U8VERlY2lzaW9uID0gdW5rbm93bj4gPVxuICBSZXR1cm5UeXBlPHR5cGVvZiBjcmVhdGVEdXJhYmxlTWVzc2FnZVBlcnNpc3RlbmNlPFREZWNpc2lvbj4+O1xuIl0sIm5hbWVzIjpbImNyZWF0ZUhhc2giLCJyYW5kb21VVUlEIiwiQ2hhdEVycm9yIiwiaXNDaGF0SWRlbnRpZmllciIsImRlZmF1bHRIYXNoIiwidmFsdWUiLCJ1cGRhdGUiLCJKU09OIiwic3RyaW5naWZ5IiwiZGlnZXN0IiwidmFsaWRUZXh0IiwiY29udGVudCIsIkFycmF5IiwiZnJvbSIsImxlbmd0aCIsInRlc3QiLCJyZXF1aXJlVmFsaWQiLCJ2YWxpZCIsInJlYWREdXJhYmxlTWVzc2FnZSIsInJlYWQiLCJjb252ZXJzYXRpb25JZCIsIm1lc3NhZ2VJZCIsIm1lc3NhZ2UiLCJjaGF0U2NoZW1hVmVyc2lvbiIsImNyZWF0ZUR1cmFibGVNZXNzYWdlUGVyc2lzdGVuY2UiLCJob29rcyIsImhhc2giLCJub3ciLCJEYXRlIiwidXVpZCIsImF1dGhvcml6ZSIsInB1cnBvc2UiLCJtZW1iZXJzaGlwIiwiYXV0aG9yaXplTWVtYmVyc2hpcCIsImlkZW50aXR5IiwibGVnYWN5IiwicmVjZWlwdCIsImFjdGlvbiIsImtleSIsInBheWxvYWQiLCJyZXF1ZXN0SWQiLCJwZXJzb25hSWQiLCJwYXlsb2FkSGFzaCIsInJlY29yZCIsInVzZXJJZCIsInByaW9yIiwicmVzdWx0Iiwic2F2ZSIsIl9rZXkiLCJhZGRlZCIsInJhdGVMaW1pdCIsImxpbWl0IiwiaW50ZXJ2YWwiLCJNYXRoIiwiZmxvb3IiLCJhbGxvd2VkIiwicnVuIiwib3BlcmF0aW9uIiwid3JpdGUiLCJhdXRob3JpemVJZGVudGl0eSIsInNlbmRNZXNzYWdlIiwiaW5wdXQiLCJCb29sZWFuIiwiY2xpZW50TWVzc2FnZUlkIiwic2VuZGVyUGVyc29uYUlkIiwiaXNBcnJheSIsImF0dGFjaG1lbnRJZHMiLCJldmVyeSIsIlNldCIsInNpemUiLCJ0cmltIiwicmVwbHlUb01lc3NhZ2VJZCIsInVuZGVmaW5lZCIsInJlcXVlc3QiLCJhdHRhY2htZW50cyIsImltYWdlSWQiLCJwdXNoIiwiYXV0aG9yaXplQXR0YWNobWVudCIsInF1b3RlZCIsImF1dGhvcml6ZU1lc3NhZ2VWaXNpYmxlIiwiZGVsZXRlZCIsIm1vYmlsZVBsYXRmb3JtRGlzcG9zaXRpb24iLCJ0aW1lc3RhbXAiLCJzZXF1ZW5jZSIsImlkIiwiTnVtYmVyIiwiaXNTYWZlSW50ZWdlciIsImNvbnRlbnRWZXJzaW9uIiwicHJvamVjdGlvbiIsImNsYXNzaWZ5Q29udGVudCIsImNvbnRlbnRSZXZpc2lvbiIsIm1vYmlsZUNvbnRlbnRWZXJzaW9uIiwibW9iaWxlRGVjaXNpb24iLCJkZWNpc2lvbiIsInBsYXRmb3JtRGlzcG9zaXRpb24iLCJtb2RpZmllZCIsInJldmlzaW9uIiwiYXBwZW5kRXZlbnQiLCJhY3RvclBlcnNvbmFJZCIsImtpbmQiLCJtZW1iZXJzaGlwRXBvY2giLCJlcG9jaCIsInJlc291cmNlSWQiLCJtdXRhdGVNZXNzYWdlIiwicmVtb3ZlIiwiaWRlbXBvdGVuY3lLZXkiLCJleHBlY3RlZFJldmlzaW9uIiwiam9pblNlcXVlbmNlIiwidXBkYXRlZCIsInJlcGx5IiwiZGVsZXRlTWVzc2FnZSIsImVkaXRNZXNzYWdlIl0sIm1hcHBpbmdzIjoiQUFBQSwyR0FBMkcsR0FDM0csU0FBUUEsVUFBVSxFQUFFQyxVQUFVLFFBQU8sY0FBYztBQUVuRCxTQUFRQyxTQUFTLFFBQU8sY0FBYztBQUN0QyxTQUFRQyxnQkFBZ0IsUUFBTyxrQkFBa0I7QUFRakQsTUFBTUMsY0FBYyxDQUFDQyxRQUEyQkwsV0FBVyxVQUFVTSxNQUFNLENBQUNDLEtBQUtDLFNBQVMsQ0FBQ0gsUUFBUUksTUFBTSxDQUFDO0FBQzFHLE1BQU1DLFlBQVksQ0FBQ0MsVUFBd0MsT0FBT0EsWUFBWSxZQUN6RUMsTUFBTUMsSUFBSSxDQUFDRixTQUFTRyxNQUFNLElBQUksUUFDOUIsQ0FBQyxnRkFBZ0ZDLElBQUksQ0FBQ0o7QUFDM0YsTUFBTUssZUFBZSxDQUFDQztJQUNwQixJQUFHLENBQUNBLE9BQU87UUFDVCxNQUFNLElBQUlmLFVBQVU7SUFDdEI7QUFDRjtBQUVBLE9BQU8sTUFBTWdCLHFCQUFxQixPQUNoQ0MsTUFBaUJDLGdCQUF3QkM7SUFFekMsTUFBTUMsVUFBVSxNQUFNSCxLQUFvQywyQ0FBMkM7UUFBQ0U7SUFBUztJQUMvRyxJQUFHLENBQUNDLFdBQVdBLFFBQVFGLGNBQWMsS0FBS0Esa0JBQWtCRSxRQUFRQyxpQkFBaUIsS0FBSyxHQUFHO1FBQzNGLE1BQU0sSUFBSXJCLFVBQVU7SUFDdEI7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
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ApiContext } from '../types/auth.types.js';
|
|
2
|
+
import type { ChatQuery } from './membership.js';
|
|
3
|
+
export interface DurableTransactionCollections {
|
|
4
|
+
readonly exclusive?: readonly string[];
|
|
5
|
+
readonly read?: readonly string[];
|
|
6
|
+
readonly write?: readonly string[];
|
|
7
|
+
}
|
|
8
|
+
export declare const createDurableQuery: (context: ApiContext) => ChatQuery;
|
|
9
|
+
/** Injected queries retain caller-owned transaction lifecycle; never fall back to another connection. */
|
|
10
|
+
export declare const createDurableTransaction: (context: ApiContext, collections: DurableTransactionCollections, query?: ChatQuery) => <T>(operation: (read: ChatQuery) => Promise<T>) => Promise<T>;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { useDb } from '../utils/arangodbUtils.js';
|
|
2
|
+
export const createDurableQuery = (context)=>{
|
|
3
|
+
const db = useDb(context.databaseName);
|
|
4
|
+
return async (query, bindVars)=>{
|
|
5
|
+
const cursor = await db.query({
|
|
6
|
+
bindVars,
|
|
7
|
+
query
|
|
8
|
+
});
|
|
9
|
+
return cursor.next();
|
|
10
|
+
};
|
|
11
|
+
};
|
|
12
|
+
/** Injected queries retain caller-owned transaction lifecycle; never fall back to another connection. */ export const createDurableTransaction = (context, collections, query)=>{
|
|
13
|
+
if (query) {
|
|
14
|
+
return (operation)=>operation(query);
|
|
15
|
+
}
|
|
16
|
+
const db = useDb(context.databaseName);
|
|
17
|
+
return async (operation)=>{
|
|
18
|
+
const transaction = await db.beginTransaction({
|
|
19
|
+
exclusive: [
|
|
20
|
+
...collections.exclusive || []
|
|
21
|
+
],
|
|
22
|
+
read: [
|
|
23
|
+
...collections.read || []
|
|
24
|
+
],
|
|
25
|
+
write: [
|
|
26
|
+
...collections.write || []
|
|
27
|
+
]
|
|
28
|
+
}, {
|
|
29
|
+
allowImplicit: false,
|
|
30
|
+
lockTimeout: 5,
|
|
31
|
+
waitForSync: true
|
|
32
|
+
});
|
|
33
|
+
const read = async (query, bindVars)=>{
|
|
34
|
+
const cursor = await transaction.step(()=>db.query({
|
|
35
|
+
bindVars,
|
|
36
|
+
query
|
|
37
|
+
}));
|
|
38
|
+
return cursor.next();
|
|
39
|
+
};
|
|
40
|
+
try {
|
|
41
|
+
const result = await operation(read);
|
|
42
|
+
await transaction.commit();
|
|
43
|
+
return result;
|
|
44
|
+
} catch (error) {
|
|
45
|
+
try {
|
|
46
|
+
await transaction.abort();
|
|
47
|
+
} catch {}
|
|
48
|
+
throw error;
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50Ly5jb2RleC13b3JrdHJlZXMvcmVha3Rvci1waGFudGF6ZS1jaGF0L3BhY2thZ2VzL3JlYWt0b3Ivc3JjL2R1cmFibGVDaGF0L3RyYW5zYWN0aW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7dXNlRGJ9IGZyb20gJy4uL3V0aWxzL2FyYW5nb2RiVXRpbHMuanMnO1xuXG5pbXBvcnQgdHlwZSB7QXBpQ29udGV4dH0gZnJvbSAnLi4vdHlwZXMvYXV0aC50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7Q2hhdFF1ZXJ5fSBmcm9tICcuL21lbWJlcnNoaXAuanMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIER1cmFibGVUcmFuc2FjdGlvbkNvbGxlY3Rpb25zIHtcbiAgcmVhZG9ubHkgZXhjbHVzaXZlPzogcmVhZG9ubHkgc3RyaW5nW107XG4gIHJlYWRvbmx5IHJlYWQ/OiByZWFkb25seSBzdHJpbmdbXTtcbiAgcmVhZG9ubHkgd3JpdGU/OiByZWFkb25seSBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUR1cmFibGVRdWVyeSA9IChjb250ZXh0OiBBcGlDb250ZXh0KTogQ2hhdFF1ZXJ5ID0+IHtcbiAgY29uc3QgZGIgPSB1c2VEYihjb250ZXh0LmRhdGFiYXNlTmFtZSk7XG4gIHJldHVybiBhc3luYyA8VD4ocXVlcnk6IHN0cmluZywgYmluZFZhcnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiB7XG4gICAgY29uc3QgY3Vyc29yID0gYXdhaXQgZGIucXVlcnk8VD4oe2JpbmRWYXJzLCBxdWVyeX0pO1xuICAgIHJldHVybiBjdXJzb3IubmV4dCgpO1xuICB9O1xufTtcblxuLyoqIEluamVjdGVkIHF1ZXJpZXMgcmV0YWluIGNhbGxlci1vd25lZCB0cmFuc2FjdGlvbiBsaWZlY3ljbGU7IG5ldmVyIGZhbGwgYmFjayB0byBhbm90aGVyIGNvbm5lY3Rpb24uICovXG5leHBvcnQgY29uc3QgY3JlYXRlRHVyYWJsZVRyYW5zYWN0aW9uID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LCBjb2xsZWN0aW9uczogRHVyYWJsZVRyYW5zYWN0aW9uQ29sbGVjdGlvbnMsIHF1ZXJ5PzogQ2hhdFF1ZXJ5XG4pID0+IHtcbiAgaWYocXVlcnkpIHtcbiAgICByZXR1cm4gPFQ+KG9wZXJhdGlvbjogKHJlYWQ6IENoYXRRdWVyeSkgPT4gUHJvbWlzZTxUPik6IFByb21pc2U8VD4gPT4gb3BlcmF0aW9uKHF1ZXJ5KTtcbiAgfVxuICBjb25zdCBkYiA9IHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKTtcbiAgcmV0dXJuIGFzeW5jIDxUPihvcGVyYXRpb246IChyZWFkOiBDaGF0UXVlcnkpID0+IFByb21pc2U8VD4pOiBQcm9taXNlPFQ+ID0+IHtcbiAgICBjb25zdCB0cmFuc2FjdGlvbiA9IGF3YWl0IGRiLmJlZ2luVHJhbnNhY3Rpb24oe1xuICAgICAgZXhjbHVzaXZlOiBbLi4uKGNvbGxlY3Rpb25zLmV4Y2x1c2l2ZSB8fCBbXSldLCByZWFkOiBbLi4uKGNvbGxlY3Rpb25zLnJlYWQgfHwgW10pXSxcbiAgICAgIHdyaXRlOiBbLi4uKGNvbGxlY3Rpb25zLndyaXRlIHx8IFtdKV1cbiAgICB9LCB7YWxsb3dJbXBsaWNpdDogZmFsc2UsIGxvY2tUaW1lb3V0OiA1LCB3YWl0Rm9yU3luYzogdHJ1ZX0pO1xuICAgIGNvbnN0IHJlYWQ6IENoYXRRdWVyeSA9IGFzeW5jIDxSPihxdWVyeTogc3RyaW5nLCBiaW5kVmFyczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IHtcbiAgICAgIGNvbnN0IGN1cnNvciA9IGF3YWl0IHRyYW5zYWN0aW9uLnN0ZXAoKCkgPT4gZGIucXVlcnk8Uj4oe2JpbmRWYXJzLCBxdWVyeX0pKTtcbiAgICAgIHJldHVybiBjdXJzb3IubmV4dCgpO1xuICAgIH07XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IG9wZXJhdGlvbihyZWFkKTtcbiAgICAgIGF3YWl0IHRyYW5zYWN0aW9uLmNvbW1pdCgpO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0cmFuc2FjdGlvbi5hYm9ydCgpO1xuICAgICAgfSBjYXRjaHsgLyogUHJlc2VydmUgb3JpZ2luYWwvYW1iaWd1b3VzIGNvbW1pdCBlcnJvcjsgbmV2ZXIgcmV0cnkgbXV0YXRpb25zLiAqLyB9XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH07XG59O1xuIl0sIm5hbWVzIjpbInVzZURiIiwiY3JlYXRlRHVyYWJsZVF1ZXJ5IiwiY29udGV4dCIsImRiIiwiZGF0YWJhc2VOYW1lIiwicXVlcnkiLCJiaW5kVmFycyIsImN1cnNvciIsIm5leHQiLCJjcmVhdGVEdXJhYmxlVHJhbnNhY3Rpb24iLCJjb2xsZWN0aW9ucyIsIm9wZXJhdGlvbiIsInRyYW5zYWN0aW9uIiwiYmVnaW5UcmFuc2FjdGlvbiIsImV4Y2x1c2l2ZSIsInJlYWQiLCJ3cml0ZSIsImFsbG93SW1wbGljaXQiLCJsb2NrVGltZW91dCIsIndhaXRGb3JTeW5jIiwic3RlcCIsInJlc3VsdCIsImNvbW1pdCIsImVycm9yIiwiYWJvcnQiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVFBLEtBQUssUUFBTyw0QkFBNEI7QUFXaEQsT0FBTyxNQUFNQyxxQkFBcUIsQ0FBQ0M7SUFDakMsTUFBTUMsS0FBS0gsTUFBTUUsUUFBUUUsWUFBWTtJQUNyQyxPQUFPLE9BQVVDLE9BQWVDO1FBQzlCLE1BQU1DLFNBQVMsTUFBTUosR0FBR0UsS0FBSyxDQUFJO1lBQUNDO1lBQVVEO1FBQUs7UUFDakQsT0FBT0UsT0FBT0MsSUFBSTtJQUNwQjtBQUNGLEVBQUU7QUFFRix1R0FBdUcsR0FDdkcsT0FBTyxNQUFNQywyQkFBMkIsQ0FDdENQLFNBQXFCUSxhQUE0Q0w7SUFFakUsSUFBR0EsT0FBTztRQUNSLE9BQU8sQ0FBSU0sWUFBMkRBLFVBQVVOO0lBQ2xGO0lBQ0EsTUFBTUYsS0FBS0gsTUFBTUUsUUFBUUUsWUFBWTtJQUNyQyxPQUFPLE9BQVVPO1FBQ2YsTUFBTUMsY0FBYyxNQUFNVCxHQUFHVSxnQkFBZ0IsQ0FBQztZQUM1Q0MsV0FBVzttQkFBS0osWUFBWUksU0FBUyxJQUFJLEVBQUU7YUFBRTtZQUFFQyxNQUFNO21CQUFLTCxZQUFZSyxJQUFJLElBQUksRUFBRTthQUFFO1lBQ2xGQyxPQUFPO21CQUFLTixZQUFZTSxLQUFLLElBQUksRUFBRTthQUFFO1FBQ3ZDLEdBQUc7WUFBQ0MsZUFBZTtZQUFPQyxhQUFhO1lBQUdDLGFBQWE7UUFBSTtRQUMzRCxNQUFNSixPQUFrQixPQUFVVixPQUFlQztZQUMvQyxNQUFNQyxTQUFTLE1BQU1LLFlBQVlRLElBQUksQ0FBQyxJQUFNakIsR0FBR0UsS0FBSyxDQUFJO29CQUFDQztvQkFBVUQ7Z0JBQUs7WUFDeEUsT0FBT0UsT0FBT0MsSUFBSTtRQUNwQjtRQUNBLElBQUk7WUFDRixNQUFNYSxTQUFTLE1BQU1WLFVBQVVJO1lBQy9CLE1BQU1ILFlBQVlVLE1BQU07WUFDeEIsT0FBT0Q7UUFDVCxFQUFFLE9BQU1FLE9BQU87WUFDYixJQUFJO2dCQUNGLE1BQU1YLFlBQVlZLEtBQUs7WUFDekIsRUFBRSxPQUFLLENBQXlFO1lBQ2hGLE1BQU1EO1FBQ1I7SUFDRjtBQUNGLEVBQUUifQ==
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
export type ConversationKind = 'direct' | 'group';
|
|
2
|
+
export type ConversationState = 'active' | 'closed' | 'forming';
|
|
3
|
+
export type MembershipRole = 'admin' | 'member' | 'owner';
|
|
4
|
+
export type MembershipState = 'active' | 'left' | 'removed';
|
|
5
|
+
/** An epoch is a grant for a bounded history interval, never a client-selected identity. */
|
|
6
|
+
export interface ConversationMembership {
|
|
7
|
+
readonly conversationId: string;
|
|
8
|
+
readonly epoch: string;
|
|
9
|
+
readonly joinSequence: number;
|
|
10
|
+
readonly leftSequence?: number;
|
|
11
|
+
readonly personaId: string;
|
|
12
|
+
readonly revision: number;
|
|
13
|
+
readonly role: MembershipRole;
|
|
14
|
+
readonly state: MembershipState;
|
|
15
|
+
}
|
|
16
|
+
/** Names must pass the caller's audience projection before being serialized. */
|
|
17
|
+
export interface ConversationSummary {
|
|
18
|
+
readonly activeMemberCount: number;
|
|
19
|
+
readonly conversationId: string;
|
|
20
|
+
readonly kind: ConversationKind;
|
|
21
|
+
readonly membership: ConversationMembership;
|
|
22
|
+
readonly membershipRevision: number;
|
|
23
|
+
readonly name?: string;
|
|
24
|
+
readonly state: ConversationState;
|
|
25
|
+
}
|
|
26
|
+
export interface ConversationInvite {
|
|
27
|
+
readonly conversationId: string;
|
|
28
|
+
readonly expiresAt: number;
|
|
29
|
+
readonly inviteId: string;
|
|
30
|
+
readonly invitedByPersonaId: string;
|
|
31
|
+
readonly revision: number;
|
|
32
|
+
readonly state: 'accepted' | 'declined' | 'expired' | 'pending' | 'revoked';
|
|
33
|
+
}
|
|
34
|
+
export interface CreateDirectInput {
|
|
35
|
+
readonly participantPersonaId: string;
|
|
36
|
+
}
|
|
37
|
+
export interface CreateGroupInput {
|
|
38
|
+
readonly idempotencyKey: string;
|
|
39
|
+
readonly memberPersonaIds: readonly string[];
|
|
40
|
+
readonly name: string;
|
|
41
|
+
}
|
|
42
|
+
export interface InviteMemberInput {
|
|
43
|
+
readonly conversationId: string;
|
|
44
|
+
readonly expectedRevision: number;
|
|
45
|
+
readonly idempotencyKey: string;
|
|
46
|
+
readonly personaId: string;
|
|
47
|
+
}
|
|
48
|
+
export interface AcceptInviteInput {
|
|
49
|
+
readonly expectedRevision: number;
|
|
50
|
+
readonly idempotencyKey: string;
|
|
51
|
+
readonly inviteId: string;
|
|
52
|
+
}
|
|
53
|
+
export type DeclineInviteInput = AcceptInviteInput;
|
|
54
|
+
export interface ChangeMemberRoleInput {
|
|
55
|
+
readonly conversationId: string;
|
|
56
|
+
readonly expectedRevision: number;
|
|
57
|
+
readonly idempotencyKey: string;
|
|
58
|
+
readonly personaId: string;
|
|
59
|
+
readonly role: Exclude<MembershipRole, 'owner'>;
|
|
60
|
+
}
|
|
61
|
+
export interface RemoveMemberInput {
|
|
62
|
+
readonly conversationId: string;
|
|
63
|
+
readonly expectedRevision: number;
|
|
64
|
+
readonly idempotencyKey: string;
|
|
65
|
+
readonly personaId: string;
|
|
66
|
+
}
|
|
67
|
+
export interface LeaveConversationInput {
|
|
68
|
+
readonly conversationId: string;
|
|
69
|
+
readonly expectedRevision: number;
|
|
70
|
+
readonly idempotencyKey: string;
|
|
71
|
+
}
|
|
72
|
+
export type TransferOwnershipInput = RemoveMemberInput;
|
|
73
|
+
export interface ChatEvent {
|
|
74
|
+
readonly conversationId: string;
|
|
75
|
+
readonly eventId: string;
|
|
76
|
+
readonly eventSequence: number;
|
|
77
|
+
readonly kind: 'membership.changed' | 'message.changed' | 'receipt.changed';
|
|
78
|
+
readonly resourceId: string;
|
|
79
|
+
readonly revision: number;
|
|
80
|
+
}
|
|
81
|
+
export type { AuthorizedMembership, ChatIdentity, ChatQuery, MembershipAccessInput } from './membership.js';
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export { };
|
|
2
|
+
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50Ly5jb2RleC13b3JrdHJlZXMvcmVha3Rvci1waGFudGF6ZS1jaGF0L3BhY2thZ2VzL3JlYWt0b3Ivc3JjL2R1cmFibGVDaGF0L3R5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIENvbnZlcnNhdGlvbktpbmQgPSAnZGlyZWN0JyB8ICdncm91cCc7XG5leHBvcnQgdHlwZSBDb252ZXJzYXRpb25TdGF0ZSA9ICdhY3RpdmUnIHwgJ2Nsb3NlZCcgfCAnZm9ybWluZyc7XG5leHBvcnQgdHlwZSBNZW1iZXJzaGlwUm9sZSA9ICdhZG1pbicgfCAnbWVtYmVyJyB8ICdvd25lcic7XG5leHBvcnQgdHlwZSBNZW1iZXJzaGlwU3RhdGUgPSAnYWN0aXZlJyB8ICdsZWZ0JyB8ICdyZW1vdmVkJztcblxuLyoqIEFuIGVwb2NoIGlzIGEgZ3JhbnQgZm9yIGEgYm91bmRlZCBoaXN0b3J5IGludGVydmFsLCBuZXZlciBhIGNsaWVudC1zZWxlY3RlZCBpZGVudGl0eS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29udmVyc2F0aW9uTWVtYmVyc2hpcCB7XG4gIHJlYWRvbmx5IGNvbnZlcnNhdGlvbklkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGVwb2NoOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGpvaW5TZXF1ZW5jZTogbnVtYmVyO1xuICByZWFkb25seSBsZWZ0U2VxdWVuY2U/OiBudW1iZXI7XG4gIHJlYWRvbmx5IHBlcnNvbmFJZDogc3RyaW5nO1xuICByZWFkb25seSByZXZpc2lvbjogbnVtYmVyO1xuICByZWFkb25seSByb2xlOiBNZW1iZXJzaGlwUm9sZTtcbiAgcmVhZG9ubHkgc3RhdGU6IE1lbWJlcnNoaXBTdGF0ZTtcbn1cblxuLyoqIE5hbWVzIG11c3QgcGFzcyB0aGUgY2FsbGVyJ3MgYXVkaWVuY2UgcHJvamVjdGlvbiBiZWZvcmUgYmVpbmcgc2VyaWFsaXplZC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29udmVyc2F0aW9uU3VtbWFyeSB7XG4gIHJlYWRvbmx5IGFjdGl2ZU1lbWJlckNvdW50OiBudW1iZXI7XG4gIHJlYWRvbmx5IGNvbnZlcnNhdGlvbklkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGtpbmQ6IENvbnZlcnNhdGlvbktpbmQ7XG4gIHJlYWRvbmx5IG1lbWJlcnNoaXA6IENvbnZlcnNhdGlvbk1lbWJlcnNoaXA7XG4gIHJlYWRvbmx5IG1lbWJlcnNoaXBSZXZpc2lvbjogbnVtYmVyO1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuICByZWFkb25seSBzdGF0ZTogQ29udmVyc2F0aW9uU3RhdGU7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29udmVyc2F0aW9uSW52aXRlIHtcbiAgcmVhZG9ubHkgY29udmVyc2F0aW9uSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgZXhwaXJlc0F0OiBudW1iZXI7XG4gIHJlYWRvbmx5IGludml0ZUlkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGludml0ZWRCeVBlcnNvbmFJZDogc3RyaW5nO1xuICByZWFkb25seSByZXZpc2lvbjogbnVtYmVyO1xuICByZWFkb25seSBzdGF0ZTogJ2FjY2VwdGVkJyB8ICdkZWNsaW5lZCcgfCAnZXhwaXJlZCcgfCAncGVuZGluZycgfCAncmV2b2tlZCc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlRGlyZWN0SW5wdXQge1xuICByZWFkb25seSBwYXJ0aWNpcGFudFBlcnNvbmFJZDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENyZWF0ZUdyb3VwSW5wdXQge1xuICByZWFkb25seSBpZGVtcG90ZW5jeUtleTogc3RyaW5nO1xuICByZWFkb25seSBtZW1iZXJQZXJzb25hSWRzOiByZWFkb25seSBzdHJpbmdbXTtcbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEludml0ZU1lbWJlcklucHV0IHtcbiAgcmVhZG9ubHkgY29udmVyc2F0aW9uSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgZXhwZWN0ZWRSZXZpc2lvbjogbnVtYmVyO1xuICByZWFkb25seSBpZGVtcG90ZW5jeUtleTogc3RyaW5nO1xuICByZWFkb25seSBwZXJzb25hSWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBY2NlcHRJbnZpdGVJbnB1dCB7XG4gIHJlYWRvbmx5IGV4cGVjdGVkUmV2aXNpb246IG51bWJlcjtcbiAgcmVhZG9ubHkgaWRlbXBvdGVuY3lLZXk6IHN0cmluZztcbiAgcmVhZG9ubHkgaW52aXRlSWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgRGVjbGluZUludml0ZUlucHV0ID0gQWNjZXB0SW52aXRlSW5wdXQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2hhbmdlTWVtYmVyUm9sZUlucHV0IHtcbiAgcmVhZG9ubHkgY29udmVyc2F0aW9uSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgZXhwZWN0ZWRSZXZpc2lvbjogbnVtYmVyO1xuICByZWFkb25seSBpZGVtcG90ZW5jeUtleTogc3RyaW5nO1xuICByZWFkb25seSBwZXJzb25hSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgcm9sZTogRXhjbHVkZTxNZW1iZXJzaGlwUm9sZSwgJ293bmVyJz47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVtb3ZlTWVtYmVySW5wdXQge1xuICByZWFkb25seSBjb252ZXJzYXRpb25JZDogc3RyaW5nO1xuICByZWFkb25seSBleHBlY3RlZFJldmlzaW9uOiBudW1iZXI7XG4gIHJlYWRvbmx5IGlkZW1wb3RlbmN5S2V5OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBlcnNvbmFJZDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExlYXZlQ29udmVyc2F0aW9uSW5wdXQge1xuICByZWFkb25seSBjb252ZXJzYXRpb25JZDogc3RyaW5nO1xuICByZWFkb25seSBleHBlY3RlZFJldmlzaW9uOiBudW1iZXI7XG4gIHJlYWRvbmx5IGlkZW1wb3RlbmN5S2V5OiBzdHJpbmc7XG59XG5cbmV4cG9ydCB0eXBlIFRyYW5zZmVyT3duZXJzaGlwSW5wdXQgPSBSZW1vdmVNZW1iZXJJbnB1dDtcblxuZXhwb3J0IGludGVyZmFjZSBDaGF0RXZlbnQge1xuICByZWFkb25seSBjb252ZXJzYXRpb25JZDogc3RyaW5nO1xuICByZWFkb25seSBldmVudElkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGV2ZW50U2VxdWVuY2U6IG51bWJlcjtcbiAgcmVhZG9ubHkga2luZDogJ21lbWJlcnNoaXAuY2hhbmdlZCcgfCAnbWVzc2FnZS5jaGFuZ2VkJyB8ICdyZWNlaXB0LmNoYW5nZWQnO1xuICByZWFkb25seSByZXNvdXJjZUlkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJldmlzaW9uOiBudW1iZXI7XG59XG5cblxuZXhwb3J0IHR5cGUge0F1dGhvcml6ZWRNZW1iZXJzaGlwLCBDaGF0SWRlbnRpdHksIENoYXRRdWVyeSwgTWVtYmVyc2hpcEFjY2Vzc0lucHV0fSBmcm9tICcuL21lbWJlcnNoaXAuanMnO1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQStGQSxXQUEwRyJ9
|
|
@@ -166,4 +166,4 @@ const applyMiddleware = (tc, middlewares)=>{
|
|
|
166
166
|
};
|
|
167
167
|
};
|
|
168
168
|
|
|
169
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL3JlYWt0b3IvcmVha3Rvci9wYWNrYWdlcy9yZWFrdG9yL3NyYy9oYW5kbGVycy9ncmFwaHFsSGFuZGxlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2dyYXBocWx9IGZyb20gJ2dyYXBocWwnO1xuaW1wb3J0IHtzY2hlbWFDb21wb3Nlcn0gZnJvbSAnZ3JhcGhxbC1jb21wb3NlJztcbmltcG9ydCB0eXBlIHtPYmplY3RUeXBlQ29tcG9zZXIsIFNjaGVtYUNvbXBvc2VyfSBmcm9tICdncmFwaHFsLWNvbXBvc2UnO1xuXG5pbXBvcnQge0NvbmZpZ30gZnJvbSAnLi4vY29uZmlnLmpzJztcbmltcG9ydCB7cmVnaXN0ZXJEZWZhdWx0TXV0YXRpb25zfSBmcm9tICcuLi9tdXRhdGlvbnMvaW5kZXguanMnO1xuaW1wb3J0IHtyZWdpc3RlckRlZmF1bHRRdWVyaWVzfSBmcm9tICcuLi9xdWVyaWVzL2luZGV4LmpzJztcbmltcG9ydCB7ZXh0cmFjdExhbmd1YWdlQ29udGV4dH0gZnJvbSAnLi4vdXRpbHMvY29udGV4dFV0aWxzLmpzJztcbmltcG9ydCB7Y3JlYXRlQ29udGV4dCwgZ2V0R3FsRmllbGRzLCBnZXRMYW1iZGFEYXRhLCB0eXBlIExhbWJkYURhdGF9IGZyb20gJy4uL3V0aWxzL2luZGV4LmpzJztcblxuaW1wb3J0IHR5cGUge0FQSUdhdGV3YXlQcm94eUV2ZW50VjJ9IGZyb20gJ2F3cy1sYW1iZGEnO1xuaW1wb3J0IHR5cGUge0V4ZWN1dGlvblJlc3VsdH0gZnJvbSAnZ3JhcGhxbCc7XG5pbXBvcnQgdHlwZSB7QXBpQ29udGV4dH0gZnJvbSAnLi4vdHlwZXMvYXV0aC50eXBlcy5qcyc7XG5cbmV4cG9ydCB0eXBlIEdyYXBocWxSZXNvbHZlck1pZGRsZXdhcmUgPSAoXG4gIHJlc29sdmU6IChzb3VyY2U6IHVua25vd24sIGFyZ3M6IHVua25vd24sIGNvbnRleHQ6IEFwaUNvbnRleHQsIGluZm86IHVua25vd24pID0+IFByb21pc2U8dW5rbm93bj4gfCB1bmtub3duLFxuICBzb3VyY2U6IHVua25vd24sXG4gIGFyZ3M6IHVua25vd24sXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIGluZm86IHVua25vd25cbikgPT4gUHJvbWlzZTx1bmtub3duPiB8IHVua25vd247XG5cbnR5cGUgR3JhcGhxbEZpZWxkQ29uZmlnTWFwID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbmV4cG9ydCB0eXBlIEdyYXBocWxIYW5kbGVyT3B0aW9ucyA9IHtcbiAgY29tcG9zZXI/OiBTY2hlbWFDb21wb3Nlcjxhbnk+O1xuICBjb250ZXh0PzogQXBpQ29udGV4dDtcbiAgZXh0cmFNdXRhdGlvbnM/OiBHcmFwaHFsRmllbGRDb25maWdNYXA7XG4gIGV4dHJhUXVlcmllcz86IEdyYXBocWxGaWVsZENvbmZpZ01hcDtcbiAgaW5jbHVkZURlZmF1bHRzPzogYm9vbGVhbjtcbiAgbWlkZGxld2FyZT86IEdyYXBocWxSZXNvbHZlck1pZGRsZXdhcmUgfCBHcmFwaHFsUmVzb2x2ZXJNaWRkbGV3YXJlW107XG59O1xuXG5jb25zdCBhZGRGaWVsZHNNaWRkbGV3YXJlOiBHcmFwaHFsUmVzb2x2ZXJNaWRkbGV3YXJlID0gKHJlc29sdmUsIHNvdXJjZSwgYXJncywgY29udGV4dDogQXBpQ29udGV4dCwgaW5mbykgPT4ge1xuICBjb25zdCBlbmhhbmNlZENvbnRleHQgPSB7XG4gICAgLi4uY29udGV4dCxcbiAgICBmaWVsZHM6IGdldEdxbEZpZWxkcyhpbmZvKVxuICB9O1xuXG4gIHJldHVybiByZXNvbHZlKHNvdXJjZSwgYXJncywgZW5oYW5jZWRDb250ZXh0LCBpbmZvKTtcbn07XG5cbmNvbnN0IGFkZE1pc3NpbmdGaWVsZHMgPSAodGM6IE9iamVjdFR5cGVDb21wb3Nlcjx1bmtub3duLCB1bmtub3duPiwgZmllbGRzOiBHcmFwaHFsRmllbGRDb25maWdNYXApOiB2b2lkID0+IHtcbiAgT2JqZWN0LmVudHJpZXMoZmllbGRzKS5mb3JFYWNoKChbZmllbGROYW1lLCBmaWVsZENvbmZpZ10pID0+IHtcbiAgICBpZighdGMuaGFzRmllbGQoZmllbGROYW1lKSkge1xuICAgICAgdGMuc2V0RmllbGQoZmllbGROYW1lLCBmaWVsZENvbmZpZyBhcyBhbnkpO1xuICAgIH1cbiAgfSk7XG59O1xuXG5jb25zdCBhcHBseU1pZGRsZXdhcmUgPSAoXG4gIHRjOiBPYmplY3RUeXBlQ29tcG9zZXI8dW5rbm93biwgdW5rbm93bj4sXG4gIG1pZGRsZXdhcmVzOiBHcmFwaHFsUmVzb2x2ZXJNaWRkbGV3YXJlW11cbik6IHZvaWQgPT4ge1xuICBpZihtaWRkbGV3YXJlcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBPYmplY3Qua2V5cyh0Yy5nZXRGaWVsZHMoKSkuZm9yRWFjaCgoZmllbGROYW1lKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGlmKHRjLmhhc1Jlc29sdmVyKGZpZWxkTmFtZSkpIHtcbiAgICAgICAgbWlkZGxld2FyZXMuZm9yRWFjaCgobWlkZGxld2FyZSkgPT4gdGMud3JhcFJlc29sdmVyKGZpZWxkTmFtZSwgbWlkZGxld2FyZSBhcyBhbnkpKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoKGVycm9yOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUud2FybihgU2tpcHBpbmcgZmllbGQgJHtmaWVsZE5hbWV9IC0gbm90IGEgcmVzb2x2ZXI6YCwgZXJyb3IubWVzc2FnZSk7XG4gICAgfVxuICB9KTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBBUEkgR2F0ZXdheS1jb21wYXRpYmxlIEdyYXBoUUwgaGFuZGxlciBmb3IgUmVha3Rvci5cbiAqXG4gKiBSZXF1ZXN0IGV4cGVjdGF0aW9uczpcbiAqIC0gYGV2ZW50LmJvZHkucXVlcnlgIGlzIGEgR3JhcGhRTCBvcGVyYXRpb24gc3RyaW5nLlxuICogLSBgZXZlbnQuYm9keS52YXJpYWJsZXNgIGlzIG9wdGlvbmFsIG9wZXJhdGlvbiB2YXJpYWJsZXMuXG4gKlxuICogUnVudGltZSBiZWhhdmlvcjpcbiAqIC0gQnVpbGRzIHBlci1yZXF1ZXN0IGNvbnRleHQgKGBjb25maWdgLCBhdXRoL3Nlc3Npb24gY29udGV4dCwgbGFuZ3VhZ2UgY29udGV4dCwgcmVxdWVzdCkuXG4gKiAtIEFwcGxpZXMgcmVzb2x2ZXIgbWlkZGxld2FyZSB0byBleHBvc2Ugc2VsZWN0ZWQgR3JhcGhRTCBmaWVsZHMgb24gYGNvbnRleHQuZmllbGRzYC5cbiAqIC0gRXhlY3V0ZXMgb3BlcmF0aW9uIHVzaW5nIHRoZSBjb21wb3NlZCBzY2hlbWEuXG4gKlxuICogUmVzcG9uc2UgY29udHJhY3Q6XG4gKiAtIFJldHVybnMgYHtzdGF0dXNDb2RlLCBoZWFkZXJzLCBib2R5fWAgd2l0aCBKU09OIGJvZHkuXG4gKiAtIFJldHVybnMgYDIwMGAgZm9yIEdyYXBoUUwgcmVzcG9uc2VzIChpbmNsdWRpbmcgR3JhcGhRTCBlcnJvcnMgaW4gYGVycm9yc2ApLlxuICogLSBSZXR1cm5zIGA1MDBgIG9ubHkgZm9yIGhhbmRsZXIvcnVudGltZSBmYWlsdXJlcy5cbiAqXG4gKiBTZWUgUkVBRE1FOiBcIkdyYXBoUUwgSGFuZGxlciBVc2FnZVwiIGZvciBpbnRlZ3JhdGlvbiBleGFtcGxlcy5cbiAqL1xuZXhwb3J0IGNvbnN0IGNyZWF0ZUdyYXBocWxIYW5kbGVyID0gKG9wdGlvbnM6IEdyYXBocWxIYW5kbGVyT3B0aW9ucyA9IHt9KSA9PiB7XG4gIGNvbnN0IGNvbXBvc2VyID0gb3B0aW9ucy5jb21wb3NlciB8fCBzY2hlbWFDb21wb3NlcjtcbiAgY29uc3QgaW5pdGlhbENvbnRleHQgPSAob3B0aW9ucy5jb250ZXh0IHx8IHt9KSBhcyBBcGlDb250ZXh0O1xuICBjb25zdCBzaG91bGRJbmNsdWRlRGVmYXVsdHMgPSBvcHRpb25zLmluY2x1ZGVEZWZhdWx0cyAhPT0gZmFsc2U7XG4gIGNvbnN0IG1pZGRsZXdhcmVMaXN0ID0gW1xuICAgIGFkZEZpZWxkc01pZGRsZXdhcmUsXG4gICAgLi4uKEFycmF5LmlzQXJyYXkob3B0aW9ucy5taWRkbGV3YXJlKVxuICAgICAgPyBvcHRpb25zLm1pZGRsZXdhcmVcbiAgICAgIDogb3B0aW9ucy5taWRkbGV3YXJlID8gW29wdGlvbnMubWlkZGxld2FyZV0gOiBbXSlcbiAgXTtcblxuICBpZihzaG91bGRJbmNsdWRlRGVmYXVsdHMpIHtcbiAgICByZWdpc3RlckRlZmF1bHRRdWVyaWVzKGNvbXBvc2VyKTtcbiAgICByZWdpc3RlckRlZmF1bHRNdXRhdGlvbnMoY29tcG9zZXIpO1xuICB9XG5cbiAgaWYob3B0aW9ucy5leHRyYVF1ZXJpZXMpIHtcbiAgICBhZGRNaXNzaW5nRmllbGRzKGNvbXBvc2VyLlF1ZXJ5LCBvcHRpb25zLmV4dHJhUXVlcmllcyk7XG4gIH1cblxuICBpZihvcHRpb25zLmV4dHJhTXV0YXRpb25zKSB7XG4gICAgYWRkTWlzc2luZ0ZpZWxkcyhjb21wb3Nlci5NdXRhdGlvbiwgb3B0aW9ucy5leHRyYU11dGF0aW9ucyk7XG4gIH1cblxuICBhcHBseU1pZGRsZXdhcmUoY29tcG9zZXIuUXVlcnksIG1pZGRsZXdhcmVMaXN0KTtcbiAgYXBwbHlNaWRkbGV3YXJlKGNvbXBvc2VyLk11dGF0aW9uLCBtaWRkbGV3YXJlTGlzdCk7XG5cbiAgY29uc3Qgc2NoZW1hID0gY29tcG9zZXIuYnVpbGRTY2hlbWEoKTtcblxuICByZXR1cm4gYXN5bmMgKGV2ZW50OiBBUElHYXRld2F5UHJveHlFdmVudFYyKTogUHJvbWlzZTxFeGVjdXRpb25SZXN1bHQgfCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4gPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB1cGRhdGVkQ29udGV4dDogQXBpQ29udGV4dCA9IGF3YWl0IGNyZWF0ZUNvbnRleHQoaW5pdGlhbENvbnRleHQsIGV2ZW50KTtcbiAgICAgIGNvbnN0IGxhbmd1YWdlQ29udGV4dCA9IGV4dHJhY3RMYW5ndWFnZUNvbnRleHQoZXZlbnQpO1xuXG4gICAgICBjb25zdCBjb250ZXh0V2l0aExhbmd1YWdlID0ge1xuICAgICAgICBjb25maWc6IENvbmZpZy5nZXQoKSxcbiAgICAgICAgLi4udXBkYXRlZENvbnRleHQsXG4gICAgICAgIGxhbmd1YWdlQ29udGV4dCxcbiAgICAgICAgcmVxdWVzdDogZXZlbnRcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IHBhcnNlRGF0YSA9IGdldExhbWJkYURhdGEoZXZlbnQgYXMgdW5rbm93biBhcyBMYW1iZGFEYXRhKTtcbiAgICAgIGNvbnN0IHtib2R5fSA9IHBhcnNlRGF0YTtcblxuICAgICAgaWYoIWJvZHk/LnF1ZXJ5KSB7XG4gICAgICAgIGNvbnNvbGUud2FybignTm8gR3JhcGhRTCBxdWVyeSBmb3VuZCBpbiByZXF1ZXN0IGJvZHknKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIGRhdGE6IG51bGwsXG4gICAgICAgICAgICBlcnJvcnM6IFt7XG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdObyBHcmFwaFFMIHF1ZXJ5IGZvdW5kIGluIHJlcXVlc3QgYm9keSdcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfSksXG4gICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAgc3RhdHVzQ29kZTogMjAwXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IFByb21pc2UucmVzb2x2ZShncmFwaHFsKHtcbiAgICAgICAgICBjb250ZXh0VmFsdWU6IGNvbnRleHRXaXRoTGFuZ3VhZ2UsXG4gICAgICAgICAgc2NoZW1hLFxuICAgICAgICAgIHNvdXJjZTogYm9keS5xdWVyeSxcbiAgICAgICAgICB2YXJpYWJsZVZhbHVlczogYm9keS52YXJpYWJsZXNcbiAgICAgICAgfSkpO1xuXG4gICAgICAgIGlmKHJlc3VsdC5lcnJvcnMgJiYgcmVzdWx0LmVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcignR3JhcGhRTCBleGVjdXRpb24gZXJyb3JzOicsIHJlc3VsdC5lcnJvcnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeShyZXN1bHQpLFxuICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgICB9LFxuICAgICAgICAgIHN0YXR1c0NvZGU6IDIwMFxuICAgICAgICB9O1xuICAgICAgfSBjYXRjaChncmFwaHFsRXJyb3I6IHVua25vd24pIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZHVyaW5nIEdyYXBoUUwgZXhlY3V0aW9uOicsIGdyYXBocWxFcnJvcik7XG5cbiAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZ3JhcGhxbEVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBncmFwaHFsRXJyb3IubWVzc2FnZSA6ICdHcmFwaFFMIGV4ZWN1dGlvbiBlcnJvcic7XG4gICAgICAgIGNvbnN0IGVycm9yU3RhY2sgPSBncmFwaHFsRXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGdyYXBocWxFcnJvci5zdGFjayA6IHVuZGVmaW5lZDtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIGRhdGE6IG51bGwsXG4gICAgICAgICAgICBlcnJvcnM6IFt7XG4gICAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yTWVzc2FnZSxcbiAgICAgICAgICAgICAgc3RhY2s6IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnID8gZXJyb3JTdGFjayA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9KSxcbiAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzdGF0dXNDb2RlOiA1MDBcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9IGNhdGNoKGVycjogdW5rbm93bikge1xuICAgICAgY29uc29sZS5lcnJvcignSGFuZGxlciBlcnJvcjonLCB7XG4gICAgICAgIG1lc3NhZ2U6IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiAnVW5rbm93biBlcnJvcicsXG4gICAgICAgIHN0YWNrOiBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5zdGFjayA6IHVuZGVmaW5lZFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiAnQW4gdW5rbm93biBlcnJvciBvY2N1cnJlZCBpbiB0aGUgaGFuZGxlcic7XG4gICAgICBjb25zdCBlcnJvclN0YWNrID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIuc3RhY2sgOiB1bmRlZmluZWQ7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICBkYXRhOiBudWxsLFxuICAgICAgICAgIGVycm9yczogW3tcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yTWVzc2FnZSxcbiAgICAgICAgICAgIHN0YWNrOiBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ2RldmVsb3BtZW50JyA/IGVycm9yU3RhY2sgOiB1bmRlZmluZWRcbiAgICAgICAgICB9XVxuICAgICAgICB9KSxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgfSxcbiAgICAgICAgc3RhdHVzQ29kZTogNTAwXG4gICAgICB9O1xuICAgIH1cbiAgfTtcbn07XG4iXSwibmFtZXMiOlsiZ3JhcGhxbCIsInNjaGVtYUNvbXBvc2VyIiwiQ29uZmlnIiwicmVnaXN0ZXJEZWZhdWx0TXV0YXRpb25zIiwicmVnaXN0ZXJEZWZhdWx0UXVlcmllcyIsImV4dHJhY3RMYW5ndWFnZUNvbnRleHQiLCJjcmVhdGVDb250ZXh0IiwiZ2V0R3FsRmllbGRzIiwiZ2V0TGFtYmRhRGF0YSIsImFkZEZpZWxkc01pZGRsZXdhcmUiLCJyZXNvbHZlIiwic291cmNlIiwiYXJncyIsImNvbnRleHQiLCJpbmZvIiwiZW5oYW5jZWRDb250ZXh0IiwiZmllbGRzIiwiYWRkTWlzc2luZ0ZpZWxkcyIsInRjIiwiT2JqZWN0IiwiZW50cmllcyIsImZvckVhY2giLCJmaWVsZE5hbWUiLCJmaWVsZENvbmZpZyIsImhhc0ZpZWxkIiwic2V0RmllbGQiLCJhcHBseU1pZGRsZXdhcmUiLCJtaWRkbGV3YXJlcyIsImxlbmd0aCIsImtleXMiLCJnZXRGaWVsZHMiLCJoYXNSZXNvbHZlciIsIm1pZGRsZXdhcmUiLCJ3cmFwUmVzb2x2ZXIiLCJlcnJvciIsImNvbnNvbGUiLCJ3YXJuIiwibWVzc2FnZSIsImNyZWF0ZUdyYXBocWxIYW5kbGVyIiwib3B0aW9ucyIsImNvbXBvc2VyIiwiaW5pdGlhbENvbnRleHQiLCJzaG91bGRJbmNsdWRlRGVmYXVsdHMiLCJpbmNsdWRlRGVmYXVsdHMiLCJtaWRkbGV3YXJlTGlzdCIsIkFycmF5IiwiaXNBcnJheSIsImV4dHJhUXVlcmllcyIsIlF1ZXJ5IiwiZXh0cmFNdXRhdGlvbnMiLCJNdXRhdGlvbiIsInNjaGVtYSIsImJ1aWxkU2NoZW1hIiwiZXZlbnQiLCJ1cGRhdGVkQ29udGV4dCIsImxhbmd1YWdlQ29udGV4dCIsImNvbnRleHRXaXRoTGFuZ3VhZ2UiLCJjb25maWciLCJnZXQiLCJyZXF1ZXN0IiwicGFyc2VEYXRhIiwiYm9keSIsInF1ZXJ5IiwiSlNPTiIsInN0cmluZ2lmeSIsImRhdGEiLCJlcnJvcnMiLCJoZWFkZXJzIiwic3RhdHVzQ29kZSIsInJlc3VsdCIsIlByb21pc2UiLCJjb250ZXh0VmFsdWUiLCJ2YXJpYWJsZVZhbHVlcyIsInZhcmlhYmxlcyIsImdyYXBocWxFcnJvciIsImVycm9yTWVzc2FnZSIsIkVycm9yIiwiZXJyb3JTdGFjayIsInN0YWNrIiwidW5kZWZpbmVkIiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwiZXJyIl0sIm1hcHBpbmdzIjoiQUFBQSxTQUFRQSxPQUFPLFFBQU8sVUFBVTtBQUNoQyxTQUFRQyxjQUFjLFFBQU8sa0JBQWtCO0FBRy9DLFNBQVFDLE1BQU0sUUFBTyxlQUFlO0FBQ3BDLFNBQVFDLHdCQUF3QixRQUFPLHdCQUF3QjtBQUMvRCxTQUFRQyxzQkFBc0IsUUFBTyxzQkFBc0I7QUFDM0QsU0FBUUMsc0JBQXNCLFFBQU8sMkJBQTJCO0FBQ2hFLFNBQVFDLGFBQWEsRUFBRUMsWUFBWSxFQUFFQyxhQUFhLFFBQXdCLG9CQUFvQjtBQXlCOUYsTUFBTUMsc0JBQWlELENBQUNDLFNBQVNDLFFBQVFDLE1BQU1DLFNBQXFCQztJQUNsRyxNQUFNQyxrQkFBa0I7UUFDdEIsR0FBR0YsT0FBTztRQUNWRyxRQUFRVCxhQUFhTztJQUN2QjtJQUVBLE9BQU9KLFFBQVFDLFFBQVFDLE1BQU1HLGlCQUFpQkQ7QUFDaEQ7QUFFQSxNQUFNRyxtQkFBbUIsQ0FBQ0MsSUFBMENGO0lBQ2xFRyxPQUFPQyxPQUFPLENBQUNKLFFBQVFLLE9BQU8sQ0FBQyxDQUFDLENBQUNDLFdBQVdDLFlBQVk7UUFDdEQsSUFBRyxDQUFDTCxHQUFHTSxRQUFRLENBQUNGLFlBQVk7WUFDMUJKLEdBQUdPLFFBQVEsQ0FBQ0gsV0FBV0M7UUFDekI7SUFDRjtBQUNGO0FBRUEsTUFBTUcsa0JBQWtCLENBQ3RCUixJQUNBUztJQUVBLElBQUdBLFlBQVlDLE1BQU0sS0FBSyxHQUFHO1FBQzNCO0lBQ0Y7SUFFQVQsT0FBT1UsSUFBSSxDQUFDWCxHQUFHWSxTQUFTLElBQUlULE9BQU8sQ0FBQyxDQUFDQztRQUNuQyxJQUFJO1lBQ0YsSUFBR0osR0FBR2EsV0FBVyxDQUFDVCxZQUFZO2dCQUM1QkssWUFBWU4sT0FBTyxDQUFDLENBQUNXLGFBQWVkLEdBQUdlLFlBQVksQ0FBQ1gsV0FBV1U7WUFDakU7UUFDRixFQUFFLE9BQU1FLE9BQVk7WUFDbEJDLFFBQVFDLElBQUksQ0FBQyxDQUFDLGVBQWUsRUFBRWQsVUFBVSxrQkFBa0IsQ0FBQyxFQUFFWSxNQUFNRyxPQUFPO1FBQzdFO0lBQ0Y7QUFDRjtBQUVBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FrQkMsR0FDRCxPQUFPLE1BQU1DLHVCQUF1QixDQUFDQyxVQUFpQyxDQUFDLENBQUM7SUFDdEUsTUFBTUMsV0FBV0QsUUFBUUMsUUFBUSxJQUFJdkM7SUFDckMsTUFBTXdDLGlCQUFrQkYsUUFBUTFCLE9BQU8sSUFBSSxDQUFDO0lBQzVDLE1BQU02Qix3QkFBd0JILFFBQVFJLGVBQWUsS0FBSztJQUMxRCxNQUFNQyxpQkFBaUI7UUFDckJuQztXQUNJb0MsTUFBTUMsT0FBTyxDQUFDUCxRQUFRUCxVQUFVLElBQ2hDTyxRQUFRUCxVQUFVLEdBQ2xCTyxRQUFRUCxVQUFVLEdBQUc7WUFBQ08sUUFBUVAsVUFBVTtTQUFDLEdBQUcsRUFBRTtLQUNuRDtJQUVELElBQUdVLHVCQUF1QjtRQUN4QnRDLHVCQUF1Qm9DO1FBQ3ZCckMseUJBQXlCcUM7SUFDM0I7SUFFQSxJQUFHRCxRQUFRUSxZQUFZLEVBQUU7UUFDdkI5QixpQkFBaUJ1QixTQUFTUSxLQUFLLEVBQUVULFFBQVFRLFlBQVk7SUFDdkQ7SUFFQSxJQUFHUixRQUFRVSxjQUFjLEVBQUU7UUFDekJoQyxpQkFBaUJ1QixTQUFTVSxRQUFRLEVBQUVYLFFBQVFVLGNBQWM7SUFDNUQ7SUFFQXZCLGdCQUFnQmMsU0FBU1EsS0FBSyxFQUFFSjtJQUNoQ2xCLGdCQUFnQmMsU0FBU1UsUUFBUSxFQUFFTjtJQUVuQyxNQUFNTyxTQUFTWCxTQUFTWSxXQUFXO0lBRW5DLE9BQU8sT0FBT0M7UUFDWixJQUFJO1lBQ0YsTUFBTUMsaUJBQTZCLE1BQU1oRCxjQUFjbUMsZ0JBQWdCWTtZQUN2RSxNQUFNRSxrQkFBa0JsRCx1QkFBdUJnRDtZQUUvQyxNQUFNRyxzQkFBc0I7Z0JBQzFCQyxRQUFRdkQsT0FBT3dELEdBQUc7Z0JBQ2xCLEdBQUdKLGNBQWM7Z0JBQ2pCQztnQkFDQUksU0FBU047WUFDWDtZQUVBLE1BQU1PLFlBQVlwRCxjQUFjNkM7WUFDaEMsTUFBTSxFQUFDUSxJQUFJLEVBQUMsR0FBR0Q7WUFFZixJQUFHLENBQUNDLE1BQU1DLE9BQU87Z0JBQ2YzQixRQUFRQyxJQUFJLENBQUM7Z0JBRWIsT0FBTztvQkFDTHlCLE1BQU1FLEtBQUtDLFNBQVMsQ0FBQzt3QkFDbkJDLE1BQU07d0JBQ05DLFFBQVE7NEJBQUM7Z0NBQ1A3QixTQUFTOzRCQUNYO3lCQUFFO29CQUNKO29CQUNBOEIsU0FBUzt3QkFDUCxnQkFBZ0I7b0JBQ2xCO29CQUNBQyxZQUFZO2dCQUNkO1lBQ0Y7WUFFQSxJQUFJO2dCQUNGLE1BQU1DLFNBQVMsTUFBTUMsUUFBUTVELE9BQU8sQ0FBQ1YsUUFBUTtvQkFDM0N1RSxjQUFjZjtvQkFDZEw7b0JBQ0F4QyxRQUFRa0QsS0FBS0MsS0FBSztvQkFDbEJVLGdCQUFnQlgsS0FBS1ksU0FBUztnQkFDaEM7Z0JBRUEsSUFBR0osT0FBT0gsTUFBTSxJQUFJRyxPQUFPSCxNQUFNLENBQUN0QyxNQUFNLEdBQUcsR0FBRztvQkFDNUNPLFFBQVFELEtBQUssQ0FBQyw2QkFBNkJtQyxPQUFPSCxNQUFNO2dCQUMxRDtnQkFFQSxPQUFPO29CQUNMTCxNQUFNRSxLQUFLQyxTQUFTLENBQUNLO29CQUNyQkYsU0FBUzt3QkFDUCxnQkFBZ0I7b0JBQ2xCO29CQUNBQyxZQUFZO2dCQUNkO1lBQ0YsRUFBRSxPQUFNTSxjQUF1QjtnQkFDN0J2QyxRQUFRRCxLQUFLLENBQUMsbUNBQW1Dd0M7Z0JBRWpELE1BQU1DLGVBQWVELHdCQUF3QkUsUUFBUUYsYUFBYXJDLE9BQU8sR0FBRztnQkFDNUUsTUFBTXdDLGFBQWFILHdCQUF3QkUsUUFBUUYsYUFBYUksS0FBSyxHQUFHQztnQkFFeEUsT0FBTztvQkFDTGxCLE1BQU1FLEtBQUtDLFNBQVMsQ0FBQzt3QkFDbkJDLE1BQU07d0JBQ05DLFFBQVE7NEJBQUM7Z0NBQ1A3QixTQUFTc0M7Z0NBQ1RHLE9BQU9FLFFBQVFDLEdBQUcsQ0FBQ0MsUUFBUSxLQUFLLGdCQUFnQkwsYUFBYUU7NEJBQy9EO3lCQUFFO29CQUNKO29CQUNBWixTQUFTO3dCQUNQLGdCQUFnQjtvQkFDbEI7b0JBQ0FDLFlBQVk7Z0JBQ2Q7WUFDRjtRQUNGLEVBQUUsT0FBTWUsS0FBYztZQUNwQmhELFFBQVFELEtBQUssQ0FBQyxrQkFBa0I7Z0JBQzlCRyxTQUFTOEMsZUFBZVAsUUFBUU8sSUFBSTlDLE9BQU8sR0FBRztnQkFDOUN5QyxPQUFPSyxlQUFlUCxRQUFRTyxJQUFJTCxLQUFLLEdBQUdDO1lBQzVDO1lBRUEsTUFBTUosZUFBZVEsZUFBZVAsUUFBUU8sSUFBSTlDLE9BQU8sR0FBRztZQUMxRCxNQUFNd0MsYUFBYU0sZUFBZVAsUUFBUU8sSUFBSUwsS0FBSyxHQUFHQztZQUV0RCxPQUFPO2dCQUNMbEIsTUFBTUUsS0FBS0MsU0FBUyxDQUFDO29CQUNuQkMsTUFBTTtvQkFDTkMsUUFBUTt3QkFBQzs0QkFDUDdCLFNBQVNzQzs0QkFDVEcsT0FBT0UsUUFBUUMsR0FBRyxDQUFDQyxRQUFRLEtBQUssZ0JBQWdCTCxhQUFhRTt3QkFDL0Q7cUJBQUU7Z0JBQ0o7Z0JBQ0FaLFNBQVM7b0JBQ1AsZ0JBQWdCO2dCQUNsQjtnQkFDQUMsWUFBWTtZQUNkO1FBQ0Y7SUFDRjtBQUNGLEVBQUUifQ==
|
|
169
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50Ly5jb2RleC13b3JrdHJlZXMvcmVha3Rvci1waGFudGF6ZS1jaGF0L3BhY2thZ2VzL3JlYWt0b3Ivc3JjL2hhbmRsZXJzL2dyYXBocWxIYW5kbGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Z3JhcGhxbH0gZnJvbSAnZ3JhcGhxbCc7XG5pbXBvcnQge3NjaGVtYUNvbXBvc2VyfSBmcm9tICdncmFwaHFsLWNvbXBvc2UnO1xuaW1wb3J0IHR5cGUge09iamVjdFR5cGVDb21wb3NlciwgU2NoZW1hQ29tcG9zZXJ9IGZyb20gJ2dyYXBocWwtY29tcG9zZSc7XG5cbmltcG9ydCB7Q29uZmlnfSBmcm9tICcuLi9jb25maWcuanMnO1xuaW1wb3J0IHtyZWdpc3RlckRlZmF1bHRNdXRhdGlvbnN9IGZyb20gJy4uL211dGF0aW9ucy9pbmRleC5qcyc7XG5pbXBvcnQge3JlZ2lzdGVyRGVmYXVsdFF1ZXJpZXN9IGZyb20gJy4uL3F1ZXJpZXMvaW5kZXguanMnO1xuaW1wb3J0IHtleHRyYWN0TGFuZ3VhZ2VDb250ZXh0fSBmcm9tICcuLi91dGlscy9jb250ZXh0VXRpbHMuanMnO1xuaW1wb3J0IHtjcmVhdGVDb250ZXh0LCBnZXRHcWxGaWVsZHMsIGdldExhbWJkYURhdGEsIHR5cGUgTGFtYmRhRGF0YX0gZnJvbSAnLi4vdXRpbHMvaW5kZXguanMnO1xuXG5pbXBvcnQgdHlwZSB7QVBJR2F0ZXdheVByb3h5RXZlbnRWMn0gZnJvbSAnYXdzLWxhbWJkYSc7XG5pbXBvcnQgdHlwZSB7RXhlY3V0aW9uUmVzdWx0fSBmcm9tICdncmFwaHFsJztcbmltcG9ydCB0eXBlIHtBcGlDb250ZXh0fSBmcm9tICcuLi90eXBlcy9hdXRoLnR5cGVzLmpzJztcblxuZXhwb3J0IHR5cGUgR3JhcGhxbFJlc29sdmVyTWlkZGxld2FyZSA9IChcbiAgcmVzb2x2ZTogKHNvdXJjZTogdW5rbm93biwgYXJnczogdW5rbm93biwgY29udGV4dDogQXBpQ29udGV4dCwgaW5mbzogdW5rbm93bikgPT4gUHJvbWlzZTx1bmtub3duPiB8IHVua25vd24sXG4gIHNvdXJjZTogdW5rbm93bixcbiAgYXJnczogdW5rbm93bixcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgaW5mbzogdW5rbm93blxuKSA9PiBQcm9taXNlPHVua25vd24+IHwgdW5rbm93bjtcblxudHlwZSBHcmFwaHFsRmllbGRDb25maWdNYXAgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuZXhwb3J0IHR5cGUgR3JhcGhxbEhhbmRsZXJPcHRpb25zID0ge1xuICBjb21wb3Nlcj86IFNjaGVtYUNvbXBvc2VyPGFueT47XG4gIGNvbnRleHQ/OiBBcGlDb250ZXh0O1xuICBleHRyYU11dGF0aW9ucz86IEdyYXBocWxGaWVsZENvbmZpZ01hcDtcbiAgZXh0cmFRdWVyaWVzPzogR3JhcGhxbEZpZWxkQ29uZmlnTWFwO1xuICBpbmNsdWRlRGVmYXVsdHM/OiBib29sZWFuO1xuICBtaWRkbGV3YXJlPzogR3JhcGhxbFJlc29sdmVyTWlkZGxld2FyZSB8IEdyYXBocWxSZXNvbHZlck1pZGRsZXdhcmVbXTtcbn07XG5cbmNvbnN0IGFkZEZpZWxkc01pZGRsZXdhcmU6IEdyYXBocWxSZXNvbHZlck1pZGRsZXdhcmUgPSAocmVzb2x2ZSwgc291cmNlLCBhcmdzLCBjb250ZXh0OiBBcGlDb250ZXh0LCBpbmZvKSA9PiB7XG4gIGNvbnN0IGVuaGFuY2VkQ29udGV4dCA9IHtcbiAgICAuLi5jb250ZXh0LFxuICAgIGZpZWxkczogZ2V0R3FsRmllbGRzKGluZm8pXG4gIH07XG5cbiAgcmV0dXJuIHJlc29sdmUoc291cmNlLCBhcmdzLCBlbmhhbmNlZENvbnRleHQsIGluZm8pO1xufTtcblxuY29uc3QgYWRkTWlzc2luZ0ZpZWxkcyA9ICh0YzogT2JqZWN0VHlwZUNvbXBvc2VyPHVua25vd24sIHVua25vd24+LCBmaWVsZHM6IEdyYXBocWxGaWVsZENvbmZpZ01hcCk6IHZvaWQgPT4ge1xuICBPYmplY3QuZW50cmllcyhmaWVsZHMpLmZvckVhY2goKFtmaWVsZE5hbWUsIGZpZWxkQ29uZmlnXSkgPT4ge1xuICAgIGlmKCF0Yy5oYXNGaWVsZChmaWVsZE5hbWUpKSB7XG4gICAgICB0Yy5zZXRGaWVsZChmaWVsZE5hbWUsIGZpZWxkQ29uZmlnIGFzIGFueSk7XG4gICAgfVxuICB9KTtcbn07XG5cbmNvbnN0IGFwcGx5TWlkZGxld2FyZSA9IChcbiAgdGM6IE9iamVjdFR5cGVDb21wb3Nlcjx1bmtub3duLCB1bmtub3duPixcbiAgbWlkZGxld2FyZXM6IEdyYXBocWxSZXNvbHZlck1pZGRsZXdhcmVbXVxuKTogdm9pZCA9PiB7XG4gIGlmKG1pZGRsZXdhcmVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIE9iamVjdC5rZXlzKHRjLmdldEZpZWxkcygpKS5mb3JFYWNoKChmaWVsZE5hbWUpID0+IHtcbiAgICB0cnkge1xuICAgICAgaWYodGMuaGFzUmVzb2x2ZXIoZmllbGROYW1lKSkge1xuICAgICAgICBtaWRkbGV3YXJlcy5mb3JFYWNoKChtaWRkbGV3YXJlKSA9PiB0Yy53cmFwUmVzb2x2ZXIoZmllbGROYW1lLCBtaWRkbGV3YXJlIGFzIGFueSkpO1xuICAgICAgfVxuICAgIH0gY2F0Y2goZXJyb3I6IGFueSkge1xuICAgICAgY29uc29sZS53YXJuKGBTa2lwcGluZyBmaWVsZCAke2ZpZWxkTmFtZX0gLSBub3QgYSByZXNvbHZlcjpgLCBlcnJvci5tZXNzYWdlKTtcbiAgICB9XG4gIH0pO1xufTtcblxuLyoqXG4gKiBDcmVhdGVzIGFuIEFQSSBHYXRld2F5LWNvbXBhdGlibGUgR3JhcGhRTCBoYW5kbGVyIGZvciBSZWFrdG9yLlxuICpcbiAqIFJlcXVlc3QgZXhwZWN0YXRpb25zOlxuICogLSBgZXZlbnQuYm9keS5xdWVyeWAgaXMgYSBHcmFwaFFMIG9wZXJhdGlvbiBzdHJpbmcuXG4gKiAtIGBldmVudC5ib2R5LnZhcmlhYmxlc2AgaXMgb3B0aW9uYWwgb3BlcmF0aW9uIHZhcmlhYmxlcy5cbiAqXG4gKiBSdW50aW1lIGJlaGF2aW9yOlxuICogLSBCdWlsZHMgcGVyLXJlcXVlc3QgY29udGV4dCAoYGNvbmZpZ2AsIGF1dGgvc2Vzc2lvbiBjb250ZXh0LCBsYW5ndWFnZSBjb250ZXh0LCByZXF1ZXN0KS5cbiAqIC0gQXBwbGllcyByZXNvbHZlciBtaWRkbGV3YXJlIHRvIGV4cG9zZSBzZWxlY3RlZCBHcmFwaFFMIGZpZWxkcyBvbiBgY29udGV4dC5maWVsZHNgLlxuICogLSBFeGVjdXRlcyBvcGVyYXRpb24gdXNpbmcgdGhlIGNvbXBvc2VkIHNjaGVtYS5cbiAqXG4gKiBSZXNwb25zZSBjb250cmFjdDpcbiAqIC0gUmV0dXJucyBge3N0YXR1c0NvZGUsIGhlYWRlcnMsIGJvZHl9YCB3aXRoIEpTT04gYm9keS5cbiAqIC0gUmV0dXJucyBgMjAwYCBmb3IgR3JhcGhRTCByZXNwb25zZXMgKGluY2x1ZGluZyBHcmFwaFFMIGVycm9ycyBpbiBgZXJyb3JzYCkuXG4gKiAtIFJldHVybnMgYDUwMGAgb25seSBmb3IgaGFuZGxlci9ydW50aW1lIGZhaWx1cmVzLlxuICpcbiAqIFNlZSBSRUFETUU6IFwiR3JhcGhRTCBIYW5kbGVyIFVzYWdlXCIgZm9yIGludGVncmF0aW9uIGV4YW1wbGVzLlxuICovXG5leHBvcnQgY29uc3QgY3JlYXRlR3JhcGhxbEhhbmRsZXIgPSAob3B0aW9uczogR3JhcGhxbEhhbmRsZXJPcHRpb25zID0ge30pID0+IHtcbiAgY29uc3QgY29tcG9zZXIgPSBvcHRpb25zLmNvbXBvc2VyIHx8IHNjaGVtYUNvbXBvc2VyO1xuICBjb25zdCBpbml0aWFsQ29udGV4dCA9IChvcHRpb25zLmNvbnRleHQgfHwge30pIGFzIEFwaUNvbnRleHQ7XG4gIGNvbnN0IHNob3VsZEluY2x1ZGVEZWZhdWx0cyA9IG9wdGlvbnMuaW5jbHVkZURlZmF1bHRzICE9PSBmYWxzZTtcbiAgY29uc3QgbWlkZGxld2FyZUxpc3QgPSBbXG4gICAgYWRkRmllbGRzTWlkZGxld2FyZSxcbiAgICAuLi4oQXJyYXkuaXNBcnJheShvcHRpb25zLm1pZGRsZXdhcmUpXG4gICAgICA/IG9wdGlvbnMubWlkZGxld2FyZVxuICAgICAgOiBvcHRpb25zLm1pZGRsZXdhcmUgPyBbb3B0aW9ucy5taWRkbGV3YXJlXSA6IFtdKVxuICBdO1xuXG4gIGlmKHNob3VsZEluY2x1ZGVEZWZhdWx0cykge1xuICAgIHJlZ2lzdGVyRGVmYXVsdFF1ZXJpZXMoY29tcG9zZXIpO1xuICAgIHJlZ2lzdGVyRGVmYXVsdE11dGF0aW9ucyhjb21wb3Nlcik7XG4gIH1cblxuICBpZihvcHRpb25zLmV4dHJhUXVlcmllcykge1xuICAgIGFkZE1pc3NpbmdGaWVsZHMoY29tcG9zZXIuUXVlcnksIG9wdGlvbnMuZXh0cmFRdWVyaWVzKTtcbiAgfVxuXG4gIGlmKG9wdGlvbnMuZXh0cmFNdXRhdGlvbnMpIHtcbiAgICBhZGRNaXNzaW5nRmllbGRzKGNvbXBvc2VyLk11dGF0aW9uLCBvcHRpb25zLmV4dHJhTXV0YXRpb25zKTtcbiAgfVxuXG4gIGFwcGx5TWlkZGxld2FyZShjb21wb3Nlci5RdWVyeSwgbWlkZGxld2FyZUxpc3QpO1xuICBhcHBseU1pZGRsZXdhcmUoY29tcG9zZXIuTXV0YXRpb24sIG1pZGRsZXdhcmVMaXN0KTtcblxuICBjb25zdCBzY2hlbWEgPSBjb21wb3Nlci5idWlsZFNjaGVtYSgpO1xuXG4gIHJldHVybiBhc3luYyAoZXZlbnQ6IEFQSUdhdGV3YXlQcm94eUV2ZW50VjIpOiBQcm9taXNlPEV4ZWN1dGlvblJlc3VsdCB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+PiA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHVwZGF0ZWRDb250ZXh0OiBBcGlDb250ZXh0ID0gYXdhaXQgY3JlYXRlQ29udGV4dChpbml0aWFsQ29udGV4dCwgZXZlbnQpO1xuICAgICAgY29uc3QgbGFuZ3VhZ2VDb250ZXh0ID0gZXh0cmFjdExhbmd1YWdlQ29udGV4dChldmVudCk7XG5cbiAgICAgIGNvbnN0IGNvbnRleHRXaXRoTGFuZ3VhZ2UgPSB7XG4gICAgICAgIGNvbmZpZzogQ29uZmlnLmdldCgpLFxuICAgICAgICAuLi51cGRhdGVkQ29udGV4dCxcbiAgICAgICAgbGFuZ3VhZ2VDb250ZXh0LFxuICAgICAgICByZXF1ZXN0OiBldmVudFxuICAgICAgfTtcblxuICAgICAgY29uc3QgcGFyc2VEYXRhID0gZ2V0TGFtYmRhRGF0YShldmVudCBhcyB1bmtub3duIGFzIExhbWJkYURhdGEpO1xuICAgICAgY29uc3Qge2JvZHl9ID0gcGFyc2VEYXRhO1xuXG4gICAgICBpZighYm9keT8ucXVlcnkpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdObyBHcmFwaFFMIHF1ZXJ5IGZvdW5kIGluIHJlcXVlc3QgYm9keScpO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgZGF0YTogbnVsbCxcbiAgICAgICAgICAgIGVycm9yczogW3tcbiAgICAgICAgICAgICAgbWVzc2FnZTogJ05vIEdyYXBoUUwgcXVlcnkgZm91bmQgaW4gcmVxdWVzdCBib2R5J1xuICAgICAgICAgICAgfV1cbiAgICAgICAgICB9KSxcbiAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzdGF0dXNDb2RlOiAyMDBcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgUHJvbWlzZS5yZXNvbHZlKGdyYXBocWwoe1xuICAgICAgICAgIGNvbnRleHRWYWx1ZTogY29udGV4dFdpdGhMYW5ndWFnZSxcbiAgICAgICAgICBzY2hlbWEsXG4gICAgICAgICAgc291cmNlOiBib2R5LnF1ZXJ5LFxuICAgICAgICAgIHZhcmlhYmxlVmFsdWVzOiBib2R5LnZhcmlhYmxlc1xuICAgICAgICB9KSk7XG5cbiAgICAgICAgaWYocmVzdWx0LmVycm9ycyAmJiByZXN1bHQuZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdHcmFwaFFMIGV4ZWN1dGlvbiBlcnJvcnM6JywgcmVzdWx0LmVycm9ycyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGJvZHk6IEpTT04uc3RyaW5naWZ5KHJlc3VsdCksXG4gICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAgc3RhdHVzQ29kZTogMjAwXG4gICAgICAgIH07XG4gICAgICB9IGNhdGNoKGdyYXBocWxFcnJvcjogdW5rbm93bikge1xuICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBkdXJpbmcgR3JhcGhRTCBleGVjdXRpb246JywgZ3JhcGhxbEVycm9yKTtcblxuICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBncmFwaHFsRXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGdyYXBocWxFcnJvci5tZXNzYWdlIDogJ0dyYXBoUUwgZXhlY3V0aW9uIGVycm9yJztcbiAgICAgICAgY29uc3QgZXJyb3JTdGFjayA9IGdyYXBocWxFcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZ3JhcGhxbEVycm9yLnN0YWNrIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgZGF0YTogbnVsbCxcbiAgICAgICAgICAgIGVycm9yczogW3tcbiAgICAgICAgICAgICAgbWVzc2FnZTogZXJyb3JNZXNzYWdlLFxuICAgICAgICAgICAgICBzdGFjazogcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCcgPyBlcnJvclN0YWNrIDogdW5kZWZpbmVkXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgICB9LFxuICAgICAgICAgIHN0YXR1c0NvZGU6IDUwMFxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0gY2F0Y2goZXJyOiB1bmtub3duKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdIYW5kbGVyIGVycm9yOicsIHtcbiAgICAgICAgbWVzc2FnZTogZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6ICdVbmtub3duIGVycm9yJyxcbiAgICAgICAgc3RhY2s6IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLnN0YWNrIDogdW5kZWZpbmVkXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIubWVzc2FnZSA6ICdBbiB1bmtub3duIGVycm9yIG9jY3VycmVkIGluIHRoZSBoYW5kbGVyJztcbiAgICAgIGNvbnN0IGVycm9yU3RhY2sgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5zdGFjayA6IHVuZGVmaW5lZDtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIGRhdGE6IG51bGwsXG4gICAgICAgICAgZXJyb3JzOiBbe1xuICAgICAgICAgICAgbWVzc2FnZTogZXJyb3JNZXNzYWdlLFxuICAgICAgICAgICAgc3RhY2s6IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnID8gZXJyb3JTdGFjayA6IHVuZGVmaW5lZFxuICAgICAgICAgIH1dXG4gICAgICAgIH0pLFxuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICB9LFxuICAgICAgICBzdGF0dXNDb2RlOiA1MDBcbiAgICAgIH07XG4gICAgfVxuICB9O1xufTtcbiJdLCJuYW1lcyI6WyJncmFwaHFsIiwic2NoZW1hQ29tcG9zZXIiLCJDb25maWciLCJyZWdpc3RlckRlZmF1bHRNdXRhdGlvbnMiLCJyZWdpc3RlckRlZmF1bHRRdWVyaWVzIiwiZXh0cmFjdExhbmd1YWdlQ29udGV4dCIsImNyZWF0ZUNvbnRleHQiLCJnZXRHcWxGaWVsZHMiLCJnZXRMYW1iZGFEYXRhIiwiYWRkRmllbGRzTWlkZGxld2FyZSIsInJlc29sdmUiLCJzb3VyY2UiLCJhcmdzIiwiY29udGV4dCIsImluZm8iLCJlbmhhbmNlZENvbnRleHQiLCJmaWVsZHMiLCJhZGRNaXNzaW5nRmllbGRzIiwidGMiLCJPYmplY3QiLCJlbnRyaWVzIiwiZm9yRWFjaCIsImZpZWxkTmFtZSIsImZpZWxkQ29uZmlnIiwiaGFzRmllbGQiLCJzZXRGaWVsZCIsImFwcGx5TWlkZGxld2FyZSIsIm1pZGRsZXdhcmVzIiwibGVuZ3RoIiwia2V5cyIsImdldEZpZWxkcyIsImhhc1Jlc29sdmVyIiwibWlkZGxld2FyZSIsIndyYXBSZXNvbHZlciIsImVycm9yIiwiY29uc29sZSIsIndhcm4iLCJtZXNzYWdlIiwiY3JlYXRlR3JhcGhxbEhhbmRsZXIiLCJvcHRpb25zIiwiY29tcG9zZXIiLCJpbml0aWFsQ29udGV4dCIsInNob3VsZEluY2x1ZGVEZWZhdWx0cyIsImluY2x1ZGVEZWZhdWx0cyIsIm1pZGRsZXdhcmVMaXN0IiwiQXJyYXkiLCJpc0FycmF5IiwiZXh0cmFRdWVyaWVzIiwiUXVlcnkiLCJleHRyYU11dGF0aW9ucyIsIk11dGF0aW9uIiwic2NoZW1hIiwiYnVpbGRTY2hlbWEiLCJldmVudCIsInVwZGF0ZWRDb250ZXh0IiwibGFuZ3VhZ2VDb250ZXh0IiwiY29udGV4dFdpdGhMYW5ndWFnZSIsImNvbmZpZyIsImdldCIsInJlcXVlc3QiLCJwYXJzZURhdGEiLCJib2R5IiwicXVlcnkiLCJKU09OIiwic3RyaW5naWZ5IiwiZGF0YSIsImVycm9ycyIsImhlYWRlcnMiLCJzdGF0dXNDb2RlIiwicmVzdWx0IiwiUHJvbWlzZSIsImNvbnRleHRWYWx1ZSIsInZhcmlhYmxlVmFsdWVzIiwidmFyaWFibGVzIiwiZ3JhcGhxbEVycm9yIiwiZXJyb3JNZXNzYWdlIiwiRXJyb3IiLCJlcnJvclN0YWNrIiwic3RhY2siLCJ1bmRlZmluZWQiLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJlcnIiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVFBLE9BQU8sUUFBTyxVQUFVO0FBQ2hDLFNBQVFDLGNBQWMsUUFBTyxrQkFBa0I7QUFHL0MsU0FBUUMsTUFBTSxRQUFPLGVBQWU7QUFDcEMsU0FBUUMsd0JBQXdCLFFBQU8sd0JBQXdCO0FBQy9ELFNBQVFDLHNCQUFzQixRQUFPLHNCQUFzQjtBQUMzRCxTQUFRQyxzQkFBc0IsUUFBTywyQkFBMkI7QUFDaEUsU0FBUUMsYUFBYSxFQUFFQyxZQUFZLEVBQUVDLGFBQWEsUUFBd0Isb0JBQW9CO0FBeUI5RixNQUFNQyxzQkFBaUQsQ0FBQ0MsU0FBU0MsUUFBUUMsTUFBTUMsU0FBcUJDO0lBQ2xHLE1BQU1DLGtCQUFrQjtRQUN0QixHQUFHRixPQUFPO1FBQ1ZHLFFBQVFULGFBQWFPO0lBQ3ZCO0lBRUEsT0FBT0osUUFBUUMsUUFBUUMsTUFBTUcsaUJBQWlCRDtBQUNoRDtBQUVBLE1BQU1HLG1CQUFtQixDQUFDQyxJQUEwQ0Y7SUFDbEVHLE9BQU9DLE9BQU8sQ0FBQ0osUUFBUUssT0FBTyxDQUFDLENBQUMsQ0FBQ0MsV0FBV0MsWUFBWTtRQUN0RCxJQUFHLENBQUNMLEdBQUdNLFFBQVEsQ0FBQ0YsWUFBWTtZQUMxQkosR0FBR08sUUFBUSxDQUFDSCxXQUFXQztRQUN6QjtJQUNGO0FBQ0Y7QUFFQSxNQUFNRyxrQkFBa0IsQ0FDdEJSLElBQ0FTO0lBRUEsSUFBR0EsWUFBWUMsTUFBTSxLQUFLLEdBQUc7UUFDM0I7SUFDRjtJQUVBVCxPQUFPVSxJQUFJLENBQUNYLEdBQUdZLFNBQVMsSUFBSVQsT0FBTyxDQUFDLENBQUNDO1FBQ25DLElBQUk7WUFDRixJQUFHSixHQUFHYSxXQUFXLENBQUNULFlBQVk7Z0JBQzVCSyxZ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
|
package/lib/index.d.ts
CHANGED
|
@@ -9,6 +9,7 @@ export { schemaComposer } from 'graphql-compose';
|
|
|
9
9
|
export * from './actions/index.js';
|
|
10
10
|
export * from './adapters/index.js';
|
|
11
11
|
export * from './config.js';
|
|
12
|
+
export * from './durableChat/index.js';
|
|
12
13
|
export { COLLECTIONS, ConnectionType as ConnectionTypes, DEFAULT_DOCUMENT_COLLECTIONS, DEFAULT_EDGE_COLLECTIONS, EDGES, PrivacyLevel, ReactionType } from './constants/collections.js';
|
|
13
14
|
export type { ConnectionTypeType as ConnectionTypeValue, PrivacyLevelType, ReactionTypeType } from './constants/collections.js';
|
|
14
15
|
export * from './handlers/graphqlHandler.js';
|
package/lib/index.js
CHANGED
|
@@ -7,6 +7,7 @@ export { schemaComposer } from 'graphql-compose';
|
|
|
7
7
|
export * from './actions/index.js';
|
|
8
8
|
export * from './adapters/index.js';
|
|
9
9
|
export * from './config.js';
|
|
10
|
+
export * from './durableChat/index.js';
|
|
10
11
|
export { COLLECTIONS, ConnectionType as ConnectionTypes, DEFAULT_DOCUMENT_COLLECTIONS, DEFAULT_EDGE_COLLECTIONS, EDGES, PrivacyLevel, ReactionType } from './constants/collections.js';
|
|
11
12
|
export * from './handlers/graphqlHandler.js';
|
|
12
13
|
export * from './lambdas/authorizer.js';
|
|
@@ -21,4 +22,4 @@ export * from './videoProcessing.js';
|
|
|
21
22
|
export const reaktorSchema = ''; // printSchema(schemaComposer.buildSchema());
|
|
22
23
|
export const reaktorResolvers = schemaComposer.getResolveMethods();
|
|
23
24
|
|
|
24
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50Ly5jb2RleC13b3JrdHJlZXMvcmVha3Rvci1waGFudGF6ZS1jaGF0L3BhY2thZ2VzL3JlYWt0b3Ivc3JjL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBpcyBzdWJqZWN0IHRvIHRoZSBhY2NvbXBhbnlpbmcgY29tbWVyY2lhbCBMSUNFTlNFLlxuICovXG5leHBvcnQge1xuICBncmFwaHFsLCBHcmFwaFFMQm9vbGVhbixcbiAgR3JhcGhRTEZsb2F0LFxuICBHcmFwaFFMSUQsXG4gIEdyYXBoUUxJbnQsXG4gIEdyYXBoUUxMaXN0LCBHcmFwaFFMTm9uTnVsbCwgR3JhcGhRTE9iamVjdFR5cGUsIEdyYXBoUUxTdHJpbmcsIGdyYXBocWxTeW5jLFxuICBwcmludFNjaGVtYVxufSBmcm9tICdncmFwaHFsJztcbmltcG9ydCB7c2NoZW1hQ29tcG9zZXJ9IGZyb20gJ2dyYXBocWwtY29tcG9zZSc7XG5cblxuZXhwb3J0IHR5cGUge0V4ZWN1dGlvblJlc3VsdH0gZnJvbSAnZ3JhcGhxbCc7XG5leHBvcnQgdHlwZSB7SW5wdXRUeXBlQ29tcG9zZXIsIE9iamVjdFR5cGVDb21wb3Nlcn0gZnJvbSAnZ3JhcGhxbC1jb21wb3NlJztcblxuZXhwb3J0IHtzY2hlbWFDb21wb3Nlcn0gZnJvbSAnZ3JhcGhxbC1jb21wb3NlJztcbmV4cG9ydCAqIGZyb20gJy4vYWN0aW9ucy9pbmRleC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2FkYXB0ZXJzL2luZGV4LmpzJztcbmV4cG9ydCAqIGZyb20gJy4vY29uZmlnLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vZHVyYWJsZUNoYXQvaW5kZXguanMnO1xuZXhwb3J0IHtcbiAgQ09MTEVDVElPTlMsXG4gIENvbm5lY3Rpb25UeXBlIGFzIENvbm5lY3Rpb25UeXBlcyxcbiAgREVGQVVMVF9ET0NVTUVOVF9DT0xMRUNUSU9OUyxcbiAgREVGQVVMVF9FREdFX0NPTExFQ1RJT05TLFxuICBFREdFUyxcbiAgUHJpdmFjeUxldmVsLFxuICBSZWFjdGlvblR5cGVcbn0gZnJvbSAnLi9jb25zdGFudHMvY29sbGVjdGlvbnMuanMnO1xuZXhwb3J0IHR5cGUge1xuICBDb25uZWN0aW9uVHlwZVR5cGUgYXMgQ29ubmVjdGlvblR5cGVWYWx1ZSxcbiAgUHJpdmFjeUxldmVsVHlwZSxcbiAgUmVhY3Rpb25UeXBlVHlwZVxufSBmcm9tICcuL2NvbnN0YW50cy9jb2xsZWN0aW9ucy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2hhbmRsZXJzL2dyYXBocWxIYW5kbGVyLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vbGFtYmRhcy9hdXRob3JpemVyLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vbGFtYmRhcy9jb25uZWN0aW9uLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vbXV0YXRpb25zL2luZGV4LmpzJztcbmV4cG9ydCAqIGZyb20gJy4vb2JqZWN0VHlwZXMvaW5kZXguanMnO1xuZXhwb3J0ICogZnJvbSAnLi9xdWVyaWVzL2luZGV4LmpzJztcbmV4cG9ydCAqIGZyb20gJy4vdHlwZXMvaW5kZXguanMnO1xuZXhwb3J0ICogZnJvbSAnLi91cGxvYWQuanMnO1xuZXhwb3J0ICogZnJvbSAnLi91dGlscy9pbmRleC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3ZpZGVvUHJvY2Vzc2luZy5qcyc7XG5cbmV4cG9ydCBjb25zdCByZWFrdG9yU2NoZW1hID0gJyc7Ly8gcHJpbnRTY2hlbWEoc2NoZW1hQ29tcG9zZXIuYnVpbGRTY2hlbWEoKSk7XG5leHBvcnQgY29uc3QgcmVha3RvclJlc29sdmVycyA9IHNjaGVtYUNvbXBvc2VyLmdldFJlc29sdmVNZXRob2RzKCk7XG4iXSwibmFtZXMiOlsiZ3JhcGhxbCIsIkdyYXBoUUxCb29sZWFuIiwiR3JhcGhRTEZsb2F0IiwiR3JhcGhRTElEIiwiR3JhcGhRTEludCIsIkdyYXBoUUxMaXN0IiwiR3JhcGhRTE5vbk51bGwiLCJHcmFwaFFMT2JqZWN0VHlwZSIsIkdyYXBoUUxTdHJpbmciLCJncmFwaHFsU3luYyIsInByaW50U2NoZW1hIiwic2NoZW1hQ29tcG9zZXIiLCJDT0xMRUNUSU9OUyIsIkNvbm5lY3Rpb25UeXBlIiwiQ29ubmVjdGlvblR5cGVzIiwiREVGQVVMVF9ET0NVTUVOVF9DT0xMRUNUSU9OUyIsIkRFRkFVTFRfRURHRV9DT0xMRUNUSU9OUyIsIkVER0VTIiwiUHJpdmFjeUxldmVsIiwiUmVhY3Rpb25UeXBlIiwicmVha3RvclNjaGVtYSIsInJlYWt0b3JSZXNvbHZlcnMiLCJnZXRSZXNvbHZlTWV0aG9kcyJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBQ0QsU0FDRUEsT0FBTyxFQUFFQyxjQUFjLEVBQ3ZCQyxZQUFZLEVBQ1pDLFNBQVMsRUFDVEMsVUFBVSxFQUNWQyxXQUFXLEVBQUVDLGNBQWMsRUFBRUMsaUJBQWlCLEVBQUVDLGFBQWEsRUFBRUMsV0FBVyxFQUMxRUMsV0FBVyxRQUNOLFVBQVU7QUFDakIsU0FBUUMsY0FBYyxRQUFPLGtCQUFrQjtBQU0vQyxTQUFRQSxjQUFjLFFBQU8sa0JBQWtCO0FBQy9DLGNBQWMscUJBQXFCO0FBQ25DLGNBQWMsc0JBQXNCO0FBQ3BDLGNBQWMsY0FBYztBQUM1QixjQUFjLHlCQUF5QjtBQUN2QyxTQUNFQyxXQUFXLEVBQ1hDLGtCQUFrQkMsZUFBZSxFQUNqQ0MsNEJBQTRCLEVBQzVCQyx3QkFBd0IsRUFDeEJDLEtBQUssRUFDTEMsWUFBWSxFQUNaQyxZQUFZLFFBQ1AsNkJBQTZCO0FBTXBDLGNBQWMsK0JBQStCO0FBQzdDLGNBQWMsMEJBQTBCO0FBQ3hDLGNBQWMsMEJBQTBCO0FBQ3hDLGNBQWMsdUJBQXVCO0FBQ3JDLGNBQWMseUJBQXlCO0FBQ3ZDLGNBQWMscUJBQXFCO0FBQ25DLGNBQWMsbUJBQW1CO0FBQ2pDLGNBQWMsY0FBYztBQUM1QixjQUFjLG1CQUFtQjtBQUNqQyxjQUFjLHVCQUF1QjtBQUVyQyxPQUFPLE1BQU1DLGdCQUFnQixHQUFHLENBQUEsNkNBQTZDO0FBQzdFLE9BQU8sTUFBTUMsbUJBQW1CVixlQUFlVyxpQkFBaUIsR0FBRyJ9
|