@beiguancyc/parse-server 9.9.0-ruixiang.1
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/LICENSE +176 -0
- package/NOTICE +10 -0
- package/README.md +1311 -0
- package/bin/parse-live-query-server +3 -0
- package/bin/parse-server +3 -0
- package/lib/AccountLockout.js +149 -0
- package/lib/Adapters/AdapterLoader.js +60 -0
- package/lib/Adapters/Analytics/AnalyticsAdapter.js +32 -0
- package/lib/Adapters/Auth/AuthAdapter.js +132 -0
- package/lib/Adapters/Auth/BaseCodeAuthAdapter.js +119 -0
- package/lib/Adapters/Auth/OAuth1Client.js +204 -0
- package/lib/Adapters/Auth/apple.js +125 -0
- package/lib/Adapters/Auth/facebook.js +187 -0
- package/lib/Adapters/Auth/gcenter.js +217 -0
- package/lib/Adapters/Auth/github.js +125 -0
- package/lib/Adapters/Auth/google.js +122 -0
- package/lib/Adapters/Auth/gpgames.js +125 -0
- package/lib/Adapters/Auth/httpsRequest.js +41 -0
- package/lib/Adapters/Auth/index.js +248 -0
- package/lib/Adapters/Auth/instagram.js +118 -0
- package/lib/Adapters/Auth/janraincapture.js +85 -0
- package/lib/Adapters/Auth/janrainengage.js +57 -0
- package/lib/Adapters/Auth/keycloak.js +168 -0
- package/lib/Adapters/Auth/ldap.js +193 -0
- package/lib/Adapters/Auth/line.js +125 -0
- package/lib/Adapters/Auth/linkedin.js +117 -0
- package/lib/Adapters/Auth/meetup.js +44 -0
- package/lib/Adapters/Auth/mfa.js +334 -0
- package/lib/Adapters/Auth/microsoft.js +111 -0
- package/lib/Adapters/Auth/oauth2.js +115 -0
- package/lib/Adapters/Auth/phantauth.js +53 -0
- package/lib/Adapters/Auth/qq.js +113 -0
- package/lib/Adapters/Auth/spotify.js +115 -0
- package/lib/Adapters/Auth/twitter.js +197 -0
- package/lib/Adapters/Auth/utils.js +28 -0
- package/lib/Adapters/Auth/vkontakte.js +55 -0
- package/lib/Adapters/Auth/wechat.js +110 -0
- package/lib/Adapters/Auth/weibo.js +141 -0
- package/lib/Adapters/Cache/CacheAdapter.js +40 -0
- package/lib/Adapters/Cache/InMemoryCache.js +61 -0
- package/lib/Adapters/Cache/InMemoryCacheAdapter.js +34 -0
- package/lib/Adapters/Cache/LRUCache.js +35 -0
- package/lib/Adapters/Cache/NullCacheAdapter.js +26 -0
- package/lib/Adapters/Cache/RedisCacheAdapter.js +109 -0
- package/lib/Adapters/Cache/SchemaCache.js +25 -0
- package/lib/Adapters/Email/MailAdapter.js +32 -0
- package/lib/Adapters/Files/FilesAdapter.js +129 -0
- package/lib/Adapters/Files/GridFSBucketAdapter.js +280 -0
- package/lib/Adapters/Files/GridStoreAdapter.js +5 -0
- package/lib/Adapters/Logger/LoggerAdapter.js +27 -0
- package/lib/Adapters/Logger/WinstonLogger.js +107 -0
- package/lib/Adapters/Logger/WinstonLoggerAdapter.js +63 -0
- package/lib/Adapters/MessageQueue/EventEmitterMQ.js +55 -0
- package/lib/Adapters/PubSub/EventEmitterPubSub.js +53 -0
- package/lib/Adapters/PubSub/PubSubAdapter.js +34 -0
- package/lib/Adapters/PubSub/RedisPubSub.js +49 -0
- package/lib/Adapters/Push/PushAdapter.js +40 -0
- package/lib/Adapters/Storage/Mongo/MongoCollection.js +212 -0
- package/lib/Adapters/Storage/Mongo/MongoSchemaCollection.js +334 -0
- package/lib/Adapters/Storage/Mongo/MongoStorageAdapter.js +1047 -0
- package/lib/Adapters/Storage/Mongo/MongoTransform.js +1397 -0
- package/lib/Adapters/Storage/Postgres/PostgresClient.js +38 -0
- package/lib/Adapters/Storage/Postgres/PostgresConfigParser.js +73 -0
- package/lib/Adapters/Storage/Postgres/PostgresStorageAdapter.js +2409 -0
- package/lib/Adapters/Storage/Postgres/sql/array/add-unique.sql +11 -0
- package/lib/Adapters/Storage/Postgres/sql/array/add.sql +11 -0
- package/lib/Adapters/Storage/Postgres/sql/array/contains-all-regex.sql +14 -0
- package/lib/Adapters/Storage/Postgres/sql/array/contains-all.sql +14 -0
- package/lib/Adapters/Storage/Postgres/sql/array/contains.sql +11 -0
- package/lib/Adapters/Storage/Postgres/sql/array/remove.sql +11 -0
- package/lib/Adapters/Storage/Postgres/sql/index.js +32 -0
- package/lib/Adapters/Storage/Postgres/sql/misc/json-object-set-keys.sql +19 -0
- package/lib/Adapters/Storage/StorageAdapter.js +2 -0
- package/lib/Adapters/WebSocketServer/WSAdapter.js +35 -0
- package/lib/Adapters/WebSocketServer/WSSAdapter.js +66 -0
- package/lib/Auth.js +687 -0
- package/lib/AuthDataLock.js +53 -0
- package/lib/ClientSDK.js +39 -0
- package/lib/Config.js +879 -0
- package/lib/Controllers/AdaptableController.js +72 -0
- package/lib/Controllers/AnalyticsController.js +43 -0
- package/lib/Controllers/CacheController.js +71 -0
- package/lib/Controllers/DatabaseController.js +1685 -0
- package/lib/Controllers/FilesController.js +122 -0
- package/lib/Controllers/HooksController.js +254 -0
- package/lib/Controllers/LiveQueryController.js +72 -0
- package/lib/Controllers/LoggerController.js +222 -0
- package/lib/Controllers/ParseGraphQLController.js +294 -0
- package/lib/Controllers/PushController.js +224 -0
- package/lib/Controllers/SchemaController.js +1563 -0
- package/lib/Controllers/UserController.js +364 -0
- package/lib/Controllers/index.js +251 -0
- package/lib/Controllers/types.js +2 -0
- package/lib/Deprecator/Deprecations.js +100 -0
- package/lib/Deprecator/Deprecator.js +140 -0
- package/lib/Error.js +50 -0
- package/lib/FileUrlValidator.js +69 -0
- package/lib/GraphQL/ParseGraphQLSchema.js +375 -0
- package/lib/GraphQL/ParseGraphQLServer.js +241 -0
- package/lib/GraphQL/helpers/objectsMutations.js +30 -0
- package/lib/GraphQL/helpers/objectsQueries.js +246 -0
- package/lib/GraphQL/helpers/queryComplexity.js +138 -0
- package/lib/GraphQL/loaders/configMutations.js +87 -0
- package/lib/GraphQL/loaders/configQueries.js +79 -0
- package/lib/GraphQL/loaders/defaultGraphQLMutations.js +21 -0
- package/lib/GraphQL/loaders/defaultGraphQLQueries.js +23 -0
- package/lib/GraphQL/loaders/defaultGraphQLTypes.js +1099 -0
- package/lib/GraphQL/loaders/defaultRelaySchema.js +53 -0
- package/lib/GraphQL/loaders/filesMutations.js +107 -0
- package/lib/GraphQL/loaders/functionsMutations.js +77 -0
- package/lib/GraphQL/loaders/parseClassMutations.js +267 -0
- package/lib/GraphQL/loaders/parseClassQueries.js +126 -0
- package/lib/GraphQL/loaders/parseClassTypes.js +493 -0
- package/lib/GraphQL/loaders/schemaDirectives.js +62 -0
- package/lib/GraphQL/loaders/schemaMutations.js +161 -0
- package/lib/GraphQL/loaders/schemaQueries.js +80 -0
- package/lib/GraphQL/loaders/schemaTypes.js +341 -0
- package/lib/GraphQL/loaders/usersMutations.js +433 -0
- package/lib/GraphQL/loaders/usersQueries.js +90 -0
- package/lib/GraphQL/parseGraphQLUtils.js +71 -0
- package/lib/GraphQL/transformers/className.js +14 -0
- package/lib/GraphQL/transformers/constraintType.js +53 -0
- package/lib/GraphQL/transformers/inputType.js +51 -0
- package/lib/GraphQL/transformers/mutation.js +280 -0
- package/lib/GraphQL/transformers/outputType.js +51 -0
- package/lib/GraphQL/transformers/query.js +237 -0
- package/lib/GraphQL/transformers/schemaFields.js +99 -0
- package/lib/InstallationDedup.js +178 -0
- package/lib/KeyPromiseQueue.js +48 -0
- package/lib/LiveQuery/Client.js +90 -0
- package/lib/LiveQuery/Id.js +20 -0
- package/lib/LiveQuery/ParseCloudCodePublisher.js +54 -0
- package/lib/LiveQuery/ParseLiveQueryServer.js +1071 -0
- package/lib/LiveQuery/ParsePubSub.js +37 -0
- package/lib/LiveQuery/ParseWebSocketServer.js +66 -0
- package/lib/LiveQuery/QueryTools.js +443 -0
- package/lib/LiveQuery/RequestSchema.js +161 -0
- package/lib/LiveQuery/SessionTokenCache.js +51 -0
- package/lib/LiveQuery/Subscription.js +47 -0
- package/lib/LiveQuery/equalObjects.js +50 -0
- package/lib/Options/Definitions.js +1599 -0
- package/lib/Options/docs.js +389 -0
- package/lib/Options/index.js +12 -0
- package/lib/Options/parsers.js +89 -0
- package/lib/Page.js +44 -0
- package/lib/ParseMessageQueue.js +24 -0
- package/lib/ParseServer.js +632 -0
- package/lib/ParseServerRESTController.js +173 -0
- package/lib/PromiseRouter.js +208 -0
- package/lib/Push/PushQueue.js +67 -0
- package/lib/Push/PushWorker.js +101 -0
- package/lib/Push/utils.js +129 -0
- package/lib/RestQuery.js +1208 -0
- package/lib/RestWrite.js +1671 -0
- package/lib/Routers/AggregateRouter.js +150 -0
- package/lib/Routers/AnalyticsRouter.js +26 -0
- package/lib/Routers/AudiencesRouter.js +54 -0
- package/lib/Routers/ClassesRouter.js +191 -0
- package/lib/Routers/CloudCodeRouter.js +87 -0
- package/lib/Routers/FeaturesRouter.js +72 -0
- package/lib/Routers/FilesRouter.js +772 -0
- package/lib/Routers/FunctionsRouter.js +341 -0
- package/lib/Routers/GlobalConfigRouter.js +123 -0
- package/lib/Routers/GraphQLRouter.js +41 -0
- package/lib/Routers/HooksRouter.js +121 -0
- package/lib/Routers/IAPValidationRouter.js +113 -0
- package/lib/Routers/InstallationsRouter.js +46 -0
- package/lib/Routers/LogsRouter.js +57 -0
- package/lib/Routers/PagesRouter.js +676 -0
- package/lib/Routers/PurgeRouter.js +45 -0
- package/lib/Routers/PushRouter.js +75 -0
- package/lib/Routers/RolesRouter.js +33 -0
- package/lib/Routers/SchemasRouter.js +118 -0
- package/lib/Routers/SecurityRouter.js +34 -0
- package/lib/Routers/SessionsRouter.js +126 -0
- package/lib/Routers/UsersRouter.js +733 -0
- package/lib/SchemaMigrations/DefinedSchemas.js +379 -0
- package/lib/SchemaMigrations/Migrations.js +30 -0
- package/lib/Security/Check.js +109 -0
- package/lib/Security/CheckGroup.js +44 -0
- package/lib/Security/CheckGroups/CheckGroupDatabase.js +44 -0
- package/lib/Security/CheckGroups/CheckGroupServerConfig.js +160 -0
- package/lib/Security/CheckGroups/CheckGroups.js +21 -0
- package/lib/Security/CheckRunner.js +213 -0
- package/lib/SharedRest.js +34 -0
- package/lib/StatusHandler.js +329 -0
- package/lib/TestUtils.js +87 -0
- package/lib/Utils.js +577 -0
- package/lib/batch.js +185 -0
- package/lib/cache.js +12 -0
- package/lib/cli/definitions/parse-live-query-server.js +9 -0
- package/lib/cli/definitions/parse-server.js +9 -0
- package/lib/cli/parse-live-query-server.js +14 -0
- package/lib/cli/parse-server.js +101 -0
- package/lib/cli/utils/commander.js +132 -0
- package/lib/cli/utils/runner.js +53 -0
- package/lib/cloud-code/Parse.Cloud.js +797 -0
- package/lib/cloud-code/Parse.Server.js +21 -0
- package/lib/cryptoUtils.js +54 -0
- package/lib/defaults.js +58 -0
- package/lib/deprecated.js +12 -0
- package/lib/index.js +89 -0
- package/lib/logger.js +40 -0
- package/lib/middlewares.js +810 -0
- package/lib/password.js +40 -0
- package/lib/request.js +175 -0
- package/lib/requiredParameter.js +11 -0
- package/lib/rest.js +264 -0
- package/lib/triggers.js +949 -0
- package/lib/vendor/README.md +8 -0
- package/lib/vendor/mongodbUrl.js +1012 -0
- package/package.json +172 -0
- package/postinstall.js +38 -0
- package/public/custom_json.html +17 -0
- package/public/custom_json.json +23 -0
- package/public/custom_page.html +15 -0
- package/public/de/email_verification_link_expired.html +24 -0
- package/public/de/email_verification_link_invalid.html +21 -0
- package/public/de/email_verification_send_fail.html +21 -0
- package/public/de/email_verification_send_success.html +19 -0
- package/public/de/email_verification_success.html +18 -0
- package/public/de/password_reset.html +65 -0
- package/public/de/password_reset_link_invalid.html +19 -0
- package/public/de/password_reset_success.html +18 -0
- package/public/de-AT/email_verification_link_expired.html +24 -0
- package/public/de-AT/email_verification_link_invalid.html +21 -0
- package/public/de-AT/email_verification_send_fail.html +21 -0
- package/public/de-AT/email_verification_send_success.html +19 -0
- package/public/de-AT/email_verification_success.html +18 -0
- package/public/de-AT/password_reset.html +65 -0
- package/public/de-AT/password_reset_link_invalid.html +19 -0
- package/public/de-AT/password_reset_success.html +18 -0
- package/public/email_verification_link_expired.html +24 -0
- package/public/email_verification_link_invalid.html +21 -0
- package/public/email_verification_send_fail.html +21 -0
- package/public/email_verification_send_success.html +19 -0
- package/public/email_verification_success.html +18 -0
- package/public/password_reset.html +65 -0
- package/public/password_reset_link_invalid.html +19 -0
- package/public/password_reset_success.html +18 -0
- package/types/@types/@parse/fs-files-adapter/index.d.ts +5 -0
- package/types/@types/deepcopy/index.d.ts +5 -0
- package/types/LiveQuery/ParseLiveQueryServer.d.ts +40 -0
- package/types/Options/index.d.ts +320 -0
- package/types/ParseServer.d.ts +65 -0
- package/types/eslint.config.mjs +30 -0
- package/types/index.d.ts +21 -0
- package/types/logger.d.ts +2 -0
- package/types/tests.ts +44 -0
- package/types/tsconfig.json +24 -0
- package/views/choose_password +215 -0
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
const general = {
|
|
8
|
+
title: 'General request schema',
|
|
9
|
+
type: 'object',
|
|
10
|
+
properties: {
|
|
11
|
+
op: {
|
|
12
|
+
type: 'string',
|
|
13
|
+
enum: ['connect', 'subscribe', 'unsubscribe', 'update']
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
required: ['op']
|
|
17
|
+
};
|
|
18
|
+
const connect = {
|
|
19
|
+
title: 'Connect operation schema',
|
|
20
|
+
type: 'object',
|
|
21
|
+
properties: {
|
|
22
|
+
op: 'connect',
|
|
23
|
+
applicationId: {
|
|
24
|
+
type: 'string'
|
|
25
|
+
},
|
|
26
|
+
javascriptKey: {
|
|
27
|
+
type: 'string'
|
|
28
|
+
},
|
|
29
|
+
masterKey: {
|
|
30
|
+
type: 'string'
|
|
31
|
+
},
|
|
32
|
+
clientKey: {
|
|
33
|
+
type: 'string'
|
|
34
|
+
},
|
|
35
|
+
windowsKey: {
|
|
36
|
+
type: 'string'
|
|
37
|
+
},
|
|
38
|
+
restAPIKey: {
|
|
39
|
+
type: 'string'
|
|
40
|
+
},
|
|
41
|
+
sessionToken: {
|
|
42
|
+
type: 'string'
|
|
43
|
+
},
|
|
44
|
+
installationId: {
|
|
45
|
+
type: 'string'
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
required: ['op', 'applicationId'],
|
|
49
|
+
additionalProperties: false
|
|
50
|
+
};
|
|
51
|
+
const subscribe = {
|
|
52
|
+
title: 'Subscribe operation schema',
|
|
53
|
+
type: 'object',
|
|
54
|
+
properties: {
|
|
55
|
+
op: 'subscribe',
|
|
56
|
+
requestId: {
|
|
57
|
+
type: 'number'
|
|
58
|
+
},
|
|
59
|
+
query: {
|
|
60
|
+
title: 'Query field schema',
|
|
61
|
+
type: 'object',
|
|
62
|
+
properties: {
|
|
63
|
+
className: {
|
|
64
|
+
type: 'string'
|
|
65
|
+
},
|
|
66
|
+
where: {
|
|
67
|
+
type: 'object'
|
|
68
|
+
},
|
|
69
|
+
keys: {
|
|
70
|
+
type: 'array',
|
|
71
|
+
items: {
|
|
72
|
+
type: 'string'
|
|
73
|
+
},
|
|
74
|
+
minItems: 1,
|
|
75
|
+
uniqueItems: true
|
|
76
|
+
},
|
|
77
|
+
watch: {
|
|
78
|
+
type: 'array',
|
|
79
|
+
items: {
|
|
80
|
+
type: 'string'
|
|
81
|
+
},
|
|
82
|
+
minItems: 1,
|
|
83
|
+
uniqueItems: true
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
required: ['where', 'className'],
|
|
87
|
+
additionalProperties: false
|
|
88
|
+
},
|
|
89
|
+
sessionToken: {
|
|
90
|
+
type: 'string'
|
|
91
|
+
}
|
|
92
|
+
},
|
|
93
|
+
required: ['op', 'requestId', 'query'],
|
|
94
|
+
additionalProperties: false
|
|
95
|
+
};
|
|
96
|
+
const update = {
|
|
97
|
+
title: 'Update operation schema',
|
|
98
|
+
type: 'object',
|
|
99
|
+
properties: {
|
|
100
|
+
op: 'update',
|
|
101
|
+
requestId: {
|
|
102
|
+
type: 'number'
|
|
103
|
+
},
|
|
104
|
+
query: {
|
|
105
|
+
title: 'Query field schema',
|
|
106
|
+
type: 'object',
|
|
107
|
+
properties: {
|
|
108
|
+
className: {
|
|
109
|
+
type: 'string'
|
|
110
|
+
},
|
|
111
|
+
where: {
|
|
112
|
+
type: 'object'
|
|
113
|
+
},
|
|
114
|
+
keys: {
|
|
115
|
+
type: 'array',
|
|
116
|
+
items: {
|
|
117
|
+
type: 'string'
|
|
118
|
+
},
|
|
119
|
+
minItems: 1,
|
|
120
|
+
uniqueItems: true
|
|
121
|
+
},
|
|
122
|
+
watch: {
|
|
123
|
+
type: 'array',
|
|
124
|
+
items: {
|
|
125
|
+
type: 'string'
|
|
126
|
+
},
|
|
127
|
+
minItems: 1,
|
|
128
|
+
uniqueItems: true
|
|
129
|
+
}
|
|
130
|
+
},
|
|
131
|
+
required: ['where', 'className'],
|
|
132
|
+
additionalProperties: false
|
|
133
|
+
},
|
|
134
|
+
sessionToken: {
|
|
135
|
+
type: 'string'
|
|
136
|
+
}
|
|
137
|
+
},
|
|
138
|
+
required: ['op', 'requestId', 'query'],
|
|
139
|
+
additionalProperties: false
|
|
140
|
+
};
|
|
141
|
+
const unsubscribe = {
|
|
142
|
+
title: 'Unsubscribe operation schema',
|
|
143
|
+
type: 'object',
|
|
144
|
+
properties: {
|
|
145
|
+
op: 'unsubscribe',
|
|
146
|
+
requestId: {
|
|
147
|
+
type: 'number'
|
|
148
|
+
}
|
|
149
|
+
},
|
|
150
|
+
required: ['op', 'requestId'],
|
|
151
|
+
additionalProperties: false
|
|
152
|
+
};
|
|
153
|
+
const RequestSchema = {
|
|
154
|
+
general: general,
|
|
155
|
+
connect: connect,
|
|
156
|
+
subscribe: subscribe,
|
|
157
|
+
update: update,
|
|
158
|
+
unsubscribe: unsubscribe
|
|
159
|
+
};
|
|
160
|
+
var _default = exports.default = RequestSchema;
|
|
161
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZW5lcmFsIiwidGl0bGUiLCJ0eXBlIiwicHJvcGVydGllcyIsIm9wIiwiZW51bSIsInJlcXVpcmVkIiwiY29ubmVjdCIsImFwcGxpY2F0aW9uSWQiLCJqYXZhc2NyaXB0S2V5IiwibWFzdGVyS2V5IiwiY2xpZW50S2V5Iiwid2luZG93c0tleSIsInJlc3RBUElLZXkiLCJzZXNzaW9uVG9rZW4iLCJpbnN0YWxsYXRpb25JZCIsImFkZGl0aW9uYWxQcm9wZXJ0aWVzIiwic3Vic2NyaWJlIiwicmVxdWVzdElkIiwicXVlcnkiLCJjbGFzc05hbWUiLCJ3aGVyZSIsImtleXMiLCJpdGVtcyIsIm1pbkl0ZW1zIiwidW5pcXVlSXRlbXMiLCJ3YXRjaCIsInVwZGF0ZSIsInVuc3Vic2NyaWJlIiwiUmVxdWVzdFNjaGVtYSIsIl9kZWZhdWx0IiwiZXhwb3J0cyIsImRlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvTGl2ZVF1ZXJ5L1JlcXVlc3RTY2hlbWEuanMiXSwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgZ2VuZXJhbCA9IHtcbiAgdGl0bGU6ICdHZW5lcmFsIHJlcXVlc3Qgc2NoZW1hJyxcbiAgdHlwZTogJ29iamVjdCcsXG4gIHByb3BlcnRpZXM6IHtcbiAgICBvcDoge1xuICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICBlbnVtOiBbJ2Nvbm5lY3QnLCAnc3Vic2NyaWJlJywgJ3Vuc3Vic2NyaWJlJywgJ3VwZGF0ZSddLFxuICAgIH0sXG4gIH0sXG4gIHJlcXVpcmVkOiBbJ29wJ10sXG59O1xuXG5jb25zdCBjb25uZWN0ID0ge1xuICB0aXRsZTogJ0Nvbm5lY3Qgb3BlcmF0aW9uIHNjaGVtYScsXG4gIHR5cGU6ICdvYmplY3QnLFxuICBwcm9wZXJ0aWVzOiB7XG4gICAgb3A6ICdjb25uZWN0JyxcbiAgICBhcHBsaWNhdGlvbklkOiB7XG4gICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICB9LFxuICAgIGphdmFzY3JpcHRLZXk6IHtcbiAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgIH0sXG4gICAgbWFzdGVyS2V5OiB7XG4gICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICB9LFxuICAgIGNsaWVudEtleToge1xuICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgfSxcbiAgICB3aW5kb3dzS2V5OiB7XG4gICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICB9LFxuICAgIHJlc3RBUElLZXk6IHtcbiAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgIH0sXG4gICAgc2Vzc2lvblRva2VuOiB7XG4gICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICB9LFxuICAgIGluc3RhbGxhdGlvbklkOiB7XG4gICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICB9LFxuICB9LFxuICByZXF1aXJlZDogWydvcCcsICdhcHBsaWNhdGlvbklkJ10sXG4gIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbn07XG5cbmNvbnN0IHN1YnNjcmliZSA9IHtcbiAgdGl0bGU6ICdTdWJzY3JpYmUgb3BlcmF0aW9uIHNjaGVtYScsXG4gIHR5cGU6ICdvYmplY3QnLFxuICBwcm9wZXJ0aWVzOiB7XG4gICAgb3A6ICdzdWJzY3JpYmUnLFxuICAgIHJlcXVlc3RJZDoge1xuICAgICAgdHlwZTogJ251bWJlcicsXG4gICAgfSxcbiAgICBxdWVyeToge1xuICAgICAgdGl0bGU6ICdRdWVyeSBmaWVsZCBzY2hlbWEnLFxuICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgIGNsYXNzTmFtZToge1xuICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICB9LFxuICAgICAgICB3aGVyZToge1xuICAgICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICB9LFxuICAgICAgICBrZXlzOiB7XG4gICAgICAgICAgdHlwZTogJ2FycmF5JyxcbiAgICAgICAgICBpdGVtczoge1xuICAgICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBtaW5JdGVtczogMSxcbiAgICAgICAgICB1bmlxdWVJdGVtczogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgd2F0Y2g6IHtcbiAgICAgICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgICAgIGl0ZW1zOiB7XG4gICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG1pbkl0ZW1zOiAxLFxuICAgICAgICAgIHVuaXF1ZUl0ZW1zOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHJlcXVpcmVkOiBbJ3doZXJlJywgJ2NsYXNzTmFtZSddLFxuICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgIH0sXG4gICAgc2Vzc2lvblRva2VuOiB7XG4gICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICB9LFxuICB9LFxuICByZXF1aXJlZDogWydvcCcsICdyZXF1ZXN0SWQnLCAncXVlcnknXSxcbiAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxufTtcblxuY29uc3QgdXBkYXRlID0ge1xuICB0aXRsZTogJ1VwZGF0ZSBvcGVyYXRpb24gc2NoZW1hJyxcbiAgdHlwZTogJ29iamVjdCcsXG4gIHByb3BlcnRpZXM6IHtcbiAgICBvcDogJ3VwZGF0ZScsXG4gICAgcmVxdWVzdElkOiB7XG4gICAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICB9LFxuICAgIHF1ZXJ5OiB7XG4gICAgICB0aXRsZTogJ1F1ZXJ5IGZpZWxkIHNjaGVtYScsXG4gICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgY2xhc3NOYW1lOiB7XG4gICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgIH0sXG4gICAgICAgIHdoZXJlOiB7XG4gICAgICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICAgIH0sXG4gICAgICAgIGtleXM6IHtcbiAgICAgICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgICAgIGl0ZW1zOiB7XG4gICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG1pbkl0ZW1zOiAxLFxuICAgICAgICAgIHVuaXF1ZUl0ZW1zOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICB3YXRjaDoge1xuICAgICAgICAgIHR5cGU6ICdhcnJheScsXG4gICAgICAgICAgaXRlbXM6IHtcbiAgICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbWluSXRlbXM6IDEsXG4gICAgICAgICAgdW5pcXVlSXRlbXM6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgcmVxdWlyZWQ6IFsnd2hlcmUnLCAnY2xhc3NOYW1lJ10sXG4gICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgfSxcbiAgICBzZXNzaW9uVG9rZW46IHtcbiAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgIH0sXG4gIH0sXG4gIHJlcXVpcmVkOiBbJ29wJywgJ3JlcXVlc3RJZCcsICdxdWVyeSddLFxuICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG59O1xuXG5jb25zdCB1bnN1YnNjcmliZSA9IHtcbiAgdGl0bGU6ICdVbnN1YnNjcmliZSBvcGVyYXRpb24gc2NoZW1hJyxcbiAgdHlwZTogJ29iamVjdCcsXG4gIHByb3BlcnRpZXM6IHtcbiAgICBvcDogJ3Vuc3Vic2NyaWJlJyxcbiAgICByZXF1ZXN0SWQ6IHtcbiAgICAgIHR5cGU6ICdudW1iZXInLFxuICAgIH0sXG4gIH0sXG4gIHJlcXVpcmVkOiBbJ29wJywgJ3JlcXVlc3RJZCddLFxuICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG59O1xuXG5jb25zdCBSZXF1ZXN0U2NoZW1hID0ge1xuICBnZW5lcmFsOiBnZW5lcmFsLFxuICBjb25uZWN0OiBjb25uZWN0LFxuICBzdWJzY3JpYmU6IHN1YnNjcmliZSxcbiAgdXBkYXRlOiB1cGRhdGUsXG4gIHVuc3Vic2NyaWJlOiB1bnN1YnNj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
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.SessionTokenCache = void 0;
|
|
7
|
+
var _node = _interopRequireDefault(require("parse/node"));
|
|
8
|
+
var _lruCache = require("lru-cache");
|
|
9
|
+
var _logger = _interopRequireDefault(require("../logger"));
|
|
10
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
11
|
+
function userForSessionToken(sessionToken) {
|
|
12
|
+
var q = new _node.default.Query('_Session');
|
|
13
|
+
q.equalTo('sessionToken', sessionToken);
|
|
14
|
+
return q.first({
|
|
15
|
+
useMasterKey: true
|
|
16
|
+
}).then(function (session) {
|
|
17
|
+
if (!session) {
|
|
18
|
+
return Promise.reject('No session found for session token');
|
|
19
|
+
}
|
|
20
|
+
return session.get('user');
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
class SessionTokenCache {
|
|
24
|
+
constructor(timeout = 30 * 24 * 60 * 60 * 1000, maxSize = 10000) {
|
|
25
|
+
this.cache = new _lruCache.LRUCache({
|
|
26
|
+
max: maxSize,
|
|
27
|
+
ttl: timeout
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
getUserId(sessionToken) {
|
|
31
|
+
if (!sessionToken) {
|
|
32
|
+
return Promise.reject('Empty sessionToken');
|
|
33
|
+
}
|
|
34
|
+
const userId = this.cache.get(sessionToken);
|
|
35
|
+
if (userId) {
|
|
36
|
+
_logger.default.verbose('Fetch userId %s of sessionToken %s from Cache', userId, sessionToken);
|
|
37
|
+
return Promise.resolve(userId);
|
|
38
|
+
}
|
|
39
|
+
return userForSessionToken(sessionToken).then(user => {
|
|
40
|
+
_logger.default.verbose('Fetch userId %s of sessionToken %s from Parse', user.id, sessionToken);
|
|
41
|
+
const userId = user.id;
|
|
42
|
+
this.cache.set(sessionToken, userId);
|
|
43
|
+
return Promise.resolve(userId);
|
|
44
|
+
}, error => {
|
|
45
|
+
_logger.default.error('Can not fetch userId for sessionToken %j, error %j', sessionToken, error);
|
|
46
|
+
return Promise.reject(error);
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
exports.SessionTokenCache = SessionTokenCache;
|
|
51
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbm9kZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2xydUNhY2hlIiwiX2xvZ2dlciIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsInVzZXJGb3JTZXNzaW9uVG9rZW4iLCJzZXNzaW9uVG9rZW4iLCJxIiwiUGFyc2UiLCJRdWVyeSIsImVxdWFsVG8iLCJmaXJzdCIsInVzZU1hc3RlcktleSIsInRoZW4iLCJzZXNzaW9uIiwiUHJvbWlzZSIsInJlamVjdCIsImdldCIsIlNlc3Npb25Ub2tlbkNhY2hlIiwiY29uc3RydWN0b3IiLCJ0aW1lb3V0IiwibWF4U2l6ZSIsImNhY2hlIiwiTFJVIiwibWF4IiwidHRsIiwiZ2V0VXNlcklkIiwidXNlcklkIiwibG9nZ2VyIiwidmVyYm9zZSIsInJlc29sdmUiLCJ1c2VyIiwiaWQiLCJzZXQiLCJlcnJvciIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvTGl2ZVF1ZXJ5L1Nlc3Npb25Ub2tlbkNhY2hlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBQYXJzZSBmcm9tICdwYXJzZS9ub2RlJztcbmltcG9ydCB7IExSVUNhY2hlIGFzIExSVSB9IGZyb20gJ2xydS1jYWNoZSc7XG5pbXBvcnQgbG9nZ2VyIGZyb20gJy4uL2xvZ2dlcic7XG5cbmZ1bmN0aW9uIHVzZXJGb3JTZXNzaW9uVG9rZW4oc2Vzc2lvblRva2VuKSB7XG4gIHZhciBxID0gbmV3IFBhcnNlLlF1ZXJ5KCdfU2Vzc2lvbicpO1xuICBxLmVxdWFsVG8oJ3Nlc3Npb25Ub2tlbicsIHNlc3Npb25Ub2tlbik7XG4gIHJldHVybiBxLmZpcnN0KHsgdXNlTWFzdGVyS2V5OiB0cnVlIH0pLnRoZW4oZnVuY3Rpb24gKHNlc3Npb24pIHtcbiAgICBpZiAoIXNlc3Npb24pIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCgnTm8gc2Vzc2lvbiBmb3VuZCBmb3Igc2Vzc2lvbiB0b2tlbicpO1xuICAgIH1cbiAgICByZXR1cm4gc2Vzc2lvbi5nZXQoJ3VzZXInKTtcbiAgfSk7XG59XG5cbmNsYXNzIFNlc3Npb25Ub2tlbkNhY2hlIHtcbiAgY2FjaGU6IE9iamVjdDtcblxuICBjb25zdHJ1Y3Rvcih0aW1lb3V0OiBudW1iZXIgPSAzMCAqIDI0ICogNjAgKiA2MCAqIDEwMDAsIG1heFNpemU6IG51bWJlciA9IDEwMDAwKSB7XG4gICAgdGhpcy5jYWNoZSA9IG5ldyBMUlUoe1xuICAgICAgbWF4OiBtYXhTaXplLFxuICAgICAgdHRsOiB0aW1lb3V0LFxuICAgIH0pO1xuICB9XG5cbiAgZ2V0VXNlcklkKHNlc3Npb25Ub2tlbjogc3RyaW5nKTogYW55IHtcbiAgICBpZiAoIXNlc3Npb25Ub2tlbikge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCdFbXB0eSBzZXNzaW9uVG9rZW4nKTtcbiAgICB9XG4gICAgY29uc3QgdXNlcklkID0gdGhpcy5jYWNoZS5nZXQoc2Vzc2lvblRva2VuKTtcbiAgICBpZiAodXNlcklkKSB7XG4gICAgICBsb2dnZXIudmVyYm9zZSgnRmV0Y2ggdXNlcklkICVzIG9mIHNlc3Npb25Ub2tlbiAlcyBmcm9tIENhY2hlJywgdXNlcklkLCBzZXNzaW9uVG9rZW4pO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1c2VySWQpO1xuICAgIH1cbiAgICByZXR1cm4gdXNlckZvclNlc3Npb25Ub2tlbihzZXNzaW9uVG9rZW4pLnRoZW4oXG4gICAgICB1c2VyID0+IHtcbiAgICAgICAgbG9nZ2VyLnZlcmJvc2UoJ0ZldGNoIHVzZXJJZCAlcyBvZiBzZXNzaW9uVG9rZW4gJXMgZnJvbSBQYXJzZScsIHVzZXIuaWQsIHNlc3Npb25Ub2tlbik7XG4gICAgICAgIGNvbnN0IHVzZXJJZCA9IHVzZXIuaWQ7XG4gICAgICAgIHRoaXMuY2FjaGUuc2V0KHNlc3Npb25Ub2tlbiwgdXNlcklkKTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh1c2VySWQpO1xuICAgICAgfSxcbiAgICAgIGVycm9yID0+IHtcbiAgICAgICAgbG9nZ2VyLmVycm9yKCdDYW4gbm90IGZldGNoIHVzZXJJZCBmb3Igc2Vzc2lvblRva2VuICVqLCBlcnJvciAlaicsIHNlc3Npb25Ub2tlbiwgZXJyb3IpO1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICAgICAgfVxuICAgICk7XG4gIH1cbn1cblxuZXhwb3J0IHsgU2Vzc2lvblRva2VuQ2FjaGUgfTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsSUFBQUEsS0FBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsU0FBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsT0FBQSxHQUFBSCxzQkFBQSxDQUFBQyxPQUFBO0FBQStCLFNBQUFELHVCQUFBSSxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsS0FBQUUsT0FBQSxFQUFBRixDQUFBO0FBRS9CLFNBQVNHLG1CQUFtQkEsQ0FBQ0MsWUFBWSxFQUFFO0VBQ3pDLElBQUlDLENBQUMsR0FBRyxJQUFJQyxhQUFLLENBQUNDLEtBQUssQ0FBQyxVQUFVLENBQUM7RUFDbkNGLENBQUMsQ0FBQ0csT0FBTyxDQUFDLGNBQWMsRUFBRUosWUFBWSxDQUFDO0VBQ3ZDLE9BQU9DLENBQUMsQ0FBQ0ksS0FBSyxDQUFDO0lBQUVDLFlBQVksRUFBRTtFQUFLLENBQUMsQ0FBQyxDQUFDQyxJQUFJLENBQUMsVUFBVUMsT0FBTyxFQUFFO0lBQzdELElBQUksQ0FBQ0EsT0FBTyxFQUFFO01BQ1osT0FBT0MsT0FBTyxDQUFDQyxNQUFNLENBQUMsb0NBQW9DLENBQUM7SUFDN0Q7SUFDQSxPQUFPRixPQUFPLENBQUNHLEdBQUcsQ0FBQyxNQUFNLENBQUM7RUFDNUIsQ0FBQyxDQUFDO0FBQ0o7QUFFQSxNQUFNQyxpQkFBaUIsQ0FBQztFQUd0QkMsV0FBV0EsQ0FBQ0MsT0FBZSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxJQUFJLEVBQUVDLE9BQWUsR0FBRyxLQUFLLEVBQUU7SUFDL0UsSUFBSSxDQUFDQyxLQUFLLEdBQUcsSUFBSUMsa0JBQUcsQ0FBQztNQUNuQkMsR0FBRyxFQUFFSCxPQUFPO01BQ1pJLEdBQUcsRUFBRUw7SUFDUCxDQUFDLENBQUM7RUFDSjtFQUVBTSxTQUFTQSxDQUFDcEIsWUFBb0IsRUFBTztJQUNuQyxJQUFJLENBQUNBLFlBQVksRUFBRTtNQUNqQixPQUFPUyxPQUFPLENBQUNDLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQztJQUM3QztJQUNBLE1BQU1XLE1BQU0sR0FBRyxJQUFJLENBQUNMLEtBQUssQ0FBQ0wsR0FBRyxDQUFDWCxZQUFZLENBQUM7SUFDM0MsSUFBSXFCLE1BQU0sRUFBRTtNQUNWQyxlQUFNLENBQUNDLE9BQU8sQ0FBQywrQ0FBK0MsRUFBRUYsTUFBTSxFQUFFckIsWUFBWSxDQUFDO01BQ3JGLE9BQU9TLE9BQU8sQ0FBQ2UsT0FBTyxDQUFDSCxNQUFNLENBQUM7SUFDaEM7SUFDQSxPQUFPdEIsbUJBQW1CLENBQUNDLFlBQVksQ0FBQyxDQUFDTyxJQUFJLENBQzNDa0IsSUFBSSxJQUFJO01BQ05ILGVBQU0sQ0FBQ0MsT0FBTyxDQUFDLCtDQUErQyxFQUFFRSxJQUFJLENBQUNDLEVBQUUsRUFBRTFCLFlBQVksQ0FBQztNQUN0RixNQUFNcUIsTUFBTSxHQUFHSSxJQUFJLENBQUNDLEVBQUU7TUFDdEIsSUFBSSxDQUFDVixLQUFLLENBQUNXLEdBQUcsQ0FBQzNCLFlBQVksRUFBRXFCLE1BQU0sQ0FBQztNQUNwQyxPQUFPWixPQUFPLENBQUNlLE9BQU8sQ0FBQ0gsTUFBTSxDQUFDO0lBQ2hDLENBQUMsRUFDRE8sS0FBSyxJQUFJO01BQ1BOLGVBQU0sQ0FBQ00sS0FBSyxDQUFDLG9EQUFvRCxFQUFFNUIsWUFBWSxFQUFFNEIsS0FBSyxDQUFDO01BQ3ZGLE9BQU9uQixPQUFPLENBQUNDLE1BQU0sQ0FBQ2tCLEtBQUssQ0FBQztJQUM5QixDQUNGLENBQUM7RUFDSDtBQUNGO0FBQUNDLE9BQUEsQ0FBQWpCLGlCQUFBLEdBQUFBLGlCQUFBIiwiaWdub3JlTGlzdCI6W119
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.Subscription = void 0;
|
|
7
|
+
var _logger = _interopRequireDefault(require("../logger"));
|
|
8
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
9
|
+
class Subscription {
|
|
10
|
+
// It is query condition eg query.where
|
|
11
|
+
|
|
12
|
+
constructor(className, query, queryHash) {
|
|
13
|
+
this.className = className;
|
|
14
|
+
this.query = query;
|
|
15
|
+
this.hash = queryHash;
|
|
16
|
+
this.clientRequestIds = new Map();
|
|
17
|
+
}
|
|
18
|
+
addClientSubscription(clientId, requestId) {
|
|
19
|
+
if (!this.clientRequestIds.has(clientId)) {
|
|
20
|
+
this.clientRequestIds.set(clientId, []);
|
|
21
|
+
}
|
|
22
|
+
const requestIds = this.clientRequestIds.get(clientId);
|
|
23
|
+
requestIds.push(requestId);
|
|
24
|
+
}
|
|
25
|
+
deleteClientSubscription(clientId, requestId) {
|
|
26
|
+
const requestIds = this.clientRequestIds.get(clientId);
|
|
27
|
+
if (typeof requestIds === 'undefined') {
|
|
28
|
+
_logger.default.error('Can not find client %d to delete', clientId);
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
const index = requestIds.indexOf(requestId);
|
|
32
|
+
if (index < 0) {
|
|
33
|
+
_logger.default.error('Can not find client %d subscription %d to delete', clientId, requestId);
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
requestIds.splice(index, 1);
|
|
37
|
+
// Delete client reference if it has no subscription
|
|
38
|
+
if (requestIds.length == 0) {
|
|
39
|
+
this.clientRequestIds.delete(clientId);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
hasSubscribingClient() {
|
|
43
|
+
return this.clientRequestIds.size > 0;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
exports.Subscription = Subscription;
|
|
47
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9nZ2VyIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJTdWJzY3JpcHRpb24iLCJjb25zdHJ1Y3RvciIsImNsYXNzTmFtZSIsInF1ZXJ5IiwicXVlcnlIYXNoIiwiaGFzaCIsImNsaWVudFJlcXVlc3RJZHMiLCJNYXAiLCJhZGRDbGllbnRTdWJzY3JpcHRpb24iLCJjbGllbnRJZCIsInJlcXVlc3RJZCIsImhhcyIsInNldCIsInJlcXVlc3RJZHMiLCJnZXQiLCJwdXNoIiwiZGVsZXRlQ2xpZW50U3Vic2NyaXB0aW9uIiwibG9nZ2VyIiwiZXJyb3IiLCJpbmRleCIsImluZGV4T2YiLCJzcGxpY2UiLCJsZW5ndGgiLCJkZWxldGUiLCJoYXNTdWJzY3JpYmluZ0NsaWVudCIsInNpemUiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL0xpdmVRdWVyeS9TdWJzY3JpcHRpb24uanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGxvZ2dlciBmcm9tICcuLi9sb2dnZXInO1xuXG5leHBvcnQgdHlwZSBGbGF0dGVuZWRPYmplY3REYXRhID0geyBbYXR0cjogc3RyaW5nXTogYW55IH07XG5leHBvcnQgdHlwZSBRdWVyeURhdGEgPSB7IFthdHRyOiBzdHJpbmddOiBhbnkgfTtcblxuY2xhc3MgU3Vic2NyaXB0aW9uIHtcbiAgLy8gSXQgaXMgcXVlcnkgY29uZGl0aW9uIGVnIHF1ZXJ5LndoZXJlXG4gIHF1ZXJ5OiBRdWVyeURhdGE7XG4gIGNsYXNzTmFtZTogc3RyaW5nO1xuICBoYXNoOiBzdHJpbmc7XG4gIGNsaWVudFJlcXVlc3RJZHM6IE9iamVjdDtcblxuICBjb25zdHJ1Y3RvcihjbGFzc05hbWU6IHN0cmluZywgcXVlcnk6IFF1ZXJ5RGF0YSwgcXVlcnlIYXNoOiBzdHJpbmcpIHtcbiAgICB0aGlzLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTtcbiAgICB0aGlzLnF1ZXJ5ID0gcXVlcnk7XG4gICAgdGhpcy5oYXNoID0gcXVlcnlIYXNoO1xuICAgIHRoaXMuY2xpZW50UmVxdWVzdElkcyA9IG5ldyBNYXAoKTtcbiAgfVxuXG4gIGFkZENsaWVudFN1YnNjcmlwdGlvbihjbGllbnRJZDogbnVtYmVyLCByZXF1ZXN0SWQ6IG51bWJlcik6IHZvaWQge1xuICAgIGlmICghdGhpcy5jbGllbnRSZXF1ZXN0SWRzLmhhcyhjbGllbnRJZCkpIHtcbiAgICAgIHRoaXMuY2xpZW50UmVxdWVzdElkcy5zZXQoY2xpZW50SWQsIFtdKTtcbiAgICB9XG4gICAgY29uc3QgcmVxdWVzdElkcyA9IHRoaXMuY2xpZW50UmVxdWVzdElkcy5nZXQoY2xpZW50SWQpO1xuICAgIHJlcXVlc3RJZHMucHVzaChyZXF1ZXN0SWQpO1xuICB9XG5cbiAgZGVsZXRlQ2xpZW50U3Vic2NyaXB0aW9uKGNsaWVudElkOiBudW1iZXIsIHJlcXVlc3RJZDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgcmVxdWVzdElkcyA9IHRoaXMuY2xpZW50UmVxdWVzdElkcy5nZXQoY2xpZW50SWQpO1xuICAgIGlmICh0eXBlb2YgcmVxdWVzdElkcyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignQ2FuIG5vdCBmaW5kIGNsaWVudCAlZCB0byBkZWxldGUnLCBjbGllbnRJZCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaW5kZXggPSByZXF1ZXN0SWRzLmluZGV4T2YocmVxdWVzdElkKTtcbiAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0NhbiBub3QgZmluZCBjbGllbnQgJWQgc3Vic2NyaXB0aW9uICVkIHRvIGRlbGV0ZScsIGNsaWVudElkLCByZXF1ZXN0SWQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICByZXF1ZXN0SWRzLnNwbGljZShpbmRleCwgMSk7XG4gICAgLy8gRGVsZXRlIGNsaWVudCByZWZlcmVuY2UgaWYgaXQgaGFzIG5vIHN1YnNjcmlwdGlvblxuICAgIGlmIChyZXF1ZXN0SWRzLmxlbmd0aCA9PSAwKSB7XG4gICAgICB0aGlzLmNsaWVudFJlcXVlc3RJZHMuZGVsZXRlKGNsaWVudElkKTtcbiAgICB9XG4gIH1cblxuICBoYXNTdWJzY3JpYmluZ0NsaWVudCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jbGllbnRSZXF1ZXN0SWRzLnNpemUgPiAwO1xuICB9XG59XG5cbmV4cG9ydCB7IFN1YnNjcmlwdGlvbiB9O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxPQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFBK0IsU0FBQUQsdUJBQUFFLENBQUEsV0FBQUEsQ0FBQSxJQUFBQSxDQUFBLENBQUFDLFVBQUEsR0FBQUQsQ0FBQSxLQUFBRSxPQUFBLEVBQUFGLENBQUE7QUFLL0IsTUFBTUcsWUFBWSxDQUFDO0VBQ2pCOztFQU1BQyxXQUFXQSxDQUFDQyxTQUFpQixFQUFFQyxLQUFnQixFQUFFQyxTQUFpQixFQUFFO0lBQ2xFLElBQUksQ0FBQ0YsU0FBUyxHQUFHQSxTQUFTO0lBQzFCLElBQUksQ0FBQ0MsS0FBSyxHQUFHQSxLQUFLO0lBQ2xCLElBQUksQ0FBQ0UsSUFBSSxHQUFHRCxTQUFTO0lBQ3JCLElBQUksQ0FBQ0UsZ0JBQWdCLEdBQUcsSUFBSUMsR0FBRyxDQUFDLENBQUM7RUFDbkM7RUFFQUMscUJBQXFCQSxDQUFDQyxRQUFnQixFQUFFQyxTQUFpQixFQUFRO0lBQy9ELElBQUksQ0FBQyxJQUFJLENBQUNKLGdCQUFnQixDQUFDSyxHQUFHLENBQUNGLFFBQVEsQ0FBQyxFQUFFO01BQ3hDLElBQUksQ0FBQ0gsZ0JBQWdCLENBQUNNLEdBQUcsQ0FBQ0gsUUFBUSxFQUFFLEVBQUUsQ0FBQztJQUN6QztJQUNBLE1BQU1JLFVBQVUsR0FBRyxJQUFJLENBQUNQLGdCQUFnQixDQUFDUSxHQUFHLENBQUNMLFFBQVEsQ0FBQztJQUN0REksVUFBVSxDQUFDRSxJQUFJLENBQUNMLFNBQVMsQ0FBQztFQUM1QjtFQUVBTSx3QkFBd0JBLENBQUNQLFFBQWdCLEVBQUVDLFNBQWlCLEVBQVE7SUFDbEUsTUFBTUcsVUFBVSxHQUFHLElBQUksQ0FBQ1AsZ0JBQWdCLENBQUNRLEdBQUcsQ0FBQ0wsUUFBUSxDQUFDO0lBQ3RELElBQUksT0FBT0ksVUFBVSxLQUFLLFdBQVcsRUFBRTtNQUNyQ0ksZUFBTSxDQUFDQyxLQUFLLENBQUMsa0NBQWtDLEVBQUVULFFBQVEsQ0FBQztNQUMxRDtJQUNGO0lBRUEsTUFBTVUsS0FBSyxHQUFHTixVQUFVLENBQUNPLE9BQU8sQ0FBQ1YsU0FBUyxDQUFDO0lBQzNDLElBQUlTLEtBQUssR0FBRyxDQUFDLEVBQUU7TUFDYkYsZUFBTSxDQUFDQyxLQUFLLENBQUMsa0RBQWtELEVBQUVULFFBQVEsRUFBRUMsU0FBUyxDQUFDO01BQ3JGO0lBQ0Y7SUFDQUcsVUFBVSxDQUFDUSxNQUFNLENBQUNGLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDM0I7SUFDQSxJQUFJTixVQUFVLENBQUNTLE1BQU0sSUFBSSxDQUFDLEVBQUU7TUFDMUIsSUFBSSxDQUFDaEIsZ0JBQWdCLENBQUNpQixNQUFNLENBQUNkLFFBQVEsQ0FBQztJQUN4QztFQUNGO0VBRUFlLG9CQUFvQkEsQ0FBQSxFQUFZO0lBQzlCLE9BQU8sSUFBSSxDQUFDbEIsZ0JBQWdCLENBQUNtQixJQUFJLEdBQUcsQ0FBQztFQUN2QztBQUNGO0FBQUNDLE9BQUEsQ0FBQTFCLFlBQUEsR0FBQUEsWUFBQSIsImlnbm9yZUxpc3QiOltdfQ==
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var toString = Object.prototype.toString;
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Determines whether two objects represent the same primitive, special Parse
|
|
7
|
+
* type, or full Parse Object.
|
|
8
|
+
*/
|
|
9
|
+
function equalObjects(a, b) {
|
|
10
|
+
if (typeof a !== typeof b) {
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
if (typeof a !== 'object') {
|
|
14
|
+
return a === b;
|
|
15
|
+
}
|
|
16
|
+
if (a === b) {
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
19
|
+
if (toString.call(a) === '[object Date]') {
|
|
20
|
+
if (toString.call(b) === '[object Date]') {
|
|
21
|
+
return +a === +b;
|
|
22
|
+
}
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
if (Array.isArray(a)) {
|
|
26
|
+
if (Array.isArray(b)) {
|
|
27
|
+
if (a.length !== b.length) {
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
for (var i = 0; i < a.length; i++) {
|
|
31
|
+
if (!equalObjects(a[i], b[i])) {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
if (Object.keys(a).length !== Object.keys(b).length) {
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
for (var key in a) {
|
|
43
|
+
if (!equalObjects(a[key], b[key])) {
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return true;
|
|
48
|
+
}
|
|
49
|
+
module.exports = equalObjects;
|
|
50
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ0b1N0cmluZyIsIk9iamVjdCIsInByb3RvdHlwZSIsImVxdWFsT2JqZWN0cyIsImEiLCJiIiwiY2FsbCIsIkFycmF5IiwiaXNBcnJheSIsImxlbmd0aCIsImkiLCJrZXlzIiwia2V5IiwibW9kdWxlIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9MaXZlUXVlcnkvZXF1YWxPYmplY3RzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbInZhciB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHR3byBvYmplY3RzIHJlcHJlc2VudCB0aGUgc2FtZSBwcmltaXRpdmUsIHNwZWNpYWwgUGFyc2VcbiAqIHR5cGUsIG9yIGZ1bGwgUGFyc2UgT2JqZWN0LlxuICovXG5mdW5jdGlvbiBlcXVhbE9iamVjdHMoYSwgYikge1xuICBpZiAodHlwZW9mIGEgIT09IHR5cGVvZiBiKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICh0eXBlb2YgYSAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gYSA9PT0gYjtcbiAgfVxuICBpZiAoYSA9PT0gYikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmICh0b1N0cmluZy5jYWxsKGEpID09PSAnW29iamVjdCBEYXRlXScpIHtcbiAgICBpZiAodG9TdHJpbmcuY2FsbChiKSA9PT0gJ1tvYmplY3QgRGF0ZV0nKSB7XG4gICAgICByZXR1cm4gK2EgPT09ICtiO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkoYSkpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShiKSkge1xuICAgICAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKCFlcXVhbE9iamVjdHMoYVtpXSwgYltpXSkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKE9iamVjdC5rZXlzKGEpLmxlbmd0aCAhPT0gT2JqZWN0LmtleXMoYikubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGZvciAodmFyIGtleSBpbiBhKSB7XG4gICAgaWYgKCFlcXVhbE9iamVjdHMoYVtrZXldLCBiW2tleV0pKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGVxdWFsT2JqZWN0cztcbiJdLCJtYXBwaW5ncyI6Ijs7QUFBQSxJQUFJQSxRQUFRLEdBQUdDLE1BQU0sQ0FBQ0MsU0FBUyxDQUFDRixRQUFROztBQUV4QztBQUNBO0FBQ0E7QUFDQTtBQUNBLFNBQVNHLFlBQVlBLENBQUNDLENBQUMsRUFBRUMsQ0FBQyxFQUFFO0VBQzFCLElBQUksT0FBT0QsQ0FBQyxLQUFLLE9BQU9DLENBQUMsRUFBRTtJQUN6QixPQUFPLEtBQUs7RUFDZDtFQUNBLElBQUksT0FBT0QsQ0FBQyxLQUFLLFFBQVEsRUFBRTtJQUN6QixPQUFPQSxDQUFDLEtBQUtDLENBQUM7RUFDaEI7RUFDQSxJQUFJRCxDQUFDLEtBQUtDLENBQUMsRUFBRTtJQUNYLE9BQU8sSUFBSTtFQUNiO0VBQ0EsSUFBSUwsUUFBUSxDQUFDTSxJQUFJLENBQUNGLENBQUMsQ0FBQyxLQUFLLGVBQWUsRUFBRTtJQUN4QyxJQUFJSixRQUFRLENBQUNNLElBQUksQ0FBQ0QsQ0FBQyxDQUFDLEtBQUssZUFBZSxFQUFFO01BQ3hDLE9BQU8sQ0FBQ0QsQ0FBQyxLQUFLLENBQUNDLENBQUM7SUFDbEI7SUFDQSxPQUFPLEtBQUs7RUFDZDtFQUNBLElBQUlFLEtBQUssQ0FBQ0MsT0FBTyxDQUFDSixDQUFDLENBQUMsRUFBRTtJQUNwQixJQUFJRyxLQUFLLENBQUNDLE9BQU8sQ0FBQ0gsQ0FBQyxDQUFDLEVBQUU7TUFDcEIsSUFBSUQsQ0FBQyxDQUFDSyxNQUFNLEtBQUtKLENBQUMsQ0FBQ0ksTUFBTSxFQUFFO1FBQ3pCLE9BQU8sS0FBSztNQUNkO01BQ0EsS0FBSyxJQUFJQyxDQUFDLEdBQUcsQ0FBQyxFQUFFQSxDQUFDLEdBQUdOLENBQUMsQ0FBQ0ssTUFBTSxFQUFFQyxDQUFDLEVBQUUsRUFBRTtRQUNqQyxJQUFJLENBQUNQLFlBQVksQ0FBQ0MsQ0FBQyxDQUFDTSxDQUFDLENBQUMsRUFBRUwsQ0FBQyxDQUFDSyxDQUFDLENBQUMsQ0FBQyxFQUFFO1VBQzdCLE9BQU8sS0FBSztRQUNkO01BQ0Y7TUFDQSxPQUFPLElBQUk7SUFDYjtJQUNBLE9BQU8sS0FBSztFQUNkO0VBQ0EsSUFBSVQsTUFBTSxDQUFDVSxJQUFJLENBQUNQLENBQUMsQ0FBQyxDQUFDSyxNQUFNLEtBQUtSLE1BQU0sQ0FBQ1UsSUFBSSxDQUFDTixDQUFDLENBQUMsQ0FBQ0ksTUFBTSxFQUFFO0lBQ25ELE9BQU8sS0FBSztFQUNkO0VBQ0EsS0FBSyxJQUFJRyxHQUFHLElBQUlSLENBQUMsRUFBRTtJQUNqQixJQUFJLENBQUNELFlBQVksQ0FBQ0MsQ0FBQyxDQUFDUSxHQUFHLENBQUMsRUFBRVAsQ0FBQyxDQUFDTyxHQUFHLENBQUMsQ0FBQyxFQUFFO01BQ2pDLE9BQU8sS0FBSztJQUNkO0VBQ0Y7RUFDQSxPQUFPLElBQUk7QUFDYjtBQUVBQyxNQUFNLENBQUNDLE9BQU8sR0FBR1gsWUFBWSIsImlnbm9yZUxpc3QiOltdfQ==
|