connect-dynamodb icon indicating copy to clipboard operation
connect-dynamodb copied to clipboard

feat: Support for nested values in SpecialKey

Open Hyuga-Tsukui opened this issue 1 year ago • 1 comments

Description:

This pull request introduces the capability to use SpecialKey for specifying values in nested structures within sessions, enhancing the flexibility of our session management. The primary motivation for this change is to support complex querying scenarios, such as cross-querying session data by user IDs, which are stored in nested objects within session structures.

Key Changes:

  1. Nested Structure Support: Previously, accessing nested attributes like userId within a user object in the session data was not possible with SpecialKey. This update enables this functionality, allowing SpecialKey to target nested attributes.

  2. Compatibility and Testing:

    • The changes maintain backward compatibility and do not alter existing functionalities.
    • New tests have been added to ensure that SpecialKey can now handle nested attributes without breaking existing functionalities.

Use Case: Consider a session structured as follows:

{
  "sess": {
    "cookie": "...",
    "user": {
      "id": "uid-00001",
      "name": "..."
    }
  }
}

set special keys.

  const store = new DynamoDBStore({
    client: client,
    table: tableName,
    specialKeys: [
      {
        name: "user.id",
        type: "S",
      },
    ],
  });

dynamodb-client query output

Item: {
    id: { S: 'sess:0.45441392681127013' },
    userId: { S: 'uid-00001' }, // convert key path to camel case.
    expires: { N: '1713351239' },
    type: { S: 'connect-session' },
    sess: {
      S: '{"cookie":{"maxAge":2000},"name":"0.46261875390220175","user":{"id":"uid-00001'"}}'
    },
  }

With the current system, it is impossible to set userId as a SpecialKey for purposes like querying in DynamoDB's Global Secondary Indexes (GSI) for cross-session user data retrieval. This update addresses such limitations by allowing userId to be specified as a SpecialKey.

Impact: This enhancement will significantly improve our ability to perform more complex queries on session data, facilitating better data management and retrieval based on user-specific or other nested session attributes.

Hyuga-Tsukui avatar Apr 17 '24 10:04 Hyuga-Tsukui

This pull request actually adds this important feature and also corrects an important bug in how it calculates session expiration (line 348-349).

I respectfully urge @ca98am79 to please merge this into master build and release an update to this IMPORTANT library.

tfrancois avatar Nov 13 '24 00:11 tfrancois