@olane/o-storage 0.6.13 → 0.7.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/README.md +0 -86
- package/dist/src/placeholder.tool.d.ts +2 -2
- package/dist/src/placeholder.tool.d.ts.map +1 -1
- package/dist/src/providers/dht-storage-provider.tool.d.ts +3 -2
- package/dist/src/providers/dht-storage-provider.tool.d.ts.map +1 -1
- package/dist/src/providers/disk-storage-provider.tool.d.ts +3 -3
- package/dist/src/providers/disk-storage-provider.tool.d.ts.map +1 -1
- package/dist/src/providers/index.d.ts +1 -0
- package/dist/src/providers/index.d.ts.map +1 -1
- package/dist/src/providers/index.js +1 -0
- package/dist/src/providers/memory-storage-provider.tool.d.ts +3 -2
- package/dist/src/providers/memory-storage-provider.tool.d.ts.map +1 -1
- package/dist/src/providers/o-lane.storage.d.ts +5 -0
- package/dist/src/providers/o-lane.storage.d.ts.map +1 -0
- package/dist/src/providers/o-lane.storage.js +11 -0
- package/dist/src/providers/secure-storage-provider.tool.d.ts +3 -2
- package/dist/src/providers/secure-storage-provider.tool.d.ts.map +1 -1
- package/dist/src/providers/storage-provider.tool.d.ts +4 -4
- package/dist/src/providers/storage-provider.tool.d.ts.map +1 -1
- package/dist/src/providers/storage-provider.tool.js +4 -37
- package/dist/src/router/storage.resolve-request.d.ts +6 -0
- package/dist/src/router/storage.resolve-request.d.ts.map +1 -0
- package/dist/src/router/storage.resolve-request.js +1 -0
- package/dist/src/router/storage.resolver.d.ts +11 -0
- package/dist/src/router/storage.resolver.d.ts.map +1 -0
- package/dist/src/router/storage.resolver.js +65 -0
- package/dist/src/storage.tool.d.ts +5 -10
- package/dist/src/storage.tool.d.ts.map +1 -1
- package/dist/src/storage.tool.js +31 -28
- package/dist/test/placeholder.spec.js +18 -19
- package/package.json +8 -8
- package/dist/src/resolvers/placeholder.resolver.d.ts +0 -6
- package/dist/src/resolvers/placeholder.resolver.d.ts.map +0 -1
- package/dist/src/resolvers/placeholder.resolver.js +0 -10
package/README.md
CHANGED
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
TLDR; we created a forked MCP version that is faster, better, and cheaper. [Link to get started]
|
|
2
|
-
|
|
3
|
-
## What is MCP Missing?
|
|
4
|
-
|
|
5
|
-
### **Today / Problem Description**
|
|
6
|
-
|
|
7
|
-
MCP servers are built to enable LLM / AI systems to synthesize workflows from complex tasks. This means MCPs will work great if…
|
|
8
|
-
|
|
9
|
-
1. You have built your MCP well (example: *as an intention-based tool, not as an API wrapper)*
|
|
10
|
-
1. *You actively maintain* documentation to support *how* to use your services
|
|
11
|
-
2. LLM / AI understands how to synthesize plans around small workflows using the tools provided
|
|
12
|
-
2. You pay for intelligent models that can reason / do chain of thought processing.
|
|
13
|
-
|
|
14
|
-
Every LLM / AI system will need to rerun this, every time. Today it has no working memory on the workflows/plans it runs.
|
|
15
|
-
|
|
16
|
-
We asked ourselves…”why are these plans and workflows being thrown out?”
|
|
17
|
-
|
|
18
|
-
### **Olane + MCP = oMCP**
|
|
19
|
-
|
|
20
|
-
We have forked the MCP client & server to capture and re-use these workflows, reducing intelligence requirements and improving MCP completion by X%. [Link to the repo]
|
|
21
|
-
|
|
22
|
-
## How did we do this?
|
|
23
|
-
|
|
24
|
-
We centered our focus on these problems:
|
|
25
|
-
|
|
26
|
-
1. How can we enable smaller models to succeed just like bigger ones?
|
|
27
|
-
2. How can we reduce waste / reduce token usage?
|
|
28
|
-
3. How can we make AI - MCP usage more deterministic?
|
|
29
|
-
4. How can we improve the speed of MCP usage?
|
|
30
|
-
|
|
31
|
-
Like teaching a small child, we learned that by simply following the KISS model (KISS → “keep it simple stupid”), we achieved all of this and more.
|
|
32
|
-
|
|
33
|
-
> Smaller AI models need less noise and more clear instruction to succeed. In other words, “spell it out for them”
|
|
34
|
-
>
|
|
35
|
-
|
|
36
|
-
<aside>
|
|
37
|
-
💡
|
|
38
|
-
|
|
39
|
-
*Engaging / thoughtful hook? Brendon scratchpad*
|
|
40
|
-
|
|
41
|
-
How do you get the *right* context from an MCP server to complete your task?
|
|
42
|
-
|
|
43
|
-
- Do you just throw everything at it? → No, this is wasteful
|
|
44
|
-
- Do you try to condense the knowledge to cost optimize? → Maybe…but how without data loss
|
|
45
|
-
- Do you try to organize MCP usage and learn from similar use-cases? Let’s try it and see what happens…
|
|
46
|
-
</aside>
|
|
47
|
-
|
|
48
|
-

|
|
49
|
-
|
|
50
|
-

|
|
51
|
-
|
|
52
|
-
### Breaking it down further…
|
|
53
|
-
|
|
54
|
-
We combine large model successes + failures + a little search to help give small models a helping hand in achieving their dreams.
|
|
55
|
-
|
|
56
|
-
<aside>
|
|
57
|
-
💡
|
|
58
|
-
|
|
59
|
-
We learn from past successes & failures to create few shot RL guidelines on how to best utilize the MCP server.
|
|
60
|
-
|
|
61
|
-
</aside>
|
|
62
|
-
|
|
63
|
-
**Example**:
|
|
64
|
-
|
|
65
|
-
```
|
|
66
|
-
“Get my latest pull requests”
|
|
67
|
-
Results in the following steps:
|
|
68
|
-
|
|
69
|
-
1. Client connects to MCP server with an “intent” + “model”
|
|
70
|
-
2. The MCP server searches for past success, failure and relevant tool methods
|
|
71
|
-
3. Client receives the package and creates new "workflow" tool uses
|
|
72
|
-
4. Execute!
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
### So how does this meet our goals?
|
|
76
|
-
|
|
77
|
-
1. Smaller model support → more relevant / clear context is now achieved
|
|
78
|
-
2. Reduce token usage → avoid sending irrelevant context when possible / refine tool offerings & also reduce model size requirements
|
|
79
|
-
3. More deterministic → by learning from past failures & successes, we know how to stay within the bounds of success with clear guardrails
|
|
80
|
-
4. Speed improvement → less tokens to process = more speed
|
|
81
|
-
|
|
82
|
-
### Examples
|
|
83
|
-
|
|
84
|
-
1. Github example → what models can we test / prove to how it works?
|
|
85
|
-
2. Figma example → same as above ^^
|
|
86
|
-
3. Slack / more complex examples → same as above ^
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { oToolConfig } from '@olane/o-tool';
|
|
2
1
|
import { MemoryStorageProvider } from './providers/memory-storage-provider.tool.js';
|
|
3
2
|
import { PlaceholderPutRequest } from './interfaces/placeholder-put.request.js';
|
|
4
3
|
import { PlaceholderPutResponse } from './interfaces/placeholder-put.response.js';
|
|
4
|
+
import { oNodeToolConfig } from '@olane/o-node';
|
|
5
5
|
export declare class PlaceholderTool extends MemoryStorageProvider {
|
|
6
|
-
constructor(config:
|
|
6
|
+
constructor(config: oNodeToolConfig);
|
|
7
7
|
myTools(): Promise<string[]>;
|
|
8
8
|
_tool_put(request: PlaceholderPutRequest): Promise<PlaceholderPutResponse>;
|
|
9
9
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"placeholder.tool.d.ts","sourceRoot":"","sources":["../../src/placeholder.tool.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"placeholder.tool.d.ts","sourceRoot":"","sources":["../../src/placeholder.tool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,6CAA6C,CAAC;AACpF,OAAO,EAAE,qBAAqB,EAAE,MAAM,yCAAyC,CAAC;AAChF,OAAO,EAAE,sBAAsB,EAAE,MAAM,0CAA0C,CAAC;AAElF,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,qBAAa,eAAgB,SAAQ,qBAAqB;gBAC5C,MAAM,EAAE,eAAe;IAQ7B,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAK5B,SAAS,CACb,OAAO,EAAE,qBAAqB,GAC7B,OAAO,CAAC,sBAAsB,CAAC;CA8DnC"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ToolResult } from '@olane/o-tool';
|
|
2
2
|
import { StorageProviderTool } from './storage-provider.tool.js';
|
|
3
3
|
import { oRequest } from '@olane/o-core';
|
|
4
4
|
import { GetDataResponse } from '../interfaces/get-data.response.js';
|
|
5
|
+
import { oNodeToolConfig } from '@olane/o-node';
|
|
5
6
|
export declare class DhtStorageProvider extends StorageProviderTool {
|
|
6
|
-
constructor(config:
|
|
7
|
+
constructor(config: oNodeToolConfig);
|
|
7
8
|
_tool_put(request: oRequest): Promise<ToolResult>;
|
|
8
9
|
_tool_get(request: oRequest): Promise<GetDataResponse>;
|
|
9
10
|
_tool_delete(request: oRequest): Promise<ToolResult>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dht-storage-provider.tool.d.ts","sourceRoot":"","sources":["../../../src/providers/dht-storage-provider.tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"dht-storage-provider.tool.d.ts","sourceRoot":"","sources":["../../../src/providers/dht-storage-provider.tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAY,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEnD,OAAO,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,qBAAa,kBAAmB,SAAQ,mBAAmB;gBAC7C,MAAM,EAAE,eAAe;IAS7B,SAAS,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC;IAIjD,SAAS,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,eAAe,CAAC;IAItD,YAAY,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC;IAIpD,SAAS,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC;CAGxD"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ToolResult } from '@olane/o-tool';
|
|
2
2
|
import { StorageProviderTool } from './storage-provider.tool.js';
|
|
3
3
|
import { oAddress, oRequest } from '@olane/o-core';
|
|
4
4
|
import { GetDataResponse } from '../interfaces/get-data.response.js';
|
|
5
|
-
|
|
5
|
+
import { oNodeToolConfig } from '@olane/o-node';
|
|
6
|
+
export interface DiskStorageConfig extends oNodeToolConfig {
|
|
6
7
|
storageDir?: string;
|
|
7
8
|
address?: oAddress;
|
|
8
9
|
}
|
|
@@ -41,5 +42,4 @@ export declare class DiskStorageProvider extends StorageProviderTool {
|
|
|
41
42
|
*/
|
|
42
43
|
_tool_has(request: oRequest): Promise<ToolResult>;
|
|
43
44
|
}
|
|
44
|
-
export {};
|
|
45
45
|
//# sourceMappingURL=disk-storage-provider.tool.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"disk-storage-provider.tool.d.ts","sourceRoot":"","sources":["../../../src/providers/disk-storage-provider.tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"disk-storage-provider.tool.d.ts","sourceRoot":"","sources":["../../../src/providers/disk-storage-provider.tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAuB,QAAQ,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAIxE,OAAO,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAGhD,MAAM,WAAW,iBAAkB,SAAQ,eAAe;IACxD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,QAAQ,CAAC;CACpB;AAOD,qBAAa,mBAAoB,SAAQ,mBAAmB;IAC1D,OAAO,CAAC,UAAU,CAAS;gBAEf,MAAM,EAAE,iBAAiB;IAarC;;OAEG;cACa,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IAQjD;;OAEG;IACH,SAAS,CAAC,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM;IAM1C;;;;OAIG;IACG,SAAS,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC;IA0BvD;;;;OAIG;IACG,SAAS,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,eAAe,CAAC;IAW5D;;;OAGG;IACG,YAAY,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC;IAyB1D;;;;OAIG;IACG,SAAS,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC;CAyBxD"}
|
|
@@ -3,4 +3,5 @@ export * from './memory-storage-provider.tool.js';
|
|
|
3
3
|
export * from './secure-storage-provider.tool.js';
|
|
4
4
|
export * from './storage-provider.tool.js';
|
|
5
5
|
export * from './dht-storage-provider.tool.js';
|
|
6
|
+
export * from './o-lane.storage.js';
|
|
6
7
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/index.ts"],"names":[],"mappings":"AAAA,cAAc,iCAAiC,CAAC;AAChD,cAAc,mCAAmC,CAAC;AAClD,cAAc,mCAAmC,CAAC;AAClD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,gCAAgC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/index.ts"],"names":[],"mappings":"AAAA,cAAc,iCAAiC,CAAC;AAChD,cAAc,mCAAmC,CAAC;AAClD,cAAc,mCAAmC,CAAC;AAClD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,qBAAqB,CAAC"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { ToolResult } from '@olane/o-tool';
|
|
2
2
|
import { StorageProviderTool } from './storage-provider.tool.js';
|
|
3
|
-
import {
|
|
3
|
+
import { oRequest } from '@olane/o-core';
|
|
4
4
|
import { GetDataResponse } from '../interfaces/get-data.response.js';
|
|
5
|
+
import { oNodeConfig } from '@olane/o-node';
|
|
5
6
|
export declare class MemoryStorageProvider extends StorageProviderTool {
|
|
6
7
|
private storage;
|
|
7
|
-
constructor(config:
|
|
8
|
+
constructor(config: oNodeConfig);
|
|
8
9
|
/**
|
|
9
10
|
* Store data in memory
|
|
10
11
|
* @param key The key to store the data under
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-storage-provider.tool.d.ts","sourceRoot":"","sources":["../../../src/providers/memory-storage-provider.tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,
|
|
1
|
+
{"version":3,"file":"memory-storage-provider.tool.d.ts","sourceRoot":"","sources":["../../../src/providers/memory-storage-provider.tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAY,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEnD,OAAO,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AACrE,OAAO,EAAE,WAAW,EAAmB,MAAM,eAAe,CAAC;AAE7D,qBAAa,qBAAsB,SAAQ,mBAAmB;IAC5D,OAAO,CAAC,OAAO,CAAsB;gBACzB,MAAM,EAAE,WAAW;IAU/B;;;;OAIG;IACG,SAAS,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC;IAQvD;;;;OAIG;IACG,SAAS,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,eAAe,CAAC;IAa5D;;;OAGG;IACG,YAAY,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC;IAQ1D;;;;OAIG;IACG,SAAS,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC;CAMxD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"o-lane.storage.d.ts","sourceRoot":"","sources":["../../../src/providers/o-lane.storage.ts"],"names":[],"mappings":"AACA,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACpB,MAAM,iCAAiC,CAAC;AAEzC,qBAAa,YAAa,SAAQ,mBAAmB;gBACvC,MAAM,EAAE,iBAAiB;CAOtC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { oAddress } from '@olane/o-core';
|
|
2
|
+
import { DiskStorageProvider, } from './disk-storage-provider.tool.js';
|
|
3
|
+
export class oLaneStorage extends DiskStorageProvider {
|
|
4
|
+
constructor(config) {
|
|
5
|
+
super({
|
|
6
|
+
...config,
|
|
7
|
+
address: oAddress.lane(),
|
|
8
|
+
description: 'Disk storage provider',
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ToolResult } from '@olane/o-tool';
|
|
2
2
|
import { oAddress, oRequest } from '@olane/o-core';
|
|
3
3
|
import { GetDataResponse } from '../interfaces/get-data.response.js';
|
|
4
4
|
import { DiskStorageProvider } from './disk-storage-provider.tool.js';
|
|
5
|
-
|
|
5
|
+
import { oNodeToolConfig } from '@olane/o-node';
|
|
6
|
+
interface DiskStorageConfig extends oNodeToolConfig {
|
|
6
7
|
storageDir?: string;
|
|
7
8
|
address?: oAddress;
|
|
8
9
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"secure-storage-provider.tool.d.ts","sourceRoot":"","sources":["../../../src/providers/secure-storage-provider.tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"secure-storage-provider.tool.d.ts","sourceRoot":"","sources":["../../../src/providers/secure-storage-provider.tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAGnD,OAAO,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAGhD,UAAU,iBAAkB,SAAQ,eAAe;IACjD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,QAAQ,CAAC;CACpB;AAOD,qBAAa,qBAAsB,SAAQ,mBAAmB;gBAChD,MAAM,EAAE,iBAAiB;IASrC;;;;OAIG;IACG,SAAS,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC;IAoCvD;;;;OAIG;IACG,SAAS,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,eAAe,CAAC;CAsB7D"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { ToolResult } from '@olane/o-tool';
|
|
2
|
+
import { oRequest } from '@olane/o-core';
|
|
3
3
|
import { GetDataResponse } from '../interfaces/get-data.response.js';
|
|
4
|
-
|
|
4
|
+
import { oLaneTool } from '@olane/o-lane';
|
|
5
|
+
export declare abstract class StorageProviderTool extends oLaneTool {
|
|
5
6
|
abstract _tool_put(request: oRequest): Promise<ToolResult>;
|
|
6
7
|
abstract _tool_get(request: oRequest): Promise<GetDataResponse>;
|
|
7
8
|
abstract _tool_delete(request: oRequest): Promise<ToolResult>;
|
|
8
9
|
abstract _tool_has(request: oRequest): Promise<ToolResult>;
|
|
9
|
-
applyBridgeTransports(address: oAddress, request: oRequest): Promise<oResponse>;
|
|
10
10
|
initialize(): Promise<void>;
|
|
11
11
|
}
|
|
12
12
|
//# sourceMappingURL=storage-provider.tool.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage-provider.tool.d.ts","sourceRoot":"","sources":["../../../src/providers/storage-provider.tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"storage-provider.tool.d.ts","sourceRoot":"","sources":["../../../src/providers/storage-provider.tool.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AACrE,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAG1C,8BAAsB,mBAAoB,SAAQ,SAAS;IACzD,QAAQ,CAAC,SAAS,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC;IAE1D,QAAQ,CAAC,SAAS,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,eAAe,CAAC;IAE/D,QAAQ,CAAC,YAAY,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC;IAE7D,QAAQ,CAAC,SAAS,CAAC,OAAO,EAAE,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC;IAEpD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAIlC"}
|
|
@@ -1,41 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
export class StorageProviderTool extends
|
|
4
|
-
async applyBridgeTransports(address, request) {
|
|
5
|
-
this.logger.debug('Applying bridge transports to address: ', address);
|
|
6
|
-
// extract the key from the address
|
|
7
|
-
let key = null;
|
|
8
|
-
let method = 'get';
|
|
9
|
-
const parts = address.toString().split('/');
|
|
10
|
-
const tools = await this.myTools();
|
|
11
|
-
this.logger.debug('Tools: ', tools);
|
|
12
|
-
if (tools.includes(parts[parts.length - 1])) {
|
|
13
|
-
method = parts.pop() || 'get'; // first pop the method
|
|
14
|
-
key = parts.pop(); // then pop the key
|
|
15
|
-
}
|
|
16
|
-
else {
|
|
17
|
-
key = parts.pop();
|
|
18
|
-
}
|
|
19
|
-
this.logger.debug('Determined key + method: ', key, method, request?.params?.method);
|
|
20
|
-
if (!key) {
|
|
21
|
-
throw new Error('Invalid address');
|
|
22
|
-
}
|
|
23
|
-
// restructure the request to include the key
|
|
24
|
-
const req = new oRequest({
|
|
25
|
-
method: method,
|
|
26
|
-
params: {
|
|
27
|
-
...request.params,
|
|
28
|
-
key,
|
|
29
|
-
method: method,
|
|
30
|
-
},
|
|
31
|
-
id: request.id,
|
|
32
|
-
});
|
|
33
|
-
// call the appropriate method
|
|
34
|
-
const result = await this.execute(req);
|
|
35
|
-
return result;
|
|
36
|
-
}
|
|
1
|
+
import { oLaneTool } from '@olane/o-lane';
|
|
2
|
+
import { oStorageResolver } from '../router/storage.resolver.js';
|
|
3
|
+
export class StorageProviderTool extends oLaneTool {
|
|
37
4
|
async initialize() {
|
|
38
5
|
await super.initialize();
|
|
39
|
-
this.
|
|
6
|
+
this.router.addResolver(new oStorageResolver(this.address), true);
|
|
40
7
|
}
|
|
41
8
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.resolve-request.d.ts","sourceRoot":"","sources":["../../../src/router/storage.resolve-request.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE1C,MAAM,WAAW,qBAAsB,SAAQ,cAAc;IAC3D,IAAI,EAAE,SAAS,CAAC;CACjB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { oAddressResolver, oAddress, TransportType } from '@olane/o-core';
|
|
2
|
+
import { oTransport, RouteResponse } from '@olane/o-core';
|
|
3
|
+
import { StorageResolveRequest } from './storage.resolve-request.js';
|
|
4
|
+
export declare class oStorageResolver extends oAddressResolver {
|
|
5
|
+
protected readonly address: oAddress;
|
|
6
|
+
constructor(address: oAddress);
|
|
7
|
+
get supportedTransports(): TransportType[];
|
|
8
|
+
get customTransports(): oTransport[];
|
|
9
|
+
resolve(request: StorageResolveRequest): Promise<RouteResponse>;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=storage.resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage.resolver.d.ts","sourceRoot":"","sources":["../../../src/router/storage.resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,QAAQ,EACR,aAAa,EAId,MAAM,eAAe,CAAC;AACvB,OAAO,EAAkB,UAAU,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE1E,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AAGrE,qBAAa,gBAAiB,SAAQ,gBAAgB;IACxC,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ;gBAAjB,OAAO,EAAE,QAAQ;IAIhD,IAAI,mBAAmB,IAAI,aAAa,EAAE,CAEzC;IAED,IAAI,gBAAgB,IAAI,UAAU,EAAE,CAEnC;IAEK,OAAO,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,aAAa,CAAC;CAsDtE"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { oAddressResolver, TransportType, oCustomTransport, } from '@olane/o-core';
|
|
2
|
+
import { oRouterRequest } from '@olane/o-core';
|
|
3
|
+
import { v4 as uuidv4 } from 'uuid';
|
|
4
|
+
import { JSONRPC_VERSION, oProtocolMethods } from '@olane/o-protocol';
|
|
5
|
+
export class oStorageResolver extends oAddressResolver {
|
|
6
|
+
constructor(address) {
|
|
7
|
+
super(address);
|
|
8
|
+
this.address = address;
|
|
9
|
+
}
|
|
10
|
+
get supportedTransports() {
|
|
11
|
+
return [TransportType.CUSTOM];
|
|
12
|
+
}
|
|
13
|
+
get customTransports() {
|
|
14
|
+
return [new oCustomTransport('/storage')];
|
|
15
|
+
}
|
|
16
|
+
async resolve(request) {
|
|
17
|
+
const { address, node, request: resolveRequest, targetAddress } = request;
|
|
18
|
+
// are we routing to ourselves
|
|
19
|
+
if (targetAddress.paths.indexOf(node.address.paths) === -1) {
|
|
20
|
+
return {
|
|
21
|
+
nextHopAddress: address,
|
|
22
|
+
targetAddress: targetAddress,
|
|
23
|
+
requestOverride: resolveRequest,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
// extract the key from the address
|
|
27
|
+
let key = null;
|
|
28
|
+
let method = 'get';
|
|
29
|
+
const parts = address.toString().split('/');
|
|
30
|
+
const tools = await node.myTools();
|
|
31
|
+
if (tools.includes(parts[parts.length - 1])) {
|
|
32
|
+
method = parts.pop() || 'get'; // first pop the method
|
|
33
|
+
key = parts.pop(); // then pop the key
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
key = parts.pop();
|
|
37
|
+
}
|
|
38
|
+
if (!key) {
|
|
39
|
+
throw new Error('Invalid address');
|
|
40
|
+
}
|
|
41
|
+
this.logger.debug('Applying storage resolver to address: ', address);
|
|
42
|
+
// restructure the request to include the key
|
|
43
|
+
const req = new oRouterRequest({
|
|
44
|
+
method: oProtocolMethods.ROUTE,
|
|
45
|
+
params: {
|
|
46
|
+
_connectionId: '',
|
|
47
|
+
_requestMethod: oProtocolMethods.ROUTE,
|
|
48
|
+
address: node.address.toString(),
|
|
49
|
+
payload: {
|
|
50
|
+
method: method,
|
|
51
|
+
params: {
|
|
52
|
+
key: key,
|
|
53
|
+
},
|
|
54
|
+
},
|
|
55
|
+
},
|
|
56
|
+
jsonrpc: JSONRPC_VERSION,
|
|
57
|
+
id: uuidv4(),
|
|
58
|
+
});
|
|
59
|
+
return {
|
|
60
|
+
nextHopAddress: node.address,
|
|
61
|
+
targetAddress: node.address,
|
|
62
|
+
requestOverride: req,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
}
|
|
@@ -1,12 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
constructor(config: oToolConfig);
|
|
7
|
-
_tool_put(request: oRequest): Promise<ToolResult>;
|
|
8
|
-
_tool_get(request: oRequest): Promise<GetDataResponse>;
|
|
9
|
-
_tool_delete(request: oRequest): Promise<ToolResult>;
|
|
10
|
-
_tool_has(request: oRequest): Promise<ToolResult>;
|
|
1
|
+
import { oNodeToolConfig } from '@olane/o-node';
|
|
2
|
+
import { oLaneTool } from '@olane/o-lane';
|
|
3
|
+
export declare class StorageTool extends oLaneTool {
|
|
4
|
+
constructor(config: oNodeToolConfig);
|
|
5
|
+
initialize(): Promise<void>;
|
|
11
6
|
}
|
|
12
7
|
//# sourceMappingURL=storage.tool.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.tool.d.ts","sourceRoot":"","sources":["../../src/storage.tool.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"storage.tool.d.ts","sourceRoot":"","sources":["../../src/storage.tool.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE1C,qBAAa,WAAY,SAAQ,SAAS;gBAC5B,MAAM,EAAE,eAAe;IAS7B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAqClC"}
|
package/dist/src/storage.tool.js
CHANGED
|
@@ -1,46 +1,49 @@
|
|
|
1
1
|
import { oAddress } from '@olane/o-core';
|
|
2
2
|
import { DiskStorageProvider } from './providers/disk-storage-provider.tool.js';
|
|
3
3
|
import { MemoryStorageProvider } from './providers/memory-storage-provider.tool.js';
|
|
4
|
-
import { StorageProviderTool } from './providers/storage-provider.tool.js';
|
|
5
4
|
import { SecureStorageProvider } from './providers/secure-storage-provider.tool.js';
|
|
6
5
|
import { PlaceholderTool } from './placeholder.tool.js';
|
|
7
|
-
|
|
6
|
+
import { oLaneTool } from '@olane/o-lane';
|
|
7
|
+
export class StorageTool extends oLaneTool {
|
|
8
8
|
constructor(config) {
|
|
9
9
|
super({
|
|
10
10
|
...config,
|
|
11
11
|
address: new oAddress('o://storage'),
|
|
12
|
-
description: '
|
|
12
|
+
description: 'Storage application tool for routing storage requests to the appropriate storage provider',
|
|
13
13
|
});
|
|
14
|
-
|
|
14
|
+
}
|
|
15
|
+
async initialize() {
|
|
16
|
+
await super.initialize();
|
|
17
|
+
let node = new DiskStorageProvider({
|
|
15
18
|
name: 'disk',
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
+
parent: this.address,
|
|
20
|
+
leader: this.leader,
|
|
21
|
+
address: new oAddress('o://disk'),
|
|
22
|
+
});
|
|
23
|
+
await node.start();
|
|
24
|
+
this.addChildNode(node);
|
|
25
|
+
node = new MemoryStorageProvider({
|
|
19
26
|
name: 'memory',
|
|
27
|
+
parent: this.address,
|
|
28
|
+
leader: this.leader,
|
|
20
29
|
address: new oAddress('o://memory'),
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
this.addChildNode(
|
|
30
|
+
});
|
|
31
|
+
await node.start();
|
|
32
|
+
this.addChildNode(node);
|
|
33
|
+
node = new SecureStorageProvider({
|
|
24
34
|
name: 'secure',
|
|
35
|
+
parent: this.address,
|
|
36
|
+
leader: this.leader,
|
|
25
37
|
address: new oAddress('o://secure'),
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
this.addChildNode(
|
|
38
|
+
});
|
|
39
|
+
await node.start();
|
|
40
|
+
this.addChildNode(node);
|
|
41
|
+
node = new PlaceholderTool({
|
|
29
42
|
name: 'placeholder storage',
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
throw new Error('Not implemented');
|
|
36
|
-
}
|
|
37
|
-
async _tool_get(request) {
|
|
38
|
-
throw new Error('Not implemented');
|
|
39
|
-
}
|
|
40
|
-
async _tool_delete(request) {
|
|
41
|
-
throw new Error('Not implemented');
|
|
42
|
-
}
|
|
43
|
-
async _tool_has(request) {
|
|
44
|
-
throw new Error('Not implemented');
|
|
43
|
+
parent: this.address,
|
|
44
|
+
leader: this.leader,
|
|
45
|
+
});
|
|
46
|
+
await node.start();
|
|
47
|
+
this.addChildNode(node);
|
|
45
48
|
}
|
|
46
49
|
}
|
|
@@ -1,44 +1,43 @@
|
|
|
1
1
|
import { NodeState, oAddress } from '@olane/o-core';
|
|
2
2
|
import { expect } from 'chai';
|
|
3
|
-
import { oLeaderNode
|
|
3
|
+
import { oLeaderNode } from '@olane/o-leader';
|
|
4
4
|
import { IntelligenceTool } from '@olane/o-intelligence';
|
|
5
5
|
import { StorageTool } from '../src/index.js';
|
|
6
6
|
import { bigfile } from './data/bigfile.js';
|
|
7
|
-
import { oVirtualTool } from '@olane/o-tool';
|
|
8
7
|
import dotenv from 'dotenv';
|
|
8
|
+
import { oLaneTool } from '@olane/o-lane';
|
|
9
9
|
dotenv.config();
|
|
10
10
|
const leader = new oLeaderNode({
|
|
11
11
|
parent: null,
|
|
12
12
|
leader: null,
|
|
13
13
|
});
|
|
14
|
-
const node = new oVirtualTool({
|
|
15
|
-
parent: null,
|
|
16
|
-
leader: null,
|
|
17
|
-
address: new oAddress('o://node'),
|
|
18
|
-
});
|
|
19
|
-
leader.addChildNode(node);
|
|
20
14
|
describe('o-storage @placeholder', () => {
|
|
21
15
|
it('should be able to start a node', async () => {
|
|
22
|
-
|
|
16
|
+
await leader.start();
|
|
17
|
+
const node = new oLaneTool({
|
|
23
18
|
parent: leader.address,
|
|
24
19
|
leader: leader.address,
|
|
20
|
+
address: new oAddress('o://node'),
|
|
25
21
|
});
|
|
26
|
-
|
|
22
|
+
await node.start();
|
|
23
|
+
leader.addChildNode(node);
|
|
27
24
|
const intelligenceTool = new IntelligenceTool({
|
|
28
25
|
parent: node.address,
|
|
29
|
-
leader:
|
|
26
|
+
leader: leader.address,
|
|
30
27
|
});
|
|
31
|
-
|
|
28
|
+
await intelligenceTool.start();
|
|
29
|
+
node.addChildNode(intelligenceTool);
|
|
32
30
|
const storageTool = new StorageTool({
|
|
33
31
|
parent: node.address,
|
|
34
|
-
leader:
|
|
32
|
+
leader: leader.address,
|
|
35
33
|
});
|
|
36
|
-
|
|
37
|
-
|
|
34
|
+
await storageTool.start();
|
|
35
|
+
node.addChildNode(storageTool);
|
|
38
36
|
expect(intelligenceTool.state).to.equal(NodeState.RUNNING);
|
|
39
37
|
});
|
|
40
38
|
it('should be able to perform a put', async () => {
|
|
41
|
-
|
|
39
|
+
console.log('[TEST START] Performing put!');
|
|
40
|
+
const result = await leader.use(new oAddress('o://placeholder'), {
|
|
42
41
|
method: 'put',
|
|
43
42
|
params: {
|
|
44
43
|
key: 'test-key-1234',
|
|
@@ -46,15 +45,15 @@ describe('o-storage @placeholder', () => {
|
|
|
46
45
|
intent: 'I want to copy file "bigfile.txt" to "bigfile.txt.copy"',
|
|
47
46
|
},
|
|
48
47
|
});
|
|
49
|
-
console.log(
|
|
48
|
+
console.log('[TEST END] Performed put!');
|
|
50
49
|
});
|
|
51
50
|
it('should be able to perform a get', async () => {
|
|
52
|
-
const result = await leader.use(new oAddress('o://
|
|
51
|
+
const result = await leader.use(new oAddress('o://placeholder/test-key-1234'));
|
|
53
52
|
const data = result.result.data;
|
|
54
53
|
expect(data.value.length > 0).to.be.true;
|
|
55
54
|
});
|
|
56
55
|
it('should be able to perform an explicit get', async () => {
|
|
57
|
-
const result = await leader.use(new oAddress('o://
|
|
56
|
+
const result = await leader.use(new oAddress('o://placeholder/test-key-1234/get'));
|
|
58
57
|
const data = result.result.data;
|
|
59
58
|
expect(data.value.length > 0).to.be.true;
|
|
60
59
|
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@olane/o-storage",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "dist/src/index.js",
|
|
6
6
|
"types": "dist/src/index.d.ts",
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"test:node": "aegir test -t node",
|
|
21
21
|
"test:browser": "aegir test -t browser",
|
|
22
22
|
"dev": "DEBUG=o-protocol:* npx tsx src/tests/index.ts",
|
|
23
|
-
"build": "tsc",
|
|
23
|
+
"build": "rm -rf dist && tsc",
|
|
24
24
|
"deep:clean": "rm -rf node_modules && rm package-lock.json",
|
|
25
25
|
"start:prod": "node dist/index.js",
|
|
26
26
|
"update:peers": "npm install @olane/o-core@latest @olane/o-config@latest @olane/o-protocol@latest @olane/o-tool@latest --save-peer",
|
|
@@ -38,8 +38,6 @@
|
|
|
38
38
|
"devDependencies": {
|
|
39
39
|
"@eslint/eslintrc": "^3.3.1",
|
|
40
40
|
"@eslint/js": "^9.29.0",
|
|
41
|
-
"@olane/o-intelligence": "^0.6.10",
|
|
42
|
-
"@olane/o-leader": "^0.6.10",
|
|
43
41
|
"@tsconfig/node20": "^20.1.6",
|
|
44
42
|
"@types/jest": "^30.0.0",
|
|
45
43
|
"@typescript-eslint/eslint-plugin": "^8.34.1",
|
|
@@ -58,10 +56,12 @@
|
|
|
58
56
|
"typescript": "5.4.5"
|
|
59
57
|
},
|
|
60
58
|
"peerDependencies": {
|
|
61
|
-
"@olane/o-config": "^0.
|
|
62
|
-
"@olane/o-core": "^0.
|
|
63
|
-
"@olane/o-protocol": "^0.
|
|
64
|
-
"@olane/o-tool": "^0.
|
|
59
|
+
"@olane/o-config": "^0.7.0",
|
|
60
|
+
"@olane/o-core": "^0.7.0",
|
|
61
|
+
"@olane/o-protocol": "^0.7.0",
|
|
62
|
+
"@olane/o-tool": "^0.7.0",
|
|
63
|
+
"@olane/o-lane": "^0.7.0",
|
|
64
|
+
"@olane/o-node": "^0.7.0"
|
|
65
65
|
},
|
|
66
66
|
"dependencies": {
|
|
67
67
|
"debug": "^4.4.1",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"placeholder.resolver.d.ts","sourceRoot":"","sources":["../../../src/resolvers/placeholder.resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAIlD,qBAAa,mBAAoB,SAAQ,iBAAiB;IACxD,IAAI,UAAU,IAAI,MAAM,EAAE,CAEzB;IACD,MAAM,KAAK,UAAU,IAAI,MAAM,EAAE,CAEhC;CACF"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { oAnythingResolver } from '@olane/o-core';
|
|
2
|
-
const placeholderTransports = ['/plan'];
|
|
3
|
-
export class PlaceholderResolver extends oAnythingResolver {
|
|
4
|
-
get transports() {
|
|
5
|
-
return placeholderTransports;
|
|
6
|
-
}
|
|
7
|
-
static get transports() {
|
|
8
|
-
return placeholderTransports;
|
|
9
|
-
}
|
|
10
|
-
}
|