Skip to content

Commit 31c857a

Browse files
committed
Basic plugin and token of the extension
1 parent 05c54a5 commit 31c857a

File tree

4 files changed

+71
-3
lines changed

4 files changed

+71
-3
lines changed

package.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,9 @@
5656
"watch:labextension": "jupyter labextension watch ."
5757
},
5858
"dependencies": {
59-
"@jupyterlab/application": "^4.0.0"
59+
"@jupyterlab/application": "^4.0.0",
60+
"@jupyterlab/statedb":"^4.0.0",
61+
"@lumino/coreutils": "^2.1.2"
6062
},
6163
"devDependencies": {
6264
"@jupyterlab/builder": "^4.0.0",

src/index.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,26 @@ import {
22
JupyterFrontEnd,
33
JupyterFrontEndPlugin
44
} from '@jupyterlab/application';
5+
import { SecretsManager } from './manager';
6+
import { ISecretsConnector, ISecretsManager } from './token';
57

68
/**
79
* Initialization data for the jupyter-secrets-manager extension.
810
*/
9-
const plugin: JupyterFrontEndPlugin<void> = {
11+
const plugin: JupyterFrontEndPlugin<ISecretsManager> = {
1012
id: 'jupyter-secrets-manager:plugin',
1113
description: 'A JupyterLab extension to manage secrets.',
1214
autoStart: true,
13-
activate: (app: JupyterFrontEnd) => {
15+
provides: ISecretsManager,
16+
requires: [ISecretsConnector],
17+
activate: (
18+
app: JupyterFrontEnd,
19+
connector: ISecretsConnector
20+
): ISecretsManager => {
1421
console.log('JupyterLab extension jupyter-secrets-manager is activated!');
22+
return new SecretsManager({ connector });
1523
}
1624
};
1725

26+
export * from './token';
1827
export default plugin;

src/manager.ts

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import { ISecret, ISecretsConnector, ISecretsManager } from './token';
2+
3+
export namespace SecretsManager {
4+
export interface IOptions {
5+
connector: ISecretsConnector;
6+
}
7+
}
8+
export class SecretsManager implements ISecretsManager {
9+
constructor(options: SecretsManager.IOptions) {
10+
this._connector = options.connector;
11+
}
12+
13+
async get(id: string): Promise<ISecret | undefined> {
14+
return this._connector.fetch(id);
15+
}
16+
17+
async set(secret: ISecret): Promise<void> {
18+
this._connector.save(secret.id, secret);
19+
}
20+
21+
async remove(id: string): Promise<void> {
22+
this._connector.remove(id);
23+
}
24+
25+
async list(namespace: string): Promise<string[]> {
26+
return (await this._connector.list(namespace)).ids;
27+
}
28+
29+
private _connector: ISecretsConnector;
30+
}

src/token.ts

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import { IDataConnector } from '@jupyterlab/statedb';
2+
import { Token } from '@lumino/coreutils';
3+
4+
export interface ISecret {
5+
id: string;
6+
value: string;
7+
namespace: string;
8+
}
9+
10+
export interface ISecretsConnector extends IDataConnector<ISecret> {}
11+
12+
export const ISecretsConnector = new Token<ISecretsConnector>(
13+
'jupyter-secret-manager:connector',
14+
'The secrets manager connector'
15+
);
16+
17+
export interface ISecretsManager {
18+
get(id: string): Promise<ISecret | undefined>;
19+
set(secret: ISecret): Promise<void>;
20+
remove(id: string): Promise<void>;
21+
list(namespace: string): Promise<string[]>;
22+
}
23+
24+
export const ISecretsManager = new Token<ISecretsManager>(
25+
'jupyter-secret-manager:manager',
26+
'The secrets manager'
27+
);

0 commit comments

Comments
 (0)