@nlabs/reaktor 1.17.0 → 1.19.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 +182 -0
- package/docs/ASSISTANT.md +138 -0
- package/docs/GENERATION.md +42 -5
- package/docs/NATIVE_PUSH.md +56 -0
- package/lib/actions/alfredFaq.d.ts +80 -0
- package/lib/actions/alfredFaq.js +206 -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/contentGeneration.d.ts +4 -0
- package/lib/actions/contentGeneration.js +82 -10
- package/lib/actions/contentGenerationErrors.js +1 -1
- package/lib/actions/conversations.d.ts +1 -1
- package/lib/actions/conversations.js +19 -9
- package/lib/actions/crm.js +1 -1
- package/lib/actions/crud.js +26 -1
- package/lib/actions/databaseAccounts.js +1 -1
- package/lib/actions/databaseProvisioningLease.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/geminiVideo.js +1 -1
- package/lib/actions/groups.js +1 -1
- package/lib/actions/higgsfield.js +1 -1
- package/lib/actions/imageGeneration.js +1 -1
- package/lib/actions/images.js +1 -1
- package/lib/actions/index.d.ts +1 -0
- package/lib/actions/index.js +2 -1
- package/lib/actions/ios.js +1 -1
- package/lib/actions/locations.js +1 -1
- package/lib/actions/messages.js +23 -7
- package/lib/actions/notifications.js +1 -1
- package/lib/actions/ollamaGeneration.js +1 -1
- package/lib/actions/openaiResponseSession.js +1 -1
- package/lib/actions/payments.js +1 -1
- package/lib/actions/personas.js +1 -1
- package/lib/actions/phoneSupport.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 +57 -4
- package/lib/actions/videoGeneration.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/geminiGenerationAdapter.js +1 -1
- package/lib/adapters/higgsfieldAdapter.js +1 -1
- package/lib/adapters/higgsfieldModelCatalog.js +1 -1
- package/lib/adapters/higgsfieldModels.js +1 -1
- package/lib/adapters/imageAdapter.js +1 -1
- package/lib/adapters/imageGenerationAdapter.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/assistant/core.d.ts +53 -0
- package/lib/assistant/core.js +123 -0
- package/lib/assistant/faq.d.ts +26 -0
- package/lib/assistant/faq.js +238 -0
- package/lib/assistant/faqCore.d.ts +23 -0
- package/lib/assistant/faqCore.js +20 -0
- package/lib/assistant/index.d.ts +7 -0
- package/lib/assistant/index.js +5 -0
- package/lib/assistant/service.d.ts +35 -0
- package/lib/assistant/service.js +201 -0
- 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 +4 -4
- package/lib/index.js +5 -3
- package/lib/lambdas/actions/websockets.js +4 -4
- 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/higgsfield/higgsfield.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/nativePush/graphql.d.ts +14 -0
- package/lib/nativePush/graphql.js +105 -0
- package/lib/nativePush/index.d.ts +7 -0
- package/lib/nativePush/index.js +9 -0
- package/lib/nativePush/migrations.d.ts +2 -0
- package/lib/nativePush/migrations.js +36 -0
- package/lib/nativePush/nativePushContract.fixture.d.ts +22 -0
- package/lib/nativePush/nativePushContract.fixture.js +27 -0
- package/lib/nativePush/payload.d.ts +2 -0
- package/lib/nativePush/payload.js +106 -0
- package/lib/nativePush/repository.d.ts +9 -0
- package/lib/nativePush/repository.js +120 -0
- package/lib/nativePush/service.d.ts +2 -0
- package/lib/nativePush/service.js +110 -0
- package/lib/nativePush/snsProvider.d.ts +17 -0
- package/lib/nativePush/snsProvider.js +165 -0
- package/lib/nativePush/types.d.ts +89 -0
- package/lib/nativePush/types.js +3 -0
- 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.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/higgsfield.js +1 -1
- package/lib/objectTypes/iapSubscription.js +1 -1
- package/lib/objectTypes/image.js +1 -1
- package/lib/objectTypes/imageGeneration.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/objectTypes/videoGeneration.js +1 -1
- package/lib/organizations/accountLifecycle.d.ts +7 -0
- package/lib/organizations/accountLifecycle.js +106 -0
- package/lib/organizations/authorization.d.ts +9 -0
- package/lib/organizations/authorization.js +40 -0
- package/lib/organizations/billing.d.ts +38 -0
- package/lib/organizations/billing.js +277 -0
- package/lib/organizations/billingProvider.d.ts +4 -0
- package/lib/organizations/billingProvider.js +287 -0
- package/lib/organizations/billingUpdates.d.ts +9 -0
- package/lib/organizations/billingUpdates.js +388 -0
- package/lib/organizations/index.d.ts +10 -0
- package/lib/organizations/index.js +12 -0
- package/lib/organizations/mail.d.ts +10 -0
- package/lib/organizations/mail.js +60 -0
- package/lib/organizations/memberDirectory.d.ts +15 -0
- package/lib/organizations/memberDirectory.js +28 -0
- package/lib/organizations/membership.d.ts +19 -0
- package/lib/organizations/membership.js +248 -0
- package/lib/organizations/passwordRecovery.d.ts +9 -0
- package/lib/organizations/passwordRecovery.js +50 -0
- package/lib/organizations/plans.d.ts +6 -0
- package/lib/organizations/plans.js +40 -0
- package/lib/organizations/providerPagination.d.ts +6 -0
- package/lib/organizations/providerPagination.js +23 -0
- package/lib/organizations/reconciliation.d.ts +11 -0
- package/lib/organizations/reconciliation.js +400 -0
- package/lib/organizations/signup.d.ts +25 -0
- package/lib/organizations/signup.js +169 -0
- package/lib/organizations/store.d.ts +25 -0
- package/lib/organizations/store.js +167 -0
- package/lib/organizations/types.d.ts +138 -0
- package/lib/organizations/types.js +3 -0
- package/lib/organizations/verification.d.ts +3 -0
- package/lib/organizations/verification.js +51 -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.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/databaseCredentials.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/databaseCredentials.js +1 -1
- package/lib/utils/dbI18n.example.js +1 -1
- package/lib/utils/dbI18n.js +1 -1
- package/lib/utils/generationCallback.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/mediaAccess.js +1 -1
- package/lib/utils/middlewareUtils.js +1 -1
- package/lib/utils/nodeRealtime.js +1 -1
- package/lib/utils/opaqueToken.js +1 -1
- package/lib/utils/queryBuilder.js +1 -1
- package/lib/utils/schemaUtils.js +1 -1
- package/lib/utils/secretDatabase.js +1 -1
- package/lib/utils/sessionUtils.js +1 -1
- package/lib/utils/stripeUtils.js +1 -1
- package/lib/utils/stripeUtils.ts.bak +1 -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 +16 -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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9wcml2YXRlL3RtcC92YXVsdC1yZWFrdG9yLWNvbXBsZXRpb24vcGFja2FnZXMvcmVha3Rvci9zcmMvZHVyYWJsZUNoYXQvbWVzc2FnZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tYXdhaXQtaW4tbG9vcCwgbm8tdW5kZXJzY29yZS1kYW5nbGUgLS0gT3JkZXJlZCBjaGVja3MgYW5kIEFyYW5nbyBkb2N1bWVudCBpZGVudGl0aWVzLiAqL1xuaW1wb3J0IHtjcmVhdGVIYXNoLCByYW5kb21VVUlEfSBmcm9tICdub2RlOmNyeXB0byc7XG5cbmltcG9ydCB7Q2hhdEVycm9yfSBmcm9tICcuL2Vycm9ycy5qcyc7XG5pbXBvcnQge2lzQ2hhdElkZW50aWZpZXJ9IGZyb20gJy4vbWVtYmVyc2hpcC5qcyc7XG5cbmltcG9ydCB0eXBlIHtDaGF0UXVlcnl9IGZyb20gJy4vbWVtYmVyc2hpcC5qcyc7XG5pbXBvcnQgdHlwZSB7XG4gIER1cmFibGVDaGF0QXR0YWNobWVudCwgRHVyYWJsZUNoYXRNZXNzYWdlLCBEdXJhYmxlRGVsZXRlTWVzc2FnZUlucHV0LCBEdXJhYmxlRWRpdE1lc3NhZ2VJbnB1dCxcbiAgRHVyYWJsZU1lc3NhZ2VBY2tub3dsZWRnZW1lbnQsIER1cmFibGVNZXNzYWdlSG9va3MsIER1cmFibGVNZXNzYWdlTXV0YXRpb25SZXN1bHQsIER1cmFibGVTZW5kTWVzc2FnZUlucHV0XG59IGZyb20gJy4vbWVzc2FnZVR5cGVzLmpzJztcblxuY29uc3QgZGVmYXVsdEhhc2ggPSAodmFsdWU6IHVua25vd24pOiBzdHJpbmcgPT4gY3JlYXRlSGFzaCgnc2hhMjU2JykudXBkYXRlKEpTT04uc3RyaW5naWZ5KHZhbHVlKSkuZGlnZXN0KCdoZXgnKTtcbmNvbnN0IHZhbGlkVGV4dCA9IChjb250ZW50OiB1bmtub3duKTogY29udGVudCBpcyBzdHJpbmcgPT4gdHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnXG4gICYmIEFycmF5LmZyb20oY29udGVudCkubGVuZ3RoIDw9IDQwMDBcbiAgJiYgIS9bXFx1MDAwMFxcdUQ4MDAtXFx1REJGRl0oPyFbXFx1REMwMC1cXHVERkZGXSl8KD88IVtcXHVEODAwLVxcdURCRkZdKVtcXHVEQzAwLVxcdURGRkZdL3UudGVzdChjb250ZW50KTtcbmNvbnN0IHJlcXVpcmVWYWxpZCA9ICh2YWxpZDogYm9vbGVhbik6IHZvaWQgPT4ge1xuICBpZighdmFsaWQpIHtcbiAgICB0aHJvdyBuZXcgQ2hhdEVycm9yKCdpbnZhbGlkX3JlcXVlc3QnKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHJlYWREdXJhYmxlTWVzc2FnZSA9IGFzeW5jIDxURGVjaXNpb24+KFxuICByZWFkOiBDaGF0UXVlcnksIGNvbnZlcnNhdGlvbklkOiBzdHJpbmcsIG1lc3NhZ2VJZDogc3RyaW5nXG4pOiBQcm9taXNlPER1cmFibGVDaGF0TWVzc2FnZTxURGVjaXNpb24+PiA9PiB7XG4gIGNvbnN0IG1lc3NhZ2UgPSBhd2FpdCByZWFkPER1cmFibGVDaGF0TWVzc2FnZTxURGVjaXNpb24+PignUkVUVVJOIERPQ1VNRU5UKFwibWVzc2FnZXNcIiwgQG1lc3NhZ2VJZCknLCB7bWVzc2FnZUlkfSk7XG4gIGlmKCFtZXNzYWdlIHx8IG1lc3NhZ2UuY29udmVyc2F0aW9uSWQgIT09IGNvbnZlcnNhdGlvbklkIHx8IG1lc3NhZ2UuY2hhdFNjaGVtYVZlcnNpb24gIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgQ2hhdEVycm9yKCdmb3JiaWRkZW4nKTtcbiAgfVxuICByZXR1cm4gbWVzc2FnZTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVEdXJhYmxlTWVzc2FnZVBlcnNpc3RlbmNlID0gPFREZWNpc2lvbj4oaG9va3M6IER1cmFibGVNZXNzYWdlSG9va3M8VERlY2lzaW9uPikgPT4ge1xuICBjb25zdCBoYXNoID0gaG9va3MuaGFzaCB8fCBkZWZhdWx0SGFzaDtcbiAgY29uc3Qgbm93ID0gaG9va3Mubm93IHx8IERhdGUubm93O1xuICBjb25zdCB1dWlkID0gaG9va3MudXVpZCB8fCByYW5kb21VVUlEO1xuICBjb25zdCBhdXRob3JpemUgPSBhc3luYyAocmVhZDogQ2hhdFF1ZXJ5LCBjb252ZXJzYXRpb25JZDogc3RyaW5nLCBwdXJwb3NlOiAnaGlzdG9yeScgfCAnc2VuZCcgPSAnaGlzdG9yeScpID0+IHtcbiAgICBjb25zdCBtZW1iZXJzaGlwID0gYXdhaXQgaG9va3MuYXV0aG9yaXplTWVtYmVyc2hpcChyZWFkLCBob29rcy5pZGVudGl0eSwgY29udmVyc2F0aW9uSWQsIHB1cnBvc2UpO1xuICAgIGNvbnN0IGxlZ2FjeSA9IGF3YWl0IHJlYWQ8Ym9vbGVhbj4oYFJFVFVSTiBGSVJTVChGT1IgbWVzc2FnZSBJTiBtZXNzYWdlc1xuICAgICAgRklMVEVSIG1lc3NhZ2UuY29udmVyc2F0aW9uSWQgPT0gQGNvbnZlcnNhdGlvbklkXG4gICAgICAgIEFORCAobWVzc2FnZS5jaGF0U2NoZW1hVmVyc2lvbiAhPSAxIE9SICFJU19OVU1CRVIobWVzc2FnZS5zZXF1ZW5jZSkgT1IgbWVzc2FnZS5zZXF1ZW5jZSA8IDEpXG4gICAgICBMSU1JVCAxIFJFVFVSTiB0cnVlKWAsIHtjb252ZXJzYXRpb25JZH0pO1xuICAgIGlmKGxlZ2FjeSA9PT0gdHJ1ZSkge1xuICAgICAgdGhyb3cgbmV3IENoYXRFcnJvcignY29uZmxpY3QnKTtcbiAgICB9XG4gICAgcmV0dXJuIG1lbWJlcnNoaXA7XG4gIH07XG4gIGNvbnN0IHJlY2VpcHQgPSBhc3luYyA8VD4oXG4gICAgcmVhZDogQ2hhdFF1ZXJ5LCBhY3Rpb246IHN0cmluZywgY29udmVyc2F0aW9uSWQ6IHN0cmluZywga2V5OiBzdHJpbmcsIHBheWxvYWQ6IHVua25vd25cbiAgKSA9PiB7XG4gICAgY29uc3QgcmVxdWVzdElkID0gaGFzaChbYWN0aW9uLCBjb252ZXJzYXRpb25JZCwgaG9va3MuaWRlbnRpdHkucGVyc29uYUlkLCBrZXldKTtcbiAgICBjb25zdCBwYXlsb2FkSGFzaCA9IGhhc2gocGF5bG9hZCk7XG4gICAgY29uc3QgcmVjb3JkID0gYXdhaXQgcmVhZDx7cmVhZG9ubHkgcGF5bG9hZEhhc2g6IHN0cmluZzsgcmVhZG9ubHkgcmVzdWx0OiBUOyByZWFkb25seSB1c2VySWQ6IHN0cmluZ30+KFxuICAgICAgJ1JFVFVSTiBET0NVTUVOVChcImNoYXRNZXNzYWdlUmVxdWVzdHNcIiwgQGtleSknLCB7a2V5OiByZXF1ZXN0SWR9KTtcbiAgICBpZihyZWNvcmQgJiYgKHJlY29yZC5wYXlsb2FkSGFzaCAhPT0gcGF5bG9hZEhhc2ggfHwgcmVjb3JkLnVzZXJJZCAhPT0gaG9va3MuaWRlbnRpdHkudXNlcklkKSkge1xuICAgICAgdGhyb3cgbmV3IENoYXRFcnJvcignY29uZmxpY3QnKTtcbiAgICB9XG4gICAgcmV0dXJuIHtwcmlvcjogcmVjb3JkPy5yZXN1bHQsIHNhdmU6IChyZXN1bHQ6IFQpID0+IHJlYWQ8Ym9vbGVhbj4oXG4gICAgICAnSU5TRVJUIEByZWNvcmQgSU4gY2hhdE1lc3NhZ2VSZXF1ZXN0cyBSRVRVUk4gdHJ1ZScsIHtyZWNvcmQ6IHtfa2V5OiByZXF1ZXN0SWQsIGFkZGVkOiBub3coKSwgY29udmVyc2F0aW9uSWQsXG4gICAgICAgIHBheWxvYWRIYXNoLCBwZXJzb25hSWQ6IGhvb2tzLmlkZW50aXR5LnBlcnNvbmFJZCwgcmVzdWx0LCB1c2VySWQ6IGhvb2tzLmlkZW50aXR5LnVzZXJJZH19KX07XG4gIH07XG4gIGNvbnN0IHJhdGVMaW1pdCA9IGFzeW5jIChyZWFkOiBDaGF0UXVlcnksIGFjdGlvbjogc3RyaW5nLCBsaW1pdDogbnVtYmVyLCBpbnRlcnZhbCA9IDYwMDAwKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgY29uc3Qga2V5ID0gaGFzaChbaG9va3MuaWRlbnRpdHkudXNlcklkLCBob29rcy5pZGVudGl0eS5wZXJzb25hSWQsIGFjdGlvbiwgTWF0aC5mbG9vcihub3coKSAvIGludGVydmFsKV0pO1xuICAgIGNvbnN0IGFsbG93ZWQgPSBhd2FpdCByZWFkPGJvb2xlYW4+KGBMRVQgYnVja2V0ID0gRE9DVU1FTlQoJ2NoYXRSYXRlTGltaXRzJywgQGtleSlcbiAgICAgIEZJTFRFUiBidWNrZXQgPT0gbnVsbCBPUiBidWNrZXQuY291bnQgPCBAbGltaXRcbiAgICAgIFVQU0VSVCB7X2tleTogQGtleX0gSU5TRVJUIHtfa2V5OiBAa2V5LCBjb3VudDogMSwgcGVyc29uYUlkOiBAcGVyc29uYUlkLCB1c2VySWQ6IEB1c2VySWR9XG4gICAgICBVUERBVEUge2NvdW50OiBPTEQuY291bnQgKyAxLCBwZXJzb25hSWQ6IEBwZXJzb25hSWQsIHVzZXJJZDogQHVzZXJJZH1cbiAgICAgIElOIGNoYXRSYXRlTGltaXRzIFJFVFVSTiB0cnVlYCwge2tleSwgbGltaXQsIHBlcnNvbmFJZDogaG9va3MuaWRlbnRpdHkucGVyc29uYUlkLCB1c2VySWQ6IGhvb2tzLmlkZW50aXR5LnVzZXJJZH0pO1xuICAgIGlmKGFsbG93ZWQgIT09IHRydWUpIHtcbiAgICAgIHRocm93IG5ldyBDaGF0RXJyb3IoJ3JhdGVfbGltaXRlZCcpO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgcnVuID0gPFQ+KG9wZXJhdGlvbjogKHJlYWQ6IENoYXRRdWVyeSkgPT4gUHJvbWlzZTxUPiwgd3JpdGUgPSB0cnVlKTogUHJvbWlzZTxUPiA9PiBob29rcy5ydW4oYXN5bmMgKHJlYWQpID0+IHtcbiAgICBhd2FpdCBob29rcy5hdXRob3JpemVJZGVudGl0eShyZWFkLCBob29rcy5pZGVudGl0eSk7XG4gICAgcmV0dXJuIG9wZXJhdGlvbihyZWFkKTtcbiAgfSwgd3JpdGUpO1xuICBjb25zdCBzZW5kTWVzc2FnZSA9IChpbnB1dDogRHVyYWJsZVNlbmRNZXNzYWdlSW5wdXQpOiBQcm9taXNlPER1cmFibGVNZXNzYWdlQWNrbm93bGVkZ2VtZW50PiA9PiBydW4oYXN5bmMgKHJlYWQpID0+IHtcbiAgICByZXF1aXJlVmFsaWQoQm9vbGVhbihpbnB1dCkgJiYgaXNDaGF0SWRlbnRpZmllcihpbnB1dC5jb252ZXJzYXRpb25JZCkgJiYgaXNDaGF0SWRlbnRpZmllcihpbnB1dC5jbGllbnRNZXNzYWdlSWQpXG4gICAgICAmJiBpbnB1dC5zZW5kZXJQZXJzb25hSWQgPT09IGhvb2tzLmlkZW50aXR5LnBlcnNvbmFJZCAmJiB2YWxpZFRleHQoaW5wdXQuY29udGVudClcbiAgICAgICYmIEFycmF5LmlzQXJyYXkoaW5wdXQuYXR0YWNobWVudElkcykgJiYgaW5wdXQuYXR0YWNobWVudElkcy5sZW5ndGggPD0gNFxuICAgICAgJiYgaW5wdXQuYXR0YWNobWVudElkcy5ldmVyeShpc0NoYXRJZGVudGlmaWVyKSAmJiBuZXcgU2V0KGlucHV0LmF0dGFjaG1lbnRJZHMpLnNpemUgPT09IGlucHV0LmF0dGFjaG1lbnRJZHMubGVuZ3RoXG4gICAgICAmJiAoaW5wdXQuY29udGVudC50cmltKCkubGVuZ3RoID4gMCB8fCBpbnB1dC5hdHRhY2htZW50SWRzLmxlbmd0aCA+IDApXG4gICAgICAmJiAoaW5wdXQucmVwbHlUb01lc3NhZ2VJZCA9PT0gdW5kZWZpbmVkIHx8IGlzQ2hhdElkZW50aWZpZXIoaW5wdXQucmVwbHlUb01lc3NhZ2VJZCkpKTtcbiAgICBjb25zdCByZXF1ZXN0ID0gYXdhaXQgcmVjZWlwdDxEdXJhYmxlTWVzc2FnZUFja25vd2xlZGdlbWVudD4oXG4gICAgICByZWFkLCAnc2VuZCcsIGlucHV0LmNvbnZlcnNhdGlvbklkLCBpbnB1dC5jbGllbnRNZXNzYWdlSWQsIGlucHV0KTtcbiAgICBpZihyZXF1ZXN0LnByaW9yKSB7XG4gICAgICByZXR1cm4gcmVxdWVzdC5wcmlvcjtcbiAgICB9XG4gICAgY29uc3QgbWVtYmVyc2hpcCA9IGF3YWl0IGF1dGhvcml6ZShyZWFkLCBpbnB1dC5jb252ZXJzYXRpb25JZCwgJ3NlbmQnKTtcbiAgICBhd2FpdCByYXRlTGltaXQocmVhZCwgJ3NlbmQnLCA2MCk7XG4gICAgY29uc3QgYXR0YWNobWVudHM6IER1cmFibGVDaGF0QXR0YWNobWVudFtdID0gW107XG4gICAgZm9yKGNvbnN0IGltYWdlSWQgb2YgaW5wdXQuYXR0YWNobWVudElkcykge1xuICAgICAgYXR0YWNobWVudHMucHVzaChhd2FpdCBob29rcy5hdXRob3JpemVBdHRhY2htZW50KHJlYWQsIGltYWdlSWQpKTtcbiAgICB9XG4gICAgaWYoaW5wdXQucmVwbHlUb01lc3NhZ2VJZCkge1xuICAgICAgY29uc3QgcXVvdGVkID0gYXdhaXQgcmVhZER1cmFibGVNZXNzYWdlPFREZWNpc2lvbj4ocmVhZCwgaW5wdXQuY29udmVyc2F0aW9uSWQsIGlucHV0LnJlcGx5VG9NZXNzYWdlSWQpO1xuICAgICAgYXdhaXQgaG9va3MuYXV0aG9yaXplTWVzc2FnZVZpc2libGUocmVhZCwgaG9va3MuaWRlbnRpdHksIHF1b3RlZCwgbWVtYmVyc2hpcCk7XG4gICAgICBpZihxdW90ZWQuZGVsZXRlZCB8fCBxdW90ZWQubW9iaWxlUGxhdGZvcm1EaXNwb3NpdGlvbiAhPT0gJ2FsbG93ZWQnKSB7XG4gICAgICAgIHRocm93IG5ldyBDaGF0RXJyb3IoJ2ZvcmJpZGRlbicpO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCB0aW1lc3RhbXAgPSBub3coKTtcbiAgICBjb25zdCBzZXF1ZW5jZSA9IGF3YWl0IHJlYWQ8bnVtYmVyPihgRk9SIGNvbnZlcnNhdGlvbiBJTiBjb252ZXJzYXRpb25zIEZJTFRFUiBjb252ZXJzYXRpb24uX2tleSA9PSBAaWRcbiAgICAgIEFORCBjb252ZXJzYXRpb24uY2hhdFNjaGVtYVZlcnNpb24gPT0gMSBBTkQgY29udmVyc2F0aW9uLnN0YXRlID09ICdhY3RpdmUnXG4gICAgICBBTkQgSVNfTlVNQkVSKGNvbnZlcnNhdGlvbi5sYXN0U2VxdWVuY2UpIEFORCBjb252ZXJzYXRpb24ubGFzdFNlcXVlbmNlIDwgOTAwNzE5OTI1NDc0MDk5MVxuICAgICAgVVBEQVRFIGNvbnZlcnNhdGlvbiBXSVRIIHtsYXN0U2VxdWVuY2U6IGNvbnZlcnNhdGlvbi5sYXN0U2VxdWVuY2UgKyAxLCBtb2RpZmllZDogQG5vd31cbiAgICAgIElOIGNvbnZlcnNhdGlvbnMgUkVUVVJOIE5FVy5sYXN0U2VxdWVuY2VgLCB7aWQ6IGlucHV0LmNvbnZlcnNhdGlvbklkLCBub3c6IHRpbWVzdGFtcH0pO1xuICAgIGlmKCFOdW1iZXIuaXNTYWZlSW50ZWdlcihzZXF1ZW5jZSkgfHwgTnVtYmVyKHNlcXVlbmNlKSA8IDEpIHtcbiAgICAgIHRocm93IG5ldyBDaGF0RXJyb3IoJ3VuYXZhaWxhYmxlJyk7XG4gICAgfVxuICAgIGNvbnN0IG1lc3NhZ2VJZCA9IHV1aWQoKTtcbiAgICBjb25zdCBjb250ZW50VmVyc2lvbiA9IGhhc2goW21lc3NhZ2VJZCwgMSwgaW5wdXQuY29udGVudF0pO1xuICAgIGNvbnN0IHByb2plY3Rpb24gPSBhd2FpdCBob29rcy5jbGFzc2lmeUNvbnRlbnQoe2NvbnRlbnQ6IGlucHV0LmNvbnRlbnQgfHwgJyAnLCBjb250ZW50VmVyc2lvbn0pO1xuICAgIGNvbnN0IHJlY29yZDogRHVyYWJsZUNoYXRNZXNzYWdlPFREZWNpc2lvbj4gPSB7X2tleTogbWVzc2FnZUlkLCBhZGRlZDogdGltZXN0YW1wLFxuICAgICAgYXR0YWNobWVudElkczogaW5wdXQuYXR0YWNobWVudElkcywgYXR0YWNobWVudHMsIGNoYXRTY2hlbWFWZXJzaW9uOiAxLCBjbGllbnRNZXNzYWdlSWQ6IGlucHV0LmNsaWVudE1lc3NhZ2VJZCxcbiAgICAgIGNvbnRlbnQ6IGlucHV0LmNvbnRlbnQsIGNvbnRlbnRSZXZpc2lvbjogMSwgY29udmVyc2F0aW9uSWQ6IGlucHV0LmNvbnZlcnNhdGlvbklkLCBkZWxldGVkOiBmYWxzZSxcbiAgICAgIG1vYmlsZUNvbnRlbnRWZXJzaW9uOiBjb250ZW50VmVyc2lvbiwgbW9iaWxlRGVjaXNpb246IHByb2plY3Rpb24uZGVjaXNpb24sXG4gICAgICBtb2JpbGVQbGF0Zm9ybURpc3Bvc2l0aW9uOiBwcm9qZWN0aW9uLnBsYXRmb3JtRGlzcG9zaXRpb24gfHwgJ2FsbG93ZWQnLCBtb2RpZmllZDogdGltZXN0YW1wLFxuICAgICAgcmVwbHlUb01lc3NhZ2VJZDogaW5wdXQucmVwbHlUb01lc3NhZ2VJZCwgcmV2aXNpb246IDEsIHNlbmRlclBlcnNvbmFJZDogaG9va3MuaWRlbnRpdHkucGVyc29uYUlkLFxuICAgICAgc2VxdWVuY2U6IHNlcXVlbmNlISwgdXNlcklkOiBob29rcy5pZGVudGl0eS51c2VySWR9O1xuICAgIGlmKGF3YWl0IHJlYWQ8Ym9vbGVhbj4oJ0lOU0VSVCBAcmVjb3JkIElOIG1lc3NhZ2VzIFJFVFVSTiB0cnVlJywge3JlY29yZH0pICE9PSB0cnVlKSB7XG4gICAgICB0aHJvdyBuZXcgQ2hhdEVycm9yKCd1bmF2YWlsYWJsZScpO1xuICAgIH1cbiAgICBhd2FpdCBob29rcy5hcHBlbmRFdmVudChyZWFkLCB7YWN0b3JQZXJzb25hSWQ6IGhvb2tzLmlkZW50aXR5LnBlcnNvbmFJZCwgY29udmVyc2F0aW9uSWQ6IGlucHV0LmNvbnZlcnNhdGlvbklkLFxuICAgICAga2luZDogJ21lc3NhZ2UuY2hhbmdlZCcsIG1lbWJlcnNoaXBFcG9jaDogbWVtYmVyc2hpcC5lcG9jaCwgcmVzb3VyY2VJZDogbWVzc2FnZUlkLCByZXZpc2lvbjogMX0pO1xuICAgIGNvbnN0IHJlc3VsdCA9IHtjbGllbnRNZXNzYWdlSWQ6IGlucHV0LmNsaWVudE1lc3NhZ2VJZCwgbWVzc2FnZUlkLCByZXZpc2lvbjogMSwgc2VxdWVuY2U6IHNlcXVlbmNlIX07XG4gICAgaWYoYXdhaXQgcmVxdWVzdC5zYXZlKHJlc3VsdCkgIT09IHRydWUpIHtcbiAgICAgIHRocm93IG5ldyBDaGF0RXJyb3IoJ3VuYXZhaWxhYmxlJyk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0pO1xuICBjb25zdCBtdXRhdGVNZXNzYWdlID0gKFxuICAgIGlucHV0OiBEdXJhYmxlRWRpdE1lc3NhZ2VJbnB1dCB8IER1cmFibGVEZWxldGVNZXNzYWdlSW5wdXQsIHJlbW92ZTogYm9vbGVhblxuICApOiBQcm9taXNlPER1cmFibGVNZXNzYWdlTXV0YXRpb25SZXN1bHQ+ID0+IHJ1bihhc3luYyAocmVhZCkgPT4ge1xuICAgIHJlcXVpcmVWYWxpZChCb29sZWFuKGlucHV0KSAmJiBpc0NoYXRJZGVudGlmaWVyKGlucHV0LmNvbnZlcnNhdGlvbklkKSAmJiBpc0NoYXRJZGVudGlmaWVyKGlucHV0Lm1lc3NhZ2VJZClcbiAgICAgICYmIGlzQ2hhdElkZW50aWZpZXIoaW5wdXQuaWRlbXBvdGVuY3lLZXkpICYmIE51bWJlci5pc1NhZmVJbnRlZ2VyKGlucHV0LmV4cGVjdGVkUmV2aXNpb24pXG4gICAgICAmJiBpbnB1dC5leHBlY3RlZFJldmlzaW9uID49IDEgJiYgKHJlbW92ZSB8fCAoJ2NvbnRlbnQnIGluIGlucHV0ICYmIHZhbGlkVGV4dChpbnB1dC5jb250ZW50KSkpKTtcbiAgICBjb25zdCByZXF1ZXN0ID0gYXdhaXQgcmVjZWlwdDxEdXJhYmxlTWVzc2FnZU11dGF0aW9uUmVzdWx0PihyZWFkLCByZW1vdmUgPyAnZGVsZXRlJyA6ICdlZGl0JyxcbiAgICAgIGlucHV0LmNvbnZlcnNhdGlvbklkLCBpbnB1dC5pZGVtcG90ZW5jeUtleSwgaW5wdXQpO1xuICAgIGlmKHJlcXVlc3QucHJpb3IpIHtcbiAgICAgIHJldHVybiByZXF1ZXN0LnByaW9yO1xuICAgIH1cbiAgICBjb25zdCBtZW1iZXJzaGlwID0gYXdhaXQgYXV0aG9yaXplKHJlYWQsIGlucHV0LmNvbnZlcnNhdGlvbklkLCAnc2VuZCcpO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBhd2FpdCByZWFkRHVyYWJsZU1lc3NhZ2U8VERlY2lzaW9uPihyZWFkLCBpbnB1dC5jb252ZXJzYXRpb25JZCwgaW5wdXQubWVzc2FnZUlkKTtcbiAgICBpZihtZXNzYWdlLnNlbmRlclBlcnNvbmFJZCAhPT0gaG9va3MuaWRlbnRpdHkucGVyc29uYUlkIHx8IG1lc3NhZ2UudXNlcklkICE9PSBob29rcy5pZGVudGl0eS51c2VySWRcbiAgICAgIHx8IG1lc3NhZ2Uuc2VxdWVuY2UgPCBtZW1iZXJzaGlwLmpvaW5TZXF1ZW5jZSB8fCBtZXNzYWdlLmRlbGV0ZWQgfHwgbWVzc2FnZS5tb2JpbGVQbGF0Zm9ybURpc3Bvc2l0aW9uICE9PSAnYWxsb3dlZCcpIHtcbiAgICAgIHRocm93IG5ldyBDaGF0RXJyb3IoJ2ZvcmJpZGRlbicpO1xuICAgIH1cbiAgICBpZihtZXNzYWdlLnJldmlzaW9uICE9PSBpbnB1dC5leHBlY3RlZFJldmlzaW9uIHx8ICghcmVtb3ZlICYmIG5vdygpIC0gbWVzc2FnZS5hZGRlZCA+IDE1ICogNjAwMDApKSB7XG4gICAgICB0aHJvdyBuZXcgQ2hhdEVycm9yKCdjb25mbGljdCcpO1xuICAgIH1cbiAgICBhd2FpdCByYXRlTGltaXQocmVhZCwgcmVtb3ZlID8gJ2RlbGV0ZScgOiAnZWRpdCcsIDYwKTtcbiAgICBjb25zdCBjb250ZW50ID0gIXJlbW92ZSAmJiAnY29udGVudCcgaW4gaW5wdXQgPyBpbnB1dC5jb250ZW50IDogJyc7XG4gICAgY29uc3QgcmV2aXNpb24gPSBtZXNzYWdlLnJldmlzaW9uICsgMTtcbiAgICBjb25zdCBjb250ZW50UmV2aXNpb24gPSBtZXNzYWdlLmNvbnRlbnRSZXZpc2lvbiArIDE7XG4gICAgY29uc3QgY29udGVudFZlcnNpb24gPSBoYXNoKFttZXNzYWdlLl9rZXksIGNvbnRlbnRSZXZpc2lvbiwgY29udGVudF0pO1xuICAgIGNvbnN0IHByb2plY3Rpb24gPSBhd2FpdCBob29rcy5jbGFzc2lmeUNvbnRlbnQoe2NvbnRlbnQ6IGNvbnRlbnQgfHwgJyAnLCBjb250ZW50VmVyc2lvbn0pO1xuICAgIGNvbnN0IHVwZGF0ZWQgPSBhd2FpdCByZWFkPGJvb2xlYW4+KGBGT1IgY3VycmVudCBJTiBtZXNzYWdlc1xuICAgICAgRklMVEVSIGN1cnJlbnQuX2tleSA9PSBAaWQgQU5EIGN1cnJlbnQucmV2aXNpb24gPT0gQGV4cGVjdGVkUmV2aXNpb25cbiAgICAgIFVQREFURSBjdXJyZW50IFdJVEgge2NvbnRlbnQ6IEBjb250ZW50LCBjb250ZW50UmV2aXNpb246IEBjb250ZW50UmV2aXNpb24sIGRlbGV0ZWQ6IEBkZWxldGVkLFxuICAgICAgICBhdHRhY2htZW50SWRzOiBAYXR0YWNobWVudElkcywgYXR0YWNobWVudHM6IEBhdHRhY2htZW50cywgcmVwbHlUb01lc3NhZ2VJZDogQHJlcGx5LFxuICAgICAgICBtb2JpbGVDb250ZW50VmVyc2lvbjogQGNvbnRlbnRWZXJzaW9uLCBtb2JpbGVEZWNpc2lvbjogQGRlY2lzaW9uLFxuICAgICAgICBtb2JpbGVQbGF0Zm9ybURpc3Bvc2l0aW9uOiBAcGxhdGZvcm1EaXNwb3NpdGlvbiwgbW9kaWZpZWQ6IEBub3csIHJldmlzaW9uOiBAcmV2aXNpb259XG4gICAgICBJTiBtZXNzYWdlcyBSRVRVUk4gdHJ1ZWAsIHthdHRhY2htZW50SWRzOiByZW1vdmUgPyBbXSA6IG1lc3NhZ2UuYXR0YWNobWVudElkcyxcbiAgICAgIGF0dGFjaG1lbnRzOiByZW1vdmUgPyBbXSA6IG1lc3NhZ2UuYXR0YWNobWVudHMsIGNvbnRlbnQsIGNvbnRlbnRSZXZpc2lvbiwgY29udGVudFZlcnNpb24sXG4gICAgICBkZWNpc2lvbjogcHJvamVjdGlvbi5kZWNpc2lvbiwgZGVsZXRlZDogcmVtb3ZlLCBleHBlY3RlZFJldmlzaW9uOiBpbnB1dC5leHBlY3RlZFJldmlzaW9uLCBpZDogbWVzc2FnZS5fa2V5LFxuICAgICAgbm93OiBub3coKSwgcGxhdGZvcm1EaXNwb3NpdGlvbjogcHJvamVjdGlvbi5wbGF0Zm9ybURpc3Bvc2l0aW9uIHx8ICdhbGxvd2VkJyxcbiAgICAgIHJlcGx5OiByZW1vdmUgPyBudWxsIDogbWVzc2FnZS5yZXBseVRvTWVzc2FnZUlkIHx8IG51bGwsIHJldmlzaW9ufSk7XG4gICAgaWYodXBkYXRlZCAhPT0gdHJ1ZSkge1xuICAgICAgdGhyb3cgbmV3IENoYXRFcnJvcignY29uZmxpY3QnKTtcbiAgICB9XG4gICAgYXdhaXQgaG9va3MuYXBwZW5kRXZlbnQocmVhZCwge2FjdG9yUGVyc29uYUlkOiBob29rcy5pZGVudGl0eS5wZXJzb25hSWQsIGNvbnZlcnNhdGlvbklkOiBpbnB1dC5jb252ZXJzYXRpb25JZCxcbiAgICAgIGtpbmQ6ICdtZXNzYWdlLmNoYW5nZWQnLCBtZW1iZXJzaGlwRXBvY2g6IG1lbWJlcnNoaXAuZXBvY2gsIHJlc291cmNlSWQ6IG1lc3NhZ2UuX2tleSwgcmV2aXNpb259KTtcbiAgICBjb25zdCByZXN1bHQgPSB7bWVzc2FnZUlkOiBtZXNzYWdlLl9rZXksIHJldmlzaW9uLCBzZXF1ZW5jZTogbWVzc2FnZS5zZXF1ZW5jZX07XG4gICAgaWYoYXdhaXQgcmVxdWVzdC5zYXZlKHJlc3VsdCkgIT09IHRydWUpIHtcbiAgICAgIHRocm93IG5ldyBDaGF0RXJyb3IoJ3VuYXZhaWxhYmxlJyk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0pO1xuICByZXR1cm4ge2F1dGhvcml6ZSwgZGVsZXRlTWVzc2FnZTogKGlucHV0OiBEdXJhYmxlRGVsZXRlTWVzc2FnZUlucHV0KSA9PiBtdXRhdGVNZXNzYWdlKGlucHV0LCB0cnVlKSxcbiAgICBlZGl0TWVzc2FnZTogKGlucHV0OiBEdXJhYmxlRWRpdE1lc3NhZ2VJbnB1dCkgPT4gbXV0YXRlTWVzc2FnZShpbnB1dCwgZmFsc2UpLCByYXRlTGltaXQsIHJlY2VpcHQsIHJ1biwgc2VuZE1lc3NhZ2V9O1xufTtcblxuZXhwb3J0IHR5cGUgRHVyYWJsZU1lc3NhZ2VQZXJzaXN0ZW5jZTxURGVjaXNpb24gPSB1bmtub3duPiA9XG4gIFJldHVyblR5cGU8dHlwZW9mIGNyZWF0ZUR1cmFibGVNZXNzYWdlUGVyc2lzdGVuY2U8VERlY2lzaW9uPj47XG4iXSwibmFtZXMiOlsiY3JlYXRlSGFzaCIsInJhbmRvbVVVSUQiLCJDaGF0RXJyb3IiLCJpc0NoYXRJZGVudGlmaWVyIiwiZGVmYXVsdEhhc2giLCJ2YWx1ZSIsInVwZGF0ZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJkaWdlc3QiLCJ2YWxpZFRleHQiLCJjb250ZW50IiwiQXJyYXkiLCJmcm9tIiwibGVuZ3RoIiwidGVzdCIsInJlcXVpcmVWYWxpZCIsInZhbGlkIiwicmVhZER1cmFibGVNZXNzYWdlIiwicmVhZCIsImNvbnZlcnNhdGlvbklkIiwibWVzc2FnZUlkIiwibWVzc2FnZSIsImNoYXRTY2hlbWFWZXJzaW9uIiwiY3JlYXRlRHVyYWJsZU1lc3NhZ2VQZXJzaXN0ZW5jZSIsImhvb2tzIiwiaGFzaCIsIm5vdyIsIkRhdGUiLCJ1dWlkIiwiYXV0aG9yaXplIiwicHVycG9zZSIsIm1lbWJlcnNoaXAiLCJhdXRob3JpemVNZW1iZXJzaGlwIiwiaWRlbnRpdHkiLCJsZWdhY3kiLCJyZWNlaXB0IiwiYWN0aW9uIiwia2V5IiwicGF5bG9hZCIsInJlcXVlc3RJZCIsInBlcnNvbmFJZCIsInBheWxvYWRIYXNoIiwicmVjb3JkIiwidXNlcklkIiwicHJpb3IiLCJyZXN1bHQiLCJzYXZlIiwiX2tleSIsImFkZGVkIiwicmF0ZUxpbWl0IiwibGltaXQiLCJpbnRlcnZhbCIsIk1hdGgiLCJmbG9vciIsImFsbG93ZWQiLCJydW4iLCJvcGVyYXRpb24iLCJ3cml0ZSIsImF1dGhvcml6ZUlkZW50aXR5Iiwic2VuZE1lc3NhZ2UiLCJpbnB1dCIsIkJvb2xlYW4iLCJjbGllbnRNZXNzYWdlSWQiLCJzZW5kZXJQZXJzb25hSWQiLCJpc0FycmF5IiwiYXR0YWNobWVudElkcyIsImV2ZXJ5IiwiU2V0Iiwic2l6ZSIsInRyaW0iLCJyZXBseVRvTWVzc2FnZUlkIiwidW5kZWZpbmVkIiwicmVxdWVzdCIsImF0dGFjaG1lbnRzIiwiaW1hZ2VJZCIsInB1c2giLCJhdXRob3JpemVBdHRhY2htZW50IiwicXVvdGVkIiwiYXV0aG9yaXplTWVzc2FnZVZpc2libGUiLCJkZWxldGVkIiwibW9iaWxlUGxhdGZvcm1EaXNwb3NpdGlvbiIsInRpbWVzdGFtcCIsInNlcXVlbmNlIiwiaWQiLCJOdW1iZXIiLCJpc1NhZmVJbnRlZ2VyIiwiY29udGVudFZlcnNpb24iLCJwcm9qZWN0aW9uIiwiY2xhc3NpZnlDb250ZW50IiwiY29udGVudFJldmlzaW9uIiwibW9iaWxlQ29udGVudFZlcnNpb24iLCJtb2JpbGVEZWNpc2lvbiIsImRlY2lzaW9uIiwicGxhdGZvcm1EaXNwb3NpdGlvbiIsIm1vZGlmaWVkIiwicmV2aXNpb24iLCJhcHBlbmRFdmVudCIsImFjdG9yUGVyc29uYUlkIiwia2luZCIsIm1lbWJlcnNoaXBFcG9jaCIsImVwb2NoIiwicmVzb3VyY2VJZCIsIm11dGF0ZU1lc3NhZ2UiLCJyZW1vdmUiLCJpZGVtcG90ZW5jeUtleSIsImV4cGVjdGVkUmV2aXNpb24iLCJqb2luU2VxdWVuY2UiLCJ1cGRhdGVkIiwicmVwbHkiLCJkZWxldGVNZXNzYWdlIiwiZWRpdE1lc3NhZ2UiXSwibWFwcGluZ3MiOiJBQUFBLDJHQUEyRyxHQUMzRyxTQUFRQSxVQUFVLEVBQUVDLFVBQVUsUUFBTyxjQUFjO0FBRW5ELFNBQVFDLFNBQVMsUUFBTyxjQUFjO0FBQ3RDLFNBQVFDLGdCQUFnQixRQUFPLGtCQUFrQjtBQVFqRCxNQUFNQyxjQUFjLENBQUNDLFFBQTJCTCxXQUFXLFVBQVVNLE1BQU0sQ0FBQ0MsS0FBS0MsU0FBUyxDQUFDSCxRQUFRSSxNQUFNLENBQUM7QUFDMUcsTUFBTUMsWUFBWSxDQUFDQyxVQUF3QyxPQUFPQSxZQUFZLFlBQ3pFQyxNQUFNQyxJQUFJLENBQUNGLFNBQVNHLE1BQU0sSUFBSSxRQUM5QixDQUFDLGdGQUFnRkMsSUFBSSxDQUFDSjtBQUMzRixNQUFNSyxlQUFlLENBQUNDO0lBQ3BCLElBQUcsQ0FBQ0EsT0FBTztRQUNULE1BQU0sSUFBSWYsVUFBVTtJQUN0QjtBQUNGO0FBRUEsT0FBTyxNQUFNZ0IscUJBQXFCLE9BQ2hDQyxNQUFpQkMsZ0JBQXdCQztJQUV6QyxNQUFNQyxVQUFVLE1BQU1ILEtBQW9DLDJDQUEyQztRQUFDRTtJQUFTO0lBQy9HLElBQUcsQ0FBQ0MsV0FBV0EsUUFBUUYsY0FBYyxLQUFLQSxrQkFBa0JFLFFBQVFDLGlCQUFpQixLQUFLLEdBQUc7UUFDM0YsTUFBTSxJQUFJckIsVUFBVTtJQUN0QjtJQUNBLE9BQU9vQjtBQUNULEVBQUU7QUFFRixP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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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9wcml2YXRlL3RtcC92YXVsdC1yZWFrdG9yLWNvbXBsZXRpb24vcGFja2FnZXMvcmVha3Rvci9zcmMvZHVyYWJsZUNoYXQvdHJhbnNhY3Rpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHt1c2VEYn0gZnJvbSAnLi4vdXRpbHMvYXJhbmdvZGJVdGlscy5qcyc7XG5cbmltcG9ydCB0eXBlIHtBcGlDb250ZXh0fSBmcm9tICcuLi90eXBlcy9hdXRoLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtDaGF0UXVlcnl9IGZyb20gJy4vbWVtYmVyc2hpcC5qcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRHVyYWJsZVRyYW5zYWN0aW9uQ29sbGVjdGlvbnMge1xuICByZWFkb25seSBleGNsdXNpdmU/OiByZWFkb25seSBzdHJpbmdbXTtcbiAgcmVhZG9ubHkgcmVhZD86IHJlYWRvbmx5IHN0cmluZ1tdO1xuICByZWFkb25seSB3cml0ZT86IHJlYWRvbmx5IHN0cmluZ1tdO1xufVxuXG5leHBvcnQgY29uc3QgY3JlYXRlRHVyYWJsZVF1ZXJ5ID0gKGNvbnRleHQ6IEFwaUNvbnRleHQpOiBDaGF0UXVlcnkgPT4ge1xuICBjb25zdCBkYiA9IHVzZURiKGNvbnRleHQuZGF0YWJhc2VOYW1lKTtcbiAgcmV0dXJuIGFzeW5jIDxUPihxdWVyeTogc3RyaW5nLCBiaW5kVmFyczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IHtcbiAgICBjb25zdCBjdXJzb3IgPSBhd2FpdCBkYi5xdWVyeTxUPih7YmluZFZhcnMsIHF1ZXJ5fSk7XG4gICAgcmV0dXJuIGN1cnNvci5uZXh0KCk7XG4gIH07XG59O1xuXG4vKiogSW5qZWN0ZWQgcXVlcmllcyByZXRhaW4gY2FsbGVyLW93bmVkIHRyYW5zYWN0aW9uIGxpZmVjeWNsZTsgbmV2ZXIgZmFsbCBiYWNrIHRvIGFub3RoZXIgY29ubmVjdGlvbi4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVEdXJhYmxlVHJhbnNhY3Rpb24gPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsIGNvbGxlY3Rpb25zOiBEdXJhYmxlVHJhbnNhY3Rpb25Db2xsZWN0aW9ucywgcXVlcnk/OiBDaGF0UXVlcnlcbikgPT4ge1xuICBpZihxdWVyeSkge1xuICAgIHJldHVybiA8VD4ob3BlcmF0aW9uOiAocmVhZDogQ2hhdFF1ZXJ5KSA9PiBQcm9taXNlPFQ+KTogUHJvbWlzZTxUPiA9PiBvcGVyYXRpb24ocXVlcnkpO1xuICB9XG4gIGNvbnN0IGRiID0gdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpO1xuICByZXR1cm4gYXN5bmMgPFQ+KG9wZXJhdGlvbjogKHJlYWQ6IENoYXRRdWVyeSkgPT4gUHJvbWlzZTxUPik6IFByb21pc2U8VD4gPT4ge1xuICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gYXdhaXQgZGIuYmVnaW5UcmFuc2FjdGlvbih7XG4gICAgICBleGNsdXNpdmU6IFsuLi4oY29sbGVjdGlvbnMuZXhjbHVzaXZlIHx8IFtdKV0sIHJlYWQ6IFsuLi4oY29sbGVjdGlvbnMucmVhZCB8fCBbXSldLFxuICAgICAgd3JpdGU6IFsuLi4oY29sbGVjdGlvbnMud3JpdGUgfHwgW10pXVxuICAgIH0sIHthbGxvd0ltcGxpY2l0OiBmYWxzZSwgbG9ja1RpbWVvdXQ6IDUsIHdhaXRGb3JTeW5jOiB0cnVlfSk7XG4gICAgY29uc3QgcmVhZDogQ2hhdFF1ZXJ5ID0gYXN5bmMgPFI+KHF1ZXJ5OiBzdHJpbmcsIGJpbmRWYXJzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4ge1xuICAgICAgY29uc3QgY3Vyc29yID0gYXdhaXQgdHJhbnNhY3Rpb24uc3RlcCgoKSA9PiBkYi5xdWVyeTxSPih7YmluZFZhcnMsIHF1ZXJ5fSkpO1xuICAgICAgcmV0dXJuIGN1cnNvci5uZXh0KCk7XG4gICAgfTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgb3BlcmF0aW9uKHJlYWQpO1xuICAgICAgYXdhaXQgdHJhbnNhY3Rpb24uY29tbWl0KCk7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0gY2F0Y2goZXJyb3IpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHRyYW5zYWN0aW9uLmFib3J0KCk7XG4gICAgICB9IGNhdGNoeyAvKiBQcmVzZXJ2ZSBvcmlnaW5hbC9hbWJpZ3VvdXMgY29tbWl0IGVycm9yOyBuZXZlciByZXRyeSBtdXRhdGlvbnMuICovIH1cbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfTtcbn07XG4iXSwibmFtZXMiOlsidXNlRGIiLCJjcmVhdGVEdXJhYmxlUXVlcnkiLCJjb250ZXh0IiwiZGIiLCJkYXRhYmFzZU5hbWUiLCJxdWVyeSIsImJpbmRWYXJzIiwiY3Vyc29yIiwibmV4dCIsImNyZWF0ZUR1cmFibGVUcmFuc2FjdGlvbiIsImNvbGxlY3Rpb25zIiwib3BlcmF0aW9uIiwidHJhbnNhY3Rpb24iLCJiZWdpblRyYW5zYWN0aW9uIiwiZXhjbHVzaXZlIiwicmVhZCIsIndyaXRlIiwiYWxsb3dJbXBsaWNpdCIsImxvY2tUaW1lb3V0Iiwid2FpdEZvclN5bmMiLCJzdGVwIiwicmVzdWx0IiwiY29tbWl0IiwiZXJyb3IiLCJhYm9ydCJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUUEsS0FBSyxRQUFPLDRCQUE0QjtBQVdoRCxPQUFPLE1BQU1DLHFCQUFxQixDQUFDQztJQUNqQyxNQUFNQyxLQUFLSCxNQUFNRSxRQUFRRSxZQUFZO0lBQ3JDLE9BQU8sT0FBVUMsT0FBZUM7UUFDOUIsTUFBTUMsU0FBUyxNQUFNSixHQUFHRSxLQUFLLENBQUk7WUFBQ0M7WUFBVUQ7UUFBSztRQUNqRCxPQUFPRSxPQUFPQyxJQUFJO0lBQ3BCO0FBQ0YsRUFBRTtBQUVGLHVHQUF1RyxHQUN2RyxPQUFPLE1BQU1DLDJCQUEyQixDQUN0Q1AsU0FBcUJRLGFBQTRDTDtJQUVqRSxJQUFHQSxPQUFPO1FBQ1IsT0FBTyxDQUFJTSxZQUEyREEsVUFBVU47SUFDbEY7SUFDQSxNQUFNRixLQUFLSCxNQUFNRSxRQUFRRSxZQUFZO0lBQ3JDLE9BQU8sT0FBVU87UUFDZixNQUFNQyxjQUFjLE1BQU1ULEdBQUdVLGdCQUFnQixDQUFDO1lBQzVDQyxXQUFXO21CQUFLSixZQUFZSSxTQUFTLElBQUksRUFBRTthQUFFO1lBQUVDLE1BQU07bUJBQUtMLFlBQVlLLElBQUksSUFBSSxFQUFFO2FBQUU7WUFDbEZDLE9BQU87bUJBQUtOLFlBQVlNLEtBQUssSUFBSSxFQUFFO2FBQUU7UUFDdkMsR0FBRztZQUFDQyxlQUFlO1lBQU9DLGFBQWE7WUFBR0MsYUFBYTtRQUFJO1FBQzNELE1BQU1KLE9BQWtCLE9BQVVWLE9BQWVDO1lBQy9DLE1BQU1DLFNBQVMsTUFBTUssWUFBWVEsSUFBSSxDQUFDLElBQU1qQixHQUFHRSxLQUFLLENBQUk7b0JBQUNDO29CQUFVRDtnQkFBSztZQUN4RSxPQUFPRSxPQUFPQyxJQUFJO1FBQ3BCO1FBQ0EsSUFBSTtZQUNGLE1BQU1hLFNBQVMsTUFBTVYsVUFBVUk7WUFDL0IsTUFBTUgsWUFBWVUsTUFBTTtZQUN4QixPQUFPRDtRQUNULEVBQUUsT0FBTUUsT0FBTztZQUNiLElBQUk7Z0JBQ0YsTUFBTVgsWUFBWVksS0FBSztZQUN6QixFQUFFLE9BQUssQ0FBeUU7WUFDaEYsTUFBTUQ7UUFDUjtJQUNGO0FBQ0YsRUFBRSJ9
|
|
@@ -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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9wcml2YXRlL3RtcC92YXVsdC1yZWFrdG9yLWNvbXBsZXRpb24vcGFja2FnZXMvcmVha3Rvci9zcmMvZHVyYWJsZUNoYXQvdHlwZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHR5cGUgQ29udmVyc2F0aW9uS2luZCA9ICdkaXJlY3QnIHwgJ2dyb3VwJztcbmV4cG9ydCB0eXBlIENvbnZlcnNhdGlvblN0YXRlID0gJ2FjdGl2ZScgfCAnY2xvc2VkJyB8ICdmb3JtaW5nJztcbmV4cG9ydCB0eXBlIE1lbWJlcnNoaXBSb2xlID0gJ2FkbWluJyB8ICdtZW1iZXInIHwgJ293bmVyJztcbmV4cG9ydCB0eXBlIE1lbWJlcnNoaXBTdGF0ZSA9ICdhY3RpdmUnIHwgJ2xlZnQnIHwgJ3JlbW92ZWQnO1xuXG4vKiogQW4gZXBvY2ggaXMgYSBncmFudCBmb3IgYSBib3VuZGVkIGhpc3RvcnkgaW50ZXJ2YWwsIG5ldmVyIGEgY2xpZW50LXNlbGVjdGVkIGlkZW50aXR5LiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb252ZXJzYXRpb25NZW1iZXJzaGlwIHtcbiAgcmVhZG9ubHkgY29udmVyc2F0aW9uSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgZXBvY2g6IHN0cmluZztcbiAgcmVhZG9ubHkgam9pblNlcXVlbmNlOiBudW1iZXI7XG4gIHJlYWRvbmx5IGxlZnRTZXF1ZW5jZT86IG51bWJlcjtcbiAgcmVhZG9ubHkgcGVyc29uYUlkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJldmlzaW9uOiBudW1iZXI7XG4gIHJlYWRvbmx5IHJvbGU6IE1lbWJlcnNoaXBSb2xlO1xuICByZWFkb25seSBzdGF0ZTogTWVtYmVyc2hpcFN0YXRlO1xufVxuXG4vKiogTmFtZXMgbXVzdCBwYXNzIHRoZSBjYWxsZXIncyBhdWRpZW5jZSBwcm9qZWN0aW9uIGJlZm9yZSBiZWluZyBzZXJpYWxpemVkLiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb252ZXJzYXRpb25TdW1tYXJ5IHtcbiAgcmVhZG9ubHkgYWN0aXZlTWVtYmVyQ291bnQ6IG51bWJlcjtcbiAgcmVhZG9ubHkgY29udmVyc2F0aW9uSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkga2luZDogQ29udmVyc2F0aW9uS2luZDtcbiAgcmVhZG9ubHkgbWVtYmVyc2hpcDogQ29udmVyc2F0aW9uTWVtYmVyc2hpcDtcbiAgcmVhZG9ubHkgbWVtYmVyc2hpcFJldmlzaW9uOiBudW1iZXI7XG4gIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHN0YXRlOiBDb252ZXJzYXRpb25TdGF0ZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb252ZXJzYXRpb25JbnZpdGUge1xuICByZWFkb25seSBjb252ZXJzYXRpb25JZDogc3RyaW5nO1xuICByZWFkb25seSBleHBpcmVzQXQ6IG51bWJlcjtcbiAgcmVhZG9ubHkgaW52aXRlSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgaW52aXRlZEJ5UGVyc29uYUlkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJldmlzaW9uOiBudW1iZXI7XG4gIHJlYWRvbmx5IHN0YXRlOiAnYWNjZXB0ZWQnIHwgJ2RlY2xpbmVkJyB8ICdleHBpcmVkJyB8ICdwZW5kaW5nJyB8ICdyZXZva2VkJztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDcmVhdGVEaXJlY3RJbnB1dCB7XG4gIHJlYWRvbmx5IHBhcnRpY2lwYW50UGVyc29uYUlkOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3JlYXRlR3JvdXBJbnB1dCB7XG4gIHJlYWRvbmx5IGlkZW1wb3RlbmN5S2V5OiBzdHJpbmc7XG4gIHJlYWRvbmx5IG1lbWJlclBlcnNvbmFJZHM6IHJlYWRvbmx5IHN0cmluZ1tdO1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW52aXRlTWVtYmVySW5wdXQge1xuICByZWFkb25seSBjb252ZXJzYXRpb25JZDogc3RyaW5nO1xuICByZWFkb25seSBleHBlY3RlZFJldmlzaW9uOiBudW1iZXI7XG4gIHJlYWRvbmx5IGlkZW1wb3RlbmN5S2V5OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBlcnNvbmFJZDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEFjY2VwdEludml0ZUlucHV0IHtcbiAgcmVhZG9ubHkgZXhwZWN0ZWRSZXZpc2lvbjogbnVtYmVyO1xuICByZWFkb25seSBpZGVtcG90ZW5jeUtleTogc3RyaW5nO1xuICByZWFkb25seSBpbnZpdGVJZDogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBEZWNsaW5lSW52aXRlSW5wdXQgPSBBY2NlcHRJbnZpdGVJbnB1dDtcblxuZXhwb3J0IGludGVyZmFjZSBDaGFuZ2VNZW1iZXJSb2xlSW5wdXQge1xuICByZWFkb25seSBjb252ZXJzYXRpb25JZDogc3RyaW5nO1xuICByZWFkb25seSBleHBlY3RlZFJldmlzaW9uOiBudW1iZXI7XG4gIHJlYWRvbmx5IGlkZW1wb3RlbmN5S2V5OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBlcnNvbmFJZDogc3RyaW5nO1xuICByZWFkb25seSByb2xlOiBFeGNsdWRlPE1lbWJlcnNoaXBSb2xlLCAnb3duZXInPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSZW1vdmVNZW1iZXJJbnB1dCB7XG4gIHJlYWRvbmx5IGNvbnZlcnNhdGlvbklkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGV4cGVjdGVkUmV2aXNpb246IG51bWJlcjtcbiAgcmVhZG9ubHkgaWRlbXBvdGVuY3lLZXk6IHN0cmluZztcbiAgcmVhZG9ubHkgcGVyc29uYUlkOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGVhdmVDb252ZXJzYXRpb25JbnB1dCB7XG4gIHJlYWRvbmx5IGNvbnZlcnNhdGlvbklkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGV4cGVjdGVkUmV2aXNpb246IG51bWJlcjtcbiAgcmVhZG9ubHkgaWRlbXBvdGVuY3lLZXk6IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgVHJhbnNmZXJPd25lcnNoaXBJbnB1dCA9IFJlbW92ZU1lbWJlcklucHV0O1xuXG5leHBvcnQgaW50ZXJmYWNlIENoYXRFdmVudCB7XG4gIHJlYWRvbmx5IGNvbnZlcnNhdGlvbklkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGV2ZW50SWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgZXZlbnRTZXF1ZW5jZTogbnVtYmVyO1xuICByZWFkb25seSBraW5kOiAnbWVtYmVyc2hpcC5jaGFuZ2VkJyB8ICdtZXNzYWdlLmNoYW5nZWQnIHwgJ3JlY2VpcHQuY2hhbmdlZCc7XG4gIHJlYWRvbmx5IHJlc291cmNlSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgcmV2aXNpb246IG51bWJlcjtcbn1cblxuXG5leHBvcnQgdHlwZSB7QXV0aG9yaXplZE1lbWJlcnNoaXAsIENoYXRJZGVudGl0eSwgQ2hhdFF1ZXJ5LCBNZW1iZXJzaGlwQWNjZXNzSW5wdXR9IGZyb20gJy4vbWVtYmVyc2hpcC5qcyc7XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBK0ZBLFdBQTBHIn0=
|
|
@@ -166,4 +166,4 @@ const applyMiddleware = (tc, middlewares)=>{
|
|
|
166
166
|
};
|
|
167
167
|
};
|
|
168
168
|
|
|
169
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3IvcGFja2FnZXMvcmVha3Rvci9zcmMvaGFuZGxlcnMvZ3JhcGhxbEhhbmRsZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtncmFwaHFsfSBmcm9tICdncmFwaHFsJztcbmltcG9ydCB7c2NoZW1hQ29tcG9zZXJ9IGZyb20gJ2dyYXBocWwtY29tcG9zZSc7XG5pbXBvcnQgdHlwZSB7T2JqZWN0VHlwZUNvbXBvc2VyLCBTY2hlbWFDb21wb3Nlcn0gZnJvbSAnZ3JhcGhxbC1jb21wb3NlJztcblxuaW1wb3J0IHtDb25maWd9IGZyb20gJy4uL2NvbmZpZy5qcyc7XG5pbXBvcnQge3JlZ2lzdGVyRGVmYXVsdE11dGF0aW9uc30gZnJvbSAnLi4vbXV0YXRpb25zL2luZGV4LmpzJztcbmltcG9ydCB7cmVnaXN0ZXJEZWZhdWx0UXVlcmllc30gZnJvbSAnLi4vcXVlcmllcy9pbmRleC5qcyc7XG5pbXBvcnQge2V4dHJhY3RMYW5ndWFnZUNvbnRleHR9IGZyb20gJy4uL3V0aWxzL2NvbnRleHRVdGlscy5qcyc7XG5pbXBvcnQge2NyZWF0ZUNvbnRleHQsIGdldEdxbEZpZWxkcywgZ2V0TGFtYmRhRGF0YSwgdHlwZSBMYW1iZGFEYXRhfSBmcm9tICcuLi91dGlscy9pbmRleC5qcyc7XG5cbmltcG9ydCB0eXBlIHtBUElHYXRld2F5UHJveHlFdmVudFYyfSBmcm9tICdhd3MtbGFtYmRhJztcbmltcG9ydCB0eXBlIHtFeGVjdXRpb25SZXN1bHR9IGZyb20gJ2dyYXBocWwnO1xuaW1wb3J0IHR5cGUge0FwaUNvbnRleHR9IGZyb20gJy4uL3R5cGVzL2F1dGgudHlwZXMuanMnO1xuXG5leHBvcnQgdHlwZSBHcmFwaHFsUmVzb2x2ZXJNaWRkbGV3YXJlID0gKFxuICByZXNvbHZlOiAoc291cmNlOiB1bmtub3duLCBhcmdzOiB1bmtub3duLCBjb250ZXh0OiBBcGlDb250ZXh0LCBpbmZvOiB1bmtub3duKSA9PiBQcm9taXNlPHVua25vd24+IHwgdW5rbm93bixcbiAgc291cmNlOiB1bmtub3duLFxuICBhcmdzOiB1bmtub3duLFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBpbmZvOiB1bmtub3duXG4pID0+IFByb21pc2U8dW5rbm93bj4gfCB1bmtub3duO1xuXG50eXBlIEdyYXBocWxGaWVsZENvbmZpZ01hcCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG5leHBvcnQgdHlwZSBHcmFwaHFsSGFuZGxlck9wdGlvbnMgPSB7XG4gIGNvbXBvc2VyPzogU2NoZW1hQ29tcG9zZXI8YW55PjtcbiAgY29udGV4dD86IEFwaUNvbnRleHQ7XG4gIGV4dHJhTXV0YXRpb25zPzogR3JhcGhxbEZpZWxkQ29uZmlnTWFwO1xuICBleHRyYVF1ZXJpZXM/OiBHcmFwaHFsRmllbGRDb25maWdNYXA7XG4gIGluY2x1ZGVEZWZhdWx0cz86IGJvb2xlYW47XG4gIG1pZGRsZXdhcmU/OiBHcmFwaHFsUmVzb2x2ZXJNaWRkbGV3YXJlIHwgR3JhcGhxbFJlc29sdmVyTWlkZGxld2FyZVtdO1xufTtcblxuY29uc3QgYWRkRmllbGRzTWlkZGxld2FyZTogR3JhcGhxbFJlc29sdmVyTWlkZGxld2FyZSA9IChyZXNvbHZlLCBzb3VyY2UsIGFyZ3MsIGNvbnRleHQ6IEFwaUNvbnRleHQsIGluZm8pID0+IHtcbiAgY29uc3QgZW5oYW5jZWRDb250ZXh0ID0ge1xuICAgIC4uLmNvbnRleHQsXG4gICAgZmllbGRzOiBnZXRHcWxGaWVsZHMoaW5mbylcbiAgfTtcblxuICByZXR1cm4gcmVzb2x2ZShzb3VyY2UsIGFyZ3MsIGVuaGFuY2VkQ29udGV4dCwgaW5mbyk7XG59O1xuXG5jb25zdCBhZGRNaXNzaW5nRmllbGRzID0gKHRjOiBPYmplY3RUeXBlQ29tcG9zZXI8dW5rbm93biwgdW5rbm93bj4sIGZpZWxkczogR3JhcGhxbEZpZWxkQ29uZmlnTWFwKTogdm9pZCA9PiB7XG4gIE9iamVjdC5lbnRyaWVzKGZpZWxkcykuZm9yRWFjaCgoW2ZpZWxkTmFtZSwgZmllbGRDb25maWddKSA9PiB7XG4gICAgaWYoIXRjLmhhc0ZpZWxkKGZpZWxkTmFtZSkpIHtcbiAgICAgIHRjLnNldEZpZWxkKGZpZWxkTmFtZSwgZmllbGRDb25maWcgYXMgYW55KTtcbiAgICB9XG4gIH0pO1xufTtcblxuY29uc3QgYXBwbHlNaWRkbGV3YXJlID0gKFxuICB0YzogT2JqZWN0VHlwZUNvbXBvc2VyPHVua25vd24sIHVua25vd24+LFxuICBtaWRkbGV3YXJlczogR3JhcGhxbFJlc29sdmVyTWlkZGxld2FyZVtdXG4pOiB2b2lkID0+IHtcbiAgaWYobWlkZGxld2FyZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgT2JqZWN0LmtleXModGMuZ2V0RmllbGRzKCkpLmZvckVhY2goKGZpZWxkTmFtZSkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBpZih0Yy5oYXNSZXNvbHZlcihmaWVsZE5hbWUpKSB7XG4gICAgICAgIG1pZGRsZXdhcmVzLmZvckVhY2goKG1pZGRsZXdhcmUpID0+IHRjLndyYXBSZXNvbHZlcihmaWVsZE5hbWUsIG1pZGRsZXdhcmUgYXMgYW55KSk7XG4gICAgICB9XG4gICAgfSBjYXRjaChlcnJvcjogYW55KSB7XG4gICAgICBjb25zb2xlLndhcm4oYFNraXBwaW5nIGZpZWxkICR7ZmllbGROYW1lfSAtIG5vdCBhIHJlc29sdmVyOmAsIGVycm9yLm1lc3NhZ2UpO1xuICAgIH1cbiAgfSk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gQVBJIEdhdGV3YXktY29tcGF0aWJsZSBHcmFwaFFMIGhhbmRsZXIgZm9yIFJlYWt0b3IuXG4gKlxuICogUmVxdWVzdCBleHBlY3RhdGlvbnM6XG4gKiAtIGBldmVudC5ib2R5LnF1ZXJ5YCBpcyBhIEdyYXBoUUwgb3BlcmF0aW9uIHN0cmluZy5cbiAqIC0gYGV2ZW50LmJvZHkudmFyaWFibGVzYCBpcyBvcHRpb25hbCBvcGVyYXRpb24gdmFyaWFibGVzLlxuICpcbiAqIFJ1bnRpbWUgYmVoYXZpb3I6XG4gKiAtIEJ1aWxkcyBwZXItcmVxdWVzdCBjb250ZXh0IChgY29uZmlnYCwgYXV0aC9zZXNzaW9uIGNvbnRleHQsIGxhbmd1YWdlIGNvbnRleHQsIHJlcXVlc3QpLlxuICogLSBBcHBsaWVzIHJlc29sdmVyIG1pZGRsZXdhcmUgdG8gZXhwb3NlIHNlbGVjdGVkIEdyYXBoUUwgZmllbGRzIG9uIGBjb250ZXh0LmZpZWxkc2AuXG4gKiAtIEV4ZWN1dGVzIG9wZXJhdGlvbiB1c2luZyB0aGUgY29tcG9zZWQgc2NoZW1hLlxuICpcbiAqIFJlc3BvbnNlIGNvbnRyYWN0OlxuICogLSBSZXR1cm5zIGB7c3RhdHVzQ29kZSwgaGVhZGVycywgYm9keX1gIHdpdGggSlNPTiBib2R5LlxuICogLSBSZXR1cm5zIGAyMDBgIGZvciBHcmFwaFFMIHJlc3BvbnNlcyAoaW5jbHVkaW5nIEdyYXBoUUwgZXJyb3JzIGluIGBlcnJvcnNgKS5cbiAqIC0gUmV0dXJucyBgNTAwYCBvbmx5IGZvciBoYW5kbGVyL3J1bnRpbWUgZmFpbHVyZXMuXG4gKlxuICogU2VlIFJFQURNRTogXCJHcmFwaFFMIEhhbmRsZXIgVXNhZ2VcIiBmb3IgaW50ZWdyYXRpb24gZXhhbXBsZXMuXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVHcmFwaHFsSGFuZGxlciA9IChvcHRpb25zOiBHcmFwaHFsSGFuZGxlck9wdGlvbnMgPSB7fSkgPT4ge1xuICBjb25zdCBjb21wb3NlciA9IG9wdGlvbnMuY29tcG9zZXIgfHwgc2NoZW1hQ29tcG9zZXI7XG4gIGNvbnN0IGluaXRpYWxDb250ZXh0ID0gKG9wdGlvbnMuY29udGV4dCB8fCB7fSkgYXMgQXBpQ29udGV4dDtcbiAgY29uc3Qgc2hvdWxkSW5jbHVkZURlZmF1bHRzID0gb3B0aW9ucy5pbmNsdWRlRGVmYXVsdHMgIT09IGZhbHNlO1xuICBjb25zdCBtaWRkbGV3YXJlTGlzdCA9IFtcbiAgICBhZGRGaWVsZHNNaWRkbGV3YXJlLFxuICAgIC4uLihBcnJheS5pc0FycmF5KG9wdGlvbnMubWlkZGxld2FyZSlcbiAgICAgID8gb3B0aW9ucy5taWRkbGV3YXJlXG4gICAgICA6IG9wdGlvbnMubWlkZGxld2FyZSA/IFtvcHRpb25zLm1pZGRsZXdhcmVdIDogW10pXG4gIF07XG5cbiAgaWYoc2hvdWxkSW5jbHVkZURlZmF1bHRzKSB7XG4gICAgcmVnaXN0ZXJEZWZhdWx0UXVlcmllcyhjb21wb3Nlcik7XG4gICAgcmVnaXN0ZXJEZWZhdWx0TXV0YXRpb25zKGNvbXBvc2VyKTtcbiAgfVxuXG4gIGlmKG9wdGlvbnMuZXh0cmFRdWVyaWVzKSB7XG4gICAgYWRkTWlzc2luZ0ZpZWxkcyhjb21wb3Nlci5RdWVyeSwgb3B0aW9ucy5leHRyYVF1ZXJpZXMpO1xuICB9XG5cbiAgaWYob3B0aW9ucy5leHRyYU11dGF0aW9ucykge1xuICAgIGFkZE1pc3NpbmdGaWVsZHMoY29tcG9zZXIuTXV0YXRpb24sIG9wdGlvbnMuZXh0cmFNdXRhdGlvbnMpO1xuICB9XG5cbiAgYXBwbHlNaWRkbGV3YXJlKGNvbXBvc2VyLlF1ZXJ5LCBtaWRkbGV3YXJlTGlzdCk7XG4gIGFwcGx5TWlkZGxld2FyZShjb21wb3Nlci5NdXRhdGlvbiwgbWlkZGxld2FyZUxpc3QpO1xuXG4gIGNvbnN0IHNjaGVtYSA9IGNvbXBvc2VyLmJ1aWxkU2NoZW1hKCk7XG5cbiAgcmV0dXJuIGFzeW5jIChldmVudDogQVBJR2F0ZXdheVByb3h5RXZlbnRWMik6IFByb21pc2U8RXhlY3V0aW9uUmVzdWx0IHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+ID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdXBkYXRlZENvbnRleHQ6IEFwaUNvbnRleHQgPSBhd2FpdCBjcmVhdGVDb250ZXh0KGluaXRpYWxDb250ZXh0LCBldmVudCk7XG4gICAgICBjb25zdCBsYW5ndWFnZUNvbnRleHQgPSBleHRyYWN0TGFuZ3VhZ2VDb250ZXh0KGV2ZW50KTtcblxuICAgICAgY29uc3QgY29udGV4dFdpdGhMYW5ndWFnZSA9IHtcbiAgICAgICAgY29uZmlnOiBDb25maWcuZ2V0KCksXG4gICAgICAgIC4uLnVwZGF0ZWRDb250ZXh0LFxuICAgICAgICBsYW5ndWFnZUNvbnRleHQsXG4gICAgICAgIHJlcXVlc3Q6IGV2ZW50XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBwYXJzZURhdGEgPSBnZXRMYW1iZGFEYXRhKGV2ZW50IGFzIHVua25vd24gYXMgTGFtYmRhRGF0YSk7XG4gICAgICBjb25zdCB7Ym9keX0gPSBwYXJzZURhdGE7XG5cbiAgICAgIGlmKCFib2R5Py5xdWVyeSkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ05vIEdyYXBoUUwgcXVlcnkgZm91bmQgaW4gcmVxdWVzdCBib2R5Jyk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBkYXRhOiBudWxsLFxuICAgICAgICAgICAgZXJyb3JzOiBbe1xuICAgICAgICAgICAgICBtZXNzYWdlOiAnTm8gR3JhcGhRTCBxdWVyeSBmb3VuZCBpbiByZXF1ZXN0IGJvZHknXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgICB9LFxuICAgICAgICAgIHN0YXR1c0NvZGU6IDIwMFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBQcm9taXNlLnJlc29sdmUoZ3JhcGhxbCh7XG4gICAgICAgICAgY29udGV4dFZhbHVlOiBjb250ZXh0V2l0aExhbmd1YWdlLFxuICAgICAgICAgIHNjaGVtYSxcbiAgICAgICAgICBzb3VyY2U6IGJvZHkucXVlcnksXG4gICAgICAgICAgdmFyaWFibGVWYWx1ZXM6IGJvZHkudmFyaWFibGVzXG4gICAgICAgIH0pKTtcblxuICAgICAgICBpZihyZXN1bHQuZXJyb3JzICYmIHJlc3VsdC5lcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0dyYXBoUUwgZXhlY3V0aW9uIGVycm9yczonLCByZXN1bHQuZXJyb3JzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkocmVzdWx0KSxcbiAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzdGF0dXNDb2RlOiAyMDBcbiAgICAgICAgfTtcbiAgICAgIH0gY2F0Y2goZ3JhcGhxbEVycm9yOiB1bmtub3duKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGR1cmluZyBHcmFwaFFMIGV4ZWN1dGlvbjonLCBncmFwaHFsRXJyb3IpO1xuXG4gICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGdyYXBocWxFcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZ3JhcGhxbEVycm9yLm1lc3NhZ2UgOiAnR3JhcGhRTCBleGVjdXRpb24gZXJyb3InO1xuICAgICAgICBjb25zdCBlcnJvclN0YWNrID0gZ3JhcGhxbEVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBncmFwaHFsRXJyb3Iuc3RhY2sgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBkYXRhOiBudWxsLFxuICAgICAgICAgICAgZXJyb3JzOiBbe1xuICAgICAgICAgICAgICBtZXNzYWdlOiBlcnJvck1lc3NhZ2UsXG4gICAgICAgICAgICAgIHN0YWNrOiBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ2RldmVsb3BtZW50JyA/IGVycm9yU3RhY2sgOiB1bmRlZmluZWRcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfSksXG4gICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAgc3RhdHVzQ29kZTogNTAwXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSBjYXRjaChlcnI6IHVua25vd24pIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0hhbmRsZXIgZXJyb3I6Jywge1xuICAgICAgICBtZXNzYWdlOiBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InLFxuICAgICAgICBzdGFjazogZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIuc3RhY2sgOiB1bmRlZmluZWRcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogJ0FuIHVua25vd24gZXJyb3Igb2NjdXJyZWQgaW4gdGhlIGhhbmRsZXInO1xuICAgICAgY29uc3QgZXJyb3JTdGFjayA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLnN0YWNrIDogdW5kZWZpbmVkO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgZGF0YTogbnVsbCxcbiAgICAgICAgICBlcnJvcnM6IFt7XG4gICAgICAgICAgICBtZXNzYWdlOiBlcnJvck1lc3NhZ2UsXG4gICAgICAgICAgICBzdGFjazogcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCcgPyBlcnJvclN0YWNrIDogdW5kZWZpbmVkXG4gICAgICAgICAgfV1cbiAgICAgICAgfSksXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgIH0sXG4gICAgICAgIHN0YXR1c0NvZGU6IDUwMFxuICAgICAgfTtcbiAgICB9XG4gIH07XG59O1xuIl0sIm5hbWVzIjpbImdyYXBocWwiLCJzY2hlbWFDb21wb3NlciIsIkNvbmZpZyIsInJlZ2lzdGVyRGVmYXVsdE11dGF0aW9ucyIsInJlZ2lzdGVyRGVmYXVsdFF1ZXJpZXMiLCJleHRyYWN0TGFuZ3VhZ2VDb250ZXh0IiwiY3JlYXRlQ29udGV4dCIsImdldEdxbEZpZWxkcyIsImdldExhbWJkYURhdGEiLCJhZGRGaWVsZHNNaWRkbGV3YXJlIiwicmVzb2x2ZSIsInNvdXJjZSIsImFyZ3MiLCJjb250ZXh0IiwiaW5mbyIsImVuaGFuY2VkQ29udGV4dCIsImZpZWxkcyIsImFkZE1pc3NpbmdGaWVsZHMiLCJ0YyIsIk9iamVjdCIsImVudHJpZXMiLCJmb3JFYWNoIiwiZmllbGROYW1lIiwiZmllbGRDb25maWciLCJoYXNGaWVsZCIsInNldEZpZWxkIiwiYXBwbHlNaWRkbGV3YXJlIiwibWlkZGxld2FyZXMiLCJsZW5ndGgiLCJrZXlzIiwiZ2V0RmllbGRzIiwiaGFzUmVzb2x2ZXIiLCJtaWRkbGV3YXJlIiwid3JhcFJlc29sdmVyIiwiZXJyb3IiLCJjb25zb2xlIiwid2FybiIsIm1lc3NhZ2UiLCJjcmVhdGVHcmFwaHFsSGFuZGxlciIsIm9wdGlvbnMiLCJjb21wb3NlciIsImluaXRpYWxDb250ZXh0Iiwic2hvdWxkSW5jbHVkZURlZmF1bHRzIiwiaW5jbHVkZURlZmF1bHRzIiwibWlkZGxld2FyZUxpc3QiLCJBcnJheSIsImlzQXJyYXkiLCJleHRyYVF1ZXJpZXMiLCJRdWVyeSIsImV4dHJhTXV0YXRpb25zIiwiTXV0YXRpb24iLCJzY2hlbWEiLCJidWlsZFNjaGVtYSIsImV2ZW50IiwidXBkYXRlZENvbnRleHQiLCJsYW5ndWFnZUNvbnRleHQiLCJjb250ZXh0V2l0aExhbmd1YWdlIiwiY29uZmlnIiwiZ2V0IiwicmVxdWVzdCIsInBhcnNlRGF0YSIsImJvZHkiLCJxdWVyeSIsIkpTT04iLCJzdHJpbmdpZnkiLCJkYXRhIiwiZXJyb3JzIiwiaGVhZGVycyIsInN0YXR1c0NvZGUiLCJyZXN1bHQiLCJQcm9taXNlIiwiY29udGV4dFZhbHVlIiwidmFyaWFibGVWYWx1ZXMiLCJ2YXJpYWJsZXMiLCJncmFwaHFsRXJyb3IiLCJlcnJvck1lc3NhZ2UiLCJFcnJvciIsImVycm9yU3RhY2siLCJzdGFjayIsInVuZGVmaW5lZCIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsImVyciJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUUEsT0FBTyxRQUFPLFVBQVU7QUFDaEMsU0FBUUMsY0FBYyxRQUFPLGtCQUFrQjtBQUcvQyxTQUFRQyxNQUFNLFFBQU8sZUFBZTtBQUNwQyxTQUFRQyx3QkFBd0IsUUFBTyx3QkFBd0I7QUFDL0QsU0FBUUMsc0JBQXNCLFFBQU8sc0JBQXNCO0FBQzNELFNBQVFDLHNCQUFzQixRQUFPLDJCQUEyQjtBQUNoRSxTQUFRQyxhQUFhLEVBQUVDLFlBQVksRUFBRUMsYUFBYSxRQUF3QixvQkFBb0I7QUF5QjlGLE1BQU1DLHNCQUFpRCxDQUFDQyxTQUFTQyxRQUFRQyxNQUFNQyxTQUFxQkM7SUFDbEcsTUFBTUMsa0JBQWtCO1FBQ3RCLEdBQUdGLE9BQU87UUFDVkcsUUFBUVQsYUFBYU87SUFDdkI7SUFFQSxPQUFPSixRQUFRQyxRQUFRQyxNQUFNRyxpQkFBaUJEO0FBQ2hEO0FBRUEsTUFBTUcsbUJBQW1CLENBQUNDLElBQTBDRjtJQUNsRUcsT0FBT0MsT0FBTyxDQUFDSixRQUFRSyxPQUFPLENBQUMsQ0FBQyxDQUFDQyxXQUFXQyxZQUFZO1FBQ3RELElBQUcsQ0FBQ0wsR0FBR00sUUFBUSxDQUFDRixZQUFZO1lBQzFCSixHQUFHTyxRQUFRLENBQUNILFdBQVdDO1FBQ3pCO0lBQ0Y7QUFDRjtBQUVBLE1BQU1HLGtCQUFrQixDQUN0QlIsSUFDQVM7SUFFQSxJQUFHQSxZQUFZQyxNQUFNLEtBQUssR0FBRztRQUMzQjtJQUNGO0lBRUFULE9BQU9VLElBQUksQ0FBQ1gsR0FBR1ksU0FBUyxJQUFJVCxPQUFPLENBQUMsQ0FBQ0M7UUFDbkMsSUFBSTtZQUNGLElBQUdKLEdBQUdhLFdBQVcsQ0FBQ1QsWUFBWTtnQkFDNUJLLFlBQVlOLE9BQU8sQ0FBQyxDQUFDVyxhQUFlZCxHQUFH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
|
|
169
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9wcml2YXRlL3RtcC92YXVsdC1yZWFrdG9yLWNvbXBsZXRpb24vcGFja2FnZXMvcmVha3Rvci9zcmMvaGFuZGxlcnMvZ3JhcGhxbEhhbmRsZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtncmFwaHFsfSBmcm9tICdncmFwaHFsJztcbmltcG9ydCB7c2NoZW1hQ29tcG9zZXJ9IGZyb20gJ2dyYXBocWwtY29tcG9zZSc7XG5pbXBvcnQgdHlwZSB7T2JqZWN0VHlwZUNvbXBvc2VyLCBTY2hlbWFDb21wb3Nlcn0gZnJvbSAnZ3JhcGhxbC1jb21wb3NlJztcblxuaW1wb3J0IHtDb25maWd9IGZyb20gJy4uL2NvbmZpZy5qcyc7XG5pbXBvcnQge3JlZ2lzdGVyRGVmYXVsdE11dGF0aW9uc30gZnJvbSAnLi4vbXV0YXRpb25zL2luZGV4LmpzJztcbmltcG9ydCB7cmVnaXN0ZXJEZWZhdWx0UXVlcmllc30gZnJvbSAnLi4vcXVlcmllcy9pbmRleC5qcyc7XG5pbXBvcnQge2V4dHJhY3RMYW5ndWFnZUNvbnRleHR9IGZyb20gJy4uL3V0aWxzL2NvbnRleHRVdGlscy5qcyc7XG5pbXBvcnQge2NyZWF0ZUNvbnRleHQsIGdldEdxbEZpZWxkcywgZ2V0TGFtYmRhRGF0YSwgdHlwZSBMYW1iZGFEYXRhfSBmcm9tICcuLi91dGlscy9pbmRleC5qcyc7XG5cbmltcG9ydCB0eXBlIHtBUElHYXRld2F5UHJveHlFdmVudFYyfSBmcm9tICdhd3MtbGFtYmRhJztcbmltcG9ydCB0eXBlIHtFeGVjdXRpb25SZXN1bHR9IGZyb20gJ2dyYXBocWwnO1xuaW1wb3J0IHR5cGUge0FwaUNvbnRleHR9IGZyb20gJy4uL3R5cGVzL2F1dGgudHlwZXMuanMnO1xuXG5leHBvcnQgdHlwZSBHcmFwaHFsUmVzb2x2ZXJNaWRkbGV3YXJlID0gKFxuICByZXNvbHZlOiAoc291cmNlOiB1bmtub3duLCBhcmdzOiB1bmtub3duLCBjb250ZXh0OiBBcGlDb250ZXh0LCBpbmZvOiB1bmtub3duKSA9PiBQcm9taXNlPHVua25vd24+IHwgdW5rbm93bixcbiAgc291cmNlOiB1bmtub3duLFxuICBhcmdzOiB1bmtub3duLFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICBpbmZvOiB1bmtub3duXG4pID0+IFByb21pc2U8dW5rbm93bj4gfCB1bmtub3duO1xuXG50eXBlIEdyYXBocWxGaWVsZENvbmZpZ01hcCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG5leHBvcnQgdHlwZSBHcmFwaHFsSGFuZGxlck9wdGlvbnMgPSB7XG4gIGNvbXBvc2VyPzogU2NoZW1hQ29tcG9zZXI8YW55PjtcbiAgY29udGV4dD86IEFwaUNvbnRleHQ7XG4gIGV4dHJhTXV0YXRpb25zPzogR3JhcGhxbEZpZWxkQ29uZmlnTWFwO1xuICBleHRyYVF1ZXJpZXM/OiBHcmFwaHFsRmllbGRDb25maWdNYXA7XG4gIGluY2x1ZGVEZWZhdWx0cz86IGJvb2xlYW47XG4gIG1pZGRsZXdhcmU/OiBHcmFwaHFsUmVzb2x2ZXJNaWRkbGV3YXJlIHwgR3JhcGhxbFJlc29sdmVyTWlkZGxld2FyZVtdO1xufTtcblxuY29uc3QgYWRkRmllbGRzTWlkZGxld2FyZTogR3JhcGhxbFJlc29sdmVyTWlkZGxld2FyZSA9IChyZXNvbHZlLCBzb3VyY2UsIGFyZ3MsIGNvbnRleHQ6IEFwaUNvbnRleHQsIGluZm8pID0+IHtcbiAgY29uc3QgZW5oYW5jZWRDb250ZXh0ID0ge1xuICAgIC4uLmNvbnRleHQsXG4gICAgZmllbGRzOiBnZXRHcWxGaWVsZHMoaW5mbylcbiAgfTtcblxuICByZXR1cm4gcmVzb2x2ZShzb3VyY2UsIGFyZ3MsIGVuaGFuY2VkQ29udGV4dCwgaW5mbyk7XG59O1xuXG5jb25zdCBhZGRNaXNzaW5nRmllbGRzID0gKHRjOiBPYmplY3RUeXBlQ29tcG9zZXI8dW5rbm93biwgdW5rbm93bj4sIGZpZWxkczogR3JhcGhxbEZpZWxkQ29uZmlnTWFwKTogdm9pZCA9PiB7XG4gIE9iamVjdC5lbnRyaWVzKGZpZWxkcykuZm9yRWFjaCgoW2ZpZWxkTmFtZSwgZmllbGRDb25maWddKSA9PiB7XG4gICAgaWYoIXRjLmhhc0ZpZWxkKGZpZWxkTmFtZSkpIHtcbiAgICAgIHRjLnNldEZpZWxkKGZpZWxkTmFtZSwgZmllbGRDb25maWcgYXMgYW55KTtcbiAgICB9XG4gIH0pO1xufTtcblxuY29uc3QgYXBwbHlNaWRkbGV3YXJlID0gKFxuICB0YzogT2JqZWN0VHlwZUNvbXBvc2VyPHVua25vd24sIHVua25vd24+LFxuICBtaWRkbGV3YXJlczogR3JhcGhxbFJlc29sdmVyTWlkZGxld2FyZVtdXG4pOiB2b2lkID0+IHtcbiAgaWYobWlkZGxld2FyZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgT2JqZWN0LmtleXModGMuZ2V0RmllbGRzKCkpLmZvckVhY2goKGZpZWxkTmFtZSkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBpZih0Yy5oYXNSZXNvbHZlcihmaWVsZE5hbWUpKSB7XG4gICAgICAgIG1pZGRsZXdhcmVzLmZvckVhY2goKG1pZGRsZXdhcmUpID0+IHRjLndyYXBSZXNvbHZlcihmaWVsZE5hbWUsIG1pZGRsZXdhcmUgYXMgYW55KSk7XG4gICAgICB9XG4gICAgfSBjYXRjaChlcnJvcjogYW55KSB7XG4gICAgICBjb25zb2xlLndhcm4oYFNraXBwaW5nIGZpZWxkICR7ZmllbGROYW1lfSAtIG5vdCBhIHJlc29sdmVyOmAsIGVycm9yLm1lc3NhZ2UpO1xuICAgIH1cbiAgfSk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gQVBJIEdhdGV3YXktY29tcGF0aWJsZSBHcmFwaFFMIGhhbmRsZXIgZm9yIFJlYWt0b3IuXG4gKlxuICogUmVxdWVzdCBleHBlY3RhdGlvbnM6XG4gKiAtIGBldmVudC5ib2R5LnF1ZXJ5YCBpcyBhIEdyYXBoUUwgb3BlcmF0aW9uIHN0cmluZy5cbiAqIC0gYGV2ZW50LmJvZHkudmFyaWFibGVzYCBpcyBvcHRpb25hbCBvcGVyYXRpb24gdmFyaWFibGVzLlxuICpcbiAqIFJ1bnRpbWUgYmVoYXZpb3I6XG4gKiAtIEJ1aWxkcyBwZXItcmVxdWVzdCBjb250ZXh0IChgY29uZmlnYCwgYXV0aC9zZXNzaW9uIGNvbnRleHQsIGxhbmd1YWdlIGNvbnRleHQsIHJlcXVlc3QpLlxuICogLSBBcHBsaWVzIHJlc29sdmVyIG1pZGRsZXdhcmUgdG8gZXhwb3NlIHNlbGVjdGVkIEdyYXBoUUwgZmllbGRzIG9uIGBjb250ZXh0LmZpZWxkc2AuXG4gKiAtIEV4ZWN1dGVzIG9wZXJhdGlvbiB1c2luZyB0aGUgY29tcG9zZWQgc2NoZW1hLlxuICpcbiAqIFJlc3BvbnNlIGNvbnRyYWN0OlxuICogLSBSZXR1cm5zIGB7c3RhdHVzQ29kZSwgaGVhZGVycywgYm9keX1gIHdpdGggSlNPTiBib2R5LlxuICogLSBSZXR1cm5zIGAyMDBgIGZvciBHcmFwaFFMIHJlc3BvbnNlcyAoaW5jbHVkaW5nIEdyYXBoUUwgZXJyb3JzIGluIGBlcnJvcnNgKS5cbiAqIC0gUmV0dXJucyBgNTAwYCBvbmx5IGZvciBoYW5kbGVyL3J1bnRpbWUgZmFpbHVyZXMuXG4gKlxuICogU2VlIFJFQURNRTogXCJHcmFwaFFMIEhhbmRsZXIgVXNhZ2VcIiBmb3IgaW50ZWdyYXRpb24gZXhhbXBsZXMuXG4gKi9cbmV4cG9ydCBjb25zdCBjcmVhdGVHcmFwaHFsSGFuZGxlciA9IChvcHRpb25zOiBHcmFwaHFsSGFuZGxlck9wdGlvbnMgPSB7fSkgPT4ge1xuICBjb25zdCBjb21wb3NlciA9IG9wdGlvbnMuY29tcG9zZXIgfHwgc2NoZW1hQ29tcG9zZXI7XG4gIGNvbnN0IGluaXRpYWxDb250ZXh0ID0gKG9wdGlvbnMuY29udGV4dCB8fCB7fSkgYXMgQXBpQ29udGV4dDtcbiAgY29uc3Qgc2hvdWxkSW5jbHVkZURlZmF1bHRzID0gb3B0aW9ucy5pbmNsdWRlRGVmYXVsdHMgIT09IGZhbHNlO1xuICBjb25zdCBtaWRkbGV3YXJlTGlzdCA9IFtcbiAgICBhZGRGaWVsZHNNaWRkbGV3YXJlLFxuICAgIC4uLihBcnJheS5pc0FycmF5KG9wdGlvbnMubWlkZGxld2FyZSlcbiAgICAgID8gb3B0aW9ucy5taWRkbGV3YXJlXG4gICAgICA6IG9wdGlvbnMubWlkZGxld2FyZSA/IFtvcHRpb25zLm1pZGRsZXdhcmVdIDogW10pXG4gIF07XG5cbiAgaWYoc2hvdWxkSW5jbHVkZURlZmF1bHRzKSB7XG4gICAgcmVnaXN0ZXJEZWZhdWx0UXVlcmllcyhjb21wb3Nlcik7XG4gICAgcmVnaXN0ZXJEZWZhdWx0TXV0YXRpb25zKGNvbXBvc2VyKTtcbiAgfVxuXG4gIGlmKG9wdGlvbnMuZXh0cmFRdWVyaWVzKSB7XG4gICAgYWRkTWlzc2luZ0ZpZWxkcyhjb21wb3Nlci5RdWVyeSwgb3B0aW9ucy5leHRyYVF1ZXJpZXMpO1xuICB9XG5cbiAgaWYob3B0aW9ucy5leHRyYU11dGF0aW9ucykge1xuICAgIGFkZE1pc3NpbmdGaWVsZHMoY29tcG9zZXIuTXV0YXRpb24sIG9wdGlvbnMuZXh0cmFNdXRhdGlvbnMpO1xuICB9XG5cbiAgYXBwbHlNaWRkbGV3YXJlKGNvbXBvc2VyLlF1ZXJ5LCBtaWRkbGV3YXJlTGlzdCk7XG4gIGFwcGx5TWlkZGxld2FyZShjb21wb3Nlci5NdXRhdGlvbiwgbWlkZGxld2FyZUxpc3QpO1xuXG4gIGNvbnN0IHNjaGVtYSA9IGNvbXBvc2VyLmJ1aWxkU2NoZW1hKCk7XG5cbiAgcmV0dXJuIGFzeW5jIChldmVudDogQVBJR2F0ZXdheVByb3h5RXZlbnRWMik6IFByb21pc2U8RXhlY3V0aW9uUmVzdWx0IHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+ID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdXBkYXRlZENvbnRleHQ6IEFwaUNvbnRleHQgPSBhd2FpdCBjcmVhdGVDb250ZXh0KGluaXRpYWxDb250ZXh0LCBldmVudCk7XG4gICAgICBjb25zdCBsYW5ndWFnZUNvbnRleHQgPSBleHRyYWN0TGFuZ3VhZ2VDb250ZXh0KGV2ZW50KTtcblxuICAgICAgY29uc3QgY29udGV4dFdpdGhMYW5ndWFnZSA9IHtcbiAgICAgICAgY29uZmlnOiBDb25maWcuZ2V0KCksXG4gICAgICAgIC4uLnVwZGF0ZWRDb250ZXh0LFxuICAgICAgICBsYW5ndWFnZUNvbnRleHQsXG4gICAgICAgIHJlcXVlc3Q6IGV2ZW50XG4gICAgICB9O1xuXG4gICAgICBjb25zdCBwYXJzZURhdGEgPSBnZXRMYW1iZGFEYXRhKGV2ZW50IGFzIHVua25vd24gYXMgTGFtYmRhRGF0YSk7XG4gICAgICBjb25zdCB7Ym9keX0gPSBwYXJzZURhdGE7XG5cbiAgICAgIGlmKCFib2R5Py5xdWVyeSkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ05vIEdyYXBoUUwgcXVlcnkgZm91bmQgaW4gcmVxdWVzdCBib2R5Jyk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBkYXRhOiBudWxsLFxuICAgICAgICAgICAgZXJyb3JzOiBbe1xuICAgICAgICAgICAgICBtZXNzYWdlOiAnTm8gR3JhcGhRTCBxdWVyeSBmb3VuZCBpbiByZXF1ZXN0IGJvZHknXG4gICAgICAgICAgICB9XVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgICB9LFxuICAgICAgICAgIHN0YXR1c0NvZGU6IDIwMFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBQcm9taXNlLnJlc29sdmUoZ3JhcGhxbCh7XG4gICAgICAgICAgY29udGV4dFZhbHVlOiBjb250ZXh0V2l0aExhbmd1YWdlLFxuICAgICAgICAgIHNjaGVtYSxcbiAgICAgICAgICBzb3VyY2U6IGJvZHkucXVlcnksXG4gICAgICAgICAgdmFyaWFibGVWYWx1ZXM6IGJvZHkudmFyaWFibGVzXG4gICAgICAgIH0pKTtcblxuICAgICAgICBpZihyZXN1bHQuZXJyb3JzICYmIHJlc3VsdC5lcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0dyYXBoUUwgZXhlY3V0aW9uIGVycm9yczonLCByZXN1bHQuZXJyb3JzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgYm9keTogSlNPTi5zdHJpbmdpZnkocmVzdWx0KSxcbiAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgICAgfSxcbiAgICAgICAgICBzdGF0dXNDb2RlOiAyMDBcbiAgICAgICAgfTtcbiAgICAgIH0gY2F0Y2goZ3JhcGhxbEVycm9yOiB1bmtub3duKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGR1cmluZyBHcmFwaFFMIGV4ZWN1dGlvbjonLCBncmFwaHFsRXJyb3IpO1xuXG4gICAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IGdyYXBocWxFcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZ3JhcGhxbEVycm9yLm1lc3NhZ2UgOiAnR3JhcGhRTCBleGVjdXRpb24gZXJyb3InO1xuICAgICAgICBjb25zdCBlcnJvclN0YWNrID0gZ3JhcGhxbEVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBncmFwaHFsRXJyb3Iuc3RhY2sgOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBkYXRhOiBudWxsLFxuICAgICAgICAgICAgZXJyb3JzOiBbe1xuICAgICAgICAgICAgICBtZXNzYWdlOiBlcnJvck1lc3NhZ2UsXG4gICAgICAgICAgICAgIHN0YWNrOiBwcm9jZXNzLmVudi5OT0RFX0VOViA9PT0gJ2RldmVsb3BtZW50JyA/IGVycm9yU3RhY2sgOiB1bmRlZmluZWRcbiAgICAgICAgICAgIH1dXG4gICAgICAgICAgfSksXG4gICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgICAgICAgIH0sXG4gICAgICAgICAgc3RhdHVzQ29kZTogNTAwXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSBjYXRjaChlcnI6IHVua25vd24pIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0hhbmRsZXIgZXJyb3I6Jywge1xuICAgICAgICBtZXNzYWdlOiBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogJ1Vua25vd24gZXJyb3InLFxuICAgICAgICBzdGFjazogZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIuc3RhY2sgOiB1bmRlZmluZWRcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogJ0FuIHVua25vd24gZXJyb3Igb2NjdXJyZWQgaW4gdGhlIGhhbmRsZXInO1xuICAgICAgY29uc3QgZXJyb3JTdGFjayA9IGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLnN0YWNrIDogdW5kZWZpbmVkO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBib2R5OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgZGF0YTogbnVsbCxcbiAgICAgICAgICBlcnJvcnM6IFt7XG4gICAgICAgICAgICBtZXNzYWdlOiBlcnJvck1lc3NhZ2UsXG4gICAgICAgICAgICBzdGFjazogcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCcgPyBlcnJvclN0YWNrIDogdW5kZWZpbmVkXG4gICAgICAgICAgfV1cbiAgICAgICAgfSksXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgIH0sXG4gICAgICAgIHN0YXR1c0NvZGU6IDUwMFxuICAgICAgfTtcbiAgICB9XG4gIH07XG59O1xuIl0sIm5hbWVzIjpbImdyYXBocWwiLCJzY2hlbWFDb21wb3NlciIsIkNvbmZpZyIsInJlZ2lzdGVyRGVmYXVsdE11dGF0aW9ucyIsInJlZ2lzdGVyRGVmYXVsdFF1ZXJpZXMiLCJleHRyYWN0TGFuZ3VhZ2VDb250ZXh0IiwiY3JlYXRlQ29udGV4dCIsImdldEdxbEZpZWxkcyIsImdldExhbWJkYURhdGEiLCJhZGRGaWVsZHNNaWRkbGV3YXJlIiwicmVzb2x2ZSIsInNvdXJjZSIsImFyZ3MiLCJjb250ZXh0IiwiaW5mbyIsImVuaGFuY2VkQ29udGV4dCIsImZpZWxkcyIsImFkZE1pc3NpbmdGaWVsZHMiLCJ0YyIsIk9iamVjdCIsImVudHJpZXMiLCJmb3JFYWNoIiwiZmllbGROYW1lIiwiZmllbGRDb25maWciLCJoYXNGaWVsZCIsInNldEZpZWxkIiwiYXBwbHlNaWRkbGV3YXJlIiwibWlkZGxld2FyZXMiLCJsZW5ndGgiLCJrZXlzIiwiZ2V0RmllbGRzIiwiaGFzUmVzb2x2ZXIiLCJtaWRkbGV3YXJlIiwid3JhcFJlc29sdmVyIiwiZXJyb3IiLCJjb25zb2xlIiwid2FybiIsIm1lc3NhZ2UiLCJjcmVhdGVHcmFwaHFsSGFuZGxlciIsIm9wdGlvbnMiLCJjb21wb3NlciIsImluaXRpYWxDb250ZXh0Iiwic2hvdWxkSW5jbHVkZURlZmF1bHRzIiwiaW5jbHVkZURlZmF1bHRzIiwibWlkZGxld2FyZUxpc3QiLCJBcnJheSIsImlzQXJyYXkiLCJleHRyYVF1ZXJpZXMiLCJRdWVyeSIsImV4dHJhTXV0YXRpb25zIiwiTXV0YXRpb24iLCJzY2hlbWEiLCJidWlsZFNjaGVtYSIsImV2ZW50IiwidXBkYXRlZENvbnRleHQiLCJsYW5ndWFnZUNvbnRleHQiLCJjb250ZXh0V2l0aExhbmd1YWdlIiwiY29uZmlnIiwiZ2V0IiwicmVxdWVzdCIsInBhcnNlRGF0YSIsImJvZHkiLCJxdWVyeSIsIkpTT04iLCJzdHJpbmdpZnkiLCJkYXRhIiwiZXJyb3JzIiwiaGVhZGVycyIsInN0YXR1c0NvZGUiLCJyZXN1bHQiLCJQcm9taXNlIiwiY29udGV4dFZhbHVlIiwidmFyaWFibGVWYWx1ZXMiLCJ2YXJpYWJsZXMiLCJncmFwaHFsRXJyb3IiLCJlcnJvck1lc3NhZ2UiLCJFcnJvciIsImVycm9yU3RhY2siLCJzdGFjayIsInVuZGVmaW5lZCIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsImVyciJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUUEsT0FBTyxRQUFPLFVBQVU7QUFDaEMsU0FBUUMsY0FBYyxRQUFPLGtCQUFrQjtBQUcvQyxTQUFRQyxNQUFNLFFBQU8sZUFBZTtBQUNwQyxTQUFRQyx3QkFBd0IsUUFBTyx3QkFBd0I7QUFDL0QsU0FBUUMsc0JBQXNCLFFBQU8sc0JBQXNCO0FBQzNELFNBQVFDLHNCQUFzQixRQUFPLDJCQUEyQjtBQUNoRSxTQUFRQyxhQUFhLEVBQUVDLFlBQVksRUFBRUMsYUFBYSxRQUF3QixvQkFBb0I7QUF5QjlGLE1BQU1DLHNCQUFpRCxDQUFDQyxTQUFTQyxRQUFRQyxNQUFNQyxTQUFxQkM7SUFDbEcsTUFBTUMsa0JBQWtCO1FBQ3RCLEdBQUdGLE9BQU87UUFDVkcsUUFBUVQsYUFBYU87SUFDdkI7SUFFQSxPQUFPSixRQUFRQyxRQUFRQyxNQUFNRyxpQkFBaUJEO0FBQ2hEO0FBRUEsTUFBTUcsbUJBQW1CLENBQUNDLElBQTBDRjtJQUNsRUcsT0FBT0MsT0FBTyxDQUFDSixRQUFRSyxPQUFPLENBQUMsQ0FBQyxDQUFDQyxXQUFXQyxZQUFZO1FBQ3RELElBQUcsQ0FBQ0wsR0FBR00sUUFBUSxDQUFDRixZQUFZO1lBQzFCSixHQUFHTyxRQUFRLENBQUNILFdBQVdDO1FBQ3pCO0lBQ0Y7QUFDRjtBQUVBLE1BQU1HLGtCQUFrQixDQUN0QlIsSUFDQVM7SUFFQSxJQUFHQSxZQUFZQyxNQUFNLEtBQUssR0FBRztRQUMzQjtJQUNGO0lBRUFULE9BQU9VLElBQUksQ0FBQ1gsR0FBR1ksU0FBUyxJQUFJVCxPQUFPLENBQUMsQ0FBQ0M7UUFDbkMsSUFBSTtZQUNGLElBQUdKLEdBQUdhLFdBQVcsQ0FBQ1QsWUFBWTtnQkFDNUJLLFlBQVlOLE9BQU8sQ0FBQyxDQUFDVyxhQUFlZCxH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
|
package/lib/index.d.ts
CHANGED
|
@@ -1,7 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Copyright (c) 2019-Present, Nitrogen Labs, Inc.
|
|
3
|
-
* All rights reserved. Use is subject to the accompanying commercial LICENSE.
|
|
4
|
-
*/
|
|
5
1
|
export { graphql, GraphQLBoolean, GraphQLFloat, GraphQLID, GraphQLInt, GraphQLList, GraphQLNonNull, GraphQLObjectType, GraphQLString, graphqlSync, printSchema } from 'graphql';
|
|
6
2
|
export type { ExecutionResult } from 'graphql';
|
|
7
3
|
export type { InputTypeComposer, ObjectTypeComposer } from 'graphql-compose';
|
|
@@ -9,6 +5,8 @@ export { schemaComposer } from 'graphql-compose';
|
|
|
9
5
|
export * from './actions/index.js';
|
|
10
6
|
export * from './adapters/index.js';
|
|
11
7
|
export * from './config.js';
|
|
8
|
+
export * from './durableChat/index.js';
|
|
9
|
+
export type { MembershipRole as DurableChatMembershipRole } from './durableChat/types.js';
|
|
12
10
|
export type { DatabaseConnectionMetadata, DatabaseCredentialIdentity, DatabaseCredentialRequest, DatabaseCredentialSecret, DatabaseEnvironment, DatabaseProvisioningLease } from './types/databaseCredentials.types.js';
|
|
13
11
|
export { getAppDatabaseName, getDatabaseCredentialIdentity, parseDatabaseCredentialSecret, toDatabaseConnectionMetadata } from './utils/databaseCredentials.js';
|
|
14
12
|
export { COLLECTIONS, ConnectionType as ConnectionTypes, DEFAULT_DOCUMENT_COLLECTIONS, DEFAULT_EDGE_COLLECTIONS, EDGES, PrivacyLevel, ReactionType } from './constants/collections.js';
|
|
@@ -28,3 +26,5 @@ export declare const reaktorSchema = "";
|
|
|
28
26
|
export declare const reaktorResolvers: import("graphql-compose/lib/SchemaComposer.js").GraphQLToolsResolveMethods<any>;
|
|
29
27
|
export * from './adapters/higgsfieldModelCatalog.js';
|
|
30
28
|
export * from './adapters/higgsfieldModels.js';
|
|
29
|
+
export * from './organizations/index.js';
|
|
30
|
+
export type { MembershipRole } from './organizations/types.js';
|
package/lib/index.js
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Copyright (c) 2019-Present, Nitrogen Labs, Inc.
|
|
3
3
|
* All rights reserved. Use is subject to the accompanying commercial LICENSE.
|
|
4
|
-
*/
|
|
5
|
-
|
|
4
|
+
*/ import { schemaComposer } from 'graphql-compose';
|
|
5
|
+
export { graphql, GraphQLBoolean, GraphQLFloat, GraphQLID, GraphQLInt, GraphQLList, GraphQLNonNull, GraphQLObjectType, GraphQLString, graphqlSync, printSchema } from 'graphql';
|
|
6
6
|
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 { getAppDatabaseName, getDatabaseCredentialIdentity, parseDatabaseCredentialSecret, toDatabaseConnectionMetadata } from './utils/databaseCredentials.js';
|
|
11
12
|
export { COLLECTIONS, ConnectionType as ConnectionTypes, DEFAULT_DOCUMENT_COLLECTIONS, DEFAULT_EDGE_COLLECTIONS, EDGES, PrivacyLevel, ReactionType } from './constants/collections.js';
|
|
12
13
|
export { notifyUser } from './lambdas/actions/websockets.js';
|
|
@@ -24,5 +25,6 @@ export const reaktorSchema = ''; // printSchema(schemaComposer.buildSchema());
|
|
|
24
25
|
export const reaktorResolvers = schemaComposer.getResolveMethods();
|
|
25
26
|
export * from './adapters/higgsfieldModelCatalog.js';
|
|
26
27
|
export * from './adapters/higgsfieldModels.js';
|
|
28
|
+
export * from './organizations/index.js';
|
|
27
29
|
|
|
28
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9wcml2YXRlL3RtcC92YXVsdC1yZWFrdG9yLWNvbXBsZXRpb24vcGFja2FnZXMvcmVha3Rvci9zcmMvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTktUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQWxsIHJpZ2h0cyByZXNlcnZlZC4gVXNlIGlzIHN1YmplY3QgdG8gdGhlIGFjY29tcGFueWluZyBjb21tZXJjaWFsIExJQ0VOU0UuXG4gKi9cbmltcG9ydCB7c2NoZW1hQ29tcG9zZXJ9IGZyb20gJ2dyYXBocWwtY29tcG9zZSc7XG5cbmV4cG9ydCB7XG4gIGdyYXBocWwsIEdyYXBoUUxCb29sZWFuLFxuICBHcmFwaFFMRmxvYXQsXG4gIEdyYXBoUUxJRCxcbiAgR3JhcGhRTEludCxcbiAgR3JhcGhRTExpc3QsIEdyYXBoUUxOb25OdWxsLCBHcmFwaFFMT2JqZWN0VHlwZSwgR3JhcGhRTFN0cmluZywgZ3JhcGhxbFN5bmMsXG4gIHByaW50U2NoZW1hXG59IGZyb20gJ2dyYXBocWwnO1xuXG5cbmV4cG9ydCB0eXBlIHtFeGVjdXRpb25SZXN1bHR9IGZyb20gJ2dyYXBocWwnO1xuZXhwb3J0IHR5cGUge0lucHV0VHlwZUNvbXBvc2VyLCBPYmplY3RUeXBlQ29tcG9zZXJ9IGZyb20gJ2dyYXBocWwtY29tcG9zZSc7XG5cbmV4cG9ydCB7c2NoZW1hQ29tcG9zZXJ9IGZyb20gJ2dyYXBocWwtY29tcG9zZSc7XG5leHBvcnQgKiBmcm9tICcuL2FjdGlvbnMvaW5kZXguanMnO1xuZXhwb3J0ICogZnJvbSAnLi9hZGFwdGVycy9pbmRleC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbmZpZy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2R1cmFibGVDaGF0L2luZGV4LmpzJztcbmV4cG9ydCB0eXBlIHtNZW1iZXJzaGlwUm9sZSBhcyBEdXJhYmxlQ2hhdE1lbWJlcnNoaXBSb2xlfSBmcm9tICcuL2R1cmFibGVDaGF0L3R5cGVzLmpzJztcbmV4cG9ydCB0eXBlIHtEYXRhYmFzZUNvbm5lY3Rpb25NZXRhZGF0YSwgRGF0YWJhc2VDcmVkZW50aWFsSWRlbnRpdHksIERhdGFiYXNlQ3JlZGVudGlhbFJlcXVlc3QsIERhdGFiYXNlQ3JlZGVudGlhbFNlY3JldCwgRGF0YWJhc2VFbnZpcm9ubWVudCwgRGF0YWJhc2VQcm92aXNpb25pbmdMZWFzZX0gZnJvbSAnLi90eXBlcy9kYXRhYmFzZUNyZWRlbnRpYWxzLnR5cGVzLmpzJztcbmV4cG9ydCB7Z2V0QXBwRGF0YWJhc2VOYW1lLCBnZXREYXRhYmFzZUNyZWRlbnRpYWxJZGVudGl0eSwgcGFyc2VEYXRhYmFzZUNyZWRlbnRpYWxTZWNyZXQsIHRvRGF0YWJhc2VDb25uZWN0aW9uTWV0YWRhdGF9IGZyb20gJy4vdXRpbHMvZGF0YWJhc2VDcmVkZW50aWFscy5qcyc7XG5leHBvcnQge1xuICBDT0xMRUNUSU9OUyxcbiAgQ29ubmVjdGlvblR5cGUgYXMgQ29ubmVjdGlvblR5cGVzLFxuICBERUZBVUxUX0RPQ1VNRU5UX0NPTExFQ1RJT05TLFxuICBERUZBVUxUX0VER0VfQ09MTEVDVElPTlMsXG4gIEVER0VTLFxuICBQcml2YWN5TGV2ZWwsXG4gIFJlYWN0aW9uVHlwZVxufSBmcm9tICcuL2NvbnN0YW50cy9jb2xsZWN0aW9ucy5qcyc7XG5leHBvcnQgdHlwZSB7XG4gIENvbm5lY3Rpb25UeXBlVHlwZSBhcyBDb25uZWN0aW9uVHlwZVZhbHVlLFxuICBQcml2YWN5TGV2ZWxUeXBlLFxuICBSZWFjdGlvblR5cGVUeXBlXG59IGZyb20gJy4vY29uc3RhbnRzL2NvbGxlY3Rpb25zLmpzJztcbmV4cG9ydCB7bm90aWZ5VXNlcn0gZnJvbSAnLi9sYW1iZGFzL2FjdGlvbnMvd2Vic29ja2V0cy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2hhbmRsZXJzL2dyYXBocWxIYW5kbGVyLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vbGFtYmRhcy9hdXRob3JpemVyLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vbGFtYmRhcy9jb25uZWN0aW9uLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vbXV0YXRpb25zL2luZGV4LmpzJztcbmV4cG9ydCAqIGZyb20gJy4vb2JqZWN0VHlwZXMvaW5kZXguanMnO1xuZXhwb3J0ICogZnJvbSAnLi9xdWVyaWVzL2luZGV4LmpzJztcbmV4cG9ydCAqIGZyb20gJy4vdHlwZXMvaW5kZXguanMnO1xuZXhwb3J0ICogZnJvbSAnLi91cGxvYWQuanMnO1xuZXhwb3J0ICogZnJvbSAnLi91dGlscy9pbmRleC5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3ZpZGVvUHJvY2Vzc2luZy5qcyc7XG5cbmV4cG9ydCBjb25zdCByZWFrdG9yU2NoZW1hID0gJyc7Ly8gcHJpbnRTY2hlbWEoc2NoZW1hQ29tcG9zZXIuYnVpbGRTY2hlbWEoKSk7XG5leHBvcnQgY29uc3QgcmVha3RvclJlc29sdmVycyA9IHNjaGVtYUNvbXBvc2VyLmdldFJlc29sdmVNZXRob2RzKCk7XG5cbmV4cG9ydCAqIGZyb20gJy4vYWRhcHRlcnMvaGlnZ3NmaWVsZE1vZGVsQ2F0YWxvZy5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2FkYXB0ZXJzL2hpZ2dzZmllbGRNb2RlbHMuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9vcmdhbml6YXRpb25zL2luZGV4LmpzJztcbmV4cG9ydCB0eXBlIHtNZW1iZXJzaGlwUm9sZX0gZnJvbSAnLi9vcmdhbml6YXRpb25zL3R5cGVzLmpzJztcbiJdLCJuYW1lcyI6WyJzY2hlbWFDb21wb3NlciIsImdyYXBocWwiLCJHcmFwaFFMQm9vbGVhbiIsIkdyYXBoUUxGbG9hdCIsIkdyYXBoUUxJRCIsIkdyYXBoUUxJbnQiLCJHcmFwaFFMTGlzdCIsIkdyYXBoUUxOb25OdWxsIiwiR3JhcGhRTE9iamVjdFR5cGUiLCJHcmFwaFFMU3RyaW5nIiwiZ3JhcGhxbFN5bmMiLCJwcmludFNjaGVtYSIsImdldEFwcERhdGFiYXNlTmFtZSIsImdldERhdGFiYXNlQ3JlZGVudGlhbElkZW50aXR5IiwicGFyc2VEYXRhYmFzZUNyZWRlbnRpYWxTZWNyZXQiLCJ0b0RhdGFiYXNlQ29ubmVjdGlvbk1ldGFkYXRhIiwiQ09MTEVDVElPTlMiLCJDb25uZWN0aW9uVHlwZSIsIkNvbm5lY3Rpb25UeXBlcyIsIkRFRkFVTFRfRE9DVU1FTlRfQ09MTEVDVElPTlMiLCJERUZBVUxUX0VER0VfQ09MTEVDVElPTlMiLCJFREdFUyIsIlByaXZhY3lMZXZlbCIsIlJlYWN0aW9uVHlwZSIsIm5vdGlmeVVzZXIiLCJyZWFrdG9yU2NoZW1hIiwicmVha3RvclJlc29sdmVycyIsImdldFJlc29sdmVNZXRob2RzIl0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FDRCxTQUFRQSxjQUFjLFFBQU8sa0JBQWtCO0FBRS9DLFNBQ0VDLE9BQU8sRUFBRUMsY0FBYyxFQUN2QkMsWUFBWSxFQUNaQyxTQUFTLEVBQ1RDLFVBQVUsRUFDVkMsV0FBVyxFQUFFQyxjQUFjLEVBQUVDLGlCQUFpQixFQUFFQyxhQUFhLEVBQUVDLFdBQVcsRUFDMUVDLFdBQVcsUUFDTixVQUFVO0FBTWpCLFNBQVFYLGNBQWMsUUFBTyxrQkFBa0I7QUFDL0MsY0FBYyxxQkFBcUI7QUFDbkMsY0FBYyxzQkFBc0I7QUFDcEMsY0FBYyxjQUFjO0FBQzVCLGNBQWMseUJBQXlCO0FBR3ZDLFNBQVFZLGtCQUFrQixFQUFFQyw2QkFBNkIsRUFBRUMsNkJBQTZCLEVBQUVDLDRCQUE0QixRQUFPLGlDQUFpQztBQUM5SixTQUNFQyxXQUFXLEVBQ1hDLGtCQUFrQkMsZUFBZSxFQUNqQ0MsNEJBQTRCLEVBQzVCQyx3QkFBd0IsRUFDeEJDLEtBQUssRUFDTEMsWUFBWSxFQUNaQyxZQUFZLFFBQ1AsNkJBQTZCO0FBTXBDLFNBQVFDLFVBQVUsUUFBTyxrQ0FBa0M7QUFDM0QsY0FBYywrQkFBK0I7QUFDN0MsY0FBYywwQkFBMEI7QUFDeEMsY0FBYywwQkFBMEI7QUFDeEMsY0FBYyx1QkFBdUI7QUFDckMsY0FBYyx5QkFBeUI7QUFDdkMsY0FBYyxxQkFBcUI7QUFDbkMsY0FBYyxtQkFBbUI7QUFDakMsY0FBYyxjQUFjO0FBQzVCLGNBQWMsbUJBQW1CO0FBQ2pDLGNBQWMsdUJBQXVCO0FBRXJDLE9BQU8sTUFBTUMsZ0JBQWdCLEdBQUcsQ0FBQSw2Q0FBNkM7QUFDN0UsT0FBTyxNQUFNQyxtQkFBbUIxQixlQUFlMkIsaUJBQWlCLEdBQUc7QUFFbkUsY0FBYyx1Q0FBdUM7QUFDckQsY0FBYyxpQ0FBaUM7QUFDL0MsY0FBYywyQkFBMkIifQ==
|