@jonmash/n8n-nodes-altium365 0.1.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.
- package/LICENSE.md +21 -0
- package/README.md +245 -0
- package/dist/credentials/Altium365NexarApi.credentials.d.ts +10 -0
- package/dist/credentials/Altium365NexarApi.credentials.d.ts.map +1 -0
- package/dist/credentials/Altium365NexarApi.credentials.js +60 -0
- package/dist/credentials/Altium365NexarApi.credentials.js.map +1 -0
- package/dist/nodes/Altium365/Altium365.node.d.ts +6 -0
- package/dist/nodes/Altium365/Altium365.node.d.ts.map +1 -0
- package/dist/nodes/Altium365/Altium365.node.js +275 -0
- package/dist/nodes/Altium365/Altium365.node.js.map +1 -0
- package/dist/nodes/Altium365/altium365.svg +189 -0
- package/dist/nodes/Altium365/altiumn8n.svg +189 -0
- package/dist/nodes/Altium365Trigger/Altium365Trigger.node.d.ts +8 -0
- package/dist/nodes/Altium365Trigger/Altium365Trigger.node.d.ts.map +1 -0
- package/dist/nodes/Altium365Trigger/Altium365Trigger.node.js +204 -0
- package/dist/nodes/Altium365Trigger/Altium365Trigger.node.js.map +1 -0
- package/dist/nodes/Altium365Trigger/altium365trigger.svg +189 -0
- package/dist/nodes/Altium365Trigger/altiumn8n.svg +189 -0
- package/dist/shared/NexarClient.d.ts +31 -0
- package/dist/shared/NexarClient.d.ts.map +1 -0
- package/dist/shared/NexarClient.js +79 -0
- package/dist/shared/NexarClient.js.map +1 -0
- package/dist/shared/generated/graphql.d.ts +10549 -0
- package/dist/shared/generated/graphql.d.ts.map +1 -0
- package/dist/shared/generated/graphql.js +168 -0
- package/dist/shared/generated/graphql.js.map +1 -0
- package/package.json +87 -0
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export declare class NexarClient {
|
|
2
|
+
private clientId;
|
|
3
|
+
private clientSecret;
|
|
4
|
+
private tokenCache;
|
|
5
|
+
private graphqlClient;
|
|
6
|
+
private sdk;
|
|
7
|
+
private static readonly TOKEN_ENDPOINT;
|
|
8
|
+
private static readonly GRAPHQL_ENDPOINT;
|
|
9
|
+
private static readonly TOKEN_REFRESH_BUFFER_MS;
|
|
10
|
+
constructor(clientId: string, clientSecret: string);
|
|
11
|
+
/**
|
|
12
|
+
* Get a valid access token, fetching a new one if needed
|
|
13
|
+
*/
|
|
14
|
+
private getToken;
|
|
15
|
+
/**
|
|
16
|
+
* Get the fully typed GraphQL SDK
|
|
17
|
+
*/
|
|
18
|
+
getSdk(): Promise<{
|
|
19
|
+
GetProjects(variables: import("./generated/graphql").GetProjectsQueryVariables, requestHeaders?: any, signal?: RequestInit["signal"]): Promise<import("./generated/graphql").GetProjectsQuery>;
|
|
20
|
+
GetProjectById(variables: import("./generated/graphql").GetProjectByIdQueryVariables, requestHeaders?: any, signal?: RequestInit["signal"]): Promise<import("./generated/graphql").GetProjectByIdQuery>;
|
|
21
|
+
GetLatestCommit(variables: import("./generated/graphql").GetLatestCommitQueryVariables, requestHeaders?: any, signal?: RequestInit["signal"]): Promise<import("./generated/graphql").GetLatestCommitQuery>;
|
|
22
|
+
GetCommitHistory(variables: import("./generated/graphql").GetCommitHistoryQueryVariables, requestHeaders?: any, signal?: RequestInit["signal"]): Promise<import("./generated/graphql").GetCommitHistoryQuery>;
|
|
23
|
+
UpdateProjectParameters(variables: import("./generated/graphql").UpdateProjectParametersMutationVariables, requestHeaders?: any, signal?: RequestInit["signal"]): Promise<import("./generated/graphql").UpdateProjectParametersMutation>;
|
|
24
|
+
GetWorkspaceInfos(variables?: import("./generated/graphql").GetWorkspaceInfosQueryVariables, requestHeaders?: any, signal?: RequestInit["signal"]): Promise<import("./generated/graphql").GetWorkspaceInfosQuery>;
|
|
25
|
+
}>;
|
|
26
|
+
/**
|
|
27
|
+
* Execute a raw GraphQL query (for custom queries not in the SDK)
|
|
28
|
+
*/
|
|
29
|
+
query<T>(query: string, variables?: Record<string, unknown>): Promise<T>;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=NexarClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NexarClient.d.ts","sourceRoot":"","sources":["../../shared/NexarClient.ts"],"names":[],"mappings":"AAeA,qBAAa,WAAW;IACvB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,UAAU,CAA2B;IAC7C,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,GAAG,CAA4B;IAEvC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAA8C;IACpF,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAmC;IAE3E,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,uBAAuB,CAAiB;gBAEpD,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM;IAalD;;OAEG;YACW,QAAQ;IA4CtB;;OAEG;IACG,MAAM;;;;;;;;IAKZ;;OAEG;IACG,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;CAI9E"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.NexarClient = void 0;
|
|
4
|
+
const graphql_request_1 = require("graphql-request");
|
|
5
|
+
const graphql_1 = require("./generated/graphql");
|
|
6
|
+
class NexarClient {
|
|
7
|
+
clientId;
|
|
8
|
+
clientSecret;
|
|
9
|
+
tokenCache = null;
|
|
10
|
+
graphqlClient;
|
|
11
|
+
sdk;
|
|
12
|
+
static TOKEN_ENDPOINT = 'https://identity.nexar.com/connect/token';
|
|
13
|
+
static GRAPHQL_ENDPOINT = 'https://api.nexar.com/graphql';
|
|
14
|
+
// Refresh token 5 minutes before expiry to prevent race conditions
|
|
15
|
+
static TOKEN_REFRESH_BUFFER_MS = 5 * 60 * 1000;
|
|
16
|
+
constructor(clientId, clientSecret) {
|
|
17
|
+
this.clientId = clientId;
|
|
18
|
+
this.clientSecret = clientSecret;
|
|
19
|
+
this.graphqlClient = new graphql_request_1.GraphQLClient(NexarClient.GRAPHQL_ENDPOINT, {
|
|
20
|
+
headers: {
|
|
21
|
+
'User-Agent': 'n8n-nodes-altium365/0.1.0',
|
|
22
|
+
},
|
|
23
|
+
});
|
|
24
|
+
this.sdk = (0, graphql_1.getSdk)(this.graphqlClient);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Get a valid access token, fetching a new one if needed
|
|
28
|
+
*/
|
|
29
|
+
async getToken() {
|
|
30
|
+
const now = Date.now();
|
|
31
|
+
if (this.tokenCache && this.tokenCache.expiresAt > now) {
|
|
32
|
+
return this.tokenCache.token;
|
|
33
|
+
}
|
|
34
|
+
const params = new URLSearchParams({
|
|
35
|
+
grant_type: 'client_credentials',
|
|
36
|
+
client_id: this.clientId,
|
|
37
|
+
client_secret: this.clientSecret,
|
|
38
|
+
scope: 'design.domain',
|
|
39
|
+
});
|
|
40
|
+
const response = await fetch(NexarClient.TOKEN_ENDPOINT, {
|
|
41
|
+
method: 'POST',
|
|
42
|
+
headers: {
|
|
43
|
+
'Content-Type': 'application/x-www-form-urlencoded',
|
|
44
|
+
},
|
|
45
|
+
body: params.toString(),
|
|
46
|
+
});
|
|
47
|
+
if (!response.ok) {
|
|
48
|
+
const errorText = await response.text();
|
|
49
|
+
throw new Error(`OAuth token request failed: ${response.status} ${errorText}`);
|
|
50
|
+
}
|
|
51
|
+
const tokenData = (await response.json());
|
|
52
|
+
// Calculate token expiration time with buffer
|
|
53
|
+
// tokenData.expires_in is in seconds (typically 86400 = 24 hours for Nexar)
|
|
54
|
+
// Subtract TOKEN_REFRESH_BUFFER_MS to refresh before actual expiry
|
|
55
|
+
const expiresAt = now + tokenData.expires_in * 1000 - NexarClient.TOKEN_REFRESH_BUFFER_MS;
|
|
56
|
+
this.tokenCache = {
|
|
57
|
+
token: tokenData.access_token,
|
|
58
|
+
expiresAt,
|
|
59
|
+
};
|
|
60
|
+
this.graphqlClient.setHeader('Authorization', `Bearer ${tokenData.access_token}`);
|
|
61
|
+
return tokenData.access_token;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Get the fully typed GraphQL SDK
|
|
65
|
+
*/
|
|
66
|
+
async getSdk() {
|
|
67
|
+
await this.getToken();
|
|
68
|
+
return this.sdk;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Execute a raw GraphQL query (for custom queries not in the SDK)
|
|
72
|
+
*/
|
|
73
|
+
async query(query, variables) {
|
|
74
|
+
await this.getToken();
|
|
75
|
+
return this.graphqlClient.request(query, variables);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
exports.NexarClient = NexarClient;
|
|
79
|
+
//# sourceMappingURL=NexarClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NexarClient.js","sourceRoot":"","sources":["../../shared/NexarClient.ts"],"names":[],"mappings":";;;AAAA,qDAAgD;AAChD,iDAA6C;AAc7C,MAAa,WAAW;IACf,QAAQ,CAAS;IACjB,YAAY,CAAS;IACrB,UAAU,GAAsB,IAAI,CAAC;IACrC,aAAa,CAAgB;IAC7B,GAAG,CAA4B;IAE/B,MAAM,CAAU,cAAc,GAAG,0CAA0C,CAAC;IAC5E,MAAM,CAAU,gBAAgB,GAAG,+BAA+B,CAAC;IAC3E,mEAAmE;IAC3D,MAAM,CAAU,uBAAuB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;IAEhE,YAAY,QAAgB,EAAE,YAAoB;QACjD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QAEjC,IAAI,CAAC,aAAa,GAAG,IAAI,+BAAa,CAAC,WAAW,CAAC,gBAAgB,EAAE;YACpE,OAAO,EAAE;gBACR,YAAY,EAAE,2BAA2B;aACzC;SACD,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,GAAG,IAAA,gBAAM,EAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACvC,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,QAAQ;QACrB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEvB,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,GAAG,GAAG,EAAE,CAAC;YACxD,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC;QAC9B,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC;YAClC,UAAU,EAAE,oBAAoB;YAChC,SAAS,EAAE,IAAI,CAAC,QAAQ;YACxB,aAAa,EAAE,IAAI,CAAC,YAAY;YAChC,KAAK,EAAE,eAAe;SACtB,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC,cAAc,EAAE;YACxD,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACR,cAAc,EAAE,mCAAmC;aACnD;YACD,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE;SACvB,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YAClB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,+BAA+B,QAAQ,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC,CAAC;QAChF,CAAC;QAED,MAAM,SAAS,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAkB,CAAC;QAE3D,8CAA8C;QAC9C,4EAA4E;QAC5E,mEAAmE;QACnE,MAAM,SAAS,GAAG,GAAG,GAAG,SAAS,CAAC,UAAU,GAAG,IAAI,GAAG,WAAW,CAAC,uBAAuB,CAAC;QAE1F,IAAI,CAAC,UAAU,GAAG;YACjB,KAAK,EAAE,SAAS,CAAC,YAAY;YAC7B,SAAS;SACT,CAAC;QAEF,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,eAAe,EAAE,UAAU,SAAS,CAAC,YAAY,EAAE,CAAC,CAAC;QAElF,OAAO,SAAS,CAAC,YAAY,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM;QACX,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC,GAAG,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK,CAAI,KAAa,EAAE,SAAmC;QAChE,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,CAAI,KAAK,EAAE,SAAS,CAAC,CAAC;IACxD,CAAC;;AAtFF,kCAuFC"}
|