@xyo-network/api-call-witness 4.1.1 → 5.0.0

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.
@@ -1,140 +1,3 @@
1
- import * as _xylabs_object from '@xylabs/object';
2
- import { JsonArray, JsonObject } from '@xylabs/object';
3
- import { Payload, Schema } from '@xyo-network/payload-model';
4
- import { Hash } from '@xylabs/hex';
5
- import { WitnessConfig, WitnessParams } from '@xyo-network/witness-model';
6
- import { AbstractWitness } from '@xyo-network/abstract-witness';
7
-
8
- declare const asApiCallPayload: _xylabs_object.AsTypeFunction<ApiCallPayload>;
9
-
10
- declare const asApiCallBase64Result: _xylabs_object.AsTypeFunction<ApiCallBase64Result>;
11
-
12
- declare const asApiCallResult: _xylabs_object.AsTypeFunction<ApiCallResult>;
13
-
14
- declare const asApiCallXmlResult: _xylabs_object.AsTypeFunction<ApiCallXmlResult>;
15
-
16
- declare const asApiUriCallPayload: _xylabs_object.AsTypeFunction<ApiUriCallPayload>;
17
-
18
- declare const asApiUriTemplateCall: _xylabs_object.AsTypeFunction<ApiUriTemplateCallPayload>;
19
-
20
- declare const ApiCallSchema = "network.xyo.api.call";
21
- type ApiCallSchema = typeof ApiCallSchema;
22
- declare const ApiCallResultSchema = "network.xyo.api.call.result";
23
- type ApiCallResultSchema = typeof ApiCallResultSchema;
24
-
25
- type Queries = Record<string, string>;
26
-
27
- type Verb = 'get' | 'post';
28
-
29
- interface ApiCallFields {
30
- headers?: Record<string, string | undefined>;
31
- queries?: Queries;
32
- verb?: Verb;
33
- }
34
-
35
- type ApiUriCallPayload = Payload<ApiCallFields & {
36
- uri: string;
37
- }, ApiCallSchema>;
38
-
39
- type ApiUriTemplateCallPayload = Payload<ApiCallFields & {
40
- params?: Record<string, string>;
41
- uriTemplate?: string;
42
- }, ApiCallSchema>;
43
-
44
- type ApiCallPayload = ApiUriCallPayload | ApiUriTemplateCallPayload;
45
-
46
- type ApiCallJsonResultType = JsonArray | JsonObject;
47
- type ApiCallJsonResult<T extends ApiCallJsonResultType = ApiCallJsonResultType> = Payload<{
48
- call: Hash;
49
- contentType: 'application/json';
50
- data: T;
51
- }, ApiCallResultSchema>;
52
- declare const isApiCallJsonResult: <T extends ApiCallJsonResultType = ApiCallJsonResultType>(x?: unknown | null) => x is ApiCallJsonResult<T>;
53
- declare const asApiCallJsonResult: _xylabs_object.AsTypeFunction<ApiCallJsonResult<ApiCallJsonResultType>>;
54
-
55
- type ApiCallXmlResult = Payload<{
56
- call: Hash;
57
- contentType: 'application/xml' | 'text/xml';
58
- data: string;
59
- }, ApiCallResultSchema>;
60
-
61
- type ApiCallBase64Result = Payload<{
62
- call: Hash;
63
- contentType: Exclude<Exclude<string, ApiCallJsonResult['contentType']>, ApiCallXmlResult['contentType']>;
64
- data: string;
65
- }, ApiCallResultSchema>;
66
-
67
- interface HttpMeta {
68
- code?: string;
69
- status?: number;
70
- }
71
-
72
- type ApiCallErrorResult = Payload<{
73
- call: Hash;
74
- http?: HttpMeta;
75
- }, ApiCallResultSchema>;
76
-
77
- type NewType = JsonObject;
78
- type ApiCallResult<TJson extends JsonArray | JsonObject = JsonArray | NewType> = ApiCallBase64Result | ApiCallJsonResult<TJson> | ApiCallErrorResult;
79
-
80
- type MimeTypes = 'application/json' | 'application/octet-stream' | 'application/pdf' | 'application/xhtml+xml' | 'application/xml' | 'image/gif' | 'image/jpeg' | 'image/png' | 'text/html' | 'text/plain' | 'text/xml';
81
-
82
- declare const isApiCallPayload: (x?: unknown | null) => x is ApiCallPayload;
83
-
84
- declare const isApiCallBase64Result: (x?: unknown | null) => x is ApiCallBase64Result;
85
-
86
- declare const isApiCallErrorResult: (value: unknown) => value is ApiCallErrorResult;
87
-
88
- declare const isApiCallResult: (x?: unknown | null) => x is ApiCallResult;
89
-
90
- declare const isApiCallXmlResult: (x?: unknown | null) => x is ApiCallXmlResult;
91
-
92
- declare const isApiUriCallPayload: (value?: unknown) => value is ApiUriCallPayload;
93
-
94
- declare const isApiUriTemplateCallPayload: (value?: unknown) => value is ApiUriTemplateCallPayload;
95
-
96
- declare const ApiCallWitnessConfigSchema = "network.xyo.api.call.witness.config";
97
- type ApiCallWitnessConfigSchema = typeof ApiCallWitnessConfigSchema;
98
-
99
- type ApiCallWitnessConfigBase = WitnessConfig<{
100
- accept?: MimeTypes;
101
- headers?: Record<string, string | undefined>;
102
- queries?: ApiCallPayload['queries'];
103
- schema: ApiCallWitnessConfigSchema;
104
- timeout?: number;
105
- verb?: ApiCallPayload['verb'];
106
- }>;
107
- type ApiUriCallWitnessConfig = WitnessConfig<ApiCallWitnessConfigBase & {
108
- uri: ApiUriCallPayload['uri'];
109
- }>;
110
- type ApiUriTemplateCallWitnessConfig = WitnessConfig<ApiCallWitnessConfigBase & {
111
- params?: Record<string, string>;
112
- uriTemplate: ApiUriTemplateCallPayload['uriTemplate'];
113
- }>;
114
- type ApiCallWitnessConfig = ApiUriCallWitnessConfig | ApiUriTemplateCallWitnessConfig | ApiCallWitnessConfigBase;
115
- declare const isApiCallWitnessConfig: (x?: unknown | null) => x is ApiCallWitnessConfig;
116
- declare const asApiCallWitnessConfig: _xylabs_object.AsTypeFunction<ApiCallWitnessConfig>;
117
- declare const isApiUriCallWitnessConfig: (value?: unknown) => value is ApiUriCallWitnessConfig;
118
- declare const asApiUriCallWitnessConfig: _xylabs_object.AsTypeFunction<ApiUriCallWitnessConfig>;
119
- declare const isApiUriTemplateCallWitnessConfig: (value?: unknown) => value is ApiUriTemplateCallWitnessConfig;
120
- declare const asApiUriTemplateCallWitnessConfig: _xylabs_object.AsTypeFunction<ApiUriTemplateCallWitnessConfig>;
121
-
122
- interface ApiCallWitnessParams extends WitnessParams<ApiCallWitnessConfig> {
123
- headers?: Record<string, string | undefined>;
124
- ipfsGateway?: string;
125
- }
126
-
127
- declare class ApiCallWitness<TParams extends ApiCallWitnessParams = ApiCallWitnessParams> extends AbstractWitness<TParams, ApiCallPayload, ApiCallResult> {
128
- static readonly configSchemas: Schema[];
129
- static readonly defaultConfigSchema: Schema;
130
- get accept(): MimeTypes;
131
- get ipfsGateway(): string | undefined;
132
- get timeout(): number | undefined;
133
- getFullUri(call?: ApiCallPayload): string;
134
- getHeaders(headers?: Record<string, string | undefined>): Record<string, string | undefined>;
135
- protected observeHandler(inPayloads?: ApiCallPayload[]): Promise<ApiCallResult[]>;
136
- private httpGet;
137
- }
138
-
139
- export { ApiCallResultSchema, ApiCallSchema, ApiCallWitness, ApiCallWitnessConfigSchema, asApiCallBase64Result, asApiCallJsonResult, asApiCallPayload, asApiCallResult, asApiCallWitnessConfig, asApiCallXmlResult, asApiUriCallPayload, asApiUriCallWitnessConfig, asApiUriTemplateCall, asApiUriTemplateCallWitnessConfig, isApiCallBase64Result, isApiCallErrorResult, isApiCallJsonResult, isApiCallPayload, isApiCallResult, isApiCallWitnessConfig, isApiCallXmlResult, isApiUriCallPayload, isApiUriCallWitnessConfig, isApiUriTemplateCallPayload, isApiUriTemplateCallWitnessConfig };
140
- export type { ApiCallBase64Result, ApiCallErrorResult, ApiCallFields, ApiCallJsonResult, ApiCallJsonResultType, ApiCallPayload, ApiCallResult, ApiCallWitnessConfig, ApiCallWitnessConfigBase, ApiCallWitnessParams, ApiCallXmlResult, ApiUriCallPayload, ApiUriCallWitnessConfig, ApiUriTemplateCallPayload, ApiUriTemplateCallWitnessConfig, HttpMeta, MimeTypes, Queries, Verb };
1
+ export * from './Payload/index.ts';
2
+ export * from './Witness/index.ts';
3
+ //# sourceMappingURL=index.d.ts.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xyo-network/api-call-witness",
3
- "version": "4.1.1",
3
+ "version": "5.0.0",
4
4
  "description": "Typescript/Javascript Plugins for XYO Platform",
5
5
  "homepage": "https://xyo.network",
6
6
  "bugs": {
@@ -28,30 +28,33 @@
28
28
  },
29
29
  "module": "dist/neutral/index.mjs",
30
30
  "types": "dist/neutral/index.d.ts",
31
+ "files": [
32
+ "dist",
33
+ "src"
34
+ ],
31
35
  "dependencies": {
32
- "@xylabs/assert": "^4.13.23",
33
- "@xylabs/axios": "^4.13.23",
34
- "@xylabs/hex": "^4.13.23",
35
- "@xylabs/object": "^4.13.23",
36
- "@xylabs/url": "^4.13.23",
37
- "@xyo-network/abstract-witness": "^4.1.7",
38
- "@xyo-network/payload-builder": "^4.1.7",
39
- "@xyo-network/payload-model": "^4.1.7",
40
- "@xyo-network/witness-model": "^4.1.7",
41
- "axios": "^1.10.0",
36
+ "@xylabs/assert": "^5.0.0",
37
+ "@xylabs/axios": "^5.0.0",
38
+ "@xylabs/hex": "^5.0.0",
39
+ "@xylabs/object": "^5.0.0",
40
+ "@xylabs/url": "^5.0.0",
41
+ "@xyo-network/abstract-witness": "^5.0.0",
42
+ "@xyo-network/payload-builder": "^5.0.0",
43
+ "@xyo-network/payload-model": "^5.0.0",
44
+ "@xyo-network/witness-model": "^5.0.0",
45
+ "axios": "^1.11.0",
42
46
  "base64-js": "^1.5.1",
43
47
  "es6-dynamic-template": "^2.0.0"
44
48
  },
45
49
  "devDependencies": {
46
- "@xylabs/ts-scripts-yarn3": "^7.0.0-rc.24",
47
- "@xylabs/tsconfig": "^7.0.0-rc.24",
48
- "@xylabs/vitest-extended": "^4.13.23",
49
- "@xyo-network/manifest": "^4.1.7",
50
- "@xyo-network/module-factory-locator": "^4.1.7",
51
- "@xyo-network/module-model": "^4.1.7",
52
- "@xyo-network/sentinel-model": "^4.1.7",
53
- "@xyo-network/wallet": "^4.1.7",
54
- "knip": "^5.62.0",
50
+ "@xylabs/ts-scripts-yarn3": "^7.0.2",
51
+ "@xylabs/tsconfig": "^7.0.2",
52
+ "@xylabs/vitest-extended": "^5.0.0",
53
+ "@xyo-network/manifest": "^5.0.0",
54
+ "@xyo-network/module-factory-locator": "^5.0.0",
55
+ "@xyo-network/module-model": "^5.0.0",
56
+ "@xyo-network/sentinel-model": "^5.0.0",
57
+ "@xyo-network/wallet": "^5.0.0",
55
58
  "typescript": "^5.8.3",
56
59
  "vitest": "^3.2.4"
57
60
  },
@@ -0,0 +1,27 @@
1
+ import '@xylabs/vitest-extended'
2
+
3
+ import {
4
+ describe, expect,
5
+ it,
6
+ } from 'vitest'
7
+
8
+ import {
9
+ ApiCallResultSchema, ApiCallSchema, isApiCallErrorResult,
10
+ } from '../../Payload/index.ts'
11
+ import { ApiCallWitnessConfigSchema } from '../Schema.ts'
12
+ import { ApiCallWitness } from '../Witness.ts'
13
+
14
+ describe('CryptoWalletNftWitness', () => {
15
+ const uri = 'https://cnn.com'
16
+ describe('observe', () => {
17
+ it('get code from contract', async () => {
18
+ const witness = await ApiCallWitness.create({
19
+ account: 'random',
20
+ config: { accept: 'application/json', schema: ApiCallWitnessConfigSchema },
21
+ })
22
+ const observation = await witness.observe([{ schema: ApiCallSchema, uri }])
23
+ expect(observation[0].schema).toBe(ApiCallResultSchema)
24
+ expect(isApiCallErrorResult(observation[0].schema)).toBe(false)
25
+ })
26
+ })
27
+ })
@@ -0,0 +1,123 @@
1
+ import '@xylabs/vitest-extended'
2
+
3
+ import type { PackageManifestPayload } from '@xyo-network/manifest'
4
+ import { ManifestWrapper } from '@xyo-network/manifest'
5
+ import { ModuleFactoryLocator } from '@xyo-network/module-factory-locator'
6
+ import type { ModuleParams } from '@xyo-network/module-model'
7
+ import { ModuleFactory } from '@xyo-network/module-model'
8
+ import { isPayloadOfSchemaType } from '@xyo-network/payload-model'
9
+ import { asSentinelInstance } from '@xyo-network/sentinel-model'
10
+ import { HDWallet } from '@xyo-network/wallet'
11
+ import { asWitnessInstance } from '@xyo-network/witness-model'
12
+ import {
13
+ describe, expect,
14
+ it,
15
+ } from 'vitest'
16
+
17
+ import type { ApiCallJsonResult, ApiUriTemplateCallPayload } from '../../Payload/index.ts'
18
+ import { ApiCallResultSchema, ApiCallSchema } from '../../Payload/index.ts'
19
+ import type { ApiCallWitnessConfig } from '../Config.ts'
20
+ import { ApiCallWitness } from '../Witness.ts'
21
+ import openseaNftsManifest from './opensea.nft-call.json' with { type: 'json' }
22
+
23
+ describe('OpenSeaApi', () => {
24
+ const address = '0xECA1bB9c8d3Fd8b926372f42c8D4c6c3ed0669B3' // Random Wallet
25
+
26
+ const apiKey = process.env.OPENSEA_API_KEY
27
+
28
+ describe.skipIf(!apiKey)('report', () => {
29
+ type OpenSeaNft = {
30
+ /*
31
+ * Collection slug. A unique string to identify a collection on OpenSea
32
+ */
33
+ collection: string
34
+ /*
35
+ * The unique public blockchain identifier for the contract
36
+ */
37
+ contract: string
38
+ /**
39
+ * @deprecated
40
+ */
41
+ created_at: string
42
+ /*
43
+ * Description of the NFT
44
+ */
45
+ description: string
46
+ /*
47
+ * The NFT's unique identifier within the smart contract (also referred to as token_id)
48
+ */
49
+ identifier: string
50
+ /*
51
+ * Link to the image associated with the NFT
52
+ */
53
+ image_url: string
54
+ /*
55
+ * If the item is currently able to be bought or sold using OpenSea
56
+ */
57
+ is_disabled: boolean
58
+ /*
59
+ * If the item is currently classified as 'Not Safe for Work' by OpenSea as defined in OpenSea's NSFW Policy.
60
+ */
61
+ is_nsfw: boolean
62
+ /*
63
+ * Link to the offchain metadata store
64
+ */
65
+ metadata_url: string
66
+ /*
67
+ * Name of the NFT
68
+ */
69
+ name: string
70
+ /*
71
+ * ERC standard of the token (erc721, erc1155)
72
+ */
73
+ token_standard: string
74
+ /*
75
+ * Last time that the NFT's metadata was updated by OpenSea
76
+ */
77
+ updated_at: string
78
+ }
79
+ type OpenSeaListNftsByAccountResponse = {
80
+ next: string
81
+ nfts: OpenSeaNft[]
82
+ }
83
+ it('specifying address', async () => {
84
+ const mnemonic = 'later puppy sound rebuild rebuild noise ozone amazing hope broccoli crystal grief'
85
+ const wallet = await HDWallet.fromPhrase(mnemonic)
86
+ const locator = new ModuleFactoryLocator()
87
+
88
+ locator.register(
89
+ new ModuleFactory(ApiCallWitness, {
90
+ config: { uriTemplate: 'https://api.opensea.io/api/v2/chain/ethereum/account/${address}/nfts' },
91
+ headers: { 'x-api-key': apiKey },
92
+ } as ModuleParams<ApiCallWitnessConfig>),
93
+ )
94
+
95
+ const manifest = new ManifestWrapper(openseaNftsManifest as PackageManifestPayload, wallet, locator)
96
+
97
+ const node = await manifest.loadNodeFromIndex(0)
98
+
99
+ const mods = await node.resolve('*')
100
+
101
+ expect(mods.length).toBeGreaterThan(1)
102
+
103
+ const resolvedWitness = await node.resolve('ApiCallWitness')
104
+ expect(resolvedWitness).toBeDefined()
105
+
106
+ const witness = asWitnessInstance(resolvedWitness)
107
+ expect(witness).toBeDefined()
108
+
109
+ const sentinel = asSentinelInstance(await node.resolve('ApiCallSentinel'))
110
+ expect(sentinel).toBeDefined()
111
+
112
+ const call: ApiUriTemplateCallPayload = { params: { address }, schema: ApiCallSchema }
113
+
114
+ const report = await sentinel?.report([call])
115
+
116
+ const apiCallResult = report?.find(isPayloadOfSchemaType<ApiCallJsonResult<OpenSeaListNftsByAccountResponse>>(ApiCallResultSchema))
117
+ expect(apiCallResult).toBeDefined()
118
+ expect(apiCallResult?.schema).toBeString()
119
+ expect(apiCallResult?.data.nfts).toBeArrayOfSize(1)
120
+ expect(apiCallResult?.data.nfts[0].collection).toBeString()
121
+ })
122
+ })
123
+ })
package/typedoc.json DELETED
@@ -1,5 +0,0 @@
1
- {
2
- "$schema": "https://typedoc.org/schema.json",
3
- "entryPoints": ["./src/index.ts"],
4
- "tsconfig": "./tsconfig.typedoc.json"
5
- }
package/xy.config.ts DELETED
@@ -1,10 +0,0 @@
1
- import type { XyTsupConfig } from '@xylabs/ts-scripts-yarn3'
2
- const config: XyTsupConfig = {
3
- compile: {
4
- browser: {},
5
- neutral: { src: true },
6
- node: {},
7
- },
8
- }
9
-
10
- export default config