payload-auth 1.6.0 → 1.6.1-canary.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/dist/better-auth/adapter/index.d.ts.map +1 -1
- package/dist/better-auth/adapter/index.js +30 -30
- package/dist/better-auth/adapter/transform/index.d.ts +8 -7
- package/dist/better-auth/adapter/transform/index.d.ts.map +1 -1
- package/dist/better-auth/adapter/transform/index.js +2 -2
- package/dist/better-auth/adapter/types.d.ts +5 -4
- package/dist/better-auth/adapter/types.d.ts.map +1 -1
- package/dist/better-auth/adapter/types.js +1 -1
- package/dist/better-auth/generated-types.d.ts +21 -0
- package/dist/better-auth/generated-types.d.ts.map +1 -1
- package/dist/better-auth/generated-types.js +1 -1
- package/dist/better-auth/plugin/helpers/get-better-auth-schema.d.ts +14 -17
- package/dist/better-auth/plugin/helpers/get-better-auth-schema.d.ts.map +1 -1
- package/dist/better-auth/plugin/helpers/get-better-auth-schema.js +51 -33
- package/dist/better-auth/plugin/helpers/get-collection.d.ts +11 -36
- package/dist/better-auth/plugin/helpers/get-collection.d.ts.map +1 -1
- package/dist/better-auth/plugin/helpers/get-collection.js +20 -53
- package/dist/better-auth/plugin/helpers/prepare-session-data.d.ts.map +1 -1
- package/dist/better-auth/plugin/helpers/prepare-session-data.js +1 -1
- package/dist/better-auth/plugin/helpers/sync-resolved-schema-with-collection-map.d.ts +21 -0
- package/dist/better-auth/plugin/helpers/sync-resolved-schema-with-collection-map.d.ts.map +1 -0
- package/dist/better-auth/plugin/helpers/sync-resolved-schema-with-collection-map.js +62 -0
- package/dist/better-auth/plugin/index.d.ts +8 -1
- package/dist/better-auth/plugin/index.d.ts.map +1 -1
- package/dist/better-auth/plugin/index.js +67 -91
- package/dist/better-auth/plugin/lib/apply-disabled-default-auth-config.d.ts +13 -0
- package/dist/better-auth/plugin/lib/apply-disabled-default-auth-config.d.ts.map +1 -0
- package/dist/better-auth/plugin/lib/apply-disabled-default-auth-config.js +80 -0
- package/dist/better-auth/plugin/lib/build-collections/accounts/hooks/sync-password-to-user.d.ts +2 -2
- package/dist/better-auth/plugin/lib/build-collections/accounts/hooks/sync-password-to-user.d.ts.map +1 -1
- package/dist/better-auth/plugin/lib/build-collections/accounts/hooks/sync-password-to-user.js +6 -16
- package/dist/better-auth/plugin/lib/build-collections/accounts/index.d.ts +2 -2
- package/dist/better-auth/plugin/lib/build-collections/accounts/index.d.ts.map +1 -1
- package/dist/better-auth/plugin/lib/build-collections/accounts/index.js +10 -12
- package/dist/better-auth/plugin/lib/build-collections/api-keys.d.ts +1 -1
- package/dist/better-auth/plugin/lib/build-collections/api-keys.d.ts.map +1 -1
- package/dist/better-auth/plugin/lib/build-collections/api-keys.js +8 -11
- package/dist/better-auth/plugin/lib/build-collections/index.d.ts +3 -4
- package/dist/better-auth/plugin/lib/build-collections/index.d.ts.map +1 -1
- package/dist/better-auth/plugin/lib/build-collections/index.js +15 -28
- package/dist/better-auth/plugin/lib/build-collections/invitations.d.ts +1 -1
- package/dist/better-auth/plugin/lib/build-collections/invitations.d.ts.map +1 -1
- package/dist/better-auth/plugin/lib/build-collections/invitations.js +8 -11
- package/dist/better-auth/plugin/lib/build-collections/jwks.d.ts +1 -1
- package/dist/better-auth/plugin/lib/build-collections/jwks.d.ts.map +1 -1
- package/dist/better-auth/plugin/lib/build-collections/jwks.js +8 -11
- package/dist/better-auth/plugin/lib/build-collections/members.d.ts +1 -1
- package/dist/better-auth/plugin/lib/build-collections/members.d.ts.map +1 -1
- package/dist/better-auth/plugin/lib/build-collections/members.js +8 -10
- package/dist/better-auth/plugin/lib/build-collections/oauth-access-tokens.d.ts +1 -1
- package/dist/better-auth/plugin/lib/build-collections/oauth-access-tokens.d.ts.map +1 -1
- package/dist/better-auth/plugin/lib/build-collections/oauth-access-tokens.js +8 -11
- package/dist/better-auth/plugin/lib/build-collections/oauth-applications.d.ts +1 -1
- package/dist/better-auth/plugin/lib/build-collections/oauth-applications.d.ts.map +1 -1
- package/dist/better-auth/plugin/lib/build-collections/oauth-applications.js +8 -11
- package/dist/better-auth/plugin/lib/build-collections/oauth-consents.d.ts +1 -1
- package/dist/better-auth/plugin/lib/build-collections/oauth-consents.d.ts.map +1 -1
- package/dist/better-auth/plugin/lib/build-collections/oauth-consents.js +7 -9
- package/dist/better-auth/plugin/lib/build-collections/organizations.d.ts +1 -1
- package/dist/better-auth/plugin/lib/build-collections/organizations.d.ts.map +1 -1
- package/dist/better-auth/plugin/lib/build-collections/organizations.js +8 -10
- package/dist/better-auth/plugin/lib/build-collections/passkeys.d.ts +1 -1
- package/dist/better-auth/plugin/lib/build-collections/passkeys.d.ts.map +1 -1
- package/dist/better-auth/plugin/lib/build-collections/passkeys.js +9 -11
- package/dist/better-auth/plugin/lib/build-collections/sessions.d.ts +1 -1
- package/dist/better-auth/plugin/lib/build-collections/sessions.d.ts.map +1 -1
- package/dist/better-auth/plugin/lib/build-collections/sessions.js +7 -8
- package/dist/better-auth/plugin/lib/build-collections/sso-providers.d.ts +1 -1
- package/dist/better-auth/plugin/lib/build-collections/sso-providers.d.ts.map +1 -1
- package/dist/better-auth/plugin/lib/build-collections/sso-providers.js +8 -10
- package/dist/better-auth/plugin/lib/build-collections/subscriptions.d.ts +1 -1
- package/dist/better-auth/plugin/lib/build-collections/subscriptions.d.ts.map +1 -1
- package/dist/better-auth/plugin/lib/build-collections/subscriptions.js +8 -10
- package/dist/better-auth/plugin/lib/build-collections/teams.d.ts +1 -1
- package/dist/better-auth/plugin/lib/build-collections/teams.d.ts.map +1 -1
- package/dist/better-auth/plugin/lib/build-collections/teams.js +8 -11
- package/dist/better-auth/plugin/lib/build-collections/two-factors.d.ts +1 -1
- package/dist/better-auth/plugin/lib/build-collections/two-factors.d.ts.map +1 -1
- package/dist/better-auth/plugin/lib/build-collections/two-factors.js +8 -11
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/after-login.d.ts.map +1 -1
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/after-login.js +4 -11
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/after-logout.d.ts.map +1 -1
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/after-logout.js +3 -8
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/before-delete.d.ts.map +1 -1
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/before-delete.js +5 -15
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/sync-account.d.ts.map +1 -1
- package/dist/better-auth/plugin/lib/build-collections/users/hooks/sync-account.js +19 -22
- package/dist/better-auth/plugin/lib/build-collections/users/index.d.ts +1 -1
- package/dist/better-auth/plugin/lib/build-collections/users/index.d.ts.map +1 -1
- package/dist/better-auth/plugin/lib/build-collections/users/index.js +9 -15
- package/dist/better-auth/plugin/lib/build-collections/utils/collection-schema.d.ts +6 -6
- package/dist/better-auth/plugin/lib/build-collections/utils/collection-schema.d.ts.map +1 -1
- package/dist/better-auth/plugin/lib/build-collections/utils/collection-schema.js +9 -17
- package/dist/better-auth/plugin/lib/build-collections/utils/transform-schema-fields-to-payload.d.ts +2 -2
- package/dist/better-auth/plugin/lib/build-collections/utils/transform-schema-fields-to-payload.d.ts.map +1 -1
- package/dist/better-auth/plugin/lib/build-collections/utils/transform-schema-fields-to-payload.js +1 -1
- package/dist/better-auth/plugin/lib/build-collections/verifications.d.ts +1 -1
- package/dist/better-auth/plugin/lib/build-collections/verifications.d.ts.map +1 -1
- package/dist/better-auth/plugin/lib/build-collections/verifications.js +8 -11
- package/dist/better-auth/plugin/lib/init-better-auth.d.ts +1 -1
- package/dist/better-auth/plugin/lib/init-better-auth.d.ts.map +1 -1
- package/dist/better-auth/plugin/lib/init-better-auth.js +3 -2
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/api-key-plugin.d.ts +2 -2
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/api-key-plugin.d.ts.map +1 -1
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/api-key-plugin.js +4 -4
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/index.d.ts +3 -4
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/index.d.ts.map +1 -1
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/index.js +15 -15
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/oidc-plugin.d.ts +2 -2
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/oidc-plugin.d.ts.map +1 -1
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/oidc-plugin.js +8 -8
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/organizations-plugin.d.ts +2 -2
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/organizations-plugin.d.ts.map +1 -1
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/organizations-plugin.js +12 -12
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/passkey-plugin.d.ts +2 -2
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/passkey-plugin.d.ts.map +1 -1
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/passkey-plugin.js +4 -4
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/sso-plugin.d.ts +2 -2
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/sso-plugin.d.ts.map +1 -1
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/sso-plugin.js +6 -6
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/two-factor-plugin.d.ts +2 -2
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/two-factor-plugin.d.ts.map +1 -1
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/two-factor-plugin.js +4 -4
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/save-to-jwt-middleware.d.ts +3 -4
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/save-to-jwt-middleware.d.ts.map +1 -1
- package/dist/better-auth/plugin/lib/sanitize-better-auth-options/utils/save-to-jwt-middleware.js +4 -4
- package/dist/better-auth/plugin/payload/components/passkeys/types.d.ts +2 -2
- package/dist/better-auth/plugin/payload/components/passkeys/types.d.ts.map +1 -1
- package/dist/better-auth/plugin/payload/components/passkeys/types.js +1 -1
- package/dist/better-auth/plugin/types.d.ts +6 -5
- package/dist/better-auth/plugin/types.d.ts.map +1 -1
- package/dist/better-auth/plugin/types.js +1 -1
- package/dist/better-auth/scripts/generate-types.js +15 -1
- package/package.json +1 -1
- package/dist/better-auth/plugin/helpers/get-collection-schema-map.d.ts +0 -16
- package/dist/better-auth/plugin/helpers/get-collection-schema-map.d.ts.map +0 -1
- package/dist/better-auth/plugin/helpers/get-collection-schema-map.js +0 -108
- package/dist/better-auth/plugin/helpers/get-requst-collection.d.ts +0 -3
- package/dist/better-auth/plugin/helpers/get-requst-collection.d.ts.map +0 -1
- package/dist/better-auth/plugin/helpers/get-requst-collection.js +0 -14
- package/dist/better-auth/plugin/helpers/serialize-cookie.d.ts +0 -105
- package/dist/better-auth/plugin/helpers/serialize-cookie.d.ts.map +0 -1
- package/dist/better-auth/plugin/helpers/serialize-cookie.js +0 -186
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
import { baModelFieldKeysToFieldNames, baModelKey } from "../constants";
|
|
2
|
-
import { getAuthTables } from "better-auth/db";
|
|
3
|
-
import { flattenAllFields } from "payload/shared";
|
|
4
|
-
import { getDeafultCollectionSlug } from "./get-collection-slug";
|
|
5
|
-
export function getDefaultCollectionSchemaMap(pluginOptions) {
|
|
6
|
-
const tables = getAuthTables(pluginOptions.betterAuthOptions ?? {});
|
|
7
|
-
const map = {};
|
|
8
|
-
Object.entries(tables).forEach(([key, table])=>{
|
|
9
|
-
const fieldNames = Object.entries(table.fields).map(([k, v])=>k);
|
|
10
|
-
const typedKey = key;
|
|
11
|
-
const value = {
|
|
12
|
-
collectionSlug: getDeafultCollectionSlug({
|
|
13
|
-
modelKey: typedKey,
|
|
14
|
-
pluginOptions
|
|
15
|
-
}),
|
|
16
|
-
fields: fieldNames.reduce((acc, field)=>{
|
|
17
|
-
if (typedKey in baModelFieldKeysToFieldNames && field in baModelFieldKeysToFieldNames[typedKey]) {
|
|
18
|
-
const fieldMapping = baModelFieldKeysToFieldNames[typedKey];
|
|
19
|
-
const typedField = field;
|
|
20
|
-
acc[field] = fieldMapping[typedField] || field;
|
|
21
|
-
} else {
|
|
22
|
-
acc[field] = field;
|
|
23
|
-
}
|
|
24
|
-
return acc;
|
|
25
|
-
}, {})
|
|
26
|
-
};
|
|
27
|
-
map[typedKey] = value;
|
|
28
|
-
});
|
|
29
|
-
// always add the role field to the user collection if not already present
|
|
30
|
-
if (!map[baModelKey.user].fields.role) {
|
|
31
|
-
map[baModelKey.user].fields.role = baModelFieldKeysToFieldNames.user.role;
|
|
32
|
-
}
|
|
33
|
-
return map;
|
|
34
|
-
}
|
|
35
|
-
/**
|
|
36
|
-
* Builds a collection schema map by analyzing collection overrides and extracting
|
|
37
|
-
* BetterAuth model keys and field mappings
|
|
38
|
-
*
|
|
39
|
-
* @param collectionOverrides - Collection override functions provided in plugin options
|
|
40
|
-
* @returns A collection schema map with default values merged with any overrides
|
|
41
|
-
*/ export function buildCollectionSchemaMap(pluginOptions) {
|
|
42
|
-
const collectionOverrides = {
|
|
43
|
-
users: pluginOptions.users?.collectionOverrides,
|
|
44
|
-
accounts: pluginOptions.accounts?.collectionOverrides,
|
|
45
|
-
sessions: pluginOptions.sessions?.collectionOverrides,
|
|
46
|
-
verifications: pluginOptions.verifications?.collectionOverrides,
|
|
47
|
-
...pluginOptions.pluginCollectionOverrides
|
|
48
|
-
};
|
|
49
|
-
const defaultCollectionSchemaMap = getDefaultCollectionSchemaMap(pluginOptions);
|
|
50
|
-
if (!collectionOverrides || Object.keys(collectionOverrides).length === 0) {
|
|
51
|
-
return {
|
|
52
|
-
...defaultCollectionSchemaMap
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
|
-
const schemaMap = {
|
|
56
|
-
...defaultCollectionSchemaMap
|
|
57
|
-
};
|
|
58
|
-
Object.entries(collectionOverrides).forEach(([collectionSlug, overrideFunction])=>{
|
|
59
|
-
if (!overrideFunction) return;
|
|
60
|
-
const modifiedCollection = overrideFunction({
|
|
61
|
-
collection: {
|
|
62
|
-
slug: collectionSlug,
|
|
63
|
-
fields: []
|
|
64
|
-
}
|
|
65
|
-
});
|
|
66
|
-
const modelKey = assertModelKey(modifiedCollection);
|
|
67
|
-
schemaMap[modelKey].collectionSlug = modifiedCollection.slug;
|
|
68
|
-
const flattenedFields = flattenAllFields(modifiedCollection);
|
|
69
|
-
if (flattenedFields && Array.isArray(flattenedFields)) {
|
|
70
|
-
flattenedFields.forEach((field)=>{
|
|
71
|
-
// we only want to process fields that have a betterAuthFieldKey
|
|
72
|
-
// because its possible the user has added additional fields
|
|
73
|
-
if (field.custom?.betterAuthFieldKey) {
|
|
74
|
-
const fieldKey = assertFieldKey(field, modelKey, modifiedCollection.slug);
|
|
75
|
-
schemaMap[modelKey].fields[fieldKey] = field.name;
|
|
76
|
-
}
|
|
77
|
-
});
|
|
78
|
-
}
|
|
79
|
-
});
|
|
80
|
-
return schemaMap;
|
|
81
|
-
}
|
|
82
|
-
function assertFieldKey(field, modelKey, collectionSlug) {
|
|
83
|
-
const fieldKey = field.custom?.betterAuthFieldKey;
|
|
84
|
-
// Assert that fieldKey is a valid key in the baModelFieldKeysToFieldNames mapping
|
|
85
|
-
if (!Object.values(baModelFieldKeysToFieldNames).some((fieldMap)=>Object.keys(fieldMap).includes(fieldKey))) {
|
|
86
|
-
throw new Error(`Invalid custom.betterAuthFieldKey: ${fieldKey} for field ${field.name} in collection ${collectionSlug},
|
|
87
|
-
must be one of ${Object.keys(baModelFieldKeysToFieldNames[modelKey]).join(', ')}`);
|
|
88
|
-
}
|
|
89
|
-
return fieldKey;
|
|
90
|
-
}
|
|
91
|
-
/**
|
|
92
|
-
* Asserts that a collection has a valid BetterAuth model key and returns it
|
|
93
|
-
*
|
|
94
|
-
* @param collection - The collection to check for a BetterAuth model key
|
|
95
|
-
* @returns The BetterAuth model key
|
|
96
|
-
* @throws Error if the collection does not have a valid BetterAuth model key
|
|
97
|
-
*/ function assertModelKey(collection) {
|
|
98
|
-
if (!collection.custom?.betterAuthModelKey) {
|
|
99
|
-
throw new Error(`Collection ${collection.slug} is missing a betterAuthModelKey in its custom field`);
|
|
100
|
-
}
|
|
101
|
-
const modelKey = collection.custom.betterAuthModelKey;
|
|
102
|
-
if (!Object.values(baModelKey).includes(modelKey)) {
|
|
103
|
-
throw new Error(`Collection ${collection.slug} has an invalid betterAuthModelKey: ${modelKey}`);
|
|
104
|
-
}
|
|
105
|
-
return modelKey;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9iZXR0ZXItYXV0aC9wbHVnaW4vaGVscGVycy9nZXQtY29sbGVjdGlvbi1zY2hlbWEtbWFwLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGJhTW9kZWxGaWVsZEtleXNUb0ZpZWxkTmFtZXMsIGJhTW9kZWxLZXkgfSBmcm9tICcuLi9jb25zdGFudHMnXG5pbXBvcnQgeyBnZXRBdXRoVGFibGVzIH0gZnJvbSAnYmV0dGVyLWF1dGgvZGInXG5pbXBvcnQgeyBCZXR0ZXJBdXRoT3B0aW9ucyB9IGZyb20gJ2JldHRlci1hdXRoL3R5cGVzJ1xuaW1wb3J0IHsgYmFNb2RlbEtleVRvU2x1ZyB9IGZyb20gJy4uL2NvbnN0YW50cydcbmltcG9ydCB7IEZsYXR0ZW5lZEZpZWxkIH0gZnJvbSAncGF5bG9hZCdcbmltcG9ydCB7IGZsYXR0ZW5BbGxGaWVsZHMgfSBmcm9tICdwYXlsb2FkL3NoYXJlZCdcbmltcG9ydCB7IENvbGxlY3Rpb25Db25maWcgfSBmcm9tICdwYXlsb2FkJ1xuaW1wb3J0IHsgZ2V0RGVhZnVsdENvbGxlY3Rpb25TbHVnIH0gZnJvbSAnLi9nZXQtY29sbGVjdGlvbi1zbHVnJ1xuaW1wb3J0IHsgQmV0dGVyQXV0aFBsdWdpbk9wdGlvbnMgfSBmcm9tICcuLi90eXBlcydcblxuZXhwb3J0IHR5cGUgQ29sbGVjdGlvblNjaGVtYU1hcCA9IFJlY29yZDxcbiAga2V5b2YgdHlwZW9mIGJhTW9kZWxLZXksXG4gIHtcbiAgICBjb2xsZWN0aW9uU2x1Zzogc3RyaW5nXG4gICAgZmllbGRzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG4gIH1cbj5cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERlZmF1bHRDb2xsZWN0aW9uU2NoZW1hTWFwKHBsdWdpbk9wdGlvbnM6IEJldHRlckF1dGhQbHVnaW5PcHRpb25zKTogQ29sbGVjdGlvblNjaGVtYU1hcCB7XG4gIGNvbnN0IHRhYmxlcyA9IGdldEF1dGhUYWJsZXMocGx1Z2luT3B0aW9ucy5iZXR0ZXJBdXRoT3B0aW9ucyA/PyB7fSlcbiAgY29uc3QgbWFwID0ge30gYXMgQ29sbGVjdGlvblNjaGVtYU1hcFxuICBPYmplY3QuZW50cmllcyh0YWJsZXMpLmZvckVhY2goKFtrZXksIHRhYmxlXSkgPT4ge1xuICAgIGNvbnN0IGZpZWxkTmFtZXMgPSBPYmplY3QuZW50cmllcyh0YWJsZS5maWVsZHMpLm1hcCgoW2ssIHZdKSA9PiBrKVxuICAgIGNvbnN0IHR5cGVkS2V5ID0ga2V5IGFzIGtleW9mIHR5cGVvZiBiYU1vZGVsS2V5VG9TbHVnXG4gICAgY29uc3QgdmFsdWUgPSB7XG4gICAgICBjb2xsZWN0aW9uU2x1ZzogZ2V0RGVhZnVsdENvbGxlY3Rpb25TbHVnKHsgbW9kZWxLZXk6IHR5cGVkS2V5LCBwbHVnaW5PcHRpb25zIH0pLFxuICAgICAgZmllbGRzOiBmaWVsZE5hbWVzLnJlZHVjZShcbiAgICAgICAgKGFjYywgZmllbGQpID0+IHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0eXBlZEtleSBpbiBiYU1vZGVsRmllbGRLZXlzVG9GaWVsZE5hbWVzICYmXG4gICAgICAgICAgICBmaWVsZCBpbiBiYU1vZGVsRmllbGRLZXlzVG9GaWVsZE5hbWVzW3R5cGVkS2V5IGFzIGtleW9mIHR5cGVvZiBiYU1vZGVsRmllbGRLZXlzVG9GaWVsZE5hbWVzXVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgY29uc3QgZmllbGRNYXBwaW5nID0gYmFNb2RlbEZpZWxkS2V5c1RvRmllbGROYW1lc1t0eXBlZEtleSBhcyBrZXlvZiB0eXBlb2YgYmFNb2RlbEZpZWxkS2V5c1RvRmllbGROYW1lc11cbiAgICAgICAgICAgIGNvbnN0IHR5cGVkRmllbGQgPSBmaWVsZCBhcyBrZXlvZiB0eXBlb2YgZmllbGRNYXBwaW5nXG4gICAgICAgICAgICBhY2NbZmllbGRdID0gZmllbGRNYXBwaW5nW3R5cGVkRmllbGRdIHx8IGZpZWxkXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGFjY1tmaWVsZF0gPSBmaWVsZFxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYWNjXG4gICAgICAgIH0sXG4gICAgICAgIHt9IGFzIFJlY29yZDxzdHJpbmcsIHN0cmluZz5cbiAgICAgIClcbiAgICB9XG5cbiAgICBtYXBbdHlwZWRLZXldID0gdmFsdWVcbiAgfSlcblxuICAvLyBhbHdheXMgYWRkIHRoZSByb2xlIGZpZWxkIHRvIHRoZSB1c2VyIGNvbGxlY3Rpb24gaWYgbm90IGFscmVhZHkgcHJlc2VudFxuICBpZiAoIW1hcFtiYU1vZGVsS2V5LnVzZXJdLmZpZWxkcy5yb2xlKSB7XG4gICAgbWFwW2JhTW9kZWxLZXkudXNlcl0uZmllbGRzLnJvbGUgPSBiYU1vZGVsRmllbGRLZXlzVG9GaWVsZE5hbWVzLnVzZXIucm9sZVxuICB9XG5cbiAgcmV0dXJuIG1hcFxufVxuXG50eXBlIENvbGxlY3Rpb25PdmVycmlkZSA9ICgob3B0aW9uczogeyBjb2xsZWN0aW9uOiBDb2xsZWN0aW9uQ29uZmlnIH0pID0+IENvbGxlY3Rpb25Db25maWcpIHwgdW5kZWZpbmVkXG5cbnR5cGUgQ29sbGVjdGlvbk92ZXJyaWRlcyA9IFJlY29yZDxzdHJpbmcsIENvbGxlY3Rpb25PdmVycmlkZT5cblxuLyoqXG4gKiBCdWlsZHMgYSBjb2xsZWN0aW9uIHNjaGVtYSBtYXAgYnkgYW5hbHl6aW5nIGNvbGxlY3Rpb24gb3ZlcnJpZGVzIGFuZCBleHRyYWN0aW5nXG4gKiBCZXR0ZXJBdXRoIG1vZGVsIGtleXMgYW5kIGZpZWxkIG1hcHBpbmdzXG4gKlxuICogQHBhcmFtIGNvbGxlY3Rpb25PdmVycmlkZXMgLSBDb2xsZWN0aW9uIG92ZXJyaWRlIGZ1bmN0aW9ucyBwcm92aWRlZCBpbiBwbHVnaW4gb3B0aW9uc1xuICogQHJldHVybnMgQSBjb2xsZWN0aW9uIHNjaGVtYSBtYXAgd2l0aCBkZWZhdWx0IHZhbHVlcyBtZXJnZWQgd2l0aCBhbnkgb3ZlcnJpZGVzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZENvbGxlY3Rpb25TY2hlbWFNYXAocGx1Z2luT3B0aW9uczogQmV0dGVyQXV0aFBsdWdpbk9wdGlvbnMpOiBDb2xsZWN0aW9uU2NoZW1hTWFwIHtcbiAgY29uc3QgY29sbGVjdGlvbk92ZXJyaWRlcyA9IHtcbiAgICB1c2VyczogcGx1Z2luT3B0aW9ucy51c2Vycz8uY29sbGVjdGlvbk92ZXJyaWRlcyxcbiAgICBhY2NvdW50czogcGx1Z2luT3B0aW9ucy5hY2NvdW50cz8uY29sbGVjdGlvbk92ZXJyaWRlcyxcbiAgICBzZXNzaW9uczogcGx1Z2luT3B0aW9ucy5zZXNzaW9ucz8uY29sbGVjdGlvbk92ZXJyaWRlcyxcbiAgICB2ZXJpZmljYXRpb25zOiBwbHVnaW5PcHRpb25zLnZlcmlmaWNhdGlvbnM/LmNvbGxlY3Rpb25PdmVycmlkZXMsXG4gICAgLi4ucGx1Z2luT3B0aW9ucy5wbHVnaW5Db2xsZWN0aW9uT3ZlcnJpZGVzXG4gIH1cblxuICBjb25zdCBkZWZhdWx0Q29sbGVjdGlvblNjaGVtYU1hcCA9IGdldERlZmF1bHRDb2xsZWN0aW9uU2NoZW1hTWFwKHBsdWdpbk9wdGlvbnMpXG5cbiAgaWYgKCFjb2xsZWN0aW9uT3ZlcnJpZGVzIHx8IE9iamVjdC5rZXlzKGNvbGxlY3Rpb25PdmVycmlkZXMpLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB7IC4uLmRlZmF1bHRDb2xsZWN0aW9uU2NoZW1hTWFwIH1cbiAgfVxuXG4gIGNvbnN0IHNjaGVtYU1hcCA9IHsgLi4uZGVmYXVsdENvbGxlY3Rpb25TY2hlbWFNYXAgfVxuXG4gIE9iamVjdC5lbnRyaWVzKGNvbGxlY3Rpb25PdmVycmlkZXMpLmZvckVhY2goKFtjb2xsZWN0aW9uU2x1Zywgb3ZlcnJpZGVGdW5jdGlvbl0pID0+IHtcbiAgICBpZiAoIW92ZXJyaWRlRnVuY3Rpb24pIHJldHVyblxuXG4gICAgY29uc3QgbW9kaWZpZWRDb2xsZWN0aW9uID0gb3ZlcnJpZGVGdW5jdGlvbih7XG4gICAgICBjb2xsZWN0aW9uOiB7XG4gICAgICAgIHNsdWc6IGNvbGxlY3Rpb25TbHVnLFxuICAgICAgICBmaWVsZHM6IFtdXG4gICAgICB9XG4gICAgfSlcbiAgICBjb25zdCBtb2RlbEtleSA9IGFzc2VydE1vZGVsS2V5KG1vZGlmaWVkQ29sbGVjdGlvbilcbiAgICBzY2hlbWFNYXBbbW9kZWxLZXldLmNvbGxlY3Rpb25TbHVnID0gbW9kaWZpZWRDb2xsZWN0aW9uLnNsdWdcbiAgICBjb25zdCBmbGF0dGVuZWRGaWVsZHMgPSBmbGF0dGVuQWxsRmllbGRzKG1vZGlmaWVkQ29sbGVjdGlvbilcbiAgICBpZiAoZmxhdHRlbmVkRmllbGRzICYmIEFycmF5LmlzQXJyYXkoZmxhdHRlbmVkRmllbGRzKSkge1xuICAgICAgZmxhdHRlbmVkRmllbGRzLmZvckVhY2goKGZpZWxkOiBGbGF0dGVuZWRGaWVsZCkgPT4ge1xuICAgICAgICAvLyB3ZSBvbmx5IHdhbnQgdG8gcHJvY2VzcyBmaWVsZHMgdGhhdCBoYXZlIGEgYmV0dGVyQXV0aEZpZWxkS2V5XG4gICAgICAgIC8vIGJlY2F1c2UgaXRzIHBvc3NpYmxlIHRoZSB1c2VyIGhhcyBhZGRlZCBhZGRpdGlvbmFsIGZpZWxkc1xuICAgICAgICBpZiAoZmllbGQuY3VzdG9tPy5iZXR0ZXJBdXRoRmllbGRLZXkpIHtcbiAgICAgICAgICBjb25zdCBmaWVsZEtleSA9IGFzc2VydEZpZWxkS2V5KGZpZWxkLCBtb2RlbEtleSwgbW9kaWZpZWRDb2xsZWN0aW9uLnNsdWcpXG4gICAgICAgICAgc2NoZW1hTWFwW21vZGVsS2V5XS5maWVsZHNbZmllbGRLZXldID0gZmllbGQubmFtZVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfSlcblxuICByZXR1cm4gc2NoZW1hTWFwXG59XG5cbmZ1bmN0aW9uIGFzc2VydEZpZWxkS2V5KGZpZWxkOiBGbGF0dGVuZWRGaWVsZCwgbW9kZWxLZXk6IGtleW9mIHR5cGVvZiBiYU1vZGVsS2V5LCBjb2xsZWN0aW9uU2x1Zzogc3RyaW5nKSB7XG4gIGNvbnN0IGZpZWxkS2V5ID0gZmllbGQuY3VzdG9tPy5iZXR0ZXJBdXRoRmllbGRLZXkgYXMgc3RyaW5nXG5cbiAgLy8gQXNzZXJ0IHRoYXQgZmllbGRLZXkgaXMgYSB2YWxpZCBrZXkgaW4gdGhlIGJhTW9kZWxGaWVsZEtleXNUb0ZpZWxkTmFtZXMgbWFwcGluZ1xuICBpZiAoIU9iamVjdC52YWx1ZXMoYmFNb2RlbEZpZWxkS2V5c1RvRmllbGROYW1lcykuc29tZSgoZmllbGRNYXApID0+IE9iamVjdC5rZXlzKGZpZWxkTWFwKS5pbmNsdWRlcyhmaWVsZEtleSkpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEludmFsaWQgY3VzdG9tLmJldHRlckF1dGhGaWVsZEtleTogJHtmaWVsZEtleX0gZm9yIGZpZWxkICR7ZmllbGQubmFtZX0gaW4gY29sbGVjdGlvbiAke2NvbGxlY3Rpb25TbHVnfSwgXG4gICAgICAgIG11c3QgYmUgb25lIG9mICR7T2JqZWN0LmtleXMoYmFNb2RlbEZpZWxkS2V5c1RvRmllbGROYW1lc1ttb2RlbEtleSBhcyBrZXlvZiB0eXBlb2YgYmFNb2RlbEZpZWxkS2V5c1RvRmllbGROYW1lc10pLmpvaW4oJywgJyl9YFxuICAgIClcbiAgfVxuXG4gIHJldHVybiBmaWVsZEtleVxufVxuXG4vKipcbiAqIEFzc2VydHMgdGhhdCBhIGNvbGxlY3Rpb24gaGFzIGEgdmFsaWQgQmV0dGVyQXV0aCBtb2RlbCBrZXkgYW5kIHJldHVybnMgaXRcbiAqXG4gKiBAcGFyYW0gY29sbGVjdGlvbiAtIFRoZSBjb2xsZWN0aW9uIHRvIGNoZWNrIGZvciBhIEJldHRlckF1dGggbW9kZWwga2V5XG4gKiBAcmV0dXJucyBUaGUgQmV0dGVyQXV0aCBtb2RlbCBrZXlcbiAqIEB0aHJvd3MgRXJyb3IgaWYgdGhlIGNvbGxlY3Rpb24gZG9lcyBub3QgaGF2ZSBhIHZhbGlkIEJldHRlckF1dGggbW9kZWwga2V5XG4gKi9cbmZ1bmN0aW9uIGFzc2VydE1vZGVsS2V5KGNvbGxlY3Rpb246IENvbGxlY3Rpb25Db25maWcpOiBrZXlvZiB0eXBlb2YgYmFNb2RlbEtleSB7XG4gIGlmICghY29sbGVjdGlvbi5jdXN0b20/LmJldHRlckF1dGhNb2RlbEtleSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ29sbGVjdGlvbiAke2NvbGxlY3Rpb24uc2x1Z30gaXMgbWlzc2luZyBhIGJldHRlckF1dGhNb2RlbEtleSBpbiBpdHMgY3VzdG9tIGZpZWxkYClcbiAgfVxuXG4gIGNvbnN0IG1vZGVsS2V5ID0gY29sbGVjdGlvbi5jdXN0b20uYmV0dGVyQXV0aE1vZGVsS2V5IGFzIGtleW9mIHR5cGVvZiBiYU1vZGVsS2V5XG5cbiAgaWYgKCFPYmplY3QudmFsdWVzKGJhTW9kZWxLZXkpLmluY2x1ZGVzKG1vZGVsS2V5IGFzIGFueSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvbGxlY3Rpb24gJHtjb2xsZWN0aW9uLnNsdWd9IGhhcyBhbiBpbnZhbGlkIGJldHRlckF1dGhNb2RlbEtleTogJHttb2RlbEtleX1gKVxuICB9XG5cbiAgcmV0dXJuIG1vZGVsS2V5XG59XG4iXSwibmFtZXMiOlsiYmFNb2RlbEZpZWxkS2V5c1RvRmllbGROYW1lcyIsImJhTW9kZWxLZXkiLCJnZXRBdXRoVGFibGVzIiwiZmxhdHRlbkFsbEZpZWxkcyIsImdldERlYWZ1bHRDb2xsZWN0aW9uU2x1ZyIsImdldERlZmF1bHRDb2xsZWN0aW9uU2NoZW1hTWFwIiwicGx1Z2luT3B0aW9ucyIsInRhYmxlcyIsImJldHRlckF1dGhPcHRpb25zIiwibWFwIiwiT2JqZWN0IiwiZW50cmllcyIsImZvckVhY2giLCJrZXkiLCJ0YWJsZSIsImZpZWxkTmFtZXMiLCJmaWVsZHMiLCJrIiwidiIsInR5cGVkS2V5IiwidmFsdWUiLCJjb2xsZWN0aW9uU2x1ZyIsIm1vZGVsS2V5IiwicmVkdWNlIiwiYWNjIiwiZmllbGQiLCJmaWVsZE1hcHBpbmciLCJ0eXBlZEZpZWxkIiwidXNlciIsInJvbGUiLCJidWlsZENvbGxlY3Rpb25TY2hlbWFNYXAiLCJjb2xsZWN0aW9uT3ZlcnJpZGVzIiwidXNlcnMiLCJhY2NvdW50cyIsInNlc3Npb25zIiwidmVyaWZpY2F0aW9ucyIsInBsdWdpbkNvbGxlY3Rpb25PdmVycmlkZXMiLCJkZWZhdWx0Q29sbGVjdGlvblNjaGVtYU1hcCIsImtleXMiLCJsZW5ndGgiLCJzY2hlbWFNYXAiLCJvdmVycmlkZUZ1bmN0aW9uIiwibW9kaWZpZWRDb2xsZWN0aW9uIiwiY29sbGVjdGlvbiIsInNsdWciLCJhc3NlcnRNb2RlbEtleSIsImZsYXR0ZW5lZEZpZWxkcyIsIkFycmF5IiwiaXNBcnJheSIsImN1c3RvbSIsImJldHRlckF1dGhGaWVsZEtleSIsImZpZWxkS2V5IiwiYXNzZXJ0RmllbGRLZXkiLCJuYW1lIiwidmFsdWVzIiwic29tZSIsImZpZWxkTWFwIiwiaW5jbHVkZXMiLCJFcnJvciIsImpvaW4iLCJiZXR0ZXJBdXRoTW9kZWxLZXkiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLDRCQUE0QixFQUFFQyxVQUFVLFFBQVEsZUFBYztBQUN2RSxTQUFTQyxhQUFhLFFBQVEsaUJBQWdCO0FBSTlDLFNBQVNDLGdCQUFnQixRQUFRLGlCQUFnQjtBQUVqRCxTQUFTQyx3QkFBd0IsUUFBUSx3QkFBdUI7QUFXaEUsT0FBTyxTQUFTQyw4QkFBOEJDLGFBQXNDO0lBQ2xGLE1BQU1DLFNBQVNMLGNBQWNJLGNBQWNFLGlCQUFpQixJQUFJLENBQUM7SUFDakUsTUFBTUMsTUFBTSxDQUFDO0lBQ2JDLE9BQU9DLE9BQU8sQ0FBQ0osUUFBUUssT0FBTyxDQUFDLENBQUMsQ0FBQ0MsS0FBS0MsTUFBTTtRQUMxQyxNQUFNQyxhQUFhTCxPQUFPQyxPQUFPLENBQUNHLE1BQU1FLE1BQU0sRUFBRVAsR0FBRyxDQUFDLENBQUMsQ0FBQ1EsR0FBR0MsRUFBRSxHQUFLRDtRQUNoRSxNQUFNRSxXQUFXTjtRQUNqQixNQUFNTyxRQUFRO1lBQ1pDLGdCQUFnQmpCLHlCQUF5QjtnQkFBRWtCLFVBQVVIO2dCQUFVYjtZQUFjO1lBQzdFVSxRQUFRRCxXQUFXUSxNQUFNLENBQ3ZCLENBQUNDLEtBQUtDO2dCQUNKLElBQ0VOLFlBQVluQixnQ0FDWnlCLFNBQVN6Qiw0QkFBNEIsQ0FBQ21CLFNBQXNELEVBQzVGO29CQUNBLE1BQU1PLGVBQWUxQiw0QkFBNEIsQ0FBQ21CLFNBQXNEO29CQUN4RyxNQUFNUSxhQUFhRjtvQkFDbkJELEdBQUcsQ0FBQ0MsTUFBTSxHQUFHQyxZQUFZLENBQUNDLFdBQVcsSUFBSUY7Z0JBQzNDLE9BQU87b0JBQ0xELEdBQUcsQ0FBQ0MsTUFBTSxHQUFHQTtnQkFDZjtnQkFDQSxPQUFPRDtZQUNULEdBQ0EsQ0FBQztRQUVMO1FBRUFmLEdBQUcsQ0FBQ1UsU0FBUyxHQUFHQztJQUNsQjtJQUVBLDBFQUEwRTtJQUMxRSxJQUFJLENBQUNYLEdBQUcsQ0FBQ1IsV0FBVzJCLElBQUksQ0FBQyxDQUFDWixNQUFNLENBQUNhLElBQUksRUFBRTtRQUNyQ3BCLEdBQUcsQ0FBQ1IsV0FBVzJCLElBQUksQ0FBQyxDQUFDWixNQUFNLENBQUNhLElBQUksR0FBRzdCLDZCQUE2QjRCLElBQUksQ0FBQ0MsSUFBSTtJQUMzRTtJQUVBLE9BQU9wQjtBQUNUO0FBTUE7Ozs7OztDQU1DLEdBQ0QsT0FBTyxTQUFTcUIseUJBQXlCeEIsYUFBc0M7SUFDN0UsTUFBTXlCLHNCQUFzQjtRQUMxQkMsT0FBTzFCLGNBQWMwQixLQUFLLEVBQUVEO1FBQzVCRSxVQUFVM0IsY0FBYzJCLFFBQVEsRUFBRUY7UUFDbENHLFVBQVU1QixjQUFjNEIsUUFBUSxFQUFFSDtRQUNsQ0ksZUFBZTdCLGNBQWM2QixhQUFhLEVBQUVKO1FBQzVDLEdBQUd6QixjQUFjOEIseUJBQXlCO0lBQzVDO0lBRUEsTUFBTUMsNkJBQTZCaEMsOEJBQThCQztJQUVqRSxJQUFJLENBQUN5Qix1QkFBdUJyQixPQUFPNEIsSUFBSSxDQUFDUCxxQkFBcUJRLE1BQU0sS0FBSyxHQUFHO1FBQ3pFLE9BQU87WUFBRSxHQUFHRiwwQkFBMEI7UUFBQztJQUN6QztJQUVBLE1BQU1HLFlBQVk7UUFBRSxHQUFHSCwwQkFBMEI7SUFBQztJQUVsRDNCLE9BQU9DLE9BQU8sQ0FBQ29CLHFCQUFxQm5CLE9BQU8sQ0FBQyxDQUFDLENBQUNTLGdCQUFnQm9CLGlCQUFpQjtRQUM3RSxJQUFJLENBQUNBLGtCQUFrQjtRQUV2QixNQUFNQyxxQkFBcUJELGlCQUFpQjtZQUMxQ0UsWUFBWTtnQkFDVkMsTUFBTXZCO2dCQUNOTCxRQUFRLEVBQUU7WUFDWjtRQUNGO1FBQ0EsTUFBTU0sV0FBV3VCLGVBQWVIO1FBQ2hDRixTQUFTLENBQUNsQixTQUFTLENBQUNELGNBQWMsR0FBR3FCLG1CQUFtQkUsSUFBSTtRQUM1RCxNQUFNRSxrQkFBa0IzQyxpQkFBaUJ1QztRQUN6QyxJQUFJSSxtQkFBbUJDLE1BQU1DLE9BQU8sQ0FBQ0Ysa0JBQWtCO1lBQ3JEQSxnQkFBZ0JsQyxPQUFPLENBQUMsQ0FBQ2E7Z0JBQ3ZCLGdFQUFnRTtnQkFDaEUsNERBQTREO2dCQUM1RCxJQUFJQSxNQUFNd0IsTUFBTSxFQUFFQyxvQkFBb0I7b0JBQ3BDLE1BQU1DLFdBQVdDLGVBQWUzQixPQUFPSCxVQUFVb0IsbUJBQW1CRSxJQUFJO29CQUN4RUosU0FBUyxDQUFDbEIsU0FBUyxDQUFDTixNQUFNLENBQUNtQyxTQUFTLEdBQUcxQixNQUFNNEIsSUFBSTtnQkFDbkQ7WUFDRjtRQUNGO0lBQ0Y7SUFFQSxPQUFPYjtBQUNUO0FBRUEsU0FBU1ksZUFBZTNCLEtBQXFCLEVBQUVILFFBQWlDLEVBQUVELGNBQXNCO0lBQ3RHLE1BQU04QixXQUFXMUIsTUFBTXdCLE1BQU0sRUFBRUM7SUFFL0Isa0ZBQWtGO0lBQ2xGLElBQUksQ0FBQ3hDLE9BQU80QyxNQUFNLENBQUN0RCw4QkFBOEJ1RCxJQUFJLENBQUMsQ0FBQ0MsV0FBYTlDLE9BQU80QixJQUFJLENBQUNrQixVQUFVQyxRQUFRLENBQUNOLFlBQVk7UUFDN0csTUFBTSxJQUFJTyxNQUNSLENBQUMsbUNBQW1DLEVBQUVQLFNBQVMsV0FBVyxFQUFFMUIsTUFBTTRCLElBQUksQ0FBQyxlQUFlLEVBQUVoQyxlQUFlO3VCQUN0RixFQUFFWCxPQUFPNEIsSUFBSSxDQUFDdEMsNEJBQTRCLENBQUNzQixTQUFzRCxFQUFFcUMsSUFBSSxDQUFDLE9BQU87SUFFcEk7SUFFQSxPQUFPUjtBQUNUO0FBRUE7Ozs7OztDQU1DLEdBQ0QsU0FBU04sZUFBZUYsVUFBNEI7SUFDbEQsSUFBSSxDQUFDQSxXQUFXTSxNQUFNLEVBQUVXLG9CQUFvQjtRQUMxQyxNQUFNLElBQUlGLE1BQU0sQ0FBQyxXQUFXLEVBQUVmLFdBQVdDLElBQUksQ0FBQyxvREFBb0QsQ0FBQztJQUNyRztJQUVBLE1BQU10QixXQUFXcUIsV0FBV00sTUFBTSxDQUFDVyxrQkFBa0I7SUFFckQsSUFBSSxDQUFDbEQsT0FBTzRDLE1BQU0sQ0FBQ3JELFlBQVl3RCxRQUFRLENBQUNuQyxXQUFrQjtRQUN4RCxNQUFNLElBQUlvQyxNQUFNLENBQUMsV0FBVyxFQUFFZixXQUFXQyxJQUFJLENBQUMsb0NBQW9DLEVBQUV0QixVQUFVO0lBQ2hHO0lBRUEsT0FBT0E7QUFDVCJ9
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"get-requst-collection.d.ts","sourceRoot":"","sources":["../../../../src/better-auth/plugin/helpers/get-requst-collection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,UAAU,EAAE,KAAK,cAAc,EAAE,MAAM,SAAS,CAAA;AAExE,eAAO,MAAM,oBAAoB,GAAI,KAAK,cAAc,KAAG,UAc1D,CAAA"}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { APIError } from "payload";
|
|
2
|
-
export const getRequestCollection = (req)=>{
|
|
3
|
-
const collectionSlug = req.routeParams?.collection;
|
|
4
|
-
if (typeof collectionSlug !== 'string') {
|
|
5
|
-
throw new APIError(`No collection was specified`, 400);
|
|
6
|
-
}
|
|
7
|
-
const collection = req.payload.collections[collectionSlug];
|
|
8
|
-
if (!collection) {
|
|
9
|
-
throw new APIError(`Collection with the slug ${collectionSlug} was not found`, 404);
|
|
10
|
-
}
|
|
11
|
-
return collection;
|
|
12
|
-
};
|
|
13
|
-
|
|
14
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9iZXR0ZXItYXV0aC9wbHVnaW4vaGVscGVycy9nZXQtcmVxdXN0LWNvbGxlY3Rpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVBJRXJyb3IsIHR5cGUgQ29sbGVjdGlvbiwgdHlwZSBQYXlsb2FkUmVxdWVzdCB9IGZyb20gJ3BheWxvYWQnXG5cbmV4cG9ydCBjb25zdCBnZXRSZXF1ZXN0Q29sbGVjdGlvbiA9IChyZXE6IFBheWxvYWRSZXF1ZXN0KTogQ29sbGVjdGlvbiA9PiB7XG4gIGNvbnN0IGNvbGxlY3Rpb25TbHVnID0gcmVxLnJvdXRlUGFyYW1zPy5jb2xsZWN0aW9uXG5cbiAgaWYgKHR5cGVvZiBjb2xsZWN0aW9uU2x1ZyAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgQVBJRXJyb3IoYE5vIGNvbGxlY3Rpb24gd2FzIHNwZWNpZmllZGAsIDQwMClcbiAgfVxuXG4gIGNvbnN0IGNvbGxlY3Rpb24gPSByZXEucGF5bG9hZC5jb2xsZWN0aW9uc1tjb2xsZWN0aW9uU2x1Z11cblxuICBpZiAoIWNvbGxlY3Rpb24pIHtcbiAgICB0aHJvdyBuZXcgQVBJRXJyb3IoYENvbGxlY3Rpb24gd2l0aCB0aGUgc2x1ZyAke2NvbGxlY3Rpb25TbHVnfSB3YXMgbm90IGZvdW5kYCwgNDA0KVxuICB9XG5cbiAgcmV0dXJuIGNvbGxlY3Rpb25cbn1cbiJdLCJuYW1lcyI6WyJBUElFcnJvciIsImdldFJlcXVlc3RDb2xsZWN0aW9uIiwicmVxIiwiY29sbGVjdGlvblNsdWciLCJyb3V0ZVBhcmFtcyIsImNvbGxlY3Rpb24iLCJwYXlsb2FkIiwiY29sbGVjdGlvbnMiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLFFBQVEsUUFBOEMsVUFBUztBQUV4RSxPQUFPLE1BQU1DLHVCQUF1QixDQUFDQztJQUNuQyxNQUFNQyxpQkFBaUJELElBQUlFLFdBQVcsRUFBRUM7SUFFeEMsSUFBSSxPQUFPRixtQkFBbUIsVUFBVTtRQUN0QyxNQUFNLElBQUlILFNBQVMsQ0FBQywyQkFBMkIsQ0FBQyxFQUFFO0lBQ3BEO0lBRUEsTUFBTUssYUFBYUgsSUFBSUksT0FBTyxDQUFDQyxXQUFXLENBQUNKLGVBQWU7SUFFMUQsSUFBSSxDQUFDRSxZQUFZO1FBQ2YsTUFBTSxJQUFJTCxTQUFTLENBQUMseUJBQXlCLEVBQUVHLGVBQWUsY0FBYyxDQUFDLEVBQUU7SUFDakY7SUFFQSxPQUFPRTtBQUNULEVBQUMifQ==
|
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
type CookiePrefixOptions = 'host' | 'secure';
|
|
2
|
-
type CookieOptions = {
|
|
3
|
-
/**
|
|
4
|
-
* Domain of the cookie
|
|
5
|
-
*
|
|
6
|
-
* The Domain attribute specifies which server can receive a cookie. If specified, cookies are
|
|
7
|
-
* available on the specified server and its subdomains. If the it is not
|
|
8
|
-
* specified, the cookies are available on the server that sets it but not on
|
|
9
|
-
* its subdomains.
|
|
10
|
-
*
|
|
11
|
-
* @example
|
|
12
|
-
* `domain: "example.com"`
|
|
13
|
-
*/
|
|
14
|
-
domain?: string;
|
|
15
|
-
/**
|
|
16
|
-
* A lifetime of a cookie. Permanent cookies are deleted after the date specified in the
|
|
17
|
-
* Expires attribute:
|
|
18
|
-
*
|
|
19
|
-
* Expires has been available for longer than Max-Age, however Max-Age is less error-prone, and
|
|
20
|
-
* takes precedence when both are set. The rationale behind this is that when you set an
|
|
21
|
-
* Expires date and time, they're relative to the client the cookie is being set on. If the
|
|
22
|
-
* server is set to a different time, this could cause errors
|
|
23
|
-
*/
|
|
24
|
-
expires?: Date;
|
|
25
|
-
/**
|
|
26
|
-
* Forbids JavaScript from accessing the cookie, for example, through the Document.cookie
|
|
27
|
-
* property. Note that a cookie that has been created with HttpOnly will still be sent with
|
|
28
|
-
* JavaScript-initiated requests, for example, when calling XMLHttpRequest.send() or fetch().
|
|
29
|
-
* This mitigates attacks against cross-site scripting
|
|
30
|
-
*/
|
|
31
|
-
httpOnly?: boolean;
|
|
32
|
-
/**
|
|
33
|
-
* Indicates the number of seconds until the cookie expires. A zero or negative number will
|
|
34
|
-
* expire the cookie immediately. If both Expires and Max-Age are set, Max-Age has precedence.
|
|
35
|
-
*
|
|
36
|
-
* @example 604800 - 7 days
|
|
37
|
-
*/
|
|
38
|
-
maxAge?: number;
|
|
39
|
-
/**
|
|
40
|
-
* Indicates the path that must exist in the requested URL for the browser to send the Cookie
|
|
41
|
-
* header.
|
|
42
|
-
*
|
|
43
|
-
* @example
|
|
44
|
-
* "/docs"
|
|
45
|
-
* // -> the request paths /docs, /docs/, /docs/Web/, and /docs/Web/HTTP will all match. the request paths /, /fr/docs will not match.
|
|
46
|
-
*/
|
|
47
|
-
path?: string;
|
|
48
|
-
/**
|
|
49
|
-
* Indicates that the cookie is sent to the server only when a request is made with the https:
|
|
50
|
-
* scheme (except on localhost), and therefore, is more resistant to man-in-the-middle attacks.
|
|
51
|
-
*/
|
|
52
|
-
secure?: boolean;
|
|
53
|
-
/**
|
|
54
|
-
* Controls whether or not a cookie is sent with cross-site requests, providing some protection
|
|
55
|
-
* against cross-site request forgery attacks (CSRF).
|
|
56
|
-
*
|
|
57
|
-
* Strict - Means that the browser sends the cookie only for same-site requests, that is,
|
|
58
|
-
* requests originating from the same site that set the cookie. If a request originates from a
|
|
59
|
-
* different domain or scheme (even with the same domain), no cookies with the SameSite=Strict
|
|
60
|
-
* attribute are sent.
|
|
61
|
-
*
|
|
62
|
-
* Lax - Means that the cookie is not sent on cross-site requests, such as on requests to load
|
|
63
|
-
* images or frames, but is sent when a user is navigating to the origin site from an external
|
|
64
|
-
* site (for example, when following a link). This is the default behavior if the SameSite
|
|
65
|
-
* attribute is not specified.
|
|
66
|
-
*
|
|
67
|
-
* None - Means that the browser sends the cookie with both cross-site and same-site requests.
|
|
68
|
-
* The Secure attribute must also be set when setting this value.
|
|
69
|
-
*/
|
|
70
|
-
sameSite?: 'Strict' | 'Lax' | 'None' | 'strict' | 'lax' | 'none';
|
|
71
|
-
/**
|
|
72
|
-
* Indicates that the cookie should be stored using partitioned storage. Note that if this is
|
|
73
|
-
* set, the Secure directive must also be set.
|
|
74
|
-
*
|
|
75
|
-
* @see https://developer.mozilla.org/en-US/docs/Web/Privacy/Privacy_sandbox/Partitioned_cookies
|
|
76
|
-
*/
|
|
77
|
-
partitioned?: boolean;
|
|
78
|
-
/**
|
|
79
|
-
* Cooke Prefix
|
|
80
|
-
*
|
|
81
|
-
* - secure: `__Secure-` -> `__Secure-cookie-name`
|
|
82
|
-
* - host: `__Host-` -> `__Host-cookie-name`
|
|
83
|
-
*
|
|
84
|
-
* `secure` must be set to true to use prefixes
|
|
85
|
-
*/
|
|
86
|
-
prefix?: CookiePrefixOptions;
|
|
87
|
-
};
|
|
88
|
-
export declare const verifySignature: (base64Signature: string, value: string, secret: CryptoKey) => Promise<boolean>;
|
|
89
|
-
export declare const signCookieValue: (value: string, secret: string | BufferSource) => Promise<string>;
|
|
90
|
-
export declare const serializeCookie: (key: string, value: string, opt?: CookieOptions) => string;
|
|
91
|
-
export declare const serializeSignedCookie: (key: string, value: string, secret: string, opt?: CookieOptions) => Promise<string>;
|
|
92
|
-
export declare const getCookieKey: (key: string, prefix?: CookiePrefixOptions) => string | undefined;
|
|
93
|
-
export declare function tryDecode(str: string): string;
|
|
94
|
-
/**
|
|
95
|
-
* Parse an HTTP Cookie header string and returning an object of all cookie
|
|
96
|
-
* name-value pairs.
|
|
97
|
-
*
|
|
98
|
-
* Inspired by https://github.com/unjs/cookie-es/blob/main/src/cookie/parse.ts
|
|
99
|
-
*
|
|
100
|
-
* @param str the string representing a `Cookie` header value
|
|
101
|
-
*/
|
|
102
|
-
export declare function parseCookies(str: string): Map<string, string>;
|
|
103
|
-
export declare const getSignedCookie: (key: string, secret: string, headers: Headers, prefix?: CookiePrefixOptions) => Promise<string | false | null>;
|
|
104
|
-
export {};
|
|
105
|
-
//# sourceMappingURL=serialize-cookie.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"serialize-cookie.d.ts","sourceRoot":"","sources":["../../../../src/better-auth/plugin/helpers/serialize-cookie.ts"],"names":[],"mappings":"AAEA,KAAK,mBAAmB,GAAG,MAAM,GAAG,QAAQ,CAAA;AAE5C,KAAK,aAAa,GAAG;IACnB;;;;;;;;;;OAUG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;;;;;;;;OAQG;IACH,OAAO,CAAC,EAAE,IAAI,CAAA;IACd;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;;;;;;;OAOG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IACb;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB;;;;;;;;;;;;;;;;OAgBG;IACH,QAAQ,CAAC,EAAE,QAAQ,GAAG,KAAK,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAA;IAChE;;;;;OAKG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,mBAAmB,CAAA;CAC7B,CAAA;AAED,eAAO,MAAM,eAAe,GAAU,iBAAiB,MAAM,EAAE,OAAO,MAAM,EAAE,QAAQ,SAAS,KAAG,OAAO,CAAC,OAAO,CAWhH,CAAA;AAyFD,eAAO,MAAM,eAAe,GAAU,OAAO,MAAM,EAAE,QAAQ,MAAM,GAAG,YAAY,oBAMjF,CAAA;AAED,eAAO,MAAM,eAAe,GAAI,KAAK,MAAM,EAAE,OAAO,MAAM,EAAE,MAAM,aAAa,WAG9E,CAAA;AAED,eAAO,MAAM,qBAAqB,GAAU,KAAK,MAAM,EAAE,OAAO,MAAM,EAAE,QAAQ,MAAM,EAAE,MAAM,aAAa,oBAG1G,CAAA;AAED,eAAO,MAAM,YAAY,GAAI,KAAK,MAAM,EAAE,SAAS,mBAAmB,uBAYrE,CAAA;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,UAMpC;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,uBAqCvC;AAED,eAAO,MAAM,eAAe,GAAU,KAAK,MAAM,EAAE,QAAQ,MAAM,EAAE,SAAS,OAAO,EAAE,SAAS,mBAAmB,mCAuBhH,CAAA"}
|
|
@@ -1,186 +0,0 @@
|
|
|
1
|
-
import { subtle } from "uncrypto";
|
|
2
|
-
export const verifySignature = async (base64Signature, value, secret)=>{
|
|
3
|
-
try {
|
|
4
|
-
const signatureBinStr = atob(base64Signature);
|
|
5
|
-
const signature = new Uint8Array(signatureBinStr.length);
|
|
6
|
-
for(let i = 0, len = signatureBinStr.length; i < len; i++){
|
|
7
|
-
signature[i] = signatureBinStr.charCodeAt(i);
|
|
8
|
-
}
|
|
9
|
-
return await subtle.verify(algorithm, secret, signature, new TextEncoder().encode(value));
|
|
10
|
-
} catch (e) {
|
|
11
|
-
return false;
|
|
12
|
-
}
|
|
13
|
-
};
|
|
14
|
-
const _serialize = (key, value, opt = {})=>{
|
|
15
|
-
let cookie;
|
|
16
|
-
if (opt?.prefix === 'secure') {
|
|
17
|
-
cookie = `${`__Secure-${key}`}=${value}`;
|
|
18
|
-
} else if (opt?.prefix === 'host') {
|
|
19
|
-
cookie = `${`__Host-${key}`}=${value}`;
|
|
20
|
-
} else {
|
|
21
|
-
cookie = `${key}=${value}`;
|
|
22
|
-
}
|
|
23
|
-
if (key.startsWith('__Secure-') && !opt.secure) {
|
|
24
|
-
opt.secure = true;
|
|
25
|
-
}
|
|
26
|
-
if (key.startsWith('__Host-')) {
|
|
27
|
-
if (!opt.secure) {
|
|
28
|
-
opt.secure = true;
|
|
29
|
-
}
|
|
30
|
-
if (opt.path !== '/') {
|
|
31
|
-
opt.path = '/';
|
|
32
|
-
}
|
|
33
|
-
if (opt.domain) {
|
|
34
|
-
opt.domain = undefined;
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
if (opt && typeof opt.maxAge === 'number' && opt.maxAge >= 0) {
|
|
38
|
-
if (opt.maxAge > 34560000) {
|
|
39
|
-
throw new Error('Cookies Max-Age SHOULD NOT be greater than 400 days (34560000 seconds) in duration.');
|
|
40
|
-
}
|
|
41
|
-
cookie += `; Max-Age=${Math.floor(opt.maxAge)}`;
|
|
42
|
-
}
|
|
43
|
-
if (opt.domain && opt.prefix !== 'host') {
|
|
44
|
-
cookie += `; Domain=${opt.domain}`;
|
|
45
|
-
}
|
|
46
|
-
if (opt.path) {
|
|
47
|
-
cookie += `; Path=${opt.path}`;
|
|
48
|
-
}
|
|
49
|
-
if (opt.expires) {
|
|
50
|
-
if (opt.expires.getTime() - Date.now() > 34560000_000) {
|
|
51
|
-
throw new Error('Cookies Expires SHOULD NOT be greater than 400 days (34560000 seconds) in the future.');
|
|
52
|
-
}
|
|
53
|
-
cookie += `; Expires=${opt.expires.toUTCString()}`;
|
|
54
|
-
}
|
|
55
|
-
if (opt.httpOnly) {
|
|
56
|
-
cookie += '; HttpOnly';
|
|
57
|
-
}
|
|
58
|
-
if (opt.secure) {
|
|
59
|
-
cookie += '; Secure';
|
|
60
|
-
}
|
|
61
|
-
if (opt.sameSite) {
|
|
62
|
-
cookie += `; SameSite=${opt.sameSite.charAt(0).toUpperCase() + opt.sameSite.slice(1)}`;
|
|
63
|
-
}
|
|
64
|
-
if (opt.partitioned) {
|
|
65
|
-
if (!opt.secure) {
|
|
66
|
-
opt.secure = true;
|
|
67
|
-
}
|
|
68
|
-
cookie += '; Partitioned';
|
|
69
|
-
}
|
|
70
|
-
return cookie;
|
|
71
|
-
};
|
|
72
|
-
const algorithm = {
|
|
73
|
-
name: 'HMAC',
|
|
74
|
-
hash: 'SHA-256'
|
|
75
|
-
};
|
|
76
|
-
const getCryptoKey = async (secret)=>{
|
|
77
|
-
const secretBuf = typeof secret === 'string' ? new TextEncoder().encode(secret) : secret;
|
|
78
|
-
return await subtle.importKey('raw', secretBuf, algorithm, false, [
|
|
79
|
-
'sign',
|
|
80
|
-
'verify'
|
|
81
|
-
]);
|
|
82
|
-
};
|
|
83
|
-
const makeSignature = async (value, secret)=>{
|
|
84
|
-
const key = await getCryptoKey(secret);
|
|
85
|
-
const signature = await subtle.sign(algorithm.name, key, new TextEncoder().encode(value));
|
|
86
|
-
// the returned base64 encoded signature will always be 44 characters long and end with one or two equal signs
|
|
87
|
-
return btoa(String.fromCharCode(...new Uint8Array(signature)));
|
|
88
|
-
};
|
|
89
|
-
export const signCookieValue = async (value, secret)=>{
|
|
90
|
-
const signature = await makeSignature(value, secret);
|
|
91
|
-
value = `${value}.${signature}`;
|
|
92
|
-
value = encodeURIComponent(value);
|
|
93
|
-
value = decodeURIComponent(value);
|
|
94
|
-
return value;
|
|
95
|
-
};
|
|
96
|
-
export const serializeCookie = (key, value, opt)=>{
|
|
97
|
-
value = encodeURIComponent(value);
|
|
98
|
-
return _serialize(key, value, opt);
|
|
99
|
-
};
|
|
100
|
-
export const serializeSignedCookie = async (key, value, secret, opt)=>{
|
|
101
|
-
value = await signCookieValue(value, secret);
|
|
102
|
-
return _serialize(key, value, opt);
|
|
103
|
-
};
|
|
104
|
-
export const getCookieKey = (key, prefix)=>{
|
|
105
|
-
let finalKey = key;
|
|
106
|
-
if (prefix) {
|
|
107
|
-
if (prefix === 'secure') {
|
|
108
|
-
finalKey = '__Secure-' + key;
|
|
109
|
-
} else if (prefix === 'host') {
|
|
110
|
-
finalKey = '__Host-' + key;
|
|
111
|
-
} else {
|
|
112
|
-
return undefined;
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
return finalKey;
|
|
116
|
-
};
|
|
117
|
-
export function tryDecode(str) {
|
|
118
|
-
try {
|
|
119
|
-
return str.includes('%') ? decodeURIComponent(str) : str;
|
|
120
|
-
} catch {
|
|
121
|
-
return str;
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
/**
|
|
125
|
-
* Parse an HTTP Cookie header string and returning an object of all cookie
|
|
126
|
-
* name-value pairs.
|
|
127
|
-
*
|
|
128
|
-
* Inspired by https://github.com/unjs/cookie-es/blob/main/src/cookie/parse.ts
|
|
129
|
-
*
|
|
130
|
-
* @param str the string representing a `Cookie` header value
|
|
131
|
-
*/ export function parseCookies(str) {
|
|
132
|
-
if (typeof str !== 'string') {
|
|
133
|
-
throw new TypeError('argument str must be a string');
|
|
134
|
-
}
|
|
135
|
-
const cookies = new Map();
|
|
136
|
-
let index = 0;
|
|
137
|
-
while(index < str.length){
|
|
138
|
-
const eqIdx = str.indexOf('=', index);
|
|
139
|
-
if (eqIdx === -1) {
|
|
140
|
-
break;
|
|
141
|
-
}
|
|
142
|
-
let endIdx = str.indexOf(';', index);
|
|
143
|
-
if (endIdx === -1) {
|
|
144
|
-
endIdx = str.length;
|
|
145
|
-
} else if (endIdx < eqIdx) {
|
|
146
|
-
index = str.lastIndexOf(';', eqIdx - 1) + 1;
|
|
147
|
-
continue;
|
|
148
|
-
}
|
|
149
|
-
const key = str.slice(index, eqIdx).trim();
|
|
150
|
-
if (!cookies.has(key)) {
|
|
151
|
-
let val = str.slice(eqIdx + 1, endIdx).trim();
|
|
152
|
-
if (val.codePointAt(0) === 0x22) {
|
|
153
|
-
val = val.slice(1, -1);
|
|
154
|
-
}
|
|
155
|
-
cookies.set(key, tryDecode(val));
|
|
156
|
-
}
|
|
157
|
-
index = endIdx + 1;
|
|
158
|
-
}
|
|
159
|
-
return cookies;
|
|
160
|
-
}
|
|
161
|
-
export const getSignedCookie = async (key, secret, headers, prefix)=>{
|
|
162
|
-
const finalKey = getCookieKey(key, prefix);
|
|
163
|
-
if (!finalKey) {
|
|
164
|
-
return null;
|
|
165
|
-
}
|
|
166
|
-
const cookieHeader = headers.get('cookie');
|
|
167
|
-
const parsedCookies = cookieHeader ? parseCookies(cookieHeader) : undefined;
|
|
168
|
-
const value = parsedCookies?.get(finalKey);
|
|
169
|
-
if (!value) {
|
|
170
|
-
return null;
|
|
171
|
-
}
|
|
172
|
-
const signatureStartPos = value.lastIndexOf('.');
|
|
173
|
-
if (signatureStartPos < 1) {
|
|
174
|
-
return null;
|
|
175
|
-
}
|
|
176
|
-
const signedValue = value.substring(0, signatureStartPos);
|
|
177
|
-
const signature = value.substring(signatureStartPos + 1);
|
|
178
|
-
if (signature.length !== 44 || !signature.endsWith('=')) {
|
|
179
|
-
return null;
|
|
180
|
-
}
|
|
181
|
-
const secretKey = await getCryptoKey(secret);
|
|
182
|
-
const isVerified = await verifySignature(signature, signedValue, secretKey);
|
|
183
|
-
return isVerified ? signedValue : false;
|
|
184
|
-
};
|
|
185
|
-
|
|
186
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9iZXR0ZXItYXV0aC9wbHVnaW4vaGVscGVycy9zZXJpYWxpemUtY29va2llLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHN1YnRsZSB9IGZyb20gJ3VuY3J5cHRvJ1xuXG50eXBlIENvb2tpZVByZWZpeE9wdGlvbnMgPSAnaG9zdCcgfCAnc2VjdXJlJ1xuXG50eXBlIENvb2tpZU9wdGlvbnMgPSB7XG4gIC8qKlxuICAgKiBEb21haW4gb2YgdGhlIGNvb2tpZVxuICAgKlxuICAgKiBUaGUgRG9tYWluIGF0dHJpYnV0ZSBzcGVjaWZpZXMgd2hpY2ggc2VydmVyIGNhbiByZWNlaXZlIGEgY29va2llLiBJZiBzcGVjaWZpZWQsIGNvb2tpZXMgYXJlXG4gICAqIGF2YWlsYWJsZSBvbiB0aGUgc3BlY2lmaWVkIHNlcnZlciBhbmQgaXRzIHN1YmRvbWFpbnMuIElmIHRoZSBpdCBpcyBub3RcbiAgICogc3BlY2lmaWVkLCB0aGUgY29va2llcyBhcmUgYXZhaWxhYmxlIG9uIHRoZSBzZXJ2ZXIgdGhhdCBzZXRzIGl0IGJ1dCBub3Qgb25cbiAgICogaXRzIHN1YmRvbWFpbnMuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGBkb21haW46IFwiZXhhbXBsZS5jb21cImBcbiAgICovXG4gIGRvbWFpbj86IHN0cmluZ1xuICAvKipcbiAgICogQSBsaWZldGltZSBvZiBhIGNvb2tpZS4gUGVybWFuZW50IGNvb2tpZXMgYXJlIGRlbGV0ZWQgYWZ0ZXIgdGhlIGRhdGUgc3BlY2lmaWVkIGluIHRoZVxuICAgKiBFeHBpcmVzIGF0dHJpYnV0ZTpcbiAgICpcbiAgICogRXhwaXJlcyBoYXMgYmVlbiBhdmFpbGFibGUgZm9yIGxvbmdlciB0aGFuIE1heC1BZ2UsIGhvd2V2ZXIgTWF4LUFnZSBpcyBsZXNzIGVycm9yLXByb25lLCBhbmRcbiAgICogdGFrZXMgcHJlY2VkZW5jZSB3aGVuIGJvdGggYXJlIHNldC4gVGhlIHJhdGlvbmFsZSBiZWhpbmQgdGhpcyBpcyB0aGF0IHdoZW4geW91IHNldCBhblxuICAgKiBFeHBpcmVzIGRhdGUgYW5kIHRpbWUsIHRoZXkncmUgcmVsYXRpdmUgdG8gdGhlIGNsaWVudCB0aGUgY29va2llIGlzIGJlaW5nIHNldCBvbi4gSWYgdGhlXG4gICAqIHNlcnZlciBpcyBzZXQgdG8gYSBkaWZmZXJlbnQgdGltZSwgdGhpcyBjb3VsZCBjYXVzZSBlcnJvcnNcbiAgICovXG4gIGV4cGlyZXM/OiBEYXRlXG4gIC8qKlxuICAgKiBGb3JiaWRzIEphdmFTY3JpcHQgZnJvbSBhY2Nlc3NpbmcgdGhlIGNvb2tpZSwgZm9yIGV4YW1wbGUsIHRocm91Z2ggdGhlIERvY3VtZW50LmNvb2tpZVxuICAgKiBwcm9wZXJ0eS4gTm90ZSB0aGF0IGEgY29va2llIHRoYXQgaGFzIGJlZW4gY3JlYXRlZCB3aXRoIEh0dHBPbmx5IHdpbGwgc3RpbGwgYmUgc2VudCB3aXRoXG4gICAqIEphdmFTY3JpcHQtaW5pdGlhdGVkIHJlcXVlc3RzLCBmb3IgZXhhbXBsZSwgd2hlbiBjYWxsaW5nIFhNTEh0dHBSZXF1ZXN0LnNlbmQoKSBvciBmZXRjaCgpLlxuICAgKiBUaGlzIG1pdGlnYXRlcyBhdHRhY2tzIGFnYWluc3QgY3Jvc3Mtc2l0ZSBzY3JpcHRpbmdcbiAgICovXG4gIGh0dHBPbmx5PzogYm9vbGVhblxuICAvKipcbiAgICogSW5kaWNhdGVzIHRoZSBudW1iZXIgb2Ygc2Vjb25kcyB1bnRpbCB0aGUgY29va2llIGV4cGlyZXMuIEEgemVybyBvciBuZWdhdGl2ZSBudW1iZXIgd2lsbFxuICAgKiBleHBpcmUgdGhlIGNvb2tpZSBpbW1lZGlhdGVseS4gSWYgYm90aCBFeHBpcmVzIGFuZCBNYXgtQWdlIGFyZSBzZXQsIE1heC1BZ2UgaGFzIHByZWNlZGVuY2UuXG4gICAqXG4gICAqIEBleGFtcGxlIDYwNDgwMCAtIDcgZGF5c1xuICAgKi9cbiAgbWF4QWdlPzogbnVtYmVyXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhlIHBhdGggdGhhdCBtdXN0IGV4aXN0IGluIHRoZSByZXF1ZXN0ZWQgVVJMIGZvciB0aGUgYnJvd3NlciB0byBzZW5kIHRoZSBDb29raWVcbiAgICogaGVhZGVyLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBcIi9kb2NzXCJcbiAgICogLy8gLT4gdGhlIHJlcXVlc3QgcGF0aHMgL2RvY3MsIC9kb2NzLywgL2RvY3MvV2ViLywgYW5kIC9kb2NzL1dlYi9IVFRQIHdpbGwgYWxsIG1hdGNoLiB0aGUgcmVxdWVzdCBwYXRocyAvLCAvZnIvZG9jcyB3aWxsIG5vdCBtYXRjaC5cbiAgICovXG4gIHBhdGg/OiBzdHJpbmdcbiAgLyoqXG4gICAqIEluZGljYXRlcyB0aGF0IHRoZSBjb29raWUgaXMgc2VudCB0byB0aGUgc2VydmVyIG9ubHkgd2hlbiBhIHJlcXVlc3QgaXMgbWFkZSB3aXRoIHRoZSBodHRwczpcbiAgICogc2NoZW1lIChleGNlcHQgb24gbG9jYWxob3N0KSwgYW5kIHRoZXJlZm9yZSwgaXMgbW9yZSByZXNpc3RhbnQgdG8gbWFuLWluLXRoZS1taWRkbGUgYXR0YWNrcy5cbiAgICovXG4gIHNlY3VyZT86IGJvb2xlYW5cbiAgLyoqXG4gICAqIENvbnRyb2xzIHdoZXRoZXIgb3Igbm90IGEgY29va2llIGlzIHNlbnQgd2l0aCBjcm9zcy1zaXRlIHJlcXVlc3RzLCBwcm92aWRpbmcgc29tZSBwcm90ZWN0aW9uXG4gICAqIGFnYWluc3QgY3Jvc3Mtc2l0ZSByZXF1ZXN0IGZvcmdlcnkgYXR0YWNrcyAoQ1NSRikuXG4gICAqXG4gICAqIFN0cmljdCAtICBNZWFucyB0aGF0IHRoZSBicm93c2VyIHNlbmRzIHRoZSBjb29raWUgb25seSBmb3Igc2FtZS1zaXRlIHJlcXVlc3RzLCB0aGF0IGlzLFxuICAgKiByZXF1ZXN0cyBvcmlnaW5hdGluZyBmcm9tIHRoZSBzYW1lIHNpdGUgdGhhdCBzZXQgdGhlIGNvb2tpZS4gSWYgYSByZXF1ZXN0IG9yaWdpbmF0ZXMgZnJvbSBhXG4gICAqIGRpZmZlcmVudCBkb21haW4gb3Igc2NoZW1lIChldmVuIHdpdGggdGhlIHNhbWUgZG9tYWluKSwgbm8gY29va2llcyB3aXRoIHRoZSBTYW1lU2l0ZT1TdHJpY3RcbiAgICogYXR0cmlidXRlIGFyZSBzZW50LlxuICAgKlxuICAgKiBMYXggLSBNZWFucyB0aGF0IHRoZSBjb29raWUgaXMgbm90IHNlbnQgb24gY3Jvc3Mtc2l0ZSByZXF1ZXN0cywgc3VjaCBhcyBvbiByZXF1ZXN0cyB0byBsb2FkXG4gICAqIGltYWdlcyBvciBmcmFtZXMsIGJ1dCBpcyBzZW50IHdoZW4gYSB1c2VyIGlzIG5hdmlnYXRpbmcgdG8gdGhlIG9yaWdpbiBzaXRlIGZyb20gYW4gZXh0ZXJuYWxcbiAgICogc2l0ZSAoZm9yIGV4YW1wbGUsIHdoZW4gZm9sbG93aW5nIGEgbGluaykuIFRoaXMgaXMgdGhlIGRlZmF1bHQgYmVoYXZpb3IgaWYgdGhlIFNhbWVTaXRlXG4gICAqIGF0dHJpYnV0ZSBpcyBub3Qgc3BlY2lmaWVkLlxuICAgKlxuICAgKiBOb25lIC0gTWVhbnMgdGhhdCB0aGUgYnJvd3NlciBzZW5kcyB0aGUgY29va2llIHdpdGggYm90aCBjcm9zcy1zaXRlIGFuZCBzYW1lLXNpdGUgcmVxdWVzdHMuXG4gICAqIFRoZSBTZWN1cmUgYXR0cmlidXRlIG11c3QgYWxzbyBiZSBzZXQgd2hlbiBzZXR0aW5nIHRoaXMgdmFsdWUuXG4gICAqL1xuICBzYW1lU2l0ZT86ICdTdHJpY3QnIHwgJ0xheCcgfCAnTm9uZScgfCAnc3RyaWN0JyB8ICdsYXgnIHwgJ25vbmUnXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgY29va2llIHNob3VsZCBiZSBzdG9yZWQgdXNpbmcgcGFydGl0aW9uZWQgc3RvcmFnZS4gTm90ZSB0aGF0IGlmIHRoaXMgaXNcbiAgICogc2V0LCB0aGUgU2VjdXJlIGRpcmVjdGl2ZSBtdXN0IGFsc28gYmUgc2V0LlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL1ByaXZhY3kvUHJpdmFjeV9zYW5kYm94L1BhcnRpdGlvbmVkX2Nvb2tpZXNcbiAgICovXG4gIHBhcnRpdGlvbmVkPzogYm9vbGVhblxuICAvKipcbiAgICogQ29va2UgUHJlZml4XG4gICAqXG4gICAqIC0gc2VjdXJlOiBgX19TZWN1cmUtYCAtPiBgX19TZWN1cmUtY29va2llLW5hbWVgXG4gICAqIC0gaG9zdDogYF9fSG9zdC1gIC0+IGBfX0hvc3QtY29va2llLW5hbWVgXG4gICAqXG4gICAqIGBzZWN1cmVgIG11c3QgYmUgc2V0IHRvIHRydWUgdG8gdXNlIHByZWZpeGVzXG4gICAqL1xuICBwcmVmaXg/OiBDb29raWVQcmVmaXhPcHRpb25zXG59XG5cbmV4cG9ydCBjb25zdCB2ZXJpZnlTaWduYXR1cmUgPSBhc3luYyAoYmFzZTY0U2lnbmF0dXJlOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcsIHNlY3JldDogQ3J5cHRvS2V5KTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3Qgc2lnbmF0dXJlQmluU3RyID0gYXRvYihiYXNlNjRTaWduYXR1cmUpXG4gICAgY29uc3Qgc2lnbmF0dXJlID0gbmV3IFVpbnQ4QXJyYXkoc2lnbmF0dXJlQmluU3RyLmxlbmd0aClcbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gc2lnbmF0dXJlQmluU3RyLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBzaWduYXR1cmVbaV0gPSBzaWduYXR1cmVCaW5TdHIuY2hhckNvZGVBdChpKVxuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgc3VidGxlLnZlcmlmeShhbGdvcml0aG0sIHNlY3JldCwgc2lnbmF0dXJlLCBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUodmFsdWUpKVxuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuY29uc3QgX3NlcmlhbGl6ZSA9IChrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZywgb3B0OiBDb29raWVPcHRpb25zID0ge30pID0+IHtcbiAgbGV0IGNvb2tpZTogc3RyaW5nXG5cbiAgaWYgKG9wdD8ucHJlZml4ID09PSAnc2VjdXJlJykge1xuICAgIGNvb2tpZSA9IGAke2BfX1NlY3VyZS0ke2tleX1gfT0ke3ZhbHVlfWBcbiAgfSBlbHNlIGlmIChvcHQ/LnByZWZpeCA9PT0gJ2hvc3QnKSB7XG4gICAgY29va2llID0gYCR7YF9fSG9zdC0ke2tleX1gfT0ke3ZhbHVlfWBcbiAgfSBlbHNlIHtcbiAgICBjb29raWUgPSBgJHtrZXl9PSR7dmFsdWV9YFxuICB9XG5cbiAgaWYgKGtleS5zdGFydHNXaXRoKCdfX1NlY3VyZS0nKSAmJiAhb3B0LnNlY3VyZSkge1xuICAgIG9wdC5zZWN1cmUgPSB0cnVlXG4gIH1cblxuICBpZiAoa2V5LnN0YXJ0c1dpdGgoJ19fSG9zdC0nKSkge1xuICAgIGlmICghb3B0LnNlY3VyZSkge1xuICAgICAgb3B0LnNlY3VyZSA9IHRydWVcbiAgICB9XG5cbiAgICBpZiAob3B0LnBhdGggIT09ICcvJykge1xuICAgICAgb3B0LnBhdGggPSAnLydcbiAgICB9XG5cbiAgICBpZiAob3B0LmRvbWFpbikge1xuICAgICAgb3B0LmRvbWFpbiA9IHVuZGVmaW5lZFxuICAgIH1cbiAgfVxuXG4gIGlmIChvcHQgJiYgdHlwZW9mIG9wdC5tYXhBZ2UgPT09ICdudW1iZXInICYmIG9wdC5tYXhBZ2UgPj0gMCkge1xuICAgIGlmIChvcHQubWF4QWdlID4gMzQ1NjAwMDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ29va2llcyBNYXgtQWdlIFNIT1VMRCBOT1QgYmUgZ3JlYXRlciB0aGFuIDQwMCBkYXlzICgzNDU2MDAwMCBzZWNvbmRzKSBpbiBkdXJhdGlvbi4nKVxuICAgIH1cbiAgICBjb29raWUgKz0gYDsgTWF4LUFnZT0ke01hdGguZmxvb3Iob3B0Lm1heEFnZSl9YFxuICB9XG5cbiAgaWYgKG9wdC5kb21haW4gJiYgb3B0LnByZWZpeCAhPT0gJ2hvc3QnKSB7XG4gICAgY29va2llICs9IGA7IERvbWFpbj0ke29wdC5kb21haW59YFxuICB9XG5cbiAgaWYgKG9wdC5wYXRoKSB7XG4gICAgY29va2llICs9IGA7IFBhdGg9JHtvcHQucGF0aH1gXG4gIH1cblxuICBpZiAob3B0LmV4cGlyZXMpIHtcbiAgICBpZiAob3B0LmV4cGlyZXMuZ2V0VGltZSgpIC0gRGF0ZS5ub3coKSA+IDM0NTYwMDAwXzAwMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb29raWVzIEV4cGlyZXMgU0hPVUxEIE5PVCBiZSBncmVhdGVyIHRoYW4gNDAwIGRheXMgKDM0NTYwMDAwIHNlY29uZHMpIGluIHRoZSBmdXR1cmUuJylcbiAgICB9XG4gICAgY29va2llICs9IGA7IEV4cGlyZXM9JHtvcHQuZXhwaXJlcy50b1VUQ1N0cmluZygpfWBcbiAgfVxuXG4gIGlmIChvcHQuaHR0cE9ubHkpIHtcbiAgICBjb29raWUgKz0gJzsgSHR0cE9ubHknXG4gIH1cblxuICBpZiAob3B0LnNlY3VyZSkge1xuICAgIGNvb2tpZSArPSAnOyBTZWN1cmUnXG4gIH1cblxuICBpZiAob3B0LnNhbWVTaXRlKSB7XG4gICAgY29va2llICs9IGA7IFNhbWVTaXRlPSR7b3B0LnNhbWVTaXRlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgb3B0LnNhbWVTaXRlLnNsaWNlKDEpfWBcbiAgfVxuXG4gIGlmIChvcHQucGFydGl0aW9uZWQpIHtcbiAgICBpZiAoIW9wdC5zZWN1cmUpIHtcbiAgICAgIG9wdC5zZWN1cmUgPSB0cnVlXG4gICAgfVxuICAgIGNvb2tpZSArPSAnOyBQYXJ0aXRpb25lZCdcbiAgfVxuXG4gIHJldHVybiBjb29raWVcbn1cblxuY29uc3QgYWxnb3JpdGhtID0geyBuYW1lOiAnSE1BQycsIGhhc2g6ICdTSEEtMjU2JyB9XG5cbmNvbnN0IGdldENyeXB0b0tleSA9IGFzeW5jIChzZWNyZXQ6IHN0cmluZyB8IEJ1ZmZlclNvdXJjZSkgPT4ge1xuICBjb25zdCBzZWNyZXRCdWYgPSB0eXBlb2Ygc2VjcmV0ID09PSAnc3RyaW5nJyA/IG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShzZWNyZXQpIDogc2VjcmV0XG4gIHJldHVybiBhd2FpdCBzdWJ0bGUuaW1wb3J0S2V5KCdyYXcnLCBzZWNyZXRCdWYsIGFsZ29yaXRobSwgZmFsc2UsIFsnc2lnbicsICd2ZXJpZnknXSlcbn1cblxuY29uc3QgbWFrZVNpZ25hdHVyZSA9IGFzeW5jICh2YWx1ZTogc3RyaW5nLCBzZWNyZXQ6IHN0cmluZyB8IEJ1ZmZlclNvdXJjZSk6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIGNvbnN0IGtleSA9IGF3YWl0IGdldENyeXB0b0tleShzZWNyZXQpXG4gIGNvbnN0IHNpZ25hdHVyZSA9IGF3YWl0IHN1YnRsZS5zaWduKGFsZ29yaXRobS5uYW1lLCBrZXksIG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZSh2YWx1ZSkpXG4gIC8vIHRoZSByZXR1cm5lZCBiYXNlNjQgZW5jb2RlZCBzaWduYXR1cmUgd2lsbCBhbHdheXMgYmUgNDQgY2hhcmFjdGVycyBsb25nIGFuZCBlbmQgd2l0aCBvbmUgb3IgdHdvIGVxdWFsIHNpZ25zXG4gIHJldHVybiBidG9hKFN0cmluZy5mcm9tQ2hhckNvZGUoLi4ubmV3IFVpbnQ4QXJyYXkoc2lnbmF0dXJlKSkpXG59XG5cbmV4cG9ydCBjb25zdCBzaWduQ29va2llVmFsdWUgPSBhc3luYyAodmFsdWU6IHN0cmluZywgc2VjcmV0OiBzdHJpbmcgfCBCdWZmZXJTb3VyY2UpID0+IHtcbiAgY29uc3Qgc2lnbmF0dXJlID0gYXdhaXQgbWFrZVNpZ25hdHVyZSh2YWx1ZSwgc2VjcmV0KVxuICB2YWx1ZSA9IGAke3ZhbHVlfS4ke3NpZ25hdHVyZX1gXG4gIHZhbHVlID0gZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKVxuICB2YWx1ZSA9IGRlY29kZVVSSUNvbXBvbmVudCh2YWx1ZSlcbiAgcmV0dXJuIHZhbHVlXG59XG5cbmV4cG9ydCBjb25zdCBzZXJpYWxpemVDb29raWUgPSAoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcsIG9wdD86IENvb2tpZU9wdGlvbnMpID0+IHtcbiAgdmFsdWUgPSBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpXG4gIHJldHVybiBfc2VyaWFsaXplKGtleSwgdmFsdWUsIG9wdClcbn1cblxuZXhwb3J0IGNvbnN0IHNlcmlhbGl6ZVNpZ25lZENvb2tpZSA9IGFzeW5jIChrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZywgc2VjcmV0OiBzdHJpbmcsIG9wdD86IENvb2tpZU9wdGlvbnMpID0+IHtcbiAgdmFsdWUgPSBhd2FpdCBzaWduQ29va2llVmFsdWUodmFsdWUsIHNlY3JldClcbiAgcmV0dXJuIF9zZXJpYWxpemUoa2V5LCB2YWx1ZSwgb3B0KVxufVxuXG5leHBvcnQgY29uc3QgZ2V0Q29va2llS2V5ID0gKGtleTogc3RyaW5nLCBwcmVmaXg/OiBDb29raWVQcmVmaXhPcHRpb25zKSA9PiB7XG4gIGxldCBmaW5hbEtleSA9IGtleVxuICBpZiAocHJlZml4KSB7XG4gICAgaWYgKHByZWZpeCA9PT0gJ3NlY3VyZScpIHtcbiAgICAgIGZpbmFsS2V5ID0gJ19fU2VjdXJlLScgKyBrZXlcbiAgICB9IGVsc2UgaWYgKHByZWZpeCA9PT0gJ2hvc3QnKSB7XG4gICAgICBmaW5hbEtleSA9ICdfX0hvc3QtJyArIGtleVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfVxuICB9XG4gIHJldHVybiBmaW5hbEtleVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdHJ5RGVjb2RlKHN0cjogc3RyaW5nKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHN0ci5pbmNsdWRlcygnJScpID8gZGVjb2RlVVJJQ29tcG9uZW50KHN0cikgOiBzdHJcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHN0clxuICB9XG59XG5cbi8qKlxuICogUGFyc2UgYW4gSFRUUCBDb29raWUgaGVhZGVyIHN0cmluZyBhbmQgcmV0dXJuaW5nIGFuIG9iamVjdCBvZiBhbGwgY29va2llXG4gKiBuYW1lLXZhbHVlIHBhaXJzLlxuICpcbiAqIEluc3BpcmVkIGJ5IGh0dHBzOi8vZ2l0aHViLmNvbS91bmpzL2Nvb2tpZS1lcy9ibG9iL21haW4vc3JjL2Nvb2tpZS9wYXJzZS50c1xuICpcbiAqIEBwYXJhbSBzdHIgdGhlIHN0cmluZyByZXByZXNlbnRpbmcgYSBgQ29va2llYCBoZWFkZXIgdmFsdWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQ29va2llcyhzdHI6IHN0cmluZykge1xuICBpZiAodHlwZW9mIHN0ciAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdhcmd1bWVudCBzdHIgbXVzdCBiZSBhIHN0cmluZycpXG4gIH1cblxuICBjb25zdCBjb29raWVzOiBNYXA8c3RyaW5nLCBzdHJpbmc+ID0gbmV3IE1hcCgpXG5cbiAgbGV0IGluZGV4ID0gMFxuICB3aGlsZSAoaW5kZXggPCBzdHIubGVuZ3RoKSB7XG4gICAgY29uc3QgZXFJZHggPSBzdHIuaW5kZXhPZignPScsIGluZGV4KVxuXG4gICAgaWYgKGVxSWR4ID09PSAtMSkge1xuICAgICAgYnJlYWtcbiAgICB9XG5cbiAgICBsZXQgZW5kSWR4ID0gc3RyLmluZGV4T2YoJzsnLCBpbmRleClcblxuICAgIGlmIChlbmRJZHggPT09IC0xKSB7XG4gICAgICBlbmRJZHggPSBzdHIubGVuZ3RoXG4gICAgfSBlbHNlIGlmIChlbmRJZHggPCBlcUlkeCkge1xuICAgICAgaW5kZXggPSBzdHIubGFzdEluZGV4T2YoJzsnLCBlcUlkeCAtIDEpICsgMVxuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBjb25zdCBrZXkgPSBzdHIuc2xpY2UoaW5kZXgsIGVxSWR4KS50cmltKClcbiAgICBpZiAoIWNvb2tpZXMuaGFzKGtleSkpIHtcbiAgICAgIGxldCB2YWwgPSBzdHIuc2xpY2UoZXFJZHggKyAxLCBlbmRJZHgpLnRyaW0oKVxuICAgICAgaWYgKHZhbC5jb2RlUG9pbnRBdCgwKSA9PT0gMHgyMikge1xuICAgICAgICB2YWwgPSB2YWwuc2xpY2UoMSwgLTEpXG4gICAgICB9XG4gICAgICBjb29raWVzLnNldChrZXksIHRyeURlY29kZSh2YWwpKVxuICAgIH1cblxuICAgIGluZGV4ID0gZW5kSWR4ICsgMVxuICB9XG5cbiAgcmV0dXJuIGNvb2tpZXNcbn1cblxuZXhwb3J0IGNvbnN0IGdldFNpZ25lZENvb2tpZSA9IGFzeW5jIChrZXk6IHN0cmluZywgc2VjcmV0OiBzdHJpbmcsIGhlYWRlcnM6IEhlYWRlcnMsIHByZWZpeD86IENvb2tpZVByZWZpeE9wdGlvbnMpID0+IHtcbiAgY29uc3QgZmluYWxLZXkgPSBnZXRDb29raWVLZXkoa2V5LCBwcmVmaXgpXG4gIGlmICghZmluYWxLZXkpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG4gIGNvbnN0IGNvb2tpZUhlYWRlciA9IGhlYWRlcnMuZ2V0KCdjb29raWUnKVxuICBjb25zdCBwYXJzZWRDb29raWVzID0gY29va2llSGVhZGVyID8gcGFyc2VDb29raWVzKGNvb2tpZUhlYWRlcikgOiB1bmRlZmluZWRcbiAgY29uc3QgdmFsdWUgPSBwYXJzZWRDb29raWVzPy5nZXQoZmluYWxLZXkpXG4gIGlmICghdmFsdWUpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG4gIGNvbnN0IHNpZ25hdHVyZVN0YXJ0UG9zID0gdmFsdWUubGFzdEluZGV4T2YoJy4nKVxuICBpZiAoc2lnbmF0dXJlU3RhcnRQb3MgPCAxKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuICBjb25zdCBzaWduZWRWYWx1ZSA9IHZhbHVlLnN1YnN0cmluZygwLCBzaWduYXR1cmVTdGFydFBvcylcbiAgY29uc3Qgc2lnbmF0dXJlID0gdmFsdWUuc3Vic3RyaW5nKHNpZ25hdHVyZVN0YXJ0UG9zICsgMSlcbiAgaWYgKHNpZ25hdHVyZS5sZW5ndGggIT09IDQ0IHx8ICFzaWduYXR1cmUuZW5kc1dpdGgoJz0nKSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cbiAgY29uc3Qgc2VjcmV0S2V5ID0gYXdhaXQgZ2V0Q3J5cHRvS2V5KHNlY3JldClcbiAgY29uc3QgaXNWZXJpZmllZCA9IGF3YWl0IHZlcmlmeVNpZ25hdHVyZShzaWduYXR1cmUsIHNpZ25lZFZhbHVlLCBzZWNyZXRLZXkpXG4gIHJldHVybiBpc1ZlcmlmaWVkID8gc2lnbmVkVmFsdWUgOiBmYWxzZVxufVxuIl0sIm5hbWVzIjpbInN1YnRsZSIsInZlcmlmeVNpZ25hdHVyZSIsImJhc2U2NFNpZ25hdHVyZSIsInZhbHVlIiwic2VjcmV0Iiwic2lnbmF0dXJlQmluU3RyIiwiYXRvYiIsInNpZ25hdHVyZSIsIlVpbnQ4QXJyYXkiLCJsZW5ndGgiLCJpIiwibGVuIiwiY2hhckNvZGVBdCIsInZlcmlmeSIsImFsZ29yaXRobSIsIlRleHRFbmNvZGVyIiwiZW5jb2RlIiwiZSIsIl9zZXJpYWxpemUiLCJrZXkiLCJvcHQiLCJjb29raWUiLCJwcmVmaXgiLCJzdGFydHNXaXRoIiwic2VjdXJlIiwicGF0aCIsImRvbWFpbiIsInVuZGVmaW5lZCIsIm1heEFnZSIsIkVycm9yIiwiTWF0aCIsImZsb29yIiwiZXhwaXJlcyIsImdldFRpbWUiLCJEYXRlIiwibm93IiwidG9VVENTdHJpbmciLCJodHRwT25seSIsInNhbWVTaXRlIiwiY2hhckF0IiwidG9VcHBlckNhc2UiLCJzbGljZSIsInBhcnRpdGlvbmVkIiwibmFtZSIsImhhc2giLCJnZXRDcnlwdG9LZXkiLCJzZWNyZXRCdWYiLCJpbXBvcnRLZXkiLCJtYWtlU2lnbmF0dXJlIiwic2lnbiIsImJ0b2EiLCJTdHJpbmciLCJmcm9tQ2hhckNvZGUiLCJzaWduQ29va2llVmFsdWUiLCJlbmNvZGVVUklDb21wb25lbnQiLCJkZWNvZGVVUklDb21wb25lbnQiLCJzZXJpYWxpemVDb29raWUiLCJzZXJpYWxpemVTaWduZWRDb29raWUiLCJnZXRDb29raWVLZXkiLCJmaW5hbEtleSIsInRyeURlY29kZSIsInN0ciIsImluY2x1ZGVzIiwicGFyc2VDb29raWVzIiwiVHlwZUVycm9yIiwiY29va2llcyIsIk1hcCIsImluZGV4IiwiZXFJZHgiLCJpbmRleE9mIiwiZW5kSWR4IiwibGFzdEluZGV4T2YiLCJ0cmltIiwiaGFzIiwidmFsIiwiY29kZVBvaW50QXQiLCJzZXQiLCJnZXRTaWduZWRDb29raWUiLCJoZWFkZXJzIiwiY29va2llSGVhZGVyIiwiZ2V0IiwicGFyc2VkQ29va2llcyIsInNpZ25hdHVyZVN0YXJ0UG9zIiwic2lnbmVkVmFsdWUiLCJzdWJzdHJpbmciLCJlbmRzV2l0aCIsInNlY3JldEtleSIsImlzVmVyaWZpZWQiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLE1BQU0sUUFBUSxXQUFVO0FBMkZqQyxPQUFPLE1BQU1DLGtCQUFrQixPQUFPQyxpQkFBeUJDLE9BQWVDO0lBQzVFLElBQUk7UUFDRixNQUFNQyxrQkFBa0JDLEtBQUtKO1FBQzdCLE1BQU1LLFlBQVksSUFBSUMsV0FBV0gsZ0JBQWdCSSxNQUFNO1FBQ3ZELElBQUssSUFBSUMsSUFBSSxHQUFHQyxNQUFNTixnQkFBZ0JJLE1BQU0sRUFBRUMsSUFBSUMsS0FBS0QsSUFBSztZQUMxREgsU0FBUyxDQUFDRyxFQUFFLEdBQUdMLGdCQUFnQk8sVUFBVSxDQUFDRjtRQUM1QztRQUNBLE9BQU8sTUFBTVYsT0FBT2EsTUFBTSxDQUFDQyxXQUFXVixRQUFRRyxXQUFXLElBQUlRLGNBQWNDLE1BQU0sQ0FBQ2I7SUFDcEYsRUFBRSxPQUFPYyxHQUFHO1FBQ1YsT0FBTztJQUNUO0FBQ0YsRUFBQztBQUVELE1BQU1DLGFBQWEsQ0FBQ0MsS0FBYWhCLE9BQWVpQixNQUFxQixDQUFDLENBQUM7SUFDckUsSUFBSUM7SUFFSixJQUFJRCxLQUFLRSxXQUFXLFVBQVU7UUFDNUJELFNBQVMsR0FBRyxDQUFDLFNBQVMsRUFBRUYsS0FBSyxDQUFDLENBQUMsRUFBRWhCLE9BQU87SUFDMUMsT0FBTyxJQUFJaUIsS0FBS0UsV0FBVyxRQUFRO1FBQ2pDRCxTQUFTLEdBQUcsQ0FBQyxPQUFPLEVBQUVGLEtBQUssQ0FBQyxDQUFDLEVBQUVoQixPQUFPO0lBQ3hDLE9BQU87UUFDTGtCLFNBQVMsR0FBR0YsSUFBSSxDQUFDLEVBQUVoQixPQUFPO0lBQzVCO0lBRUEsSUFBSWdCLElBQUlJLFVB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
|