@xyo-network/xl1-rpc 1.7.12 → 1.7.13

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.
Files changed (51) hide show
  1. package/dist/neutral/index.mjs +45 -0
  2. package/dist/neutral/index.mjs.map +1 -1
  3. package/dist/neutral/provider/host/MemoryXyoGateway.d.ts +1 -1
  4. package/dist/neutral/provider/host/MemoryXyoGateway.d.ts.map +1 -1
  5. package/dist/neutral/provider/host/PermissionsStore/MemoryPermissionsStore.d.ts +11 -0
  6. package/dist/neutral/provider/host/PermissionsStore/MemoryPermissionsStore.d.ts.map +1 -0
  7. package/dist/neutral/provider/host/PermissionsStore/PermissionsStore.d.ts.map +1 -0
  8. package/dist/neutral/provider/host/PermissionsStore/getPermissionsStoreFromTransport.d.ts +5 -0
  9. package/dist/neutral/provider/host/PermissionsStore/getPermissionsStoreFromTransport.d.ts.map +1 -0
  10. package/dist/neutral/provider/host/PermissionsStore/index.d.ts +4 -0
  11. package/dist/neutral/provider/host/PermissionsStore/index.d.ts.map +1 -0
  12. package/dist/neutral/provider/host/PermissionsStore/spec/MemoryPermissionsStore.spec.d.ts +2 -0
  13. package/dist/neutral/provider/host/PermissionsStore/spec/MemoryPermissionsStore.spec.d.ts.map +1 -0
  14. package/dist/neutral/provider/host/index.d.ts +1 -1
  15. package/dist/neutral/provider/host/index.d.ts.map +1 -1
  16. package/dist/neutral/provider/host/spec/MemoryXyoGateway.spec.d.ts +2 -0
  17. package/dist/neutral/provider/host/spec/MemoryXyoGateway.spec.d.ts.map +1 -0
  18. package/dist/node/index-node.mjs +45 -0
  19. package/dist/node/index-node.mjs.map +1 -1
  20. package/dist/node/provider/host/MemoryXyoGateway.d.ts +1 -1
  21. package/dist/node/provider/host/MemoryXyoGateway.d.ts.map +1 -1
  22. package/dist/node/provider/host/PermissionsStore/MemoryPermissionsStore.d.ts +11 -0
  23. package/dist/node/provider/host/PermissionsStore/MemoryPermissionsStore.d.ts.map +1 -0
  24. package/dist/node/provider/host/PermissionsStore/PermissionsStore.d.ts.map +1 -0
  25. package/dist/node/provider/host/PermissionsStore/getPermissionsStoreFromTransport.d.ts +5 -0
  26. package/dist/node/provider/host/PermissionsStore/getPermissionsStoreFromTransport.d.ts.map +1 -0
  27. package/dist/node/provider/host/PermissionsStore/index.d.ts +4 -0
  28. package/dist/node/provider/host/PermissionsStore/index.d.ts.map +1 -0
  29. package/dist/node/provider/host/PermissionsStore/spec/MemoryPermissionsStore.spec.d.ts +2 -0
  30. package/dist/node/provider/host/PermissionsStore/spec/MemoryPermissionsStore.spec.d.ts.map +1 -0
  31. package/dist/node/provider/host/index.d.ts +1 -1
  32. package/dist/node/provider/host/index.d.ts.map +1 -1
  33. package/dist/node/provider/host/spec/MemoryXyoGateway.spec.d.ts +2 -0
  34. package/dist/node/provider/host/spec/MemoryXyoGateway.spec.d.ts.map +1 -0
  35. package/package.json +3 -3
  36. package/src/provider/host/MemoryXyoGateway.ts +1 -1
  37. package/src/provider/host/PermissionsStore/MemoryPermissionsStore.ts +33 -0
  38. package/src/provider/host/{getPermissionsStoreFromTransport.ts → PermissionsStore/getPermissionsStoreFromTransport.ts} +2 -2
  39. package/src/provider/host/PermissionsStore/index.ts +3 -0
  40. package/src/provider/host/PermissionsStore/spec/MemoryPermissionsStore.spec.ts +78 -0
  41. package/src/provider/host/index.ts +1 -1
  42. package/src/provider/host/spec/MemoryXyoGateway.spec.ts +78 -0
  43. package/dist/neutral/provider/host/PermissionsStore.d.ts.map +0 -1
  44. package/dist/neutral/provider/host/getPermissionsStoreFromTransport.d.ts +0 -5
  45. package/dist/neutral/provider/host/getPermissionsStoreFromTransport.d.ts.map +0 -1
  46. package/dist/node/provider/host/PermissionsStore.d.ts.map +0 -1
  47. package/dist/node/provider/host/getPermissionsStoreFromTransport.d.ts +0 -5
  48. package/dist/node/provider/host/getPermissionsStoreFromTransport.d.ts.map +0 -1
  49. /package/dist/neutral/provider/host/{PermissionsStore.d.ts → PermissionsStore/PermissionsStore.d.ts} +0 -0
  50. /package/dist/node/provider/host/{PermissionsStore.d.ts → PermissionsStore/PermissionsStore.d.ts} +0 -0
  51. /package/src/provider/host/{PermissionsStore.ts → PermissionsStore/PermissionsStore.ts} +0 -0
@@ -0,0 +1,5 @@
1
+ import { type RpcTransport } from '../../../transport/index.ts';
2
+ import type { XyoGatewayRpcSchemas } from '../../../types/index.ts';
3
+ import type { PermissionsStore } from './PermissionsStore.ts';
4
+ export declare const getPermissionsStoreFromTransport: (transport: RpcTransport<typeof XyoGatewayRpcSchemas>) => PermissionsStore;
5
+ //# sourceMappingURL=getPermissionsStoreFromTransport.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getPermissionsStoreFromTransport.d.ts","sourceRoot":"","sources":["../../../../../src/provider/host/PermissionsStore/getPermissionsStoreFromTransport.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,6BAA6B,CAAA;AAC/D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AACnE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAE7D,eAAO,MAAM,gCAAgC,GAAI,WAAW,YAAY,CAAC,OAAO,oBAAoB,CAAC,KAAG,gBAMvG,CAAA"}
@@ -0,0 +1,4 @@
1
+ export * from './getPermissionsStoreFromTransport.ts';
2
+ export * from './MemoryPermissionsStore.ts';
3
+ export * from './PermissionsStore.ts';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/provider/host/PermissionsStore/index.ts"],"names":[],"mappings":"AAAA,cAAc,uCAAuC,CAAA;AACrD,cAAc,6BAA6B,CAAA;AAC3C,cAAc,uBAAuB,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=MemoryPermissionsStore.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MemoryPermissionsStore.spec.d.ts","sourceRoot":"","sources":["../../../../../../src/provider/host/PermissionsStore/spec/MemoryPermissionsStore.spec.ts"],"names":[],"mappings":""}
@@ -1,5 +1,5 @@
1
1
  export * from './Abstract.ts';
2
2
  export * from './JsonRpcXyoGateway.ts';
3
3
  export * from './MemoryXyoGateway.ts';
4
- export * from './PermissionsStore.ts';
4
+ export * from './PermissionsStore/index.ts';
5
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/provider/host/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA;AAC7B,cAAc,wBAAwB,CAAA;AACtC,cAAc,uBAAuB,CAAA;AACrC,cAAc,uBAAuB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/provider/host/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA;AAC7B,cAAc,wBAAwB,CAAA;AACtC,cAAc,uBAAuB,CAAA;AACrC,cAAc,6BAA6B,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=MemoryXyoGateway.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MemoryXyoGateway.spec.d.ts","sourceRoot":"","sources":["../../../../../src/provider/host/spec/MemoryXyoGateway.spec.ts"],"names":[],"mappings":""}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "http://json.schemastore.org/package.json",
3
3
  "name": "@xyo-network/xl1-rpc",
4
- "version": "1.7.12",
4
+ "version": "1.7.13",
5
5
  "description": "XYO Layer One API",
6
6
  "homepage": "https://xylabs.com",
7
7
  "bugs": {
@@ -70,14 +70,14 @@
70
70
  "@xyo-network/archivist-memory": "^4.1.7",
71
71
  "@xyo-network/archivist-model": "^4.1.7",
72
72
  "@xyo-network/boundwitness-model": "^4.1.7",
73
- "@xyo-network/chain-wrappers": "^1.7.12",
73
+ "@xyo-network/chain-wrappers": "^1.7.13",
74
74
  "@xyo-network/module-model": "^4.1.7",
75
75
  "@xyo-network/node-model": "^4.1.7",
76
76
  "@xyo-network/payload-builder": "^4.1.7",
77
77
  "@xyo-network/payload-model": "^4.1.7",
78
78
  "@xyo-network/payload-wrapper": "^4.1.7",
79
79
  "@xyo-network/xl1-protocol": "^1.7.19",
80
- "@xyo-network/xl1-protocol-sdk": "^1.7.12",
80
+ "@xyo-network/xl1-protocol-sdk": "^1.7.13",
81
81
  "axios": "^1.11.0",
82
82
  "uuid": "^11.1.0",
83
83
  "zod": "^3.25.76"
@@ -7,7 +7,7 @@ import type {
7
7
  import type { XyoConnection } from '../provider/index.ts'
8
8
  import { RpcXyoConnection } from '../provider/index.ts'
9
9
  import { AbstractXyoGateway } from './Abstract.ts'
10
- import type { PermissionsStore } from './PermissionsStore.ts'
10
+ import type { PermissionsStore } from './PermissionsStore/index.ts'
11
11
 
12
12
  export class MemoryXyoGateway extends AbstractXyoGateway {
13
13
  private _activeConnectionId?: string
@@ -0,0 +1,33 @@
1
+ import type { Promisable } from '@xylabs/promise'
2
+ import type { InvokerPermission, Permission } from '@xyo-network/xl1-protocol'
3
+
4
+ import type { PermissionsStore } from './PermissionsStore.ts'
5
+
6
+ export class MemoryPermissionsStore implements PermissionsStore {
7
+ private readonly _store: Map<string, InvokerPermission> = new Map()
8
+
9
+ getPermissions(): Promisable<InvokerPermission[]> {
10
+ return [...this._store.values()]
11
+ }
12
+
13
+ requestPermissions(permissions: Permission[]): Promisable<boolean> {
14
+ const now = Date.now()
15
+ for (const perm of permissions) {
16
+ const key = this.getKey(perm)
17
+ this._store.set(key, { ...perm, date: now })
18
+ }
19
+ return true
20
+ }
21
+
22
+ revokePermissions(permissions: Permission[]): Promisable<boolean> {
23
+ for (const perm of permissions) {
24
+ const key = this.getKey(perm)
25
+ this._store.delete(key)
26
+ }
27
+ return true
28
+ }
29
+
30
+ private getKey(permission: Permission): string {
31
+ return `${permission.invoker}::${permission.capability}`
32
+ }
33
+ }
@@ -1,7 +1,7 @@
1
1
  import type { Permission } from '@xyo-network/xl1-protocol'
2
2
 
3
- import { type RpcTransport } from '../../transport/index.ts'
4
- import type { XyoGatewayRpcSchemas } from '../../types/index.ts'
3
+ import { type RpcTransport } from '../../../transport/index.ts'
4
+ import type { XyoGatewayRpcSchemas } from '../../../types/index.ts'
5
5
  import type { PermissionsStore } from './PermissionsStore.ts'
6
6
 
7
7
  export const getPermissionsStoreFromTransport = (transport: RpcTransport<typeof XyoGatewayRpcSchemas>): PermissionsStore => {
@@ -0,0 +1,3 @@
1
+ export * from './getPermissionsStoreFromTransport.ts'
2
+ export * from './MemoryPermissionsStore.ts'
3
+ export * from './PermissionsStore.ts'
@@ -0,0 +1,78 @@
1
+ import type { Permission } from '@xyo-network/xl1-protocol'
2
+ import {
3
+ beforeEach, describe, expect, it,
4
+ } from 'vitest'
5
+
6
+ import { MemoryPermissionsStore } from '../MemoryPermissionsStore.ts'
7
+
8
+ describe('MemoryPermissionsStore', () => {
9
+ const invoker = 'https://example.com'
10
+ const capability = 'xyoViewer_chainId'
11
+ let store: MemoryPermissionsStore
12
+ const basePermission: Permission = { capability, invoker }
13
+
14
+ beforeEach(() => {
15
+ store = new MemoryPermissionsStore()
16
+ })
17
+
18
+ it('returns an empty list initially', async () => {
19
+ const permissions = await store.getPermissions()
20
+ expect(permissions).toEqual([])
21
+ })
22
+
23
+ it('adds and retrieves a permission', async () => {
24
+ const result = await store.requestPermissions([basePermission])
25
+ expect(result).toBe(true)
26
+
27
+ const permissions = await store.getPermissions()
28
+ expect(permissions.length).toBe(1)
29
+ expect(permissions[0].capability).toBe(basePermission.capability)
30
+ expect(permissions[0].invoker).toBe(basePermission.invoker)
31
+ expect(typeof permissions[0].date).toBe('number')
32
+ })
33
+
34
+ it('replaces an existing permission with the same key', async () => {
35
+ const original = { ...basePermission }
36
+ const updated = { ...basePermission }
37
+
38
+ await store.requestPermissions([original])
39
+ const originalDate = (await store.getPermissions())[0].date
40
+
41
+ await new Promise(r => setTimeout(r, 5)) // ensure timestamp difference
42
+ await store.requestPermissions([updated])
43
+ const updatedDate = (await store.getPermissions())[0].date
44
+
45
+ expect(updatedDate).toBeGreaterThan(originalDate!)
46
+ })
47
+
48
+ it('revokes a previously granted permission', async () => {
49
+ await store.requestPermissions([basePermission])
50
+ expect((await store.getPermissions()).length).toBe(1)
51
+
52
+ const result = await store.revokePermissions([basePermission])
53
+ expect(result).toBe(true)
54
+
55
+ const permissions = await store.getPermissions()
56
+ expect(permissions).toEqual([])
57
+ })
58
+
59
+ it('revoking a non-existent permission does nothing and returns true', async () => {
60
+ const result = await store.revokePermissions([basePermission])
61
+ expect(result).toBe(true)
62
+ expect(await store.getPermissions()).toEqual([])
63
+ })
64
+
65
+ it('can handle multiple permissions from different invokers', async () => {
66
+ const perms: Permission[] = [
67
+ { invoker: 'https://a.com', capability: 'xyo_1' },
68
+ { invoker: 'https://b.com', capability: 'xyo_2' },
69
+ { invoker: 'https://a.com', capability: 'xyo_3' },
70
+ ]
71
+
72
+ await store.requestPermissions(perms)
73
+ const results = await store.getPermissions()
74
+
75
+ expect(results.length).toBe(3)
76
+ expect(results.map(p => p.capability).toSorted((a, b) => a.localeCompare(b))).toEqual(['xyo_1', 'xyo_2', 'xyo_3'])
77
+ })
78
+ })
@@ -1,4 +1,4 @@
1
1
  export * from './Abstract.ts'
2
2
  export * from './JsonRpcXyoGateway.ts'
3
3
  export * from './MemoryXyoGateway.ts'
4
- export * from './PermissionsStore.ts'
4
+ export * from './PermissionsStore/index.ts'
@@ -0,0 +1,78 @@
1
+ import { Account } from '@xyo-network/account'
2
+ import type { AccountInstance } from '@xyo-network/account-model'
3
+ import {
4
+ beforeEach, describe, expect, it,
5
+ } from 'vitest'
6
+
7
+ import { RpcXyoConnection } from '../../provider/index.ts'
8
+ import { MemoryXyoSigner } from '../../signer/index.ts'
9
+ import { MemoryXyoGateway } from '../MemoryXyoGateway.ts'
10
+ import { MemoryPermissionsStore } from '../PermissionsStore/index.ts'
11
+
12
+ describe('MemoryXyoGateway', () => {
13
+ const endpoint = 'http://localhost:8080/rpc'
14
+ const dataLakeEndpoint = 'http://localhost:8080/chain/archivist'
15
+ let account: AccountInstance
16
+ let signer: MemoryXyoSigner
17
+ let store: MemoryPermissionsStore
18
+ let sut: MemoryXyoGateway
19
+
20
+ beforeEach(async () => {
21
+ account = await Account.random()
22
+ signer = new MemoryXyoSigner(account)
23
+
24
+ store = new MemoryPermissionsStore()
25
+ sut = new MemoryXyoGateway(signer, store)
26
+ })
27
+
28
+ describe('addConnection', () => {
29
+ describe('should return the added', () => {
30
+ it('with config', async () => {
31
+ const config = {
32
+ name: 'localhost', dataLakeEndpoint, networkEndpoint: endpoint,
33
+ }
34
+ const response = await sut.addConnection(config)
35
+ expect(response).toBeDefined()
36
+ })
37
+ it('with connection', async () => {
38
+ const connection = new RpcXyoConnection({ endpoint, account })
39
+ const response = await sut.addConnection('localhost', connection)
40
+ expect(response).toBeDefined()
41
+ expect(response).toBe(connection)
42
+ })
43
+ })
44
+ })
45
+
46
+ describe('activeConnection', () => {
47
+ describe('with no connections', () => {
48
+ it('should have no active connection', () => {
49
+ expect(sut.activeConnection()).toBeUndefined()
50
+ })
51
+ })
52
+ describe('with connections', () => {
53
+ it('should return the active connection', async () => {
54
+ const connection = new RpcXyoConnection({ endpoint, account })
55
+ await sut.addConnection('localhost', connection)
56
+ expect(sut.activeConnection()).toBeDefined()
57
+ })
58
+ })
59
+ })
60
+
61
+ describe('connections', () => {
62
+ describe('with connections', () => {
63
+ const name = 'localhost'
64
+ let connection: RpcXyoConnection
65
+ beforeEach(async () => {
66
+ connection = new RpcXyoConnection({ endpoint, account })
67
+ await sut.addConnection(name, connection)
68
+ })
69
+ it('should return connections', async () => {
70
+ const response = await sut.connections()
71
+ expect(response).toBeDefined()
72
+ expect(response).toHaveProperty(name)
73
+ expect(Object.keys(response)).toHaveLength(1)
74
+ expect(response[name]).toBe(connection)
75
+ })
76
+ })
77
+ })
78
+ })
@@ -1 +0,0 @@
1
- {"version":3,"file":"PermissionsStore.d.ts","sourceRoot":"","sources":["../../../../src/provider/host/PermissionsStore.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AAE9E,MAAM,WAAW,gBAAgB;IAC/B,cAAc,IAAI,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAA;IACjD,kBAAkB,CAAC,WAAW,EAAE,UAAU,EAAE,GAAG,UAAU,CAAC,OAAO,CAAC,CAAA;IAClE,iBAAiB,CAAC,WAAW,EAAE,UAAU,EAAE,GAAG,UAAU,CAAC,OAAO,CAAC,CAAA;CAClE"}
@@ -1,5 +0,0 @@
1
- import { type RpcTransport } from '../../transport/index.ts';
2
- import type { XyoGatewayRpcSchemas } from '../../types/index.ts';
3
- import type { PermissionsStore } from './PermissionsStore.ts';
4
- export declare const getPermissionsStoreFromTransport: (transport: RpcTransport<typeof XyoGatewayRpcSchemas>) => PermissionsStore;
5
- //# sourceMappingURL=getPermissionsStoreFromTransport.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"getPermissionsStoreFromTransport.d.ts","sourceRoot":"","sources":["../../../../src/provider/host/getPermissionsStoreFromTransport.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAC5D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAChE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAE7D,eAAO,MAAM,gCAAgC,GAAI,WAAW,YAAY,CAAC,OAAO,oBAAoB,CAAC,KAAG,gBAMvG,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"PermissionsStore.d.ts","sourceRoot":"","sources":["../../../../src/provider/host/PermissionsStore.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,KAAK,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AAE9E,MAAM,WAAW,gBAAgB;IAC/B,cAAc,IAAI,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAA;IACjD,kBAAkB,CAAC,WAAW,EAAE,UAAU,EAAE,GAAG,UAAU,CAAC,OAAO,CAAC,CAAA;IAClE,iBAAiB,CAAC,WAAW,EAAE,UAAU,EAAE,GAAG,UAAU,CAAC,OAAO,CAAC,CAAA;CAClE"}
@@ -1,5 +0,0 @@
1
- import { type RpcTransport } from '../../transport/index.ts';
2
- import type { XyoGatewayRpcSchemas } from '../../types/index.ts';
3
- import type { PermissionsStore } from './PermissionsStore.ts';
4
- export declare const getPermissionsStoreFromTransport: (transport: RpcTransport<typeof XyoGatewayRpcSchemas>) => PermissionsStore;
5
- //# sourceMappingURL=getPermissionsStoreFromTransport.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"getPermissionsStoreFromTransport.d.ts","sourceRoot":"","sources":["../../../../src/provider/host/getPermissionsStoreFromTransport.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAC5D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAChE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AAE7D,eAAO,MAAM,gCAAgC,GAAI,WAAW,YAAY,CAAC,OAAO,oBAAoB,CAAC,KAAG,gBAMvG,CAAA"}