@adonisjs/session 7.7.0 → 8.0.0-next.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/build/cookie-aLBno-zS.js +31 -0
- package/build/debug-Ba-0Cgn9.js +3 -0
- package/build/dynamodb-CU8BrQfU.js +72 -0
- package/build/factories/main.d.ts +1 -1
- package/build/factories/main.js +25 -49
- package/build/factories/session_middleware_factory.d.ts +2 -2
- package/build/file-CNxCs957.js +71 -0
- package/build/index.d.ts +6 -7
- package/build/index.js +5 -33
- package/build/providers/session_provider.d.ts +2 -3
- package/build/providers/session_provider.js +27 -64
- package/build/redis-Bcjum7z7.js +36 -0
- package/build/session-CBqhcnvJ.js +209 -0
- package/build/session-Cc1LPXRc.js +107 -0
- package/build/session_middleware-CS0R7hmq.js +27 -0
- package/build/src/client.d.ts +46 -10
- package/build/src/client.js +38 -9
- package/build/src/debug.d.ts +1 -1
- package/build/src/define_config.d.ts +49 -10
- package/build/src/errors.d.ts +20 -9
- package/build/src/plugins/edge.d.ts +16 -2
- package/build/src/plugins/edge.js +74 -126
- package/build/src/plugins/japa/api_client.d.ts +22 -4
- package/build/src/plugins/japa/api_client.js +76 -97
- package/build/src/plugins/japa/browser_client.d.ts +18 -4
- package/build/src/plugins/japa/browser_client.js +58 -82
- package/build/src/session.d.ts +170 -65
- package/build/src/session_middleware.d.ts +28 -5
- package/build/src/session_middleware.js +5 -11
- package/build/src/stores/cookie.d.ts +41 -7
- package/build/src/stores/dynamodb.d.ts +44 -8
- package/build/src/stores/file.d.ts +34 -8
- package/build/src/stores/memory.d.ts +32 -15
- package/build/src/stores/redis.d.ts +39 -16
- package/build/src/types.d.ts +151 -82
- package/build/src/types.js +1 -1
- package/build/src/values_store.d.ts +113 -21
- package/build/values_store-smX0sQBJ.js +78 -0
- package/package.json +57 -56
- package/build/chunk-5ECC6OWF.js +0 -8
- package/build/chunk-5ECC6OWF.js.map +0 -1
- package/build/chunk-6BSSM3HO.js +0 -44
- package/build/chunk-6BSSM3HO.js.map +0 -1
- package/build/chunk-G7KFHA57.js +0 -59
- package/build/chunk-G7KFHA57.js.map +0 -1
- package/build/chunk-GCO66PQD.js +0 -85
- package/build/chunk-GCO66PQD.js.map +0 -1
- package/build/chunk-PZ5AY32C.js +0 -10
- package/build/chunk-PZ5AY32C.js.map +0 -1
- package/build/chunk-Q24L5XPC.js +0 -186
- package/build/chunk-Q24L5XPC.js.map +0 -1
- package/build/chunk-TE5JP3SX.js +0 -151
- package/build/chunk-TE5JP3SX.js.map +0 -1
- package/build/chunk-V3OAEXMJ.js +0 -8
- package/build/chunk-V3OAEXMJ.js.map +0 -1
- package/build/chunk-XP3CBOXR.js +0 -414
- package/build/chunk-XP3CBOXR.js.map +0 -1
- package/build/commands/commands.json +0 -1
- package/build/commands/main.d.ts +0 -4
- package/build/commands/main.js +0 -36
- package/build/commands/make_session_table.d.ts +0 -9
- package/build/commands/make_session_table.js +0 -21
- package/build/commands/make_session_table.js.map +0 -1
- package/build/cookie-3C33DMWA.js +0 -57
- package/build/cookie-3C33DMWA.js.map +0 -1
- package/build/database-443FB7MM.js +0 -118
- package/build/database-443FB7MM.js.map +0 -1
- package/build/dynamodb-53YXEFIJ.js +0 -108
- package/build/dynamodb-53YXEFIJ.js.map +0 -1
- package/build/factories/main.js.map +0 -1
- package/build/file-K3GBSVSU.js +0 -117
- package/build/file-K3GBSVSU.js.map +0 -1
- package/build/index.js.map +0 -1
- package/build/make/migration/sessions.stub +0 -26
- package/build/providers/session_provider.js.map +0 -1
- package/build/redis-YGX2CNE2.js +0 -119
- package/build/redis-YGX2CNE2.js.map +0 -1
- package/build/src/client.js.map +0 -1
- package/build/src/plugins/edge.js.map +0 -1
- package/build/src/plugins/japa/api_client.js.map +0 -1
- package/build/src/plugins/japa/browser_client.js.map +0 -1
- package/build/src/session_collection.d.ts +0 -55
- package/build/src/session_middleware.js.map +0 -1
- package/build/src/stores/database.d.ts +0 -55
- package/build/src/types.js.map +0 -1
|
@@ -1,127 +1,75 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
const expression = parser.utils.transformAst(
|
|
75
|
-
parser.utils.generateAST(token.properties.jsArg, token.loc, token.filename),
|
|
76
|
-
token.filename,
|
|
77
|
-
parser
|
|
78
|
-
);
|
|
79
|
-
const key = parser.utils.stringify(expression);
|
|
80
|
-
buffer.writeStatement(
|
|
81
|
-
`if (state.flashMessages.has(['errorsBag', ${key}])) {`,
|
|
82
|
-
token.filename,
|
|
83
|
-
token.loc.start.line
|
|
84
|
-
);
|
|
85
|
-
buffer.writeExpression(
|
|
86
|
-
`let $message = state.flashMessages.get(['errorsBag', ${key}])`,
|
|
87
|
-
token.filename,
|
|
88
|
-
token.loc.start.line
|
|
89
|
-
);
|
|
90
|
-
parser.stack.defineScope();
|
|
91
|
-
parser.stack.defineVariable("$message");
|
|
92
|
-
token.children.forEach((child) => {
|
|
93
|
-
parser.processToken(child, buffer);
|
|
94
|
-
});
|
|
95
|
-
parser.stack.clearScope();
|
|
96
|
-
buffer.writeStatement(`}`, token.filename, token.loc.start.line);
|
|
97
|
-
}
|
|
98
|
-
});
|
|
99
|
-
edge.registerTag({
|
|
100
|
-
tagName: "errors",
|
|
101
|
-
seekable: true,
|
|
102
|
-
block: true,
|
|
103
|
-
compile(parser, buffer, token) {
|
|
104
|
-
buffer.writeStatement(
|
|
105
|
-
`if (state.flashMessages.has('errorsBag')) {`,
|
|
106
|
-
token.filename,
|
|
107
|
-
token.loc.start.line
|
|
108
|
-
);
|
|
109
|
-
buffer.writeExpression(
|
|
110
|
-
`let $messages = state.flashMessages.get('errorsBag')`,
|
|
111
|
-
token.filename,
|
|
112
|
-
token.loc.start.line
|
|
113
|
-
);
|
|
114
|
-
parser.stack.defineScope();
|
|
115
|
-
parser.stack.defineVariable("$messages");
|
|
116
|
-
token.children.forEach((child) => {
|
|
117
|
-
parser.processToken(child, buffer);
|
|
118
|
-
});
|
|
119
|
-
parser.stack.clearScope();
|
|
120
|
-
buffer.writeStatement(`}`, token.filename, token.loc.start.line);
|
|
121
|
-
}
|
|
122
|
-
});
|
|
1
|
+
import { t as debug_default } from "../../debug-Ba-0Cgn9.js";
|
|
2
|
+
const edgePluginSession = (edge) => {
|
|
3
|
+
debug_default("registering session tags with edge");
|
|
4
|
+
edge.registerTag({
|
|
5
|
+
tagName: "flashMessage",
|
|
6
|
+
seekable: true,
|
|
7
|
+
block: true,
|
|
8
|
+
compile(parser, buffer, token) {
|
|
9
|
+
const expression = parser.utils.transformAst(parser.utils.generateAST(token.properties.jsArg, token.loc, token.filename), token.filename, parser);
|
|
10
|
+
const key = parser.utils.stringify(expression);
|
|
11
|
+
buffer.writeStatement(`if (state.flashMessages.has(${key})) {`, token.filename, token.loc.start.line);
|
|
12
|
+
buffer.writeExpression(`let $message = state.flashMessages.get(${key})`, token.filename, token.loc.start.line);
|
|
13
|
+
parser.stack.defineScope();
|
|
14
|
+
parser.stack.defineVariable("$message");
|
|
15
|
+
token.children.forEach((child) => {
|
|
16
|
+
parser.processToken(child, buffer);
|
|
17
|
+
});
|
|
18
|
+
parser.stack.clearScope();
|
|
19
|
+
buffer.writeStatement(`}`, token.filename, token.loc.start.line);
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
edge.registerTag({
|
|
23
|
+
tagName: "inputError",
|
|
24
|
+
seekable: true,
|
|
25
|
+
block: true,
|
|
26
|
+
compile(parser, buffer, token) {
|
|
27
|
+
const expression = parser.utils.transformAst(parser.utils.generateAST(token.properties.jsArg, token.loc, token.filename), token.filename, parser);
|
|
28
|
+
const key = parser.utils.stringify(expression);
|
|
29
|
+
buffer.writeStatement(`if (!!state.flashMessages.get('inputErrorsBag', {})[${key}]) {`, token.filename, token.loc.start.line);
|
|
30
|
+
buffer.writeExpression(`let $messages = state.flashMessages.get('inputErrorsBag', {})[${key}]`, token.filename, token.loc.start.line);
|
|
31
|
+
parser.stack.defineScope();
|
|
32
|
+
parser.stack.defineVariable("$messages");
|
|
33
|
+
token.children.forEach((child) => {
|
|
34
|
+
parser.processToken(child, buffer);
|
|
35
|
+
});
|
|
36
|
+
parser.stack.clearScope();
|
|
37
|
+
buffer.writeStatement(`}`, token.filename, token.loc.start.line);
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
edge.registerTag({
|
|
41
|
+
tagName: "error",
|
|
42
|
+
seekable: true,
|
|
43
|
+
block: true,
|
|
44
|
+
compile(parser, buffer, token) {
|
|
45
|
+
const expression = parser.utils.transformAst(parser.utils.generateAST(token.properties.jsArg, token.loc, token.filename), token.filename, parser);
|
|
46
|
+
const key = parser.utils.stringify(expression);
|
|
47
|
+
buffer.writeStatement(`if (state.flashMessages.has(['errorsBag', ${key}])) {`, token.filename, token.loc.start.line);
|
|
48
|
+
buffer.writeExpression(`let $message = state.flashMessages.get(['errorsBag', ${key}])`, token.filename, token.loc.start.line);
|
|
49
|
+
parser.stack.defineScope();
|
|
50
|
+
parser.stack.defineVariable("$message");
|
|
51
|
+
token.children.forEach((child) => {
|
|
52
|
+
parser.processToken(child, buffer);
|
|
53
|
+
});
|
|
54
|
+
parser.stack.clearScope();
|
|
55
|
+
buffer.writeStatement(`}`, token.filename, token.loc.start.line);
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
edge.registerTag({
|
|
59
|
+
tagName: "errors",
|
|
60
|
+
seekable: true,
|
|
61
|
+
block: true,
|
|
62
|
+
compile(parser, buffer, token) {
|
|
63
|
+
buffer.writeStatement(`if (state.flashMessages.has('errorsBag')) {`, token.filename, token.loc.start.line);
|
|
64
|
+
buffer.writeExpression(`let $messages = state.flashMessages.get('errorsBag')`, token.filename, token.loc.start.line);
|
|
65
|
+
parser.stack.defineScope();
|
|
66
|
+
parser.stack.defineVariable("$messages");
|
|
67
|
+
token.children.forEach((child) => {
|
|
68
|
+
parser.processToken(child, buffer);
|
|
69
|
+
});
|
|
70
|
+
parser.stack.clearScope();
|
|
71
|
+
buffer.writeStatement(`}`, token.filename, token.loc.start.line);
|
|
72
|
+
}
|
|
73
|
+
});
|
|
123
74
|
};
|
|
124
|
-
export {
|
|
125
|
-
edgePluginSession
|
|
126
|
-
};
|
|
127
|
-
//# sourceMappingURL=edge.js.map
|
|
75
|
+
export { edgePluginSession };
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
import '@japa/plugin-adonisjs';
|
|
1
2
|
import type { PluginFn } from '@japa/runner/types';
|
|
2
3
|
import type { ApplicationService } from '@adonisjs/core/types';
|
|
3
|
-
import { SessionClient } from '../../client.
|
|
4
|
-
import type { SessionData } from '../../types.
|
|
4
|
+
import { SessionClient } from '../../client.ts';
|
|
5
|
+
import type { SessionData } from '../../types.ts';
|
|
5
6
|
declare module '@japa/api-client' {
|
|
6
7
|
interface ApiRequest {
|
|
7
8
|
sessionClient: SessionClient;
|
|
@@ -69,7 +70,24 @@ declare module '@japa/api-client' {
|
|
|
69
70
|
}
|
|
70
71
|
}
|
|
71
72
|
/**
|
|
72
|
-
* Hooks AdonisJS Session with the Japa API client
|
|
73
|
-
*
|
|
73
|
+
* Hooks AdonisJS Session with the Japa API client plugin.
|
|
74
|
+
* Provides session methods and assertions for API testing.
|
|
75
|
+
*
|
|
76
|
+
* @param app - AdonisJS application service
|
|
77
|
+
*
|
|
78
|
+
* @example
|
|
79
|
+
* // Register in test setup
|
|
80
|
+
* import { sessionApiClient } from '@adonisjs/session/plugins/japa/api_client'
|
|
81
|
+
*
|
|
82
|
+
* // Use in API tests
|
|
83
|
+
* test('can authenticate user', async ({ client }) => {
|
|
84
|
+
* const response = await client
|
|
85
|
+
* .post('/login')
|
|
86
|
+
* .withSession({ remember: true })
|
|
87
|
+
* .json({ email: 'user@example.com', password: 'secret' })
|
|
88
|
+
*
|
|
89
|
+
* response.assertSession('userId', 123)
|
|
90
|
+
* response.assertFlashMessage('success', 'Welcome back!')
|
|
91
|
+
* })
|
|
74
92
|
*/
|
|
75
93
|
export declare const sessionApiClient: (app: ApplicationService) => PluginFn;
|
|
@@ -1,101 +1,80 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
} from "
|
|
4
|
-
import "
|
|
5
|
-
import "../../../chunk-5ECC6OWF.js";
|
|
6
|
-
import "../../../chunk-PZ5AY32C.js";
|
|
7
|
-
|
|
8
|
-
// src/plugins/japa/api_client.ts
|
|
1
|
+
import "../../../debug-Ba-0Cgn9.js";
|
|
2
|
+
import "../../../values_store-smX0sQBJ.js";
|
|
3
|
+
import { SessionClient } from "../../client.js";
|
|
4
|
+
import { RuntimeException } from "@adonisjs/core/exceptions";
|
|
9
5
|
import lodash from "@poppinss/utils/lodash";
|
|
10
6
|
import { configProvider } from "@adonisjs/core";
|
|
11
|
-
import
|
|
7
|
+
import "@japa/plugin-adonisjs";
|
|
12
8
|
import { ApiClient, ApiRequest, ApiResponse } from "@japa/api-client";
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
}
|
|
84
|
-
};
|
|
85
|
-
});
|
|
86
|
-
request.teardown(async (response) => {
|
|
87
|
-
const sessionId = response.cookie(config.cookieName);
|
|
88
|
-
response.sessionBag = sessionId ? await response.request.sessionClient.load(sessionId.value) : {
|
|
89
|
-
values: {},
|
|
90
|
-
flashMessages: {}
|
|
91
|
-
};
|
|
92
|
-
await request.sessionClient.destroy(sessionId?.value);
|
|
93
|
-
});
|
|
94
|
-
});
|
|
95
|
-
};
|
|
96
|
-
return pluginFn;
|
|
9
|
+
const sessionApiClient = (app) => {
|
|
10
|
+
const pluginFn = async function() {
|
|
11
|
+
const sessionConfigProvider = app.config.get("session", {});
|
|
12
|
+
const config = await configProvider.resolve(app, sessionConfigProvider);
|
|
13
|
+
if (!config) throw new RuntimeException("Invalid \"config/session.ts\" file. Make sure you are using the \"defineConfig\" method");
|
|
14
|
+
ApiRequest.getter("sessionClient", function() {
|
|
15
|
+
return new SessionClient(config.stores.memory());
|
|
16
|
+
}, true);
|
|
17
|
+
ApiRequest.macro("withSession", function(data) {
|
|
18
|
+
this.sessionClient.merge(data);
|
|
19
|
+
return this;
|
|
20
|
+
});
|
|
21
|
+
ApiRequest.macro("withFlashMessages", function(data) {
|
|
22
|
+
this.sessionClient.flash(data);
|
|
23
|
+
return this;
|
|
24
|
+
});
|
|
25
|
+
ApiResponse.macro("session", function(key) {
|
|
26
|
+
return key ? lodash.get(this.sessionBag.values, key) : this.sessionBag.values;
|
|
27
|
+
});
|
|
28
|
+
ApiResponse.macro("flashMessages", function() {
|
|
29
|
+
return this.sessionBag.flashMessages;
|
|
30
|
+
});
|
|
31
|
+
ApiResponse.macro("flashMessage", function(key) {
|
|
32
|
+
return lodash.get(this.sessionBag.flashMessages, key);
|
|
33
|
+
});
|
|
34
|
+
ApiResponse.macro("assertSession", function(key, value) {
|
|
35
|
+
this.assert.property(this.session(), key);
|
|
36
|
+
if (value !== void 0) this.assert.deepEqual(this.session(key), value);
|
|
37
|
+
});
|
|
38
|
+
ApiResponse.macro("assertSessionMissing", function(key) {
|
|
39
|
+
this.assert.notProperty(this.session(), key);
|
|
40
|
+
});
|
|
41
|
+
ApiResponse.macro("assertFlashMessage", function(key, value) {
|
|
42
|
+
this.assert.property(this.flashMessages(), key);
|
|
43
|
+
if (value !== void 0) this.assert.deepEqual(this.flashMessage(key), value);
|
|
44
|
+
});
|
|
45
|
+
ApiResponse.macro("assertFlashMissing", function(key) {
|
|
46
|
+
this.assert.notProperty(this.flashMessages(), key);
|
|
47
|
+
});
|
|
48
|
+
ApiResponse.macro("assertHasValidationError", function(field) {
|
|
49
|
+
this.assert.property(this.flashMessage("errors"), field);
|
|
50
|
+
});
|
|
51
|
+
ApiResponse.macro("assertDoesNotHaveValidationError", function(field) {
|
|
52
|
+
this.assert.notProperty(this.flashMessage("errors"), field);
|
|
53
|
+
});
|
|
54
|
+
ApiResponse.macro("assertValidationError", function(field, message) {
|
|
55
|
+
this.assert.include(this.flashMessage("errors")?.[field] || [], message);
|
|
56
|
+
});
|
|
57
|
+
ApiResponse.macro("assertValidationErrors", function(field, messages) {
|
|
58
|
+
this.assert.deepEqual(this.flashMessage("errors")?.[field] || [], messages);
|
|
59
|
+
});
|
|
60
|
+
ApiClient.onRequest((request) => {
|
|
61
|
+
request.setup(async () => {
|
|
62
|
+
request.withCookie(config.cookieName, request.sessionClient.sessionId);
|
|
63
|
+
await request.sessionClient.commit();
|
|
64
|
+
return async (error) => {
|
|
65
|
+
if (error) await request.sessionClient.destroy();
|
|
66
|
+
};
|
|
67
|
+
});
|
|
68
|
+
request.teardown(async (response) => {
|
|
69
|
+
const sessionId = response.cookie(config.cookieName);
|
|
70
|
+
response.sessionBag = sessionId ? await response.request.sessionClient.load(sessionId.value) : {
|
|
71
|
+
values: {},
|
|
72
|
+
flashMessages: {}
|
|
73
|
+
};
|
|
74
|
+
await request.sessionClient.destroy(sessionId?.value);
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
};
|
|
78
|
+
return pluginFn;
|
|
97
79
|
};
|
|
98
|
-
export {
|
|
99
|
-
sessionApiClient
|
|
100
|
-
};
|
|
101
|
-
//# sourceMappingURL=api_client.js.map
|
|
80
|
+
export { sessionApiClient };
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
import '@japa/plugin-adonisjs';
|
|
1
2
|
import type { PluginFn } from '@japa/runner/types';
|
|
2
3
|
import type { ApplicationService } from '@adonisjs/core/types';
|
|
3
4
|
import type { CookieOptions as AdonisCookieOptions } from '@adonisjs/core/types/http';
|
|
4
|
-
import { SessionClient } from '../../client.
|
|
5
|
-
import type { SessionData } from '../../types.
|
|
5
|
+
import { SessionClient } from '../../client.ts';
|
|
6
|
+
import type { SessionData } from '../../types.ts';
|
|
6
7
|
declare module 'playwright' {
|
|
7
8
|
interface BrowserContext {
|
|
8
9
|
sessionClient: SessionClient;
|
|
@@ -30,7 +31,20 @@ declare module 'playwright' {
|
|
|
30
31
|
}
|
|
31
32
|
}
|
|
32
33
|
/**
|
|
33
|
-
* Hooks AdonisJS Session with the Japa browser client
|
|
34
|
-
*
|
|
34
|
+
* Hooks AdonisJS Session with the Japa browser client plugin.
|
|
35
|
+
* Provides session methods for browser testing context.
|
|
36
|
+
*
|
|
37
|
+
* @param app - AdonisJS application service
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* // Register in test setup
|
|
41
|
+
* import { sessionBrowserClient } from '@adonisjs/session/plugins/japa/browser_client'
|
|
42
|
+
*
|
|
43
|
+
* // Use in browser tests
|
|
44
|
+
* test('can set session data', async ({ visit }) => {
|
|
45
|
+
* await visit.context().setSession({ userId: 123 })
|
|
46
|
+
* const response = await visit('/profile')
|
|
47
|
+
* // Assert profile page shows user data
|
|
48
|
+
* })
|
|
35
49
|
*/
|
|
36
50
|
export declare const sessionBrowserClient: (app: ApplicationService) => PluginFn;
|
|
@@ -1,89 +1,65 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
} from "
|
|
4
|
-
import "
|
|
5
|
-
import "../../../chunk-5ECC6OWF.js";
|
|
6
|
-
import "../../../chunk-PZ5AY32C.js";
|
|
7
|
-
|
|
8
|
-
// src/plugins/japa/browser_client.ts
|
|
1
|
+
import "../../../debug-Ba-0Cgn9.js";
|
|
2
|
+
import "../../../values_store-smX0sQBJ.js";
|
|
3
|
+
import { SessionClient } from "../../client.js";
|
|
4
|
+
import { RuntimeException } from "@adonisjs/core/exceptions";
|
|
9
5
|
import { configProvider } from "@adonisjs/core";
|
|
10
|
-
import
|
|
6
|
+
import "@japa/plugin-adonisjs";
|
|
11
7
|
import { decoratorsCollection } from "@japa/browser-client";
|
|
12
8
|
function transformSameSiteOption(sameSite) {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
return "Strict";
|
|
18
|
-
}
|
|
19
|
-
if (sameSite === "lax") {
|
|
20
|
-
return "Lax";
|
|
21
|
-
}
|
|
22
|
-
if (sameSite === "none") {
|
|
23
|
-
return "None";
|
|
24
|
-
}
|
|
9
|
+
if (!sameSite) return;
|
|
10
|
+
if (sameSite === true || sameSite === "strict") return "Strict";
|
|
11
|
+
if (sameSite === "lax") return "Lax";
|
|
12
|
+
if (sameSite === "none") return "None";
|
|
25
13
|
}
|
|
26
14
|
function getSessionCookieOptions(config, cookieOptions) {
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
15
|
+
const options = {
|
|
16
|
+
...config.cookie,
|
|
17
|
+
...cookieOptions
|
|
18
|
+
};
|
|
19
|
+
return {
|
|
20
|
+
...options,
|
|
21
|
+
expires: void 0,
|
|
22
|
+
sameSite: transformSameSiteOption(options.sameSite)
|
|
23
|
+
};
|
|
33
24
|
}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
context.setFlashMessages = async function(values) {
|
|
74
|
-
await context.initiateSession();
|
|
75
|
-
context.sessionClient.flash(values);
|
|
76
|
-
await context.sessionClient.commit();
|
|
77
|
-
};
|
|
78
|
-
context.on("close", async function() {
|
|
79
|
-
await context.sessionClient.destroy();
|
|
80
|
-
});
|
|
81
|
-
}
|
|
82
|
-
});
|
|
83
|
-
};
|
|
84
|
-
return pluginFn;
|
|
25
|
+
const sessionBrowserClient = (app) => {
|
|
26
|
+
const pluginFn = async function() {
|
|
27
|
+
const sessionConfigProvider = app.config.get("session", {});
|
|
28
|
+
const config = await configProvider.resolve(app, sessionConfigProvider);
|
|
29
|
+
if (!config) throw new RuntimeException("Invalid \"config/session.ts\" file. Make sure you are using the \"defineConfig\" method");
|
|
30
|
+
decoratorsCollection.register({ context(context) {
|
|
31
|
+
context.sessionClient = new SessionClient(config.stores.memory());
|
|
32
|
+
context.initiateSession = async function(options) {
|
|
33
|
+
const sessionId = await context.getCookie(config.cookieName);
|
|
34
|
+
if (sessionId) {
|
|
35
|
+
context.sessionClient.sessionId = sessionId;
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
await context.setCookie(config.cookieName, context.sessionClient.sessionId, getSessionCookieOptions(config, options));
|
|
39
|
+
};
|
|
40
|
+
context.getSession = async function() {
|
|
41
|
+
await context.initiateSession();
|
|
42
|
+
return (await context.sessionClient.load()).values;
|
|
43
|
+
};
|
|
44
|
+
context.getFlashMessages = async function() {
|
|
45
|
+
await context.initiateSession();
|
|
46
|
+
return (await context.sessionClient.load()).flashMessages;
|
|
47
|
+
};
|
|
48
|
+
context.setSession = async function(values) {
|
|
49
|
+
await context.initiateSession();
|
|
50
|
+
context.sessionClient.merge(values);
|
|
51
|
+
await context.sessionClient.commit();
|
|
52
|
+
};
|
|
53
|
+
context.setFlashMessages = async function(values) {
|
|
54
|
+
await context.initiateSession();
|
|
55
|
+
context.sessionClient.flash(values);
|
|
56
|
+
await context.sessionClient.commit();
|
|
57
|
+
};
|
|
58
|
+
context.on("close", async function() {
|
|
59
|
+
await context.sessionClient.destroy();
|
|
60
|
+
});
|
|
61
|
+
} });
|
|
62
|
+
};
|
|
63
|
+
return pluginFn;
|
|
85
64
|
};
|
|
86
|
-
export {
|
|
87
|
-
sessionBrowserClient
|
|
88
|
-
};
|
|
89
|
-
//# sourceMappingURL=browser_client.js.map
|
|
65
|
+
export { sessionBrowserClient };
|