@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.
@@ -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"}